武理课设员工工资信息管理的设计与实现.docx
《武理课设员工工资信息管理的设计与实现.docx》由会员分享,可在线阅读,更多相关《武理课设员工工资信息管理的设计与实现.docx(32页珍藏版)》请在冰豆网上搜索。
武理课设员工工资信息管理的设计与实现
学号:
基础强化
题目
员工工资信息管理的设计与实现
学院
计算机科学与技术学院
专业
计算机科学与技术专业
班级
姓名
指导教师
2012
年
07
月
04
日
计算机基础强化训练任务书
学生姓名:
专业班级:
指导教师:
工作单位:
计算机科学与技术学院
题目:
员工工资信息管理的设计与实现
初始条件:
理论:
学完计算机基础知识,掌握C/C++语言编程基础和VC开发平台的使用。
实践:
计算机科学系实验中心提供计算机及软件开发环境。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)系统需求分析,得到系统的数据需求和功能需求,分析结果用表格形式记录。
(2)系统设计,包括内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。
要求内存数据用链表组织,数据文件用文本文件,用户界面用字符界面,枚举量用枚举类型表示。
至少实现数据记录的增加、修改、删除、查询及相应结果的显示,查询应能按不同数据项进行。
(3)编制好程序后,设计若干测试用例,上机测试并通过所设计的程序系统。
(4)设计报告按格式要求书写。
设计报告书正文的内容应包括:
1.系统描述,包括问题说明、数据需求和功能需求;
2.系统设计,包括内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计的说明;
3.系统测试,包括测试用例的描述,测试方法和测试结果;
4.设计的特点、不足、收获与体会。
指导教师签名:
2012年6月28日
系主任(或责任教师)签名:
2012年6月29日
目录
摘要
第一章问题描述
1.1企业工资管理系统
1.2开发工具
第二章企业工资管理系统设计分析
2.1应用需求分析
2.2系统功能模块划分
2.3系统功能模块图及函数表
第三章系统功能详细设计
3.1数据结构
3.2主函数及功能界面函数设计
3.3其他函数设计
第四章源程序及测试结果
4.1源程序代码
4.2测试结果
第五章体会与总结
摘要
企业的工资管理是公司管理的一个重要内容。
随着企业人员数量增加,企业的工资管理工作也变得越来越复杂。
工资管理既涉及到企业劳动人事的管理,同时也是企业财务管理的重要组成部分。
工资管理需要和人事管理相联系,同时连接员工考勤和医疗保险等等,来生成企业每个职工的基本工资、补贴、奖金、实际发放工资等。
资金是企业生存的主要元素,资金的流动影响到企业的整体运作,企业员工的工资是企业资金管理的一个重要的组成部分。
早期的工资统计和发放都是使用人工方式处理纸质材料,不仅花费财务人员大量的时间且不易保存,往往由于个人的因素抄写不慎或计算疏忽,出现工资发放错误的现象。
早期工资管理多采取纸质材料和具有较强的时间限制。
基于以上原因,企业工资管理系统使用电脑安全验证、文件数据保存、快速计算、全面统计,实现工资管理的系统化、规范化、自动化。
企业员工工资管理系统是典型的信息管理系统(MIS),程序开发工具采用微软的VC6.0,它是一种面向对象的开发工具,具有组件丰富、语言简单、功能强大的优点。
此企业工资管理系统极大提高了工作效率,节省了人力和物力,最终满足企业财务管理、员工工资发放的需要,同时也成为现代化企业管理的标志。
关键词:
对数据的操作(查询、增加、修改、删除)
一.问题描述
1.1企业工资管理系统
企业工资管理是一项琐碎、复杂而又十分细致的工作,一般不允许发生差错。
最初的工资统计和发放都是使用人工方式处理,工作量大的时候,出现错误的机率也随之升高,不仅花费财务人员大量的时间,而且往往由于抄写不慎,或者由于计算的疏忽,出现工资发放错误的现象。
同时工资的发放具有较强的时间限制,必须严格按照单位规定的时间完成计算和发放工作。
正是企业工资管理的这种重复性、规律性、时间性,使得企业工资管理计算机化成为可能。
企业工资管理系统就是使用电脑代替大量的人工统计和计算,完成众多企业工资信息的处理,同时使用电脑还可以安全地、完整地保存大量的企业工资记录。
1.2开发工具简介
微软公司的VisualC++6.0是Windows应用程序开发工具,是目前最为广泛的、易学易用的面向对象的开发工具。
VisualC++提供了大量的控件,这些控件可用于设计界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效的提高了应用程序的运行效率和可靠性。
因此,本系统使用MSVisualC++6.0开发。
二.企业工资管理系统设计分析
2.1应用需求分析
需求分析的过程可以说是一个对具体问题的反复理解和抽象的过程。
理解就是对现实问题的理解,要弄清楚究竟需要解决什么问题。
抽象就是除去问题的表面,提取问题的本质,建立问题的逻辑模型,以便于以后阶段的系统的设计实现。
需求分析阶段是软件产品生存命期中的一个重要阶段,其根本任务是确定用户对软件系统的需求。
所谓需求是指用户对软件的功能和性能的要求,就是用户希望软件能什么事情,完成什么样的功能,达到什么性能。
通常需求分为两种类型:
一种是功能性需求,一种是非功能性需求,这一点也需要有一种清楚的认识。
软件需求一般包含三个层次—业务需求、用户需求和功能需求,还包括非功能需求。
业务需求:
反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明。
用户需求:
描述了用户使用产品必须要完成的任务和具备的功能,功能需求:
定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足其业务需求。
企业员工工资管理系统就是要解决中小型企业的管理需求。
在现实生活中,一个企业的工资发放就是企业的资金管理的一部分,它涉及到企业的资金周转和工作进度。
只有在及时把工资发放到员工手里,企业在员工心中才有更好的信誉度。
计算机系统解决的问题,也就是对数据的处理要求,这是管理系统最主要的需求。
其中包括性能要求,可靠性要求等等。
2.2系统功能模块划分
开发这个系统的目的就是帮助企业的财务主管部门提高工作效率,实现企业工资信息管理的系统化、规范化和自动化。
能够和人事管理系统、考勤管理系统相结合,真正实现企业高效、科学、现代化的员工管理。
系统最终实现的主要功能如下。
企业员工工资信息设置部分包括:
1、设置员工姓名;
2、设置员工的工资;
企业工资信息管理部分包括:
1、添加工资记录
2、显示工资记录
3、根据姓名查询工资数据
4、根据姓名删除工资数据
5、根据姓名修改工资数据
0、退出系统
2.3系统功能模块图
功能函数设计表
函数名
调用参数
返回参数
函数功能
CreateList()
无
LinkListL
创建员工信息链表
xiugai()
LinkListL
LinkListL
修改员工信息
Insert()
LinkListL,*P
LinkListL
添加员工信息
chazhao()
LinkListL
ListNodeP
查找员工信息
Sort()
LinkListL
无
员工信息排序
tj()
LinkListL
无
员工信息统计
ruku()
LinkListL
无
保存员工信息
三.系统功能详细设计
3.1工资信息数据结构设计
我采用了把所有数据都设计在数据结构里。
包括员工姓名、工资。
把数据结构设计做了相应调整,减少管理员的数据输入和处理。
同时众观各种事例代码都把大部分数据成员定义为字符型。
这样的在编程上是有很大便宜,但是在功能实现上有很大局限性。
在此数据结构中的成员根据需要设置数据类型。
3.2主函数设计及功能界面设计
主函数是程序运行的主干,其他的功能函数都通过主函数对它进行调用。
工资管理系统主函数设计。
一个软件系统的功能界面是系统运行的可见主窗口,也是管理员进行各项操作的路径。
从功能界面可以看到,首先有一个说明信息选项,这主要是让使用者更快熟悉和了解系统功能的使用。
这样就使得系统管理更快更直接,使得管理员了解系统的缺陷、不足和限制。
这样就减少工作中的失误和避免在管理过程中因错误操作而带来的损失。
主函数详细及功能设计代码如下:
voidmain()
{
clistm;clist*c;c=&m;
intchioe1;
m.getlisthead();
mn(c);
while
(1)
{
cout<<"*******************************************************************************\n";
cout<<"**欢迎使用工资管理系统**\n\n";
cout<<"1.添加工资记录\n\n";
cout<<"2.显示工资记录\n\n";
cout<<"3.根据姓名查询工资数据\n\n";
cout<<"4.根据姓名删除工资数据\n\n";
cout<<"5.根据姓名修改工资数据\n\n";
cout<<"0.退出系统\n\n";
cout<<"*******************************************************************************"<cout<<"请输入您要执行的操作";
cin>>chioe1;
while(chioe1<0||chioe1>5){
cout<<"您输入的代码有误,请重新输入\n";
cin>>chioe1;
continue;
}
switch(chioe1){
case1:
system("cls");
cout<<"***************************************************************************\n";
m.addnode(m);
break;
case2:
system("cls");
cout<<"***************************************************************************\n";
m.showlist();
break;
case3:
system("cls");
cout<<"***************************************************************************\n";
m.chazhao(c);
break;
case4:
system("cls");
cout<<"***************************************************************************\n";
m.shanchu(c);
break;
case5:
system("cls");
cout<<"***************************************************************************\n";
m.xiugai(c);
break;
case0:
m.ruku(c);
exit(0);
}
}
}
3.3链表的建立设计
链表的建立是初始化员工工资信息,主要是在最初使用系统时候使用,其中包含建立员工工资基本信息建立和应付工资的相应计算。
在最初设计中,链表的建立和工资信息添加采用尾插法,让编程变得很简单。
但是,在查找和员工工资信息显示上也就是无序的,这对管理工作带来很多麻烦。
为此做了进一步的设计,我把链表的建立和链表的有序建立合二为一。
在这个建立链表设计中,由于有序与否的判断使得程序更复杂。
分两种情况考虑,一是初始链表为空,则直接添加结点;二是链表初始不为空时,则需要对编号进行比较。
当编号小于当前编号值,则指针下移。
当编号大于等于当前值,则插到当前位置,即修改前驱和后继结点指针域。
为使得设计优化,将有序判断分化到信息添加模块里面。
3.4工资信息添加设计
链表结点的插入,是要求将一个员工的数据信息按其编号的次序插入有序工资链表的相应位置,以保持工资链表的有序性。
插入结点的基本思想是:
使用两个指针变量和分别指向当前访问过的结点和下一个待访问的结点,循环顺序查找链表,寻找插入结点的位置,其中指向待插入位置的前一个结点。
插入操作是非常简单的。
添加信息就是一个新结点信息和原来链表接点信息比较的一个过程。
当新结点的编号在链表中已经存在,则不在重复添加。
当找到其相应位置,则将其插入到链表中。
3.5工资信息修改设计
员工信息的修改事实上就是纠错,但是在改正错误时,不是重新写入,而是针对其中错误信息进行修改。
为此同样要设计一个选择变量intchoose用来选择要修改的信息部分,同时设定退出条件,在这里采用的是当输入的编号为0时返回上级。
3.6工资信息查询设计
该函数是一个调用函数。
它通过员工的编号和名字分别进行查找。
当调用此函数的时候,它首先根据选择决定员工的查找方式,当查找到员工的记录是,就会通过显示函数显示出来,而当记录里没有此员工的记录时,调用函数就不能起作用,就会提醒用户没有这个人的记录。
3.7工资信息删除设计
该函数的功能和插入比较类似,函数是通过学生的姓名进行查找。
当查找到该员工的记录时就删除该员工记录,没查找到时,就将返回错误信息提示。
3.8工资信息查看设计
清晰的显示文本中所有员工的姓名及工资。
3.9工资信息保存设计
工资信息编辑后,存储到文件中才能长期保存。
在运行程序前就给用户一个提示,如果没有建立对应的保存数据文件,则要求用户建立文件后再运行系统。
如果不建立文件,则说明用户不使用系统就自动退出。
初始文件为kl.txt。
四.源程序及测试结果
4.1源程序代码:
#include
#include
#include
#include
usingnamespacestd;
voidZ(int&chioe2)
{
while(chioe2<0||chioe2>2)
{
cout<<"您输入的代码有误,请重新输入\n";
cin>>chioe2;
continue;}
};
classdate{
private:
charname[20];
doublemoney;
public:
friendclasscnode;
date(){money=0.0;}
voidgb(charname2[20],doublen){strcpy(name,name2);money=n;}
voidtj();
voiddy(charname1[20],intn);
char*ming(){
char*p;p=name;returnp;
};
voidcompare(intn){money=n;}
voidshow();
doubleqian(){returnmoney;}
voidjin();
};
voiddate:
:
jin()
{
ofstreamk;
k.open("kl.txt",ios:
:
app);
char*p1;
p1=strlwr(name);
k<k<k.close();
}
voiddate:
:
tj(){
ofstreamk;
k.open("kl.txt",ios:
:
app);
cin.ignore();
char*p;
cout<<"entername\n";
cin.getline(name,20);
p=strlwr(name);
k<
cout<<"entermoney\n";
cin>>money;
k<k.close();
};
voiddate:
:
show(){
cout<<"name:
"<cout<<"money:
"<cout<<"\n";};
voiddate:
:
dy(charname1[20],intn){
strcpy(name,name1);
money=n;
}
classcnode
{
private:
date*pdate;
cnode*pnext;
public:
cnode*getnextnode(cnode*p){
returnp->pnext;
};
cnode(){pdate=0;pnext=0;}
voidinput(date*psel){pdate=psel;}
voidshownode(){pdate->show();}
date*getdate(cnode*p){returnp->pdate;}
friendclassclist;
};
classclist{
private:
cnode*phead;
public:
clist(){phead=0;}
voidaddnode(clist&m);
voidinput(cnode*p){phead=p->getnextnode(p);};
voidshowlist();
voidgetlisthead();
cnode*fht(){returnphead;}
voidinsert(cnode*);
voidchazhao(clist*q);
voidshanchu(clist*q);
voidxiugai(clist*q);
voidruku(clist*q);};
voidclist:
:
addnode(clist&m)
{
cnode*pnode;
date*psal;intn;
pnode=newcnode;
psal=newdate;
psal->tj();
pnode->input(psal);
m.insert(pnode);
cout<<"continue?
\n1.yes2.no\n";
cin>>n;
while(n==1){
pnode=newcnode;
psal=newdate;
psal->tj();
pnode->input(psal);
insert(pnode);
cout<<"continue?
\n1.yes2.no\n";
cin>>n;
}
system("cls");
};
voidclist:
:
insert(cnode*p1){
cnode*p2;
if(phead==NULL){
phead=p1;
p1->pnext=NULL;}
else{
p2=phead;
while(p2->pnext)
p2=p2->pnext;
p2->pnext=p1;
p1->pnext=NULL;
}
};
voidclist:
:
showlist(){
cnode*p3;
p3=phead;
while(p3){
p3->shownode();
p3=p3->pnext;}
cin.ignore();
cin.ignore();
system("cls");
};
voidclist:
:
getlisthead()//建立链表
{
ifstreamj;
j.open("kl.txt",ios:
:
in);//打开文件
if(!
j){cout<<"错误";
cin.ignore();
exit(0);
}
cnode*p1;
date*p2;
chark[20];
inth;
while(j>>k>>h){
p1=newcnode;
p2=newdate;
p2->dy(k,h);
p1->input(p2);
insert(p1);
}
j.close();
};
voidclist:
:
chazhao(clist*q)//查找
{
cin.ignore();
cnode*p1;
date*p2;
p1=q->fht();
chars[20],*p;
cout<<"请输入姓名";
cin.getline(s,20);
p=strlwr(s);
p2=p1->getdate(p1);while((strcmp(p2->ming(),p)!
=0)&&(p1->getnextnode(p1))!
=NULL){
p1=p1->getnextnode(p1);
p2=p1->getdate(p1);
}
if(p1->getnextnode(p1)==NULL)
if(strcmp(p2->ming(),p)==0)
p2->show();
else
cout<<"无此人工资记录\n";
else
p2->show();
cin.ignore();
system("cls");
};
voidclist:
:
shanchu(clist*q)//删除
{
cin.ignore();
cnode*p1,*p3;
date*p2;
p1=q->fht();
chars[20],*p;
intn;
cout<<"请输入要删除记录的姓名";
cin.getline(s,20);
p=strlwr(s);
p2=p1->getdate(p1);while((strcmp(p2->ming(),p)!
=0)&&(p1->getnextnode(p1))!
=NULL){
p1=p1->getnextnode(p1);
p2=p1->getdate(p1);
}
p3=p1;
if(strcmp(p2->ming(),p)==0){
p1->shownode();
cout<<"\n确认删除?
\n1是2否\n";
cin>>n;
Z(n);
if(n==1)
{
if(p1==q->fht())input(p1);
else
p3=p1->getnextnode(p1);
delete[]p2;
delete[]p1;
cout<<"删除完毕";}
}
else
cout<<"无此人工资记录\n";
cin.ignore();
cin.ignore();
system("cls");
};
voidclist:
:
xiugai(clist*q)//修改
{
cin.ign