企业工资管理系统毕业课程设计.docx
《企业工资管理系统毕业课程设计.docx》由会员分享,可在线阅读,更多相关《企业工资管理系统毕业课程设计.docx(15页珍藏版)》请在冰豆网上搜索。
企业工资管理系统毕业课程设计
广东海洋大学课程设计报告
课程企业工资管理系统
姓名***
院(系)计算机科学与技术
学号
目录
1需求与功能分析1
2系统框架图2
3类的设计与分析2
4非成员函数的设计与分析4
5特色算法分析4
6存在的问题及对策8
7用户手册及测试结果8
7.1用户手册8
7.2测试结果8
8心得体会11
9附:
程序源代码11
1需求与功能分析
在信息技术高速发展的今天,传统的数据统计方式在处理庞大繁杂的信息量时显得力不从心,于是,人们对于运用计算机来辅助和管理工作的需求正在逐步提高。
随着各个企业业务的逐步扩展,企业的员工人数也在迅速增加,由于管理人员水平有限,导致某些员工纪录管理并不完善,特别是繁杂的员工工资管理纪录,不易查询、修改,极易导致错误,而落后的员工管理方法随着社会的日益竞争,必将被淘汰。
由计算机来管理庞大而繁杂的企业员工纪录是非常合适的,不仅查询和修改方便,并且效率高,速度快,完全能够满足现代化企业管理的需要,同时也更利于实现全面办公自动化。
因此开发一套企业员工工资管理系统软件势在必行。
本系统实现五种基本功能:
输入员工工资信息、删除员工工资信息、修改员工工资信息、查找员工工资信息、列出所有员工工资信息。
所以该工资管理系统可以分为5个模块,分别为输入模块、删除模块、修改模块、查找模块、列表模块,每个模块都有其对应的功能以及其设计。
(1)输入模块
输入模块的功能是创建存储职工工资信息的存储系统以及添加某职工的工资信息。
为实现输入的功能,有两个方面的任务:
定义结构体以及建立链表。
(2)删除模块
删除模块的功能是删除某职工的工资信息。
(3)修改模块
修改模块的功能是修改某职工的部分工资信息。
(4)查找模块
查找模块的功能就是输出指定编号职工的工资信息。
(5)列表模块
列表模块的功能是输出当月全体职工的工资信息。
2系统框架图
图1系统框架图
3类的设计与分析
classWorker
{
protected:
Worker_pay*(int,string,int,string,string,string,float,float);创建链表并链表的插入
voidRemoveItem(int);删除函数
voidReplaceItem(int);修改函数
voidListL();遍历函数
voidSearch(int);查找并输出某个员工信息函数
voidReal_wage(float,float);计算函数
voidRecordinfo(int,string,int,string,string,string,float,float,float,float);存储函数
};
表1Worker类说明表
名称
属性
说明
head
数据成员
链表头结点指针
Worker()
成员函数
缺省的构造函数,缺省值为head=NULL
voidDisplay(Worker_pay*)
成员函数
输出函数
Worker_pay*Find(int)
成员函数
查找函数
intListCount()
成员函数
统计员工人数函数
voidAddItem(int,···float,float)
成员函数
创建链表并链表的插入
voidRemoveItem(int)
成员函数
删除函数
voidReplaceItem(int)
成员函数
修改函数
voidListL()
成员函数
遍历函数
voidSearch(int)
成员函数
查找并输出某个员工信息函数
voidReal_wage()
成员函数
计算函数
voidRecoreinfo(int,···,float,float)
成员函数
存储函数
4非成员函数的设计与分析
表2非成员函数说明表
名称
说明
intMenu()
用于显示主菜单
charExit()
用于退出程序
voidInput(int*num,···,float*allowance)
用于输入员工工资信息
voidAddNew()
用于调用成员函数AddItem(int,···float,float)Real_wage()和Recoreinfo(int,···,float,float)
voidDoFind()
用于调用成员函数Search(int)
voidDoDelete()
用于调用成员函数RemoveItem(int)
voidDoMotify()
用于调用成员函数ReplaceItem(int)
voidList()
用于调用成员函数ListL()
intmain()
主函数
5特色算法分析
Worker类中的成员函数voidAddItem(int,···float,float)
(1)功能:
创建存储职工工资信息的存储系统以及添加某职工的工资信息。
算法思路:
先定义一个结构体Worker_pay,通过从表尾插入的方法来建立链表。
首先要先设立一个头指针(;
}
Worker_pay*t=;
}
Worker_pay*p=;
}
6存在的问题及对策
(1)设计初期,先完成初步构思,写出主函数。
然后对主函数所涉及的各个模块进行编程,将各个模块利用指针和链表联系起来。
在环境中进行调试,应一边编译,一边调试,并且要一个模块一个模块的调试。
直至此模块完全没有错误时,在进入下一模块的调试。
不能直接输入全部的代码一次性调,这样错误会很多,并且不易找出和修改。
在完成程序的编译链接后,要用多组数据进行审查,确保做到系统无误。
设计过程中,不应忽视环境提示的警告,有时程序运行不正确与警告也有很大的关系。
这次设计中遇到很多问题都是提示类型不匹配,这时就要认真检查前面的代码,及时改正并且认真仔细,杜绝此类错再次发生。
编写代码时应该少用全局变量,全局变量在编写试看似定义次数少,很方便。
但全局变量出错几率较大,且不易修改,每次修改时都要全面考虑,所以应避免用到。
程序调试中碰到的错误可以使自己学到知识。
养成良好的编程习惯,可以节省很多时间,避免很多不必要的错误。
(2)在编辑完整个程序后,进行调试阶段总是会数显head无定义。
解决办法:
再类的定义是忘记声明指针Worker_pay*0;
Worker_pay*p==0;
while(p)
{
n++;
p=p->next;
}
returnn;
}
*****************************************************
功能:
在链表中查找员工的编号
Worker_pay*Worker:
:
Find(intnum)
{
if(ListCount==0)
{
cout<<"列表为空,请先输入数据!
!
!
"<returnNULL;
}
Worker_pay*p=NULL;
}
returnp;
}
*****************************************************
功能:
创建链表及链表的插入
voidWorker:
:
AddItem(intnum1,stringname1,intage1,stringsex1,stringdepartment1,stringtitle1,floatwage1,floatallowance1)
{
if(!
;
}
Worker_pay*t=;
}
Worker_pay*p=;
}
*****************************************************
功能:
从链表中删除一个结点
voidWorker:
:
RemoveItem(intnum)
{
Worker_pay*t=Find(num);
if(!
t)
return;
Worker_pay*p=;
}
while(p->next!
=t)
p=p->next;
Worker_pay*p1=p->next;
p->next=p1->next;
deletep1;
cout<<"成功删除员工编号为"<"<return;
}
*****************************************************
功能:
修改员工信息
voidWorker:
:
ReplaceItem(intnum)
{
Worker_pay*p=Find(num);
if(!
p)
return;
cout<<"请重新输入相应信息"<cout<<"员工编号:
";
cin>>p->num;
cout<<"员工姓名:
";
cin>>p->name;
cout<<"年龄:
";
cin>>p->age;
cout<<"性别:
";
cin>>p->sex;
cout<<"部门:
";
cin>>p->department;
cout<<"职务:
";
cin>>p->title;
cout<<"工资(元):
";
cin>>p->wage;
cout<<"津贴(元):
";
cin>>p->allowance;
return;
}
*****************************************************
功能:
输出员工信息
voidWorker:
:
Display(Worker_pay*p)
{
cout<num<name<age<sex<department<<title<wage<allowance<tax<real_wage<return;
}
*****************************************************
功能:
遍历链表
voidWorker:
:
ListL()
{
floatsum=0;
floataver=0;
intn=0;
if(ListCount==0)
{
cout<<"当前列表为空,请先输入数据!
"<return;
}
Worker_pay*p=++;
sum+=p->wage;
p=p->next;
}
aver=sumn;
cout<<"员工平均薪水:
"<return;
}
*****************************************************
功能:
查找并输出指定员工信息
voidWorker:
:
Search(intnum)
{
cout<<"Search......"<Worker_pay*p=Find(num);
if(p)
{
cout<<"员工编号为"<"<cout<<"员工编号员工姓名年龄性别部门职务工资津贴个税实发数"<Display(p);
}
cout<return;
}
*****************************************************
功能:
程序内部函数计算的信息例如个人所得税,实发数
voidWorker:
:
Real_wage(floattax,floatreal_wage)
{
if(ListCount()==0)
{
cout<<"当前列表为空,请先输入数据!
"<return;
}
Worker_pay*p=;
}
*****************************************************
功能:
存储员工信息
voidWorker:
:
Recordinfo(intnum1,stringname1,intage1,stringsex1,stringdepartment1,stringtitle1,floatwage1,floatallowance1,floattax1,floatreal_wage1)
{
ofstreamfile1("info1.txt",ios:
:
app);
file1<<"员工编号:
"<"<"<"<"<"<<<"工资(元):
"<"<"<"<file1.close();
}
*****************************************************
*定义一个对象Worker1*
WorkerWorker1;
*****************************************************
*主菜单函数*
intMenu()
{
cout<<"\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\t"<cout<<"\t\t~企业员工工资管理系统\t~"<cout<<"\t\t~*******主菜单*******\t~"<intn=1,select=-1;
cout<<"\t\t~"<cout<<"\t\t~"<cout<<"\t\t~"<cout<<"\t\t~"<cout<<"\t\t~"<cout<<"\t\t~0.退出\t\t\t\t~"<cout<<"\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\t\t"<cout<<"[请选择0—5(输入相应数字)]:
";
cin>>select;
returnselect;
}
*****************************************************
功能:
退出程序
charExit()
{
chars;
cout<<"确定要退出程序吗?
[YN]:
";
cin>>s;
returns;
}
*****************************************************
功能:
输入员工信息
voidInput(int*num,string*name,int*age,string*sex,string*department,string*title,float*wage,float*allowance)
{
cout<<"现在输入员工信息!
"<cout<<"员工编号:
";
cin>>*num;
if(*num==-1)return;
cout<<"员工姓名:
";
cin>>*name;
cout<<"年龄:
";
cin>>*age;
cout<<"性别:
";
cin>>*sex;
cout<<"部门:
";
cin>>*department;
cout<<"职务:
";
cin>>*title;
cout<<"工资(元):
";
cin>>*wage;
cout<<"津贴(元):
";
cin>>*allowance;
return;
}
*****************************************************
功能:
把员工信息插入到链表中
voidAddNew()
{
intnum=0;
stringname;
intage=0;
stringsex;
stringdepartment;
stringtitle;
floatwage=0;
floatallowance=0;
floattax=0;
floatreal_wage=0;
cout<<"当输入的员工编号为-1是表示结束输入"<Input(&num,&name,&age,&sex,&department,&title,&wage,&allowance);
while(num!
=-1)
{
Worker1.AddItem(num,name,age,sex,department,title,wage,allowance);
Worker1.Real_wage(tax,real_wage);
Worker1.Recordinfo(num,name,age,sex,department,title,wage,allowance,tax,real_wage);
Input(&num,&name,&age,&sex,&department,&title,&wage,&allowance);
}
cout<<"员工工资信息已成功存储!
!
!
"<return;
}
*****************************************************
功能:
查找指定员工编号信息
voidDoFind()
{
intnum;
cout<<"当输入的员工编号为-1是表示结束输入"<do{
cout<<"请输入要查找的员工的编号:
";
cin>>num;
if(num==-1)continue;
Worker1.Search(num);
}while(num!
=-1);
return;
}
*****************************************************
功能:
删除指定员工编号信息
voidDoDelete()
{
cout<<"当输入的员工编号为-1是表示结束输入"<intnum;
do
{
cout<<"请输入要删除的员工的编号:
";
cin>>num;
if(num==-1)continue;
Worker1.RemoveItem(num);
cout<<"已成功删除该员工信息!
!
!
"<}while(num!
=-1);
return;
}
*****************************************************
功能:
修改指定员工编号信息
voidDoMotify()
{
cout<<"当输入的员工编号为-1是表示结束输入"<intnum;
do
{
cout<<"请输入要修改的员工的编号:
";
cin>>num;
if(num==-1)continue;
Worker1.ReplaceItem(num);
}while(num!
=-1);
cout<<"已成功修改该员工信息!
!
!
"<return;
}
*****************************************************
功能:
输出全体员工信息
voidList()
{
Worker1.ListL();
}
*****************************************************
*主函数*
intmain()
{
intselect;
chars;
while
(1)
{
select=Menu();
switch(select)
{
case0:
s=Exit();
if(s=='y'||s=='Y')return0;
break;
case1:
AddNew();
break;
case2:
DoDelete();
break;
case3:
DoMotify();
break;
case4:
DoFind();
break;
case5:
List();
break;
default:
cout<<"无效输入!
"<}
}
return0;
}
参考文献
[1]陈天华编.面向对象程序设计与VisualC++6.0教程[M].北京:
清华大学出版社,2006