收藏 分销(赏)

毕业论文-职工工资管理系统课程设计说明书.doc

上传人:可**** 文档编号:2011638 上传时间:2024-05-13 格式:DOC 页数:29 大小:316.50KB 下载积分:10 金币
下载 相关 举报
毕业论文-职工工资管理系统课程设计说明书.doc_第1页
第1页 / 共29页
毕业论文-职工工资管理系统课程设计说明书.doc_第2页
第2页 / 共29页


点击查看更多>>
资源描述
《C++程序设计》课程设计说明书 职工工资管理系统 齐齐哈尔大学计年算机中心 二零一零九月 指导教师: 廉佐政 设计成员:冯文宇 王 鑫 金 璐 张丽苹 学院:食品与生物工程学院 班级:生工091班 《C++程序设计》课程设计任务书 适用专业:生物工程 设计题目:职工工资管理系统 一、已知技术参数或设计前提 1、学校教职工共一千多人。 2、存储每位教职工的个人信息:基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费信息。 3、该系统可对职工的信息进行查询、添加、修改、删除和储存。并且该系统可对职工的个人所得税、应发工资、应扣工资、实际工资做出自动计算。 二、设计内容及要求 1、实现对职工信息如基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费信息的录入,将数据文件导入工资信息,将工资信息导入磁盘文件。 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日) 四、相关教材及参考书目 1、《C++程序设计》 作者:刘娜娜 出版社:北京航天航空大学出版社。2008 2、《C++程序设计实用教程【M】》 作者:苏仕华 出版社:清华大学出版社。2006 目 录 一、需求分析 2 二、系统总体设计 2 三、模块功能实现 3 四、系统的软硬件环境 9 五、系统的使用说明 9 六、结束语 12 附录A:程序源代码 12 附录B:程序调试记录 22 教师评语 23 一、需求分析 从远古的货币发放到现代的工资发放,公司越来越需要对员工工资进行管理发放和合理存根。而此套程序就是为方便公司对员工工资管理而设计,其程序操作起来简单、易懂,内容包含有:月份、工人编号、姓名、基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费,而程序会自动计算出员工的个人所得税、应发数、应扣数、实发数等。其操作功能有:浏览数据、增 加数据、修改数据、查询数据、删除数据、存储文件、退出等。相信此程序会使公司对员工工资的管理和发放带来很大的帮助。 二、系统总体设计 主菜单 添加职工信息 删除职工信息 修改职工的工资信息 按职工编号查找记录 列出所有记录 从数据文件导入当月工资信息 将当月工资信息导出到磁盘文件 安全退出系统 冯文宇 张丽苹 负责模块:浏览数据、增加数据 王鑫 负责模块:修改数据、储存数据 金璐 负责模块:修改数据、删除数据 三、模块功能实现 程序由7个功能模块组成,功能模块图如下 添加数据:将职工的发放月份、编号、姓名、基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费输入。 浏览数据:输入职工编号后不但能显示出职工的月份、编号、姓名、基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费,系统还会自动算出其个人所得税、应发工资、应扣工资和实际工资。 修改数据:输入职工编号后可通过代码对基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费进行修改。 增加数据:本功能可容纳大量的数据,对任何大中小企业均适用,仍通过上述信息进行输入储存。 删除数据:输入职工编号后就会将职工的全部资料删除,快捷方便。 储存文件:将输入的职工信息从数据文件中导入当月工资信息,再将当月工资信息导出到磁盘文件.dat中。 退出系统:退出工作界面 模块名称 void print() 模块说明 定义输出一条指定职工的工资记录,并返回该记录的指针 模块名称 void additem() 模块说明 添加一条工资记录表 模块名称 void removeitem() 模块说明 删除一条指定职工的工资记录 模块名称 void changemonth() 模块说明 修改月份 模块名称 void changeitem() 模块说明 修改职工的工资信息 模块名称 void list() 模块说明 输出当月全体职工的工资信息 模块名称 void search() 模块说明 输出指定编号职工的工资信息 模块名称 void input() 模块说明 输入职工信息 模块名称 void addnew() 模块说明 增加记录 模块名称 void dofind() 模块说明 按职工编号查找 模块名称 void dodelete() 模块说明 删除职工信息 模块名称 void domodify() 模块说明 修改职工信息 模块名称 void SaveFilethism() 模块说明 将当月工资信息写入文件 模块名称 void Loadfilethism() 模块说明 读取当月全体职工的工资信息文件 以int worker::listcount 定义职工工资记录链表 Void Additem 定义添加 工资记录 void search 输出 指定 信息 通过Class worker类 定义函数的继承方式 以int worker::menu 定义职工工资记录菜单 Void Removeitem 定义删除 指定 工资记录 Void Changemonth 修改月份 Void Change item 修改职工信息 void list 输出 当月 信息 Public 公有继承 Private 私有继承 对工资记录的编辑 输出一条指定职工的工资记录 Return 安全退出系统 四、系统的软硬件环境 1、软件环境 系统可以运行在Windows XP/200X等操作系统上。系统编辑编译环境为Visual C++ 6.0。 2.硬件环境 本系统在计算中心实验室的计算机上编辑测试。测试用计算机的主要配置是CPU 2.4GHz,256M内存,80G硬盘。 本系统可以运行在使用Windows操作系统的品牌机或兼容机上,具有80486,50MHz以上的处理器都可以运行本管理系统。 五、系统的使用说明 (1)主界面画面 (2)添加职工信息的方法(如图示所示) 请选择(输入相应的数字):→输入1→当输入的职工编号为-1时表示输入结束。请输入月份 编号 姓名 基本工资 津贴 房帖 交通补贴 房租 储蓄 交通费 会费 →输入月份 编号 姓名 基本工资 津贴 房帖 交通补贴 房租 储蓄 交通费 会费→当录入结束时编号输入-1. (3)删除职工信息的方法(如图所示) 请选择(输入相应的数字)→输入2→当输入的编号为-1时表示输入结束。请输入要删除的职工的编号→输入要删除的职工的编号→成功删除编号为x的记录→输入结束输入-1. (4)修改职工的工资信息的方法(如图所示) 请选择(输入相应的数字)→输入3→当输入职工编号为-1时表示结束修改。请输入所需修改职工的编号→输入职工编号→请选择(输入相应的数字)→输入相应数字→请输入修改后的值→输入修改后的值→输入-1结束修改。(1、基本工资2、津贴3、房帖4、交通补贴5、房租6、储蓄7、交通费8、会费0、退出修改系统) (5)按职工编号查找记录的方法。 请选择(输入相应的数字)→输入4→当输入的编号为-1时表示结束输入。请输入要查找的职工的编号→输入相应的职工的编号→显示相应编号的职工的信息→结束查找输入-1. (6)列出所有记录的方法。 请选择(输入相应的数字)→输入5→共有记录x,显示所有记录。 (7)请选择(输入相应的数字)→输入6→当月工资信息将自动导入 (8)将当月工资信息导出的磁盘文件的方法。 请选择(输入相应的数字)→输入7→成功将工资信息存入文件。 (9)安全退出系统的方法。 请选择(输入相应的数字)→输入0→确定要退出程序吗?[Y/N]→输入Y→安全退出系统。 六、结束语: 调试:按照界面提示输入便可得到以上截图的效果。 总结:该程序完成了题目要求,总体来说, 1、主要优点有: 1) 界面美观。 2) 具有清屏功能,使界面保持整洁、清晰。 2、主要缺点有: 1) 程序没有设置成多文件形式,可修改性差。 2) 程序没有缩进,可读性差。 3) 没有使用动态内存分配,内存浪费情况严重。 3、此次课程设计的心得体会 此次C++课程设计我们做的题目是职工工资管理系统,刚开始做的时候,以为做这个会像顺水推舟一般容易,结果发现我们的C++知识竟是如此的匮乏,没给人掌握的C++知识对编程还远远不够,而就算是已经掌握的理论知识用在实践上还是那样的困难,编程错误百出,等到没有错误了,运行时还是会发现很多功能无法实现。本次课程设计让我深刻体会到了理论与实践的差距,正所谓知易行难,理论运用到实际还需要我们不断的练习,努力编程。而我们认为本次课程设计最大的收获就是能体会如何把C++理论知识运用到实际当中去以及在没有老师的帮助下如何自学,如何自己通过各种方式(图书、网络等)来独立完成任务,同时它还培养了我们独立思考的能力及严密的逻辑思维能力。可以说这次课程设计让我们受益匪浅。 附录1、程序源代码 # include <iostream> # include <fstream> # include <string> # include <iomanip> # include <stdlib.h> using namespace std; struct worker_inf { int month; int code; string name; float get[4]; float pay[4]; 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;} worker_inf *get_head(){return head;} int listcount(); void additem(int month,int code,string name,float get[4],float pay[4]); void removeitem(int); int menu(); void changemonth(); void changeitem(int); void list(); void search(int); float tax_num(); float theorynumber(); float reducenumber(); float practicenumber(); }; ////////////////////////////////////////////////////////////////// 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 get[4],float pay[4]) { if(!head) { head=new worker_inf; for(int i=0;i<4;i++) { head->get[i]=get[i]; head->pay[i]=pay[i]; } head->code=code; head->month=month; head->name=name; head->next=NULL; return; } worker_inf *t=head; while(t && t->code!=code) t=t->next; if(t) { cout<<"操作失败:编号为"<<code<<"的记录已经存在!"<<endl; return; } worker_inf *p=head; while(p->next)p=p->next; worker_inf *p1=new worker_inf; p1->code=code; for(int i=0;i<4;i++) { p1->get[i]=get[i]; p1->pay[i]=pay[i]; } p1->code=code; p1->month=month; p1->name=name; p1->next=NULL; p->next=p1; return; } //////////////////////////////////////////////////////////////////// void worker::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<<"的记录!"<<endl<<endl; return; } while(p->next!=t)p=p->next; worker_inf *p1=p->next; p->next=p1->next; delete p1; cout<<"成功删除编号为"<<code<<"的记录!"<<endl<<endl; return; } //////////////////////////////////////////////////////////////// int worker::menu() { int select=-1; cout<<"\t\t\t\t\t\t**************修改菜单**************"<<endl<<endl; cout<<"1.基本工资"<<endl<<endl; cout<<"2.津贴"<<endl<<endl; cout<<"3.房帖"<<endl<<endl; cout<<"4.交通补贴"<<endl<<endl; cout<<"5.房租"<<endl<<endl; cout<<"6.储蓄"<<endl<<endl; cout<<"7.交通费"<<endl<<endl; cout<<"8.会费"<<endl<<endl; cout<<"0.退出修改系统"<<endl<<endl; cout<<"[请选择(输入相应数字)]:"; cin>>select; if(select<0||select>9) { cout<<"对不起您输入错误!请重新输入【0-9】:"<<endl; cin>>select; } return select; } ///////////////////////////////////////////////////////////////// int menu(); void worker::changeitem(int code) { worker_inf *p=find(code); if(!p){cout<<"不存在职工编号为"<<code<<"的职工工资信息"<<endl;return;} int select; while(1) { float m; select=menu(); if(select==0){system("cls");break;} cout<<"请输入修改后的值"; cin>>m; int n; if(select<=4){ n=select-1; p->get[n]=m;} else{ n=select-5; p->pay[n]=m;} tax_num(); theorynumber(); reducenumber(); practicenumber(); cout<<"修改成功"<<endl; } } //////////////////////////////////////////////////////////////////// void worker::changemonth() { worker_inf *p=head; while(p) { if(p->month==12)p->month=1; else p->month++; p=p->next; } } ////////////////////////////////////////////////////////////////////// void worker::print(worker_inf *p) { cout.precision(0); cout<<p->month<<" "; cout<<p->code<<" "; cout<<p->name<<"\t"; for(int i=0;i<4;i++) {cout<<setiosflags(ios::fixed)<<p->get[i]<<"\t";} for(int j=0;j<4;j++) {cout<<p->pay[j]<<"\t";} cout<<p->tax<<"\t"; cout<<p->theory_num<<"\t"; cout<<p->reduce_num<<"\t"; cout<<p->practice_num<<endl<<endl; return; } /////////////////////////////////////////////////////////////////////// void worker::list() { if(listcount==0) { cout<<"错误:当前的列表为空!"<<endl; return; } worker_inf *p=head; cout<<"共有记录:"<<listcount()<<endl; cout<<"月份\t编号\t姓名\t基本工资\t津贴\t房帖\t交通补贴\t房租\t储蓄\t交通费\t会费\t个人所得税\t应发工资\t应扣工资\t实际工资"<<endl; while(p) { print(p); p=p->next; } cout<<endl; return; } ///////////////////////////////////////////////////////////////////////// void worker::search(int code) { cout<<"searching....."<<endl; worker_inf *p=find(code); if(p) { cout<<"月份\t编号\t姓名\t基本工资\t津贴\t房帖\t交通补贴\t房租\t储蓄\t交通费\t会费\t个人所得税\t应发工资\t应扣工资\t实际工资"<<endl; print(p); } cout<<endl; } ////////////////////////////////////////////////////////////////////////// worker_inf *worker::find(int code) { if(listcount==0) { cout<<"错误:当前列表为空!"<<endl; return NULL; } worker_inf *p=head; while(p) { if(p->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=0;i<4;i++) sum+=p->get[i]; p->theory_num=sum; p=p->next; } return 0; } ////////////////////////////////////////////////////////////////// float worker::tax_num() { if(listcount==0) { cout<<"错误:当前的列表为空!"<<endl; return -1; } worker_inf *p=head; while(p) { float s; s=p->theory_num; if(s<=800) p->theory_num=0; else if(s<=2000) p->theory_num=(s-800)*0.05; else if(s<=5000) p->theory_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(listcount==0) { cout<<"错误:当前的列表为空!"<<endl; } float sum; worker_inf *p=head; while(p) { sum=0; for(i=0;i<4;i++) sum+=p->pay[i]; p->reduce_num=p->tax+sum; p=p->next; } return 0; } ///////////////////////////////////////////////////////////////////////// float worker::practicenumber() { if(listcount()==0) { cout<<"错误:当前的列表为空!"<<endl; return -1; } worker_inf *p=head; while(p) { float a,b; a=p->theory_num; b=p->reduce_num; p->practice_num=a-b; p=p->next; } return 0; } //////////////////////////////////////////////////////////////////////////// worker worker; //定义全局变量 int menu() { int select=-1; cout<<"*****************主菜单***********************"<<endl<<endl; cout<<"1.添加职工信息;"<<endl<<endl; cout<<"2.删除职工信息;"<<endl<<endl; cout<<"3.修改职工的工资信息;"<<endl<<endl; cout<<"4.按职工编号查找记录;"<<endl<<endl; cout<<"5.列出所有记录;"<<endl<<endl; cout<<"6.从数据文件导入当月工资信息;"<<endl<<endl; cout<<"7.将当月工资信息导出到磁盘文件;"<<endl<<endl; cout<<"0.安全退出系统;"<<endl<<endl; cout<<"[请选择(输入相应的数字)]:"; cin>>select; return select; } ///////////////////////////////////////////////////////////////////////////// char exit() { char s; cout<<"确定要退出程序吗?[Y/N]:"; cin>>s; return s; } ////////////////////////////////////////////////////////////////////////////// void input(int *month,int*code,string *name,float get[4],float pay[4]) { cout<<"请输入月份 编号 姓名 基本工资 津贴 房帖 交通补贴 房租 储蓄 交通费 会费:"<<endl; cin>>*month; cin>>*code; if(*code==-1)return; cin>>*name>>get[0]>>get[1]>>get[2]>>get[3]>>pay[0]>>pay[1]>>pay[2]>>pay[3]; return; } /////////////////////////////////////////////////////////////////////////////// void addnew() { int month=0,code=0;float get[4]={0},pay[4]={0}; string name=""; cout<<endl<<"当输入的职工编号为-1时表示输入结束。"<<endl; 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; cout<<endl<<"当输入的编号为-1时表示结束输入."<<endl; do { cout<<"请输入要查找的职工的编号:"; cin>>code; if(code==-1)continue; worker.search(code); }while(code!=-1); return; } ///////////////////////////////////////////////////////////////////////////////// void dodelete() { cout<<endl<<"当输入的编号为-1时表示输入结束."<<endl; int code; do { cout<<"请输入要删除的职工的编号:"; cin>>code; if(code==-1)continue; worker.removeitem(code); } while(code!=-1); return; } /////////////////////////////////////////////////////////////////////////////////// void domodify() { int code; cout<<"当输入职工编号为-1时表示结束修改"<<endl; while(1){ cout<<"请输入所需修改职工编号"; cin>>code; if(code==-1)return; else worker.changeitem(code); } return; } /////////////////////////////////////////////////////////////////////////////////// void SaveFilethism() { worker_inf *p; char name[20]; fstream iofile; int i=0; iofile.open("Worker_5th.dat",ios::out|ios::binary); if(!iofile) { cerr<<"open error!"<<endl; abort(); } p=worker.get_head(); while(p) { p->name.copy(name,20,0); name[p->name.length()]=0; iofile.write((char *) &p->code,sizeof(int)); iofile.write((char *) &p->month,sizeof(int)); iofile.write((char *) name,20); for(int i=0;i<4;i++) { iofile.write((char *) &p->get[i],sizeof(float)); } for(int j=0;j<4;j++) { iofile.write((char *) &p->pay[j],sizeof(float)); } p=p->next; } iofile.close(); cout<<"成功将工资信息存入文件"<<endl; } //////////////////////////////////////////////////////////////////////// void Loadfilethism() { int month,code; char name[20]=""; float get[4],pay[4]; fstream iofile; int i=0; iofile.open("Worker_5th.dat",ios::in|ios::binary); if(!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;i<4;i++) { iofile.read((char *) &get[i],sizeof(float)); } for(int j=0;j<4;j++) { iofile.read((char *) &pay[j],sizeof(float)); } worker.additem(code,month,name,get,pay); } worker.tax_num(); worker.theorynumber(); worker.reducenumber(); worker.practicenumber(); iofile.close(); cout<<"成功导入工资信息"<<endl; } } ///////////////
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服