1、C+程序设计课程设计说明书职工工资管理系统齐齐哈尔大学计年算机中心二零一零九月指导教师:廉佐政设计成员:冯文宇王 鑫金 璐张丽苹学院:食品与生物工程学院班级:生工091班C+程序设计课程设计任务书适用专业:生物工程设计题目:职工工资管理系统一、已知技术参数或设计前提1、学校教职工共一千多人。2、存储每位教职工的个人信息:基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费信息。3、该系统可对职工的信息进行查询、添加、修改、删除和储存。并且该系统可对职工的个人所得税、应发工资、应扣工资、实际工资做出自动计算。二、设计内容及要求1、实现对职工信息如基本工资、津贴、房帖、交通补贴、房租、储蓄、交
2、通费、会费信息的录入,将数据文件导入工资信息,将工资信息导入磁盘文件。2、可利用职工的编号对相应职工的信息进行查询、浏览职工的相应信息。3、可对系统进行维护,包括对在职职工的信息的查询、修改;对非在职职工的信息的删除。4、要通过文件记录职工工资的信息。三、课程设计工作计划1、确定题目,成立设计小组,做用户需求分析(10月11日)2、查阅资料,进行问题分析,制定方案,确定成员分工(10月13日-10月20日)3、根据方案编写程序并进行调试(10月21日-11月05日)4、撰写设计说明书,完成设计(11月06日-11月10日)5、提交设计内容,答辩(11月10日-11月25日)四、相关教材及参考书
3、目1、C+程序设计作者:刘娜娜出版社:北京航天航空大学出版社。20082、C+程序设计实用教程【M】作者:苏仕华出版社:清华大学出版社。2006目 录一、需求分析2二、系统总体设计2三、模块功能实现3四、系统的软硬件环境9五、系统的使用说明9六、结束语12附录A:程序源代码12附录B:程序调试记录22教师评语23一、需求分析从远古的货币发放到现代的工资发放,公司越来越需要对员工工资进行管理发放和合理存根。而此套程序就是为方便公司对员工工资管理而设计,其程序操作起来简单、易懂,内容包含有:月份、工人编号、姓名、基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费,而程序会自动计算出员工的个人
4、所得税、应发数、应扣数、实发数等。其操作功能有:浏览数据、增加数据、修改数据、查询数据、删除数据、存储文件、退出等。相信此程序会使公司对员工工资的管理和发放带来很大的帮助。二、系统总体设计主菜单添加职工信息删除职工信息修改职工的工资信息按职工编号查找记录列出所有记录从数据文件导入当月工资信息将当月工资信息导出到磁盘文件安全退出系统冯文宇 张丽苹 负责模块:浏览数据、增加数据王鑫 负责模块:修改数据、储存数据金璐 负责模块:修改数据、删除数据三、模块功能实现程序由7个功能模块组成,功能模块图如下添加数据:将职工的发放月份、编号、姓名、基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费输入。
5、浏览数据:输入职工编号后不但能显示出职工的月份、编号、姓名、基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费,系统还会自动算出其个人所得税、应发工资、应扣工资和实际工资。修改数据:输入职工编号后可通过代码对基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费进行修改。增加数据:本功能可容纳大量的数据,对任何大中小企业均适用,仍通过上述信息进行输入储存。删除数据:输入职工编号后就会将职工的全部资料删除,快捷方便。储存文件:将输入的职工信息从数据文件中导入当月工资信息,再将当月工资信息导出到磁盘文件.dat中。退出系统:退出工作界面模块名称void print()模块说明定义输出一条指
6、定职工的工资记录,并返回该记录的指针模块名称void additem()模块说明添加一条工资记录表模块名称void removeitem()模块说明删除一条指定职工的工资记录模块名称void changemonth()模块说明修改月份模块名称void changeitem()模块说明修改职工的工资信息模块名称void list()模块说明输出当月全体职工的工资信息模块名称void search()模块说明输出指定编号职工的工资信息模块名称void input()模块说明输入职工信息模块名称void addnew()模块说明增加记录模块名称void dofind()模块说明按职工编号查找模块名称
7、void dodelete()模块说明删除职工信息模块名称void domodify()模块说明修改职工信息模块名称void SaveFilethism()模块说明将当月工资信息写入文件模块名称void Loadfilethism()模块说明读取当月全体职工的工资信息文件 以int worker:listcount定义职工工资记录链表VoidAdditem定义添加工资记录void search输出指定信息通过Class worker类定义函数的继承方式以int worker:menu定义职工工资记录菜单VoidRemoveitem定义删除指定工资记录VoidChangemonth修改月份Voi
8、dChangeitem修改职工信息void list输出当月信息Public公有继承Private私有继承对工资记录的编辑输出一条指定职工的工资记录Return 安全退出系统四、系统的软硬件环境1、软件环境系统可以运行在Windows XP/200X等操作系统上。系统编辑编译环境为Visual C+ 6.0。2硬件环境本系统在计算中心实验室的计算机上编辑测试。测试用计算机的主要配置是CPU 2.4GHz,256M内存,80G硬盘。本系统可以运行在使用Windows操作系统的品牌机或兼容机上,具有80486,50MHz以上的处理器都可以运行本管理系统。五、系统的使用说明(1)主界面画面(2)添加
9、职工信息的方法(如图示所示)请选择(输入相应的数字):输入1当输入的职工编号为-1时表示输入结束。请输入月份 编号 姓名 基本工资 津贴 房帖 交通补贴 房租 储蓄 交通费 会费 输入月份 编号 姓名 基本工资 津贴 房帖 交通补贴 房租 储蓄 交通费 会费当录入结束时编号输入-1.(3)删除职工信息的方法(如图所示)请选择(输入相应的数字)输入2当输入的编号为-1时表示输入结束。请输入要删除的职工的编号输入要删除的职工的编号成功删除编号为x的记录输入结束输入-1.(4)修改职工的工资信息的方法(如图所示)请选择(输入相应的数字)输入3当输入职工编号为-1时表示结束修改。请输入所需修改职工的编
10、号输入职工编号请选择(输入相应的数字)输入相应数字请输入修改后的值输入修改后的值输入-1结束修改。(1、基本工资2、津贴3、房帖4、交通补贴5、房租6、储蓄7、交通费8、会费0、退出修改系统)(5)按职工编号查找记录的方法。请选择(输入相应的数字)输入4当输入的编号为-1时表示结束输入。请输入要查找的职工的编号输入相应的职工的编号显示相应编号的职工的信息结束查找输入-1.(6)列出所有记录的方法。请选择(输入相应的数字)输入5共有记录x,显示所有记录。(7)请选择(输入相应的数字)输入6当月工资信息将自动导入(8)将当月工资信息导出的磁盘文件的方法。请选择(输入相应的数字)输入7成功将工资信息
11、存入文件。(9)安全退出系统的方法。请选择(输入相应的数字)输入0确定要退出程序吗?Y/N输入Y安全退出系统。六、结束语:调试:按照界面提示输入便可得到以上截图的效果。总结:该程序完成了题目要求,总体来说,1、主要优点有:1) 界面美观。2) 具有清屏功能,使界面保持整洁、清晰。2、主要缺点有:1) 程序没有设置成多文件形式,可修改性差。2) 程序没有缩进,可读性差。3) 没有使用动态内存分配,内存浪费情况严重。3、此次课程设计的心得体会此次C+课程设计我们做的题目是职工工资管理系统,刚开始做的时候,以为做这个会像顺水推舟一般容易,结果发现我们的C+知识竟是如此的匮乏,没给人掌握的C+知识对编
12、程还远远不够,而就算是已经掌握的理论知识用在实践上还是那样的困难,编程错误百出,等到没有错误了,运行时还是会发现很多功能无法实现。本次课程设计让我深刻体会到了理论与实践的差距,正所谓知易行难,理论运用到实际还需要我们不断的练习,努力编程。而我们认为本次课程设计最大的收获就是能体会如何把C+理论知识运用到实际当中去以及在没有老师的帮助下如何自学,如何自己通过各种方式(图书、网络等)来独立完成任务,同时它还培养了我们独立思考的能力及严密的逻辑思维能力。可以说这次课程设计让我们受益匪浅。附录1、程序源代码# include # include # include # include # includ
13、e using namespace std;struct worker_infint month; int code; string name; float get4; float pay4; float tax; float theory_num; float reduce_num; float practice_num; worker_inf *next;/class worker private: worker_inf *head; void print(worker_inf *); worker_inf *find(int); public: worker()head=NULL; wo
14、rker_inf *get_head()return head; int listcount(); void additem(int month,int code,string name,float get4,float pay4); void removeitem(int); int menu(); void changemonth(); void changeitem(int); void list(); void search(int); float tax_num(); float theorynumber(); float reducenumber(); float practice
15、number(); ;/int worker:listcount() if(!head)return 0; worker_inf *p=head; int n=0; while(p) n+;p=p-next; return n;/void worker:additem(int month,int code,string name,float get4,float pay4) if(!head) head=new worker_inf; for(int i=0;igeti=geti; head-payi=payi; head-code=code; head-month=month; head-n
16、ame=name; head-next=NULL; return; worker_inf *t=head; while(t & t-code!=code) t=t-next; if(t) cout操作失败:编号为code的记录已经存在!next)p=p-next; worker_inf *p1=new worker_inf; p1-code=code; for(int i=0;igeti=geti; p1-payi=payi; p1-code=code; p1-month=month; p1-name=name; p1-next=NULL; p-next=p1; return;/void wo
17、rker:removeitem(int code) worker_inf *t=find(code); if(!t)return; worker_inf *p=head; if(head=t) head=head-next; delete p; cout成功删除编号为code的记录!endlnext!=t)p=p-next; worker_inf *p1=p-next; p-next=p1-next; delete p1; cout成功删除编号为code的记录!endlendl; return;/int worker:menu() int select=-1; couttttttt*修改菜单*
18、endlendl; cout1.基本工资endlendl; cout2.津贴endlendl; cout3.房帖endlendl; cout4.交通补贴endlendl; cout5.房租endlendl; cout6.储蓄endlendl; cout7.交通费endlendl; cout8.会费endlendl; cout0.退出修改系统endlendl; coutselect; if(select9) cout对不起您输入错误!请重新输入【0-9】:select; return select;/int menu();void worker:changeitem(int code) work
19、er_inf *p=find(code); if(!p)cout不存在职工编号为code的职工工资信息endl;return; int select; while(1) float m; select=menu(); if(select=0)system(cls);break; coutm; int n; if(selectgetn=m; else n=select-5; p-payn=m; tax_num(); theorynumber(); reducenumber(); practicenumber(); cout修改成功month=12)p-month=1; else p-month+
20、; p=p-next; /void worker:print(worker_inf *p) cout.precision(0); coutmonth ; coutcode ; coutnamet; for(int i=0;i4;i+) coutsetiosflags(ios:fixed)getit; for(int j=0;j4;j+) coutpayjt; couttaxt; couttheory_numt; coutreduce_numt; coutpractice_numendlendl; return;/void worker:list() if(listcount=0) cout错误
21、:当前的列表为空!endl; return; worker_inf *p=head; cout共有记录:listcount()endl; cout月份t编号t姓名t基本工资t津贴t房帖t交通补贴t房租t储蓄t交通费t会费t个人所得税t应发工资t应扣工资t实际工资next; coutendl; return;/void worker:search(int code) coutsearching.endl; worker_inf *p=find(code); if(p) cout月份t编号t姓名t基本工资t津贴t房帖t交通补贴t房租t储蓄t交通费t会费t个人所得税t应发工资t应扣工资t实际工资en
22、dl; print(p); coutendl;/worker_inf *worker:find(int code) if(listcount=0) cout错误:当前列表为空!code=code)break; p=p-next; if(!p) cout错误:找不到该记录!n; return NULL; return p;/float worker:theorynumber() int i; if(listcount()=0) cout错误:当前的列表为空!endl; return -1; float sum; worker_inf *p=head; while(p) sum=0; for(i=
23、0;igeti; p-theory_num=sum; p=p-next; return 0;/float worker:tax_num() if(listcount=0) cout错误:当前的列表为空!theory_num; if(stheory_num=0; else if(stheory_num=(s-800)*0.05; else if(stheory_num=(s-2000)*0.1+60; else p-theory_num=(s-5000)*0.2+360; p=p-next; return 0;/float worker:reducenumber() int i; if(list
24、count=0) cout错误:当前的列表为空!endl; float sum; worker_inf *p=head; while(p) sum=0; for(i=0;ipayi; p-reduce_num=p-tax+sum; p=p-next; return 0;/float worker:practicenumber() if(listcount()=0) cout错误:当前的列表为空!theory_num; b=p-reduce_num; p-practice_num=a-b; p=p-next; return 0;/worker worker; /定义全局变量int menu()
25、int select=-1; cout*主菜单*endlendl; cout1.添加职工信息;endlendl; cout2.删除职工信息;endlendl; cout3.修改职工的工资信息;endlendl; cout4.按职工编号查找记录;endlendl; cout5.列出所有记录;endlendl; cout6.从数据文件导入当月工资信息;endlendl; cout7.将当月工资信息导出到磁盘文件;endlendl; cout0.安全退出系统;endlendl; coutselect; return select;/char exit() char s; couts; return
26、s;/void input(int *month,int*code,string *name,float get4,float pay4) cout请输入月份 编号 姓名 基本工资 津贴 房帖 交通补贴 房租 储蓄 交通费 会费:*month; cin*code; if(*code=-1)return; cin*nameget0get1get2get3pay0pay1pay2pay3; return;/void addnew() int month=0,code=0;float get4=0,pay4=0; string name=; coutendl当输入的职工编号为-1时表示输入结束。en
27、dl; input(&month,&code,&name,get,pay); while(code!=-1) worker.additem(month,code,name,get,pay); worker.tax_num(); worker.theorynumber(); worker.reducenumber(); worker.practicenumber(); input(&month,&code,&name,get,pay); return;/void dofind() int code; coutendl当输入的编号为-1时表示结束输入.endl; do coutcode; if(c
28、ode=-1)continue; worker.search(code); while(code!=-1); return;/void dodelete() coutendl当输入的编号为-1时表示输入结束.endl; int code; do coutcode; if(code=-1)continue; worker.removeitem(code); while(code!=-1); return;/void domodify() int code; cout当输入职工编号为-1时表示结束修改endl; while(1) coutcode; if(code=-1)return; else
29、worker.changeitem(code); return;/void SaveFilethism() worker_inf *p; char name20; fstream iofile; int i=0; iofile.open(Worker_5th.dat,ios:out|ios:binary); if(!iofile) cerropen error!name.copy(name,20,0); namep-name.length()=0; iofile.write(char *) &p-code,sizeof(int); iofile.write(char *) &p-month,s
30、izeof(int); iofile.write(char *) name,20); for(int i=0;igeti,sizeof(float); for(int j=0;jpayj,sizeof(float); p=p-next; iofile.close(); cout成功将工资信息存入文件endl;/void Loadfilethism() int month,code; char name20=; float get4,pay4; fstream iofile; int i=0; iofile.open(Worker_5th.dat,ios:in|ios:binary); if(!
31、iofile) cout数据文件不存在,请先建立该文件endl; return; if(iofile.eof() cout数据库为空,请先添加数据endl; iofile.close(); else while(iofile.peek()!=EOF)/peek()是取文件当前指针,EOF是文件尾标符 iofile.read(char *) &code,sizeof(int); iofile.read(char *) &month,sizeof(int); iofile.read(char *) name,20); for(int i=0;i4;i+) iofile.read(char *) &geti,sizeof(float); for(int j=0;j4;j+) iofile.read(char *) &payj,sizeof(float); worker.additem(code,month,name,get,pay); worker.tax_num(); worker.theorynumber(); worker.reducenumber(); worker.practicenumber(); iofile.close(); cout成功导入工资信息endl; /