《C++课程设计职工工资管理系统(报告内含程序完整清单).pdf》由会员分享,可在线阅读,更多相关《C++课程设计职工工资管理系统(报告内含程序完整清单).pdf(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 i 目录 目录.i 1.概述 1 1.1.程序的基本功能 1 1.2.其它功能 1 1.3.扩展功能 1 2.课题的分析 2 2.1.会员登入系统模块即SYSTEMHEAD静态全局函数模块 2 2.2.查询功能模块即SEARCH函数模块 2 2.3.职务信息匹配及处理模块即SYSTEMBODY静态全局函数模块模块 4 2 2.4.循环控制模块即WHILE(1)模块 2 3.详细设计 3 3.1.类声明 3 3.2.系统简略流程图 4 3.3.会员登入系统模块即SYSTEMHEAD静态全局函数模块 5
2、3.4.查询功能模块即SEARCH函数模块 6 3.5.职务信息匹配及处理模块即SYSTEMBODY静态全局函数模块 7 3.6.循环控制模块即WHILE(1)模块 7 4.课程设计总结 8 4.1.完成情况 8 4.2.遇到的问题及解决 8 参考文献.10 附录.11 70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 1 1 概述 本课程设计是面向对象程序设计课程的后继教学环节,学好 C+语言就必须坚持用面向对象的思维方式分析问题、解决问题,最好的方法是仿照教材编写 C+实际应用程序。此次课程设计的题目及要求:实现一个简单的工资管理系统。1.1 程
3、序的基本功能 系统的主要功能是计算职工当月工资并存档。公司内有 5 种不同类型的职工:技术人员、销售人员、文秘、技术经理和销售经理,他们的工资计算方式各不相同。1.2 其它功能 将工资信息存入 salary.txt 文件中,工资信息包含雇员编号、姓名、职务、月份、月收入。Info.txt 文件中只存留一些信息及会员最后进入系统时输入的数据,最多含有编号、姓名、职务、月份的信息。1.3 扩展功能 采用了会员制度,并将登入信息及编号、密码存入 number.txt 文件中。70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 2 2 课题的分析 通过对课题的
4、深入分析,我将这个课题分为以下几个模块,深入详细得剖析它们。2.1 会员登入系统模块即 systemhead 静态全局函数模块 程序运行后,先进行会员选择判断。为减少会员重新注册,通过输入两次编号及密码,增加繁琐度。同时在一定的方面上,又方便忘记密码的会员。通过密码匹配,雇员的工资信息这一隐私得到了很好的保障。2.2 查询功能模块即 search 函数模块 首先,从 info.txt 中提取编号,与 salary.txt 中的编号进行匹配,匹配成功,输出工资信息,直到文件!indata.eof()=0。.2.3 职务信息匹配及处理模块即 systembody 静态全局函数模块模块 4 从 in
5、fo.txt 中提取职务信息,用 switch 语句进行匹配,据匹配情况调用不同的函数进行输入、处理、显示并以增加方式记录到 salary.txt 中。2.4 循环控制模块即 while(1)模块 为了更加方便使用,尽量改善系统,实现 search 函数及 systembody 函数功能,在 search 函数及 systembody 函数模块的基础上加了一些必要的语句,并增加了外层循环控制。70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 3 3 详细设计 作为一个面向对象程序设计,我们不得不先从类的声明开始设计,而后是一个整体的流程图做框架。最后
6、在从小的模块结构着手。3.1 类声明 class SalesManager:public Salesman,public Manager public:SaleaManager(float x=0.02);void countSalary();class TechManager:public Technician,public Manager private:float gradeBonus;int grade;public:TechManager(float x=1000);void setgrade(float x);void countSalary();class Secretary:p
7、ublic Employee private:float fixedSalary;float bonus;public:Secretary(float x=4000);void setbonus(float 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 类声明 class Manager prot
8、ected:float fixedSalary;public:Manaer(float x=6000);void countSalary();class Technician:public Employee private:float workHour;float hourSalary;public:technician(float x=36);void setHour(float x);void countSalary();class Employee protected:int number;char name25;int status;int month;float salary;pub
9、lic:void info();void search();virtual void countSalary();void recordinfo();void recordSalary();70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 4 3.2 系统简略流程图 假 结束 再次输入 图 3.2 职工工资管理系统简略流程图 否 是 是否会员 输入编号及密码 开始 注册 检验?假 真 选择?0 查询信息 1 输入姓名、职务、月份 真 显示 职务代码分析 工资记录在 salary.txt 处理 1 处理 2 处理 3 处理 4 输入 1 输入 2 输入
10、 3 输入 4 处理 5 输入 5 记录编码姓名职务月份至 info.txt 从 info.txt 提取职务代码 优点:一个入口,一个出口!70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 5 3.3 会员登入系统模块即 systemhead 静态全局函数模块 清空 info.txt 并将编号存入到 info.txt中 图 3.3 登入系统模块详细流程图 否 是否会输入编号及密码 打开 name.txt 并输出编号及匹配?关闭 name.txt 否 是 以增加方式打开name.txt并输入编号及关闭name.txt.输入编号及密码 70+120+12
11、0+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 6 3.4 查询功能模块即 search 函数模块 1 0 否 是 输出 info.txt 中的职务信息 将 info.txt 的编号与 salary.txt 中的编号进行匹配 是 否 打 开info.txt!indata.eof()?图 3.4 查询功能模块 以默认方式打开 info.txt 以默认方式打开 salary.txt 从文件 info.txt 中提取编号并关闭文件 输出“以上是你的工资信息!”关闭 salary.txt 70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施
12、工方案 7 3.5 职务信息匹配及处理模块即 systembody 静态全局函数模块 3.6 循环控制模块即 while(1)模块 图 3.5 systembody 函数模块 以默认方式打开 info.txt 提取 info.txt 中的职务信息 switch 语句进行职务匹配 调用不同函数进行数据处理及显示 图3.6循环控制模块即while(1)模块 1 0 2 输入选择操作 查询功能模块 Info 及 recordinfo 调用 systembody 调用 选择?结束 70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 8 4 课程设计总结 4.1
13、 完成情况 本次面向对象课程设计的所有功能基本完成,并且扩展功能也成功的实现!可执行文件能正常执行指令并运行!4.2 遇到的问题及解决 图 4.2.1 错误 Error C:Users 权 Desktopmain.o(.data$_vt$8Employee+0 xc):main.cpp:undefined reference to Employee:countSalary(void)错误:没有定义 Employee 类中的 countSalary 函数!改正:将原先的“virtual void countSalary();”改为”virtual void countSalary()”70+12
14、0+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 9 图 4.2.2 错误 错误分析:(会员板块中)提示:“数字 1 表示是!其他键表示否!”,但定义的选择变量为整型。加上我当时输入字符p。改正:“其他键表示否!”改为”数字 0 表示否”。输入时按提示进行输入即可!图 4.2.3 错误 调试分析:错误发生在 systemhead 静态全局函数内的文件输入循环模块中!改正:将以 nocreate 方式即”ifstream indata(d:number.txt,ios:nocreate);“该为默认打开方式即“ifstream indata(d:number.t
15、xt);”。图 4.2.4 错误 调试分析:错误发生在调用 systembody 静态全局函数前后的 while 循环模块中,很有可能是数据存取混乱造成的。改正:systemhead 静态全局函数内“ofstream outdata(d:info.txt,ios:trunc);”改为先清 后在以默认方式输入!且将存取整型编号的变量类型从字符型改为整型。图 4.2.5 错误 错误:后面莫名其妙的跟着一个提示语句指令。分析调试:当语句指令是基类 info 函数内的语句,很有可能是循环控制出现了一些问题。改正:见程序源代码!70+120+120+70m 连续梁桥 及 80+140+140+80m 连
16、续刚构桥施工方案 10 参考文献 1 下面给出几个参考文献的格式参考 2 匿名,不知道,非常多计算机实用教程北京:XX 大学出版社,2004,123234 3 美 Donis SomethingVisual X#2008 技术内幕北京:YYY 大学出版社,2007,5678 4 Johns Smith,James Nothing.Programming in C+or Anything and Something.http:/www.world.ic.ac.uk/lab/cplusplus/nothing/index.html 2007 5 Anonymous.Something to Say
17、.http:/ 2007 6 面向对象程序设计,郑莉,清华大学出版社,7 面向对象程序设计 C+语言,朱战立等编 西安电子科技大学出版社 8 面向对象程序设计-Visual C+,刘斌等编,清华大学出版社 9 面向对象程序设计-C+语言描述,Richard Johnsonbaugh(美)等著,蔡宇辉等译,机械工业出版社,2003 70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 11 附录 本系统有三个源程序文件构成,分别为system.h,system.cpp 及 main.cpp。同时含有三个系统文件,分别为 info.txt,name.txt
18、及 salary.txt,且全部存放在 D 盘根目录下,请勿随意移动或修改系统文件。当会员正式进入系统,info.txt 是先清空后用来存储会员输入的信息,最多含有编号、姓名、职务及月份。当仅会员注册时,会将编码及密码存储到 name.txt 中。当仅会员登入的编号及密码进行匹配时,会打开输入文件 name.txt,提取编号及密码,进行匹配。当仅当输入工资数据时,会将工资、编号、姓名、职务、月份存储到 salary.txt 中。当仅当查询工资信息时,会打开 salary.txt,提取编号、姓名、职务、月份及工资。该系统是一个只适合 5 种及 5 种职务的工资管理系统。并将职务分为技术人员、销售
19、人员、文秘、技术经理和销售经理,其代号分别为 1,2,3,4,5。雇员编号以整型变量存储,编号所取范围在-65536 至 65535 之内(包括边界值),首位数字表示相应的职务代码。该系统能力有限,请根据指示严格输入相应字符!程序清单 Main 函数#include system.cpp#include cstring static void systemhead();static void systembody();static void technician();static void salesman();static void secretary();static void techm
20、anager();static void salesmanager();using namespace std;void main()70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 12 systemhead();/调用 systemhead 静态全局函数 coutnn1:查询工资;coutnn2:输入工资数据;coutnn0:退出系统!nn;coutxuanze;if(xuanze=1)employee a;coutendlendl;a.search();coutnn 输入工资数据请按数字 2,退出系统请按数字 0!nn;/查询工资信息 if(x
21、uanze=2)employee a;a.info();a.recordinfo();/输入处理工资数据并暂时记录 systembody();/调用 systembody 静态全局函数 coutnn 查询工资请按数字 1,退出系统请按数字 0!nn;if(xuanze=0)exit(0);70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 13 static void salesmanager()SalesManager a5;float sum;coutsum;a5.setsalesnum(sum);a5.countSalary();a5.recor
22、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);70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 14 a3.countSalary();a3.recordSalary();static void salesman()Sale
23、sman a2;float 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;70+120+120
24、+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 15 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:cout职务代号错误!n 请重新输入!;static void systemhead()char x,y=y;int num;char secret6;w
25、hile(y)coutx;if(x)coutnum;coutsecret;/输入编号及密码 ifstream indata(number.txt);if(indata=NULL)coutnum1;while(!indata.eof()indatasecret1;if(num=num1)&(strcmp(secret,secret1)=0)y=0;/改变判断变量的值,停止外层循环 break;/终止内层循环 indatanum1;indata.close();/检验 登入信息 else coutnum;coutsecret;/注册输入编号及密码 ofstream outdata(number.t
26、xt,ios:app);outdatanumtsecrett;outdata.close();/将编号及密码保存到 number.txt 中 coutendlendl;ofstream outdata(info.txt,ios:trunc);outdata.close();/清空文件内容 70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 17 ofstream outdata1(info.txt);outdata1numt;outdata.close();/输入编号至 info.txt System.cpp#include#include#inclu
27、de system.h using namespace std;void Employee:info()char na25;int sta,mon;coutnastamon;name=na;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
28、sal;int mon0;ifstream indata(salary.txt);if(indata=NULL)exit(0);70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 18 while(!indata.eof()indatanum1na1sta1mon1sal;if(num=num1)coutnum1tna1tsta1tmon1tsaln;/依次输出该雇员的工资信息 if(indata.eof()coutnn 以上是你的工资信息!nn;indata.close();void Employee:recordinfo()ofstream out
29、data(info.txt,ios:app);outdatanametstatustnumbernamestatusmonth;indata.close();/依次输出该雇员的工资信息 int num1;char na125;int sta1;int mon1;float sal;ifstream indata1(salary.txt);if(indata1=NULL)exit(0);while(!indata1.eof()70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 19 indata1num1na1sta1mon1sal;if(month!=
30、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)hourSalary=x;void Technician:c
31、ountSalary()salary=workHour*hourSalary;void Salesman:setsalesnum(float x)70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 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)fixedSalary
32、=x;void Secretary:countSalary()salary=fixedSalary+bonus;Manager:Manager(float x)fixedSalary=x;void TechManager:setgrade(int x)70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 21 grade=x;TechManager:TechManager(float x)gradeBonus=x;void TechManager:countSalary()salary=fixedSalary+grade*gradeBonus;Sales
33、Manager: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;70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 22 void Technician:countSalary()salary=workHour*hourSalary;vo
34、id Salesman:setsalesnum(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;70+120+120+70m 连续梁桥 及 80+140+140+80
35、m 连续刚构桥施工方案 23 Manager:Manager(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+sa
36、lesnum*getRate;70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 24 System.h class Employee protected: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 Employ
37、ee protected:float salesnum;double getRate;public:Salesman(float x=0.05);void setsalesnum(float x);void countSalary();class Technician:public Employee private:float workHour;float hourSalary;public:Technician(float x=35.0);void setHour(float x);void countSalary();70+120+120+70m 连续梁桥 及 80+140+140+80m
38、 连续刚构桥施工方案 25 class Secretary:public Employee private:float fixedSalary;float bonus;public:Secretary(float x=4000);void setbonus(float x);void countSalary();class Manager protected:float fixedSalary;public:Manager(float x=6000);void countSalary();class SalesManager:public Salesman,public Manager public:SalesManager(float x=0.02);void countSalary();class TechManager:public Technician,public Manager 70+120+120+70m 连续梁桥 及 80+140+140+80m 连续刚构桥施工方案 26 private:float gradeBonus;int grade;public:TechManager(float x=1000);void setgrade(int x);void countSalary();面对强大的对手,明知不敌,也要毅然亮剑,即使倒下,也要化成一座山