职工工资管理系统课程设计方案说明文本.docx
《职工工资管理系统课程设计方案说明文本.docx》由会员分享,可在线阅读,更多相关《职工工资管理系统课程设计方案说明文本.docx(38页珍藏版)》请在冰豆网上搜索。
职工工资管理系统课程设计方案说明文本
《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中。
退出系统:
退出工作界面
模块名称
voidprint()
模块说明
定义输出一条指定职工的工资记录,并返回该记录的指针
模块名称
voidadditem()
模块说明
添加一条工资记录表
模块名称
voidremoveitem()
模块说明
删除一条指定职工的工资记录
模块名称
voidchangemonth()
模块说明
修改月份
模块名称
voidchangeitem()
模块说明
修改职工的工资信息
模块名称
voidlist()
模块说明
输出当月全体职工的工资信息
模块名称
voidsearch()
模块说明
输出指定编号职工的工资信息
模块名称
voidinput()
模块说明
输入职工信息
模块名称
voidaddnew()
模块说明
增加记录
模块名称
voiddofind()
模块说明
按职工编号查找
模块名称
voiddodelete()
模块说明
删除职工信息
模块名称
voiddomodify()
模块说明
修改职工信息
模块名称
voidSaveFilethism()
模块说明
将当月工资信息写入文件
模块名称
voidLoadfilethism()
模块说明
读取当月全体职工的工资信息文件
四、系统的软硬件环境
1、软件环境
系统可以运行在WindowsXP/200X等操作系统上。
系统编辑编译环境为VisualC++6.0。
2.硬件环境
本系统在计算中心实验室的计算机上编辑测试。
测试用计算机的主要配置是CPU2.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
#include
#include
#include
#include
usingnamespacestd;
structworker_inf
{
intmonth;
intcode;
stringname;
floatget[4];
floatpay[4];
floattax;
floattheory_num;
floatreduce_num;
floatpractice_num;
worker_inf*next;
};
/////////////////////////////////////////////////////////////////
classworker
{
private:
worker_inf*head;
voidprint(worker_inf*);
worker_inf*find(int);
public:
worker(){head=NULL;}
worker_inf*get_head(){returnhead;}
intlistcount();
voidadditem(intmonth,intcode,stringname,floatget[4],floatpay[4]);
voidremoveitem(int);
intmenu();
voidchangemonth();
voidchangeitem(int);
voidlist();
voidsearch(int);
floattax_num();
floattheorynumber();
floatreducenumber();
floatpracticenumber();
};
//////////////////////////////////////////////////////////////////
intworker:
:
listcount()
{
if(!
head)return0;
worker_inf*p=head;
intn=0;
while(p)
{n++;p=p->next;}
returnn;
}
//////////////////////////////////////////////////////////////////
voidworker:
:
additem(intmonth,intcode,stringname,floatget[4],floatpay[4])
{
if(!
head)
{
head=newworker_inf;
for(inti=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<<"操作失败:
编号为"<"<return;
}
worker_inf*p=head;
while(p->next)p=p->next;
worker_inf*p1=newworker_inf;
p1->code=code;
for(inti=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;
}
////////////////////////////////////////////////////////////////////
voidworker:
:
removeitem(intcode)
{
worker_inf*t=find(code);
if(!
t)return;
worker_inf*p=head;
if(head==t)
{
head=head->next;
deletep;
cout<<"成功删除编号为"<"<return;
}
while(p->next!
=t)p=p->next;
worker_inf*p1=p->next;
p->next=p1->next;
deletep1;
cout<<"成功删除编号为"<"<return;
}
////////////////////////////////////////////////////////////////
intworker:
:
menu()
{
intselect=-1;
cout<<"\t\t\t\t\t\t**************修改菜单**************"<cout<<"1.基本工资"<cout<<"2.津贴"<cout<<"3.房帖"<cout<<"4.交通补贴"<cout<<"5.房租"<cout<<"6.储蓄"<cout<<"7.交通费"<cout<<"8.会费"<cout<<"0.退出修改系统"<cout<<"[请选择(输入相应数字)]:
";
cin>>select;
if(select<0||select>9)
{
cout<<"对不起您输入错误!
请重新输入【0-9】:
"<cin>>select;
}
returnselect;
}
/////////////////////////////////////////////////////////////////
intmenu();
voidworker:
:
changeitem(intcode)
{
worker_inf*p=find(code);
if(!
p){cout<<"不存在职工编号为"<intselect;
while
(1)
{
floatm;
select=menu();
if(select==0){system("cls");break;}
cout<<"请输入修改后的值";
cin>>m;
intn;
if(select<=4){
n=select-1;
p->get[n]=m;}
else{
n=select-5;
p->pay[n]=m;}
tax_num();
theorynumber();
reducenumber();
practicenumber();
cout<<"修改成功"<}
}
////////////////////////////////////////////////////////////////////
voidworker:
:
changemonth()
{
worker_inf*p=head;
while(p)
{
if(p->month==12)p->month=1;
else
p->month++;
p=p->next;
}
}
//////////////////////////////////////////////////////////////////////
voidworker:
:
print(worker_inf*p)
{
cout.precision(0);
cout<month<<"";
cout<code<<"";
cout<name<<"\t";
for(inti=0;i<4;i++)
{cout<:
fixed)<get[i]<<"\t";}
for(intj=0;j<4;j++)
{cout<pay[j]<<"\t";}
cout<tax<<"\t";
cout<theory_num<<"\t";
cout<reduce_num<<"\t";
cout<practice_num<return;
}
///////////////////////////////////////////////////////////////////////
voidworker:
:
list()
{
if(listcount==0)
{
cout<<"错误:
当前的列表为空!
"<return;
}
worker_inf*p=head;
cout<<"共有记录:
"<cout<<"月份\t编号\t姓名\t基本工资\t津贴\t房帖\t交通补贴\t房租\t储蓄\t交通费\t会费\t个人所得税\t应发工资\t应扣工资\t实际工资"<while(p)
{
print(p);
p=p->next;
}
cout<return;
}
/////////////////////////////////////////////////////////////////////////
voidworker:
:
search(intcode)
{
cout<<"searching....."<worker_inf*p=find(code);
if(p)
{
cout<<"月份\t编号\t姓名\t基本工资\t津贴\t房帖\t交通补贴\t房租\t储蓄\t交通费\t会费\t个人所得税\t应发工资\t应扣工资\t实际工资"<print(p);
}
cout<}
//////////////////////////////////////////////////////////////////////////
worker_inf*worker:
:
find(intcode)
{
if(listcount==0)
{
cout<<"错误:
当前列表为空!
"<returnNULL;
}
worker_inf*p=head;
while(p)
{
if(p->code==code)break;
p=p->next;
}
if(!
p)
{
cout<<"错误:
找不到该记录!
\n";
returnNULL;
}
returnp;
}
//////////////////////////////////////////////////////////////////////////
floatworker:
:
theorynumber()
{
inti;
if(listcount()==0)
{
cout<<"错误:
当前的列表为空!
"<return-1;
}
floatsum;
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;
}
return0;
}
//////////////////////////////////////////////////////////////////
floatworker:
:
tax_num()
{
if(listcount==0)
{
cout<<"错误:
当前的列表为空!
"<return-1;
}
worker_inf*p=head;
while(p)
{
floats;
s=p->theory_num;
if(s<=800)
p->theory_num=0;
elseif(s<=2000)p->theory_num=(s-800)*0.05;
elseif(s<=5000)
p->theory_num=(s-2000)*0.1+60;
elsep->theory_num=(s-5000)*0.2+360;
p=p->next;
}
return0;
}
///////////////////////////////////////////////////////////////////////
floatworker:
:
reducenumber()
{
inti;
if(listcount==0)
{
cout<<"错误:
当前的列表为空!
"<}
floatsum;
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;
}
return0;
}
/////////////////////////////////////////////////////////////////////////
floatwork