当前位置:文档之家› 职工工资管理系统方案

职工工资管理系统方案

《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++程序设计》作者:刘娜娜出版社:北京航天航空大学出版社。

20082、《C++程序设计实用教程【M】》作者:苏仕华出版社:清华大学出版社。

2006目录一、需求分析 (4)二、系统总体设计 (4)三、模块功能实现 (5)四、系统的软硬件环境 (8)五、系统的使用说明 (9)六、结束语............................................ 错误!未定义书签。

附录A:程序源代码................................ 错误!未定义书签。

附录B:程序调试记录 . (9)教师评语 (45)一、需求分析从远古的货币发放到现代的工资发放,公司越来越需要对员工工资进行管理发放和合理存根。

而此套程序就是为方便公司对员工工资管理而设计,其程序操作起来简单、易懂,内容包含有:月份、工人编号、姓名、基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费,而程序会自动计算出员工的个人所得税、应发数、应扣数、实发数等。

其操作功能有:浏览数据、增加数据、修改数据、查询数据、删除数据、存储文件、退出等。

相信此程序会使公司对员工工资的管理和发放带来很大的帮助。

二、系统总体设计冯文宇张丽苹负责模块:浏览数据、增加数据王鑫负责模块:修改数据、储存数据金璐负责模块:修改数据、删除数据三、模块功能实现程序由7个功能模块组成,功能模块图如下添加数据:将职工的发放月份、编号、姓名、基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费输入。

浏览数据:输入职工编号后不但能显示出职工的月份、编号、姓名、基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费,系统还会自动算出其个人所得税、应发工资、应扣工资和实际工资。

修改数据:输入职工编号后可通过代码对基本工资、津贴、房帖、交通补贴、房租、储蓄、交通费、会费进行修改。

增加数据:本功能可容纳大量的数据,对任何大中小企业均适用,仍通过上述信息进行输入储存。

删除数据:输入职工编号后就会将职工的全部资料删除,快捷方便。

储存文件:将输入的职工信息从数据文件中导入当月工资信息,再将当月工资信息导出到磁盘文件.dat中。

退出系统:退出工作界面四、系统的软硬件环境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;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;}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;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;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]>>pa y[2]>>pay[3];return;}///////////////////////////////////////////////////// //////////////////////////void addnew(){int month=0,code=0;float get[4]={0},pay[4]={0};string name="";cout<<endl<<"当输入的职工编号为-1时表示输入结束。

相关主题