1、i目录目录 i1 概述11.1 程序的基本功能11.2 其它功能11.3 扩展功能12 课题的分析22.1 会员登入系统模块即 SYSTEMHEAD 静态全局函数模块 22.2 查询功能模块即 SEARCH 函数模块 .22.3 职务信息匹配及处理模块即 SYSTEMBODY 静态全局函数模块模块 4 .22.4 循环控制模块即 WHILE(1)模块 23 详细设计33.1 类声明33.2 系统简略流程图43.3 会员登入系统模块即 SYSTEMHEAD 静态全局函数模块 53.4 查询功能模块即 SEARCH 函数模块 .63.5 职务信息匹配及处理模块即 SYSTEMBODY 静态全局函数
2、模块 73.6 循环控制模块即 WHILE(1)模块 74 课程设计总结84.1 完成情况84.2 遇到的问题及解决8参考文献11附录12程序设计语言课程设计报告 1上海应用技术学院 计算机科学与信息工程学院1 概述本课程设计是面向对象程序设计课程的后继教学环节,学好 C+语言就必须坚持用面向对象的思维方式分析问题、解决问题,最好的方法是仿照教材编写 C+实际应用程序。此次课程设计的题目及要求:实现一个简单的工资管理系统。1.1 程序的基本功能系统的主要功能是计算职工当月工资并存档。公司内有 5 种不同类型的职工:技术人员、销售人员、文秘、技术经理和销售经理,他们的工资计算方式各不相同。1.2
3、 其它功能将工资信息存入 salary.txt 文件中,工资信息包含雇员编号、姓名、职务、月份、月收入。Info.txt 文件中只存留一些信息及会员最后进入系统时输入的数据,最多含有编号、姓名、职务、月份的信息。1.3 扩展功能采用了会员制度,并将登入信息及编号、密码存入 number.txt 文件中。程序设计语言课程设计报告 2上海应用技术学院 计算机科学与信息工程学院2 课题的分析通过对课题的深入分析,我将这个课题分为以下几个模块,深入详细得剖析它们。2.1 会员登入系统模块即 systemhead 静态全局函数模块程序运行后,先进行会员选择判断。为减少会员重新注册,通过输入两次编号及密码
4、,增加繁琐度。同时在一定的方面上,又方便忘记密码的会员。通过密码匹配,雇员的工资信息这一隐私得到了很好的保障。2.2 查询功能模块即 search 函数模块首先,从 info.txt 中提取编号,与 salary.txt 中的编号进行匹配,匹配成功,输出工资信息,直到文件!indata.eof()=0。.2.3 职务信息匹配及处理模块即 systembody 静态全局函数模块模块 4从 info.txt 中提取职务信息,用 switch 语句进行匹配,据匹配情况调用不同的函数进行输入、处理、显示并以增加方式记录到 salary.txt 中。2.4 循环控制模块即 while(1 )模块为了更加
5、方便使用,尽量改善系统,实现 search 函数及 systembody 函数功能,在 search 函数及 systembody 函数模块的基础上加了一些必要的语句,并增加了外层循环控制。程序设计语言课程设计报告 3上海应用技术学院 计算机科学与信息工程学院3 详细设计作为一个面向对象程序设计,我们不得不先从类的声明开始设计,而后是一个整体的流程图做框架。最后在从小的模块结构着手。3.1 类声明class SalesManager: public Salesman, public Manager public: SaleaManager(float x=0.02); void countSa
6、lary( ); ; class TechManager:public Technician, public Managerprivate:float gradeBonus;int grade;public:TechManager(float x=1000);void setgrade(float x);void countSalary( );class Secretary: public Employee private: float fixedSalary; float bonus; public: Secretary(float x=4000); void setbonus(float
7、x); void countSalary( ); ; class Salesman: public Employee protected: float salesnum; double getRate; public: salesman(float x=0.05); void setsalesnum(float x); void countSalary( ); ; 图 3.1 类声明clas Manger protectd: flat fixSalry; public: Maner(float x=60); void cuntSlry( ); ; clas Technican: public
8、Employe rivate: float workHour; float hourSalry; public: technican(float x=36); void setHur(float x); vi countSalry( ); class Employee protected: int number; char name25; int status; int month; float salary; public: void info(); void search(); virtual void countSalary(); void recordinfo(); void reco
9、rdSalary(); ; 程序设计语言课程设计报告 4上海应用技术学院 计算机科学与信息工程学院3.2 系统简略流程图假结束再次输入图 3.2 职工工资管理系统简略流程图否是是否会员输入编号及密码开始注册检验?假真选择?0查询信息 1输入姓名、职务、月份真显示职务代码分析工资记录在 salary.txt处理 1 处理 2 处理 3 处理 4输入 1 输入 2 输入 3 输入 4处理 5输入 5记录编码姓名职务月份至 info.txt从 info.txt 提取职务代码优点:一个入口,一个出口!程序设计语言课程设计报告 5上海应用技术学院 计算机科学与信息工程学院3.3 会员登入系统模块即 sy
10、stemhead 静态全局函数模块清空 info.txt 并将编号存入到 info.txt中图 3.3 登入系统模块详细流程图否是否会员输入编号及密码打开 name.txt 并输出编号及密码匹配?关闭 name.txt否是以增加方式打开 name.txt 并输入编号及密码关闭name.txt.输入编号及密码程序设计语言课程设计报告 6上海应用技术学院 计算机科学与信息工程学院3.4 查询功能模块即 search 函数模块10否是输出 info.txt 中的职务信息将 info.txt 的编号与 salary.txt 中的编号进行匹配是否打开info.txt!indata.eof() ?图 3.
11、4 查询功能模块以默认方式打开 info.txt以默认方式打开 salary.txt从文件 info.txt 中提取编号并关闭文件输出“以上是你的工资信息!”关闭 salary.txt程序设计语言课程设计报告 7上海应用技术学院 计算机科学与信息工程学院3.5 职务信息匹配及处理模块即 systembody 静态全局函数模块3.6 循环控制模块即 while(1 )模块图 3.5 systembody 函数模块以默认方式打开 info.txt提取 info.txt 中的职务信息switch 语句进行职务匹配调用不同函数进行数据处理及显示图 3.6 循环控制模块即 while(1)模块1 02输
12、入选择操作查询功能模块 Info 及 recordinfo 调用systembody 调用选择?结束程序设计语言课程设计报告 8上海应用技术学院 计算机科学与信息工程学院4 课程设计总结4.1 完成情况本次面向对象课程设计的所有功能基本完成,并且扩展功能也成功的实现!可执行文件能正常执行指令并运行!4.2 遇到的问题及解决图 4.2.1 错误Error C:Users权Desktopmain.o(.data$_vt$8Employee+0xc):main.cpp: undefined reference to Employee:countSalary(void)错误:没有定义 Employee
13、 类中的 countSalary 函数!改正:将原先的“virtual void countSalary();”改为” virtual void countSalary()”程序设计语言课程设计报告 9上海应用技术学院 计算机科学与信息工程学院图 4.2.2 错误错误分析:(会员板块中)提示:“数字 1 表示是!其他键表示否!” ,但定义的选择变量为整型。加上我当时输入字符 p。改正:“其他键表示否!”改为”数字 0 表示否” 。输入时按提示进行输入即可!图 4.2.3 错误调试分析:错误发生在 systemhead 静态全局函数内的文件输入循环模块中!改正:将以 nocreate 方式即 ”
14、 ifstream indata(“d:number.txt“,ios:nocreate); “ 该为默认打开方式即“ifstream indata(“d:number.txt“);” 。图 4.2.4 错误调试分析:错误发生在调用 systembody 静态全局函数前后的 while 循环模块中,很有可能是数据存取混乱造成的。改正: systemhead 静态全局函数内“ofstream outdata(“d:info.txt“,ios:trunc);”改为先清后在以默认方式输入!且将存取整型编号的变量类型从字符型改为整型。图 4.2.5 错误错误:后面莫名其妙的跟着一个提示语句指令。分析调
15、试:当语句指令是基类 info 函数内的语句,很有可能是循环控制出现了一些问题。改正:见程序源代码!程序设计语言课程设计报告 10上海应用技术学院 计算机科学与信息工程学院参考文献1 下面给出几个参考文献的格式参考2 匿名,不知道,非常多计算机实用教程北京:XX 大学出版社,2004,1232343 美 Donis SomethingVisual X# 2008 技术内幕北京:YYY 大学出版社,2007,56784 Johns Smith, James Nothing. Programming in C+ or Anything and Something. http:/www.world.
16、ic.ac.uk/lab/cplusplus/nothing/index.html 20075 Anonymous. Something to Say. http:/ 20076 面向对象程序设计 ,郑莉,清华大学出版社, 7 面向对象程序设计 C+语言,朱战立等编 西安电子科技大学出版社8 面向对象程序设计-Visual C+,刘斌等编 , 清华大学出版社 9 面向对象程序设计-C+ 语言描述, Richard Johnsonbaugh( 美)等著,蔡宇辉等译,机械工业出版社, 2003程序设计语言课程设计报告 11上海应用技术学院 计算机科学与信息工程学院附录本系统有三个源程序文件构成,分
17、别为 system.h, system.cpp 及 main.cpp。同时含有三个系统文件,分别为 info.txt, name.txt 及 salary.txt,且全部存放在 D 盘根目录下,请勿随意移动或修改系统文件。当会员正式进入系统, info.txt 是先清空后用来存储会员输入的信息,最多含有编号、姓名、职务及月份。当仅会员注册时,会将编码及密码存储到 name.txt 中。当仅会员登入的编号及密码进行匹配时,会打开输入文件 name.txt,提取编号及密码,进行匹配。当仅当输入工资数据时,会将工资、编号、姓名、职务、月份存储到 salary.txt 中。当仅当查询工资信息时,会打开
18、 salary.txt,提取编号、姓名、职务、月份及工资。该系统是一个只适合 5 种及 5 种职务的工资管理系统。并将职务分为技术人员、销售人员、文秘、技术经理和销售经理,其代号分别为 1,2,3,4,5。雇员编号以整型变量存储,编号所取范围在-65536 至 65535 之内(包括边界值) ,首位数字表示相应的职务代码。该系统能力有限,请根据指示严格输入相应字符!程序清单Main 函数#include “system.cpp“#include “cstring“static void systemhead();static void systembody(); static void tec
19、hnician();static void salesman();static void secretary();static void techmanager();static void salesmanager();using namespace std;void main()程序设计语言课程设计报告 12上海应用技术学院 计算机科学与信息工程学院systemhead(); /调用 systemhead 静态全局函数 coutxuanze;if(xuanze=1)employee a;coutsum;a5.setsalesnum(sum);a5.countSalary();a5.recor
20、dSalary();static void techmanager()TechManager a4;int gra;coutgra;a4.setgrade(gra);a4.countSalary();a4.recordSalary();static void secretary()Secretary a3;float bon;coutbon;a3.setbonus(bon);程序设计语言课程设计报告 14上海应用技术学院 计算机科学与信息工程学院a3.countSalary();a3.recordSalary();static void salesman()Salesman a2;float
21、sum;coutsum;a2.setsalesnum(sum);a2.countSalary();a2.recordSalary();static void technician()Technician a1;float hour;couthour;a1.setHour(hour);a1.countSalary();a1.recordSalary();static void systembody()ifstream indata(“info.txt“);if(indata=NULL) exit(0);int num;char na25;int sta;程序设计语言课程设计报告 15上海应用技术
22、学院 计算机科学与信息工程学院indatanumnasta; /职务代号分别为 1,2,3,4,5 switch(sta)case 1:technician();break;case 2:salesman();break;case 3:secretary();break; case 4:techmanager();break; case 5:salesmanager();break;default:coutx;if(x)coutnum;coutsecret; /输入编号及密码ifstream indata(“number.txt“);if(indata=NULL)coutnum1;while(
23、!indata.eof()indatasecret1;if(num=num1) /改变判断变量的值,停止外层循环 break; /终止内层循环 indatanum1; indata.close(); / 检验 登入信息 elsecoutnum;coutsecret; /注册输入编号及密码ofstream outdata(“number.txt“,ios:app);outdata#include #include “system.h“using namespace std;void Employee:info()char na25;int sta,mon;coutnastamon;name=na
24、;status=sta;month=mon; /存储姓名、职务、月份 void Employee:search()int num;ifstream indata0(“info.txt“);if(indata0=NULL) exit(0);indata0num;indata0.close(); /从文件 info.txt 中提取编号 int num1;char na125;int sta1;int mon1;float sal;int mon0;ifstream indata(“salary.txt“);if(indata=NULL) exit(0);程序设计语言课程设计报告 18上海应用技术学
25、院 计算机科学与信息工程学院while(!indata.eof()indatanum1na1sta1mon1sal;if(num=num1)coutnumbernamestatusmonth;indata.close(); /依次输出该雇员的工资信息 int num1;char na125;int sta1;int mon1;float sal;ifstream indata1(“salary.txt“);if(indata1=NULL) exit(0);while(!indata1.eof()程序设计语言课程设计报告 19上海应用技术学院 计算机科学与信息工程学院indata1num1na1
26、sta1mon1sal;if(month!=mon1)coutnum1tna1tsta1tmon1tsaln;else exit(0);/依次输出该雇员的工资信息 coutnumbertnametstatustmonthtsalary; /显示工资信息ofstream outdata(“salary.txt“,ios:app);outdatannumbertnametstatustmonthtsalary;outdata.close(); void Technician:setHour(float x)workHour=x;Technician:Technician(float x)hourS
27、alary=x;void Technician:countSalary()salary=workHour*hourSalary;void Salesman:setsalesnum(float x)程序设计语言课程设计报告 20上海应用技术学院 计算机科学与信息工程学院salesnum=x;Salesman:Salesman(float x)getRate=x;void Salesman:countSalary( )salary=salesnum*getRate;void Secretary:setbonus(float x)bonus=x;Secretary:Secretary(float x
28、)fixedSalary=x;void Secretary:countSalary( )salary=fixedSalary+bonus;Manager:Manager(float x)fixedSalary=x;void TechManager:setgrade(int x)程序设计语言课程设计报告 21上海应用技术学院 计算机科学与信息工程学院grade=x;TechManager:TechManager(float x)gradeBonus=x;void TechManager:countSalary()salary=fixedSalary+grade*gradeBonus;SalesM
29、anager:SalesManager(float x)getRate=x;void SalesManager:countSalary()salary=fixedSalary+salesnum*getRate;void Technician:setHour(float x)workHour=x;Technician:Technician(float x)hourSalary=x;程序设计语言课程设计报告 22上海应用技术学院 计算机科学与信息工程学院void Technician:countSalary()salary=workHour*hourSalary;void Salesman:set
30、salesnum(float x)salesnum=x;Salesman:Salesman(float x)getRate=x;void Salesman:countSalary( )salary=salesnum*getRate;void Secretary:setbonus(float x)bonus=x;Secretary:Secretary(float x)fixedSalary=x;void Secretary:countSalary( )salary=fixedSalary+bonus;程序设计语言课程设计报告 23上海应用技术学院 计算机科学与信息工程学院Manager:Mana
31、ger(float x)fixedSalary=x;void TechManager:setgrade(int x)grade=x;TechManager:TechManager(float x)gradeBonus=x;void TechManager:countSalary()salary=fixedSalary+grade*gradeBonus;SalesManager:SalesManager(float x)getRate=x;void SalesManager:countSalary()salary=fixedSalary+salesnum*getRate;程序设计语言课程设计报告
32、 24上海应用技术学院 计算机科学与信息工程学院System.hclass Employeeprotected:int number; char name25; int status;int month; float salary;public:void info(); void search();virtual void countSalary()void recordinfo(); void recordinfo1();void recordSalary();class Salesman:public Employee protected:float salesnum;double get
33、Rate;public:Salesman(float x=0.05);void setsalesnum(float x);void countSalary( );class Technician:public Employeeprivate:float workHour; float hourSalary;public:Technician(float x=35.0); void setHour(float x);void countSalary( );程序设计语言课程设计报告 25上海应用技术学院 计算机科学与信息工程学院class Secretary:public Employeepriv
34、ate:float fixedSalary;float bonus;public:Secretary(float x=4000);void setbonus(float x);void countSalary( );class Managerprotected:float fixedSalary;public:Manager(float x=6000);void countSalary( );class SalesManager:public Salesman, public Managerpublic:SalesManager(float x=0.02);void countSalary( );class TechManager:public Technician, public Manager程序设计语言课程设计报告 26上海应用技术学院 计算机科学与信息工程学院private:float gradeBonus;int grade;public:TechManager(float x=1000);void setgrade(int x);void countSalary( );