工资管理系统课程设计用心整理精品资料.docx
《工资管理系统课程设计用心整理精品资料.docx》由会员分享,可在线阅读,更多相关《工资管理系统课程设计用心整理精品资料.docx(31页珍藏版)》请在冰豆网上搜索。
![工资管理系统课程设计用心整理精品资料.docx](https://file1.bdocx.com/fileroot1/2022-11/28/a3ea9ac3-45ee-4bd2-9b90-e429f86e8e2a/a3ea9ac3-45ee-4bd2-9b90-e429f86e8e2a1.gif)
工资管理系统课程设计用心整理精品资料
计算机科学与技术学院
《C高级语言程序设计》
课程设计报告
(2012/2013学年第一学期)
学生姓名:
茹伟
专业班级:
计算机112002班
学生学号:
201120010220
指导教师:
王艳
2012年 12 月 29日
《工资管理系统》的设计与实现
(一)课题的来源和研究意义4
(二)课题的开发环境4
(三)本课题要达到的设计目标5
附录2程序清单-—---—-—-—-—-————--—-——---———-—-——---——--———-—-—--
一目的和要求
(一)课题的来源和研究意义
随着计算机的日益普及和网络的发展,数据库的应用范围越来越广,数据库应用的功能也越来越强,因此编写管理信息系统应用程序也显得尤为重要,在强调管理,强调信息的现代社会中它变得越来越普及。
工资管理是任何企事业单位都需要进行的一项工作,因此,开发制作工资管理系统具有较大的社会现实意义,同时工资管理系统是一切应用系统的典范,它具有一切应用系统的特征,系统结构与现实生活紧密结合,具体直观,具有典范的数据库系统的特性。
工资管理系统主要用于企业内部员工的档案、工资、考勤、评价的管理,便于公司领导掌握人员的动向,及时调整人才的分配,同时也减少了手工操作带来的一些繁琐与不便,使员工情况的记录和统计变得十分简单.这些优点可以极大的提高企业对人事管理的效率。
因此,工资管理系统是企事业信息化、智能化、科学化和正规化不可缺少的管理软件。
(二)课题的开发环境
本系统的设计是在Windowsxp中文版操作系统环境下,使用VisualC++6.0中文版开发成功的。
数据库SQL是其中的重要支持技术,在数据库开发过程中,如何选择数据库管理是一个重要的问题,目前,数据库产品较多,每种产品都具有各自的特点和适用范围,因此,在选择数据库时,应考虑数据库应用的特点及适用范围,本系统选用的数据库语言介绍如下:
C++语言。
C++是一种使用非常广泛的计算机编程语言.C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。
它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。
C++引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。
很多优秀的程序框架包括MFC、QT、wxWidgets就是使用的C++。
(三)本课题要达到的设计目标
工资管理信息系统的开发目标是:
克服现在工资管理中存在的人工管理,统计与查询单一、管理效率低下等问题;能科学有效的管理工资,方便地查询和统计人员、工资等情况,对所需要的数据以表格形式显示,以报表形式打印,并为将来进一步扩充和发展工资管理系统奠定基础.
二课程设计任务内容
(一)系统功能分析
系统开发的总体任务是要实现企业人事信息关系的系统化,规范化和自动化.
系统功能分析是在系统开发的总体任务的基础之上完成的。
工资管理系统主要有以下几项功能:
1.员工档案的管理:
包括员工基本信息,姓名和工号。
2.员工工资的管理:
包括工资的添加,工资报表的查询,修改和删除.
3.月份工资的管理:
包括添加某月某员工的工资和查询某月所有员工的工资信息。
4.员工补贴的管理:
包括津贴,房贴和交通费的输入,计算和修改。
5.员工扣除的管理:
包括房租,会费和税务的输入,修改和计算。
6.计算:
对工资各项数据进行汇总计算。
7。
保存信息和退出系统。
8.管理员以及其它功能模块。
(二)功能模块图
根据系统功能的要求,可以将系统分解成几个功能模块来分别设计,功能模块如图2—1所示
图2-1功能模块图
三、详细设计任务内容
(一)系统功能和流程
数据库的设计是指对于一个给定的应用环境,构造最有效的数据库模式,建立数据及应用系统,实质能够有效地存储数据,满足用户的需求,数据库设计是在数据库管理系统支持下进行的。
根据功能模块图,可以列出以下数据项和数据结构:
员工信息:
工号,姓名。
工资管理:
工号,月份,姓名,底薪,津贴,房贴,交通费,应发工资,实发工资.
员工扣除管理:
工号,月份,姓名,房租,会费,税务,应扣数。
管理员:
编号,用户名,密码。
(二)程序流程图
得到上面的数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。
这些实体包含各种具体信息,通过相互之间的作用形成数据的流动。
根据上面的设计规划出的实体有:
员工基本信息实体,员工考勤信息实体,员工工作评价信息实体,员工工资信息实体,人事变动实体,部门管理实体.
根据实体之间的联系得出程序流程图如图3—1所示。
否
是
是
否
否
是
图3-1程序流程图
(三)数据库逻辑结构设计及函数功能表
根据实体间联系模型的需求分析,本系统需要设计工资管理,考勤管理,员工信息3个表来管理员工数据。
具体数据表的设计如下面的表格所示。
表3▪1工资管理表
字段名
数据类型
长度
是否为空
说明
gzid
Varchar
10
Notnull
工号
gzname
Varchar
8
Notnull
姓名
dixin
Money
8
Notnull
底薪
fangtie
Money
8
null
房贴
jiaotongfei
Money
8
null
交通费
fangzu
Money
8
null
房租
huifei
Money
8
null
会费
suodeshui
Money
8
null
所得税
表3▪2员工档案信息表
字段名
数据类型
长度
是否为空
说明
ygid
Varchar
10
Notnull
工号
ygname
Varchar
20
Notnull
姓名
name
char
20
Notnull
管理员用户名
password
char
8
Notnull
密码
表3▪3函数功能表
Add()
添加信息
Delete()
删除信息
Search(charnu[])
根据职工号查找
ReadFile()
从文件中读取信息
WriteFile()
向文件中写入信息
Display()
在屏幕中输出全部信息
Print()
输出表头
Print2()
按月份输出所有职工的工资信息
Print1(charnu[])
按职工编号输出所有职工的工资信息,带有返回值
Change()
修改信息
四、系统详细设计与模块的具体实现
(一)系统的主界面
在登陆主界面之前,首先登记用户管理窗体:
否
是是
否
图4-1登陆流程图
图4—2管理员登陆界面
(二)员工信息管理模块
登入后界面如图:
图4-3主菜单图
可以选择0--9并Enter来进行操作;选择1可以进行添加职工信息,输入职工编号和姓名来编入职工。
如果输入的职工编号重复,则不能输入该信息,如图:
图4-4员工重复效果图
选择2可以查看所有职工的信息和编号。
选择3可以删除职工信息。
(三)员工工资管理模块
选择4可以添加工资信息.如图:
图4-5工资信息输入图
依次输入编号,月份,基本工资,津贴,房贴,交通费,房租和会费,Enter后可以添加信息了。
选择7就可以查看刚刚输入的工资信息了,如图;实际发放工资也计算显示了:
图4-6职工工资图
选择5可以修改信息,比如基础工资,津贴,房贴等数据的改动都可以修改。
选择6则可以删除工资信息,可以选择某个月份,删除该月的工资信息.
选择8则是输出显示某个月的全部职工工资信息,如图:
图4—7工资信息输出图
(四)保存退出和软件测试
选择9可以保存信息,刚添加的信息需要保存,如果不保存,则退出系统后该信息就会消失。
选择0则是退出系统。
图4-8退出系统图
4。
4。
1确认测试
确认测试是根据软件需求说明书中定义的全部功能、性能要求以及确认测试计划来测试整个软件系统是否达到了要求,确认测试是软件产品实际应用之前一道完整又系统的检验,是软件质量保证的最后一个环节.
4.4.2测试结果分析
测试结果表明,由测试用例基本上能产生预期的结果,本系统具有很好的抗错能力.由于在设计过程中对数据的输入都进行了合法性检查,从而保证的数据的正确性。
对于在测试过程中发现的错误,通过利用归纳、演绎和回朔等技术有效地排除了错误,从根本上保证了系统的质量。
五、心得与体会
经过四周的C++课程实践,我对C++语言设计有了一个更深,更全面的了解,尤其体会到了C++面向对象操作对简化程序的重要作用。
下面是我的几点体会:
①刚拿到课题时,我一脸的茫然,看到如此庞大的工程,不知如何下手。
这个工资管理系统中职工子信息竟然包含15条,以前从来没有遇到过如此多的变量.和同学讨论很久好,我发现其实可以化繁为简的,信息中15条不一定全都要,因为其中本身就有重复的,例如津贴和补贴。
并且可以有一个pay的数组来处理数据.所以做任何事情都必须要开动脑筋,积极思考,有时还要学会化繁为简。
②在编程时条理清晰是至关重要的.主函数,函数,成员函数之间的层次关系,调用关系一定要有一个全面的把握,尤其要体会类的封装性。
另外很重要的一点就是一定要对链表的五种操作熟练的掌握。
③在编译,链接,调试的过程中一定要有耐心。
因为一个程序中会有很多小的错误,甚至有的问题要几个小时才能解决。
遇到问题,一定要全面分析,有时候还要向同学请教。
总得来说,编程时极需要耐心的.
还有程序里虽然可以运行了,但是应该有的功能也没有,比如说输入职工信息时,输入的职工工号和原来储存的信息里有的工号不能重复,避免输入错误,照成不必要的损失。
总之,C++课程设计实践为我们提供了一个综合运用所学知识,解决实际问题的平台,增强了我们实践动手的能力和工程实践能力,并且锻炼和培养了我们的自学能力,让我们对C++有了一个更全面的了解。
附录1参考文献
谭浩强编著,C++程序设计,清华大学出版社,2004
陈文宇,张松梅编著,C++语言教程,电子科技大学出版社,2004
附录2程序清单
源代码如下:
#include#include〈stdlib.h〉
#include〈conio。
h>
#include
#include
intj;
#include〈iomanip>
usingnamespacestd;
classGZ;
structzhigong
{charnumber[10];
charname[15];
};
structZhigong
{zhigongzg;
Zhigong*next;
};
classZG//定义一个职工类
{
Zhigong*head;//头指针
Zhigong*p;//当前指针
public:
ZG(){head=p=NULL;};
voidAdd();
voidDelete();//删除职工
intSearch(charnu[]);//根据职工号查找
voidReadFile();//从文件中读取职工信息
voidWriteFile();//向文件写入职工信息
voidDisplay();//在屏幕中输出全部职工信息
voidPrint(charnu[]);
voidPrint();
friendclassGZ;
};
voidZG:
:
Add()
{
p=newZhigong;
cout<<”\t请输入职工编号:
";cin>〉p—〉zg.number;
if(Search(p—>zg。
number)==0)
{cout〈〈”\t请输入职工姓名:
";cin〉〉p-〉zg。
name;
p->next=head;//头插入建链表
head=p;
cout〈〈endl;
}
else
cout<<"\n\t已经存在该职工,不能重复添加!
"〈}
////////////////////////
voidZG:
:
Delete()
{
if(head!
=NULL)
{intn=0;
Zhigong*q=head;
Zhigong*q1=head,*q2=head-〉next;
chargh[10];
cout〈〈”\t请输入您要删除的职工编号:
";
cin>>gh;
while(q!
=NULL)
{n++;
if(strcmp(q-〉zg。
number,gh)==0)break;
q=q—>next;
}
if(q==NULL)cout<<"不存在该职工!
”〈〈endl;
else
{if(n==1)head=head-〉next;
else
{for(inti=1;i{q1=q2;
q2=q2—〉next;
}
if(q2==NULL)
q1=NULL;
else
q1—〉next=q2->next;
}
cout<<"删除成功!
"<}}
}
///////////////
intZG:
:
Search(charnu[])
{Zhigong*q=head;
while(q!
=NULL)
{if(strcmp(q—>zg。
number,nu)==0)break;
q=q—>next;
}
if(q==NULL)return0;
elsereturn1;
}
///////////////////
voidZG:
:
ReadFile()
{p=newZhigong;
ifstreamfip("职工信息。
dat",ios:
:
in|ios:
:
binary);
if(!
fip)cout〈〈"未创建该文件!
”〈else
while(fip。
read((char*)&p->zg,sizeof(p—>zg)))
{p—〉next=head;
head=p;
p=newZhigong;
}
fip。
close();
deletep;
}
////////////////////
voidZG:
:
WriteFile()
{Zhigong*s=head;
ofstreamfop;
fop.open("职工信息。
dat",ios:
:
binary|ios:
:
trunc);
if(!
fop)
{cout〈<”职工信息。
dat无法打开!
”〈〈endl;
abort();
}
while(s)
{while(fop.write((char*)&s—>zg,sizeof(s->zg)))
{s=s—>next;
}
}
fop.close();
}
///////////////////
voidZG:
:
Print()
{cout〈〈"\t\t"〈〈setiosflags(ios:
:
left)<〈setw(10)〈<"职工编号”<:
left)〈}
voidZG:
:
Print(charnu[])
{Zhigong*q=head;
while(q!
=NULL)
{if(strcmp(q—>zg.number,nu)==0)break;
q=q—〉next;
}
if(q!
=NULL)
{Print();
cout〈〈"\t\t”<〈setiosflags(ios:
:
left)<:
left)<〈setw(15)〈〈q—〉zg。
name〈}
else
cout<<”职工不存在”〈}
/////////////////////////////
voidZG:
:
Display()
{if(head==NULL)
cout〈<"没有职工信息!
\n\n”;
else
{Zhigong*k=head;
Print();
while(k)
{cout<〈"\t\t"<〈setiosflags(ios:
:
left)<zg。
number〈〈setiosflags(ios:
:
left)〈〈setw(15)<〈k—〉zg。
name<〈endl;
k=k-〉next;
}
}
}
/////////////////////////////////////////////////////////
structgongzi
{charmonth[7];
charnum[10];
floatdixin;
floatjintie;
floatfangtie;
floatjiaotongfei;
floatfangzhu;
floathuifei;
floatyingfa;
floatsuodesui;
floatyingkou;
floatshifa;
};
structGongzi
{gongzigz;
Gongzi*next;
};
classGZ//定义一个职工类
{
Gongzi*head;//头指针
Gongzi*p;//当前指针
public:
GZ(){head=p=NULL;};
voidAdd();
voidDelete();//删除
voidChange();
voidReadFile();//从文件中读取职工信息
voidWriteFile();//向文件写入职工信息
voidPrint1();//按职工编号输出所有职工的工资信息
intPrint1(charnu[]);//按职工编号输出所有职工的工资信息,带有返回值
voidPrint2();//按月份输出所有职工的工资信息
voidPrint();//输出表头
};
voidGZ:
:
Add()
{ZGA;
A.ReadFile();
p=newGongzi;
cout<〈"职工编号:
";cin〉>p->gz。
num;
if(A.Search(p-〉gz.num)==1)
{cout<<”月份:
";cin>〉p—>gz。
month;
cout<<"基本工资:
”;cin>〉p—>gz.dixin;
cout<<"津贴:
”;cin>>p->gz。
jintie;
cout〈〈”房贴:
”;cin〉〉p->gz.fangtie;
cout<<"交通费:
";cin〉〉p-〉gz.jiaotongfei;
cout〈〈"房租:
";cin〉>p—>gz.fangzhu;
cout<<”会费:
”;cin〉>p-〉gz。
huifei;
p—>gz.yingfa=p—〉gz。
dixin+p-〉gz.jintie+p->gz。
fangtie+p—>gz.jiaotongfei;
if(p—>gz。
yingfa<=2000)p->gz。
suodesui=0;
else
p-〉gz。
suodesui=(p-〉gz.yingfa-2000)*0。
2;
p—〉gz。
yingkou=p->gz。
fangzhu+p->gz。
huifei+p->gz。
suodesui;
p-〉gz.shifa=p—〉gz。
yingfa-p->gz.yingkou;
p->next=head;//头插入建链表
head=p;
}
elsecout<〈"没有该职工,不能添加工资信息!
"<}
voidGZ:
:
Print()
{cout〈〈setiosflags(ios:
:
left)<:
left)〈〈setw(9)<<”职工编号”
<:
left)〈:
left)<〈setw(5)<〈”津贴"<〈setiosflags(ios:
:
left)<<:
left)<:
left)〈〈setw(7)<<”应发数”〈〈setiosflags(ios:
:
left)<<<"房租”<〈setiosflags(ios:
:
left)<〈setw(5)〈<”会费"〈〈setiosflags(ios:
:
left)<:
left)<〈setw(7)
<<"应扣数"〈:
left)〈〈setw(7)<〈"实发数"<}
////////////////////////////////////////////////////
voidGZ:
:
Print1()
{intn=0;
charnu[10];
cout〈〈”\n\n\t\t请输入职工编号:
”;
cin〉〉nu;
if(head==NULL)
cout<<”\n\n\t\t没有工资信息!
\n\n”;
else{p=head;
while(p)
{if(strcmp(p—>gz。
num,nu)==0)n++;
p=p—〉next;
}
}
if(n!
=0)
{p=head;
Print();
while(p)
{if(strcmp(p-〉gz.num,nu)==0)
cout<〈setiosflags(ios:
:
left)〈〈setw(7)<
:
left)<〈setw(9)<〈p->gz.num〈:
left)〈〈setw(7)<〈p—>gz.dixin
<〈setiosflags(ios:
:
left)<〈setw(5)〈〈p->gz。
jintie<:
left)<〈setw(5)<〈p->gz。
fangtie
〈:
left)<〈setw(7)<
gz.jiaotongfei〈〈setiosflags(ios:
:
left)〈yingfa<:
left)<〈setw(5)
<