某企业职工工资管理系统2.docx
《某企业职工工资管理系统2.docx》由会员分享,可在线阅读,更多相关《某企业职工工资管理系统2.docx(28页珍藏版)》请在冰豆网上搜索。
某企业职工工资管理系统2
某企业职工工资管理系统
(2)
目录
摘要1
1.绪论1
2.系统分析1
2.1功能需求1
2.2数据需求1
2.3性能需求2
3.总体设计2
3.1功能模块设计2
3.2系统设计方案2
4.详细设计2
4.1输入职工数据函数2
4.2某职工信息查询函数3
4.3求工资的平均值4
4.4删除职工信息信息函数5
5.调试与测试9
5.1调试9
5.2测试10
6.结论10
结束语10
参考文献11
附录1-用户手册11
附录2-源程序13
摘要
企业职工工资管理系统是一个企事业单位不可缺少的部分,公司可以利用这套程序进行职工工资的各种信息管理,也方便查询修改职工工资的各项信息,可以提高管理工作的效率。
本系统使用C语言作为开发工具的,开发职工工资管理系统,实现了录入职工工资信息,按主要数据项查询职工信息,并对职工求平均工资等功能。
本文从分析课题的题目背景、题目意义、题目要求等出发,分别从需求分析、总体设计、详细设计、测试等各个方面详细介绍了系统的设计与实现过程,最后对系统的完成情况进行了总结。
关键词:
职工工资管理;查询;平均工资;C语言
1.绪论
随着科技的发展,愈来愈多的公司选择了运用职工工资管理程序来管理职工工资的各项信息。
职工工资管理程序是一个企事业单位不可缺少的部分,公司可以利用这套程序进行职工工资的各种信息管理,也方便查询修改职工工资的各项信息,可以提高管理工作的效率和简化管理工作的程序。
有利的为公司节省了运作成本,优化资源利用率,这也正是编写本程序的目的所在。
根据课程设计任务书要求,本系统开发主要完成以下功能和性能。
(1)录入职工信息并保存到文件中;
(2)能够按主要数据项查询某职工信息;
(3)对职工求平均工资;
2.系统分析
2.1功能需求
根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。
经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一个函数,他们的功能分别是:
录入职工信息函数(suru),查询职工数据函数(chaxun),求职工平均工资(pingjun),职工信息删除(deleteInfo),主函数(main)。
2.2数据需求
1、录入职工信息函数
主要实现程序最初运行时员工数据的录入;每一个员工记录都包含工号、姓名、工资,在程序当中,将员工记录类型定义为结构体类型,添加以及追加的员工信息直接写入worker.dat文件中,其他函数每次对员工记录的访问,其数据来源都是worker.dat文件,这样做不但可以保证员工数据的一致性,而且可以对员工数据进行永久保存,保证每次运行程序都可以采用原来的数据。
2、职工的信息查询
目的为了实现对已录入职工信息的查询
3、企业职工平均工资的计算和显示
主要是为了对企业的职工平均工资进行统计
4、职工信息的删除
目的是为了实现对已录入职工改动或者调解而进行的整理
5、主函数
实现的是程序界面的设计和各功能函数的调用;
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
2.3性能需求
在运行本程序时只要按照正确的操作方法不会出现无法运行的情况,系统稳定性好,安全,可靠。
3.总体设计
3.1功能模块设计
本程序主要由四个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,增加新职工数据函数和某职工信息项的查询是程序中较为核心的部分,下面分别进行说明。
4.详细设计
1、输入职工数据函数
该函数的核心内容是输入员工信息,保存到结构体中,并调用suru()函数。
其主要核心思想是:
建立一个只写文件,把职工的数据存写在该文件中。
具体程序段如下:
suru()
{
inti,n;
FILE*fp;/定义文件指针/
if((fp=fopen("worker.dat","wb"))==NULL)/判断文件是否能打开/
{
printf("文件打开失败");
exit(0);
}
printf("请输入要录入的员工数量,按回车键确认:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("\n请输入第%d个员工的编号、姓名、工资,并按回车键确认:
\n",i);
scanf("%d%s%f",&wor[i-1].num,&wor[i-1].name,&wor[i-1].gongzi);/输入数据到各数组中/
if((fwrite(&wor[i-1],sizeof(structworker),1,fp))!
=1)
printf("文件保存失败!
\n");
}
fclose(fp);/关闭打开的文件/
return(n);
}
2.某职工信息查询函数
该函数的核心是实现查找职工的信息并显示,在主函数中被调用。
voidnamecheck()
{
char*p1,name[20];/定义一个指针变量和一个数组/
inti,j=0;
intcount1=0,count2=0;
printf("请输入姓名:
");
p1=name;
scanf("%s",p1);
for(i=0;i{
count1=0;
j=0;
do
{
if(name[j]!
=wor[i].name[j])
count1=1;
j++;
}
while(name[j-1]!
=0);
if(count1==0)
{
printf("number:
%d\n",wor[i].num);/输入职工的编号/
printf("name:
%s\n",wor[i].name);/输入职工的姓名/
printf("gongzi:
%f\n",wor[i].gongzi);/输入职工的工资/
printf("\n");
count2++;
}
}
if(count2==0)
printf("没有你要查询职工的信息!
");
}
voidnumcheck()
{
intcount=0,p,m;
printf("请输入编号:
");
scanf("%d",&p);
for(m=0;m{
if(wor[m].num==p)/判断输入的职工编号是否存在/
{
printf("number:
%d\n",wor[m].num);
printf("name:
%s\n",wor[m].name);
printf("gongzi:
%f\n",wor[m].gongzi);
printf("\n");
count++;
}
}
if(count==0)
printf("没有你要查询职工的信息!
");
}
voidchaxun()
{
intk;
printf("按要求输入信息:
\n\n");
printf("1.根据编号查询\n\n");
printf("2.根据姓名查询\n\n");
scanf("%d",&k);
switch(k)
{
case1:
numcheck();break;
case2:
namecheck();break;
default:
printf("\n输入错误!
");
}
}
}
3、求工资的平均值
该函数的核心是实现查找职工的信息并累加后计算平均值,在主函数中被调用。
floatpingjun()
{
FILE*fp;
fp=getFile();
inti;
floatave=0.0;
for(i=0;i{
fread(&wor[i],sizeof(structworker),1,fp);
if(wor[i].num!
=0)
ave+=wor[i].gongzi;
elsebreak;
}
printf("职工的平均工资为%f",ave/i);
returnave;
4、删除职工信息信息函数
该结构体执行时,首先调用指针函数读取职工信息,根据编号对职工信息进行删除,输入职工编号,在文件中读取所有职工信息并且将职工信息写入到结构体中,输入职工。
判断学号是否相同,当相同时记录位置并且将以后的职工信息前移。
具体程序段如下:
structworker*deleteInfo(){
intcount=0,p,m;
FILE*fp;
fp=getFile();
printf("请输入要删除员工的编号:
");
scanf("%d",&p);
for(m=0;m{
fread(&wor[m],sizeof(structworker),1,fp);
if(wor[m].num==p)
{
wor[m]=wor[m+1];
count++;
}
if((fwrite(&wor[m],sizeof(structworker),1,fp))!
=1)
{
printf("文件保存失败!
\n");
}
}
if(count==0)
printf("没有你要查询职工的信息!
");
returnwor;
}
voidclear(){
FILE*fp;
if((fp=fopen("d:
//worker.txt","w+"))==NULL)
{
printf("文件打开失败");
exit(0);
}
fclose(fp);
}
3.2系统设计方案
设计一个总菜单,1Creatworker'sinformation;2Printworker'sinformation;3Deleteworker'sinformation;4Fixworker'sinformation;5Qualifications统计list;6按工资范围查询职工信息;7按姓名查询职工信息支持模糊查询;8保存到文件;9EXIT,基本功能的实现都将体现在这几个菜单选项中。
建立结构体如下:
structstaff
{
intnum;//工号
charname[20];//姓名
charsex;//性别(F/M)
intage;//年龄
charqua;//学历(P:
Primary小学,J:
junior中学,S:
Senior高中,U:
University大学,M:
Master硕士)
intpay;//工资
longtel;//联系电话
structstaff*next;
};
根据模块需要本系统需要用到条件选择、for循环结构等。
structstaff*creat(void)//创建函数
voidprint(structstaff*head)//输出函数
structstaff*del(structstaff*head)//删除函数
structstaff*fix(structstaff*head)//修改函数
structstaff*sco(structstaff*head)//按工资查询函数
voidsta(structstaff*head)//统计函数
voidluanqibazao(structstaff*head)//模糊查询函数
voidwritetofile(structstaff*head)//写入文件
1、程序总体结构图
输入
图1程序总体结构图
2、具体功能框图
图2教师信息录入函数块
3.职工平均工资
4.职工信息删除
5.调试与测试
5.1调试
调试是软件开发过程中的一个重要环节,也是最复杂,对软件开发者者来说也是最艰巨的任务。
调试的任务是及时改正测试过程中发现的软件错误。
具体地说,调试过程由两个步骤组成,它从表示程序中存在错误的某迹象开始,首先确定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。
然后仔细研究推断代码以确定问题的原因,并设法改正。
调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。
本系统调试过程中遇到问题、原因和解决方法如下面介绍。
(1)程序不能运行
定义的指针,很多次引用,过个函数里面,定义的不明确,造成错误连连发生。
(2)不能正确输出信息,有乱码现象
原因是键入信息的时候,没有一一对应,逗号的位置不正确,后来,用的是信息逐一输入,保证了信息的一一对应和高度的准确性,使程序可以正常运行。
(3)程序运行途中,出现错误,被迫中止
其中定义字符数组,却没有定义长度,导致定义类型变成了字符型,而不能接受字符串,因此出现了错误。
5.2测试
软件测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。
或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。
过度测试则会浪费许多宝贵的资源。
到测试后期,即使找到了错误,然而付出了过高的代价。
6.结论
课程设计顺利完成,题目所要求的功能也都一一实现,可以对职工工资进行添加,修改,删除,查询,模糊查询,按条件查询,存储至文本文件等,在通常情况下,可以良好的运作。
不过这个程序还有些不够完善,例如有时候,输出的结果会因为字符的长短,与上面的提示栏对不上。
而且,由于自己英语的不够特别好,后几个功能不知道该怎么翻译,就直接写的汉字,显得程序主菜单有点乱,以后会加强英语,好好规划编程。
结束语
通过这几天的实习,我对vc++6.0软件有了新的认识,对c语言的应用也有了一定能力,通过这次课程设计我学到了以前没有掌握的很多知识,将书本上的一些知识与实际应用结合了起来。
锻炼自己的实际应用知识的能力。
我对学过的知识又进一步熟练掌握了。
在课设的过程中我和同学探讨了一些相关的问题,有些问题也得到了老师的耐心讲解。
我真心的感谢老师的辛勤教育,也促进了我和同学之间的友谊。
我想这次课程设计对我未来的学习一定会有很大的帮助。
参考文献
[1]谭浩强.C语言程序设计(第三版).北京:
清华大学出版社,2005.7
附录1-用户手册
图一、主页面
图二、职工信息录入
图三、编号查询职工信息
图四、姓名查询职工信息
图五、求工资平均值
图六、职工信息删除
图七、退出系统
附录2-源程序
#include
#include
#include
#defineN100
structworker
{
intnum;
charname[20];
floatgongzi;
}wor[N];
FILE*getFile(){
FILE*fp;
if((fp=fopen("d:
//worker.txt","a+"))==NULL)
{
printf("文件打开失败");
exit(0);
}
returnfp;
}
intsuru()
{
inti,n;
FILE*fp;
fp=getFile();
printf("请输入要录入的员工数量,按回车键确认:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("\n请输入第%d个员工的编号、姓名、工资,并按回车键确认:
\n",i);
scanf("%d%s%f",&wor[i-1].num,&wor[i-1].name,&wor[i-1].gongzi);
if((fwrite(&wor[i-1],sizeof(structworker),1,fp))!
=1)
printf("文件保存失败!
\n");
}
fclose(fp);
printf("Filesavesuccess!
!
");
return(n);
}
voidnamecheck()
{
char*p1,name[20];
FILE*fp;
fp=getFile();
inti,j=0;
intcount1=0,count2=0;
printf("请输入姓名:
");
p1=name;
scanf("%s",p1);
for(i=0;i{
fread(&wor[i],sizeof(structworker),1,fp);
count1=0;
j=0;
do
{
if(name[j]!
=wor[i].name[j])
count1=1;
j++;
}
while(name[j-1]!
=0);
if(count1==0)
{
printf("number:
%d\n",wor[i].num);
printf("name:
%s\n",wor[i].name);
printf("gongzi:
%f\n",wor[i].gongzi);
printf("\n");
count2++;
}
}
if(count2==0)
printf("没有你要查询职工的信息!
");
}
voidnumcheck()
{
FILE*fp;
fp=getFile();
intcount=0,p,m;
printf("请输入编号:
");
scanf("%d",&p);
for(m=0;m{
fread(&wor[m],sizeof(structworker),1,fp);
if(wor[m].num==p)
{
printf("number:
%d\n",wor[m].num);
printf("name:
%s\n",wor[m].name);
printf("gongzi:
%f\n",wor[m].gongzi);
printf("\n");
count++;
}
}
if(count==0)
printf("没有你要查询职工的信息!
");
}
voidchaxun()
{
intk;
printf("按要求输入信息:
\n\n");
printf("1.根据编号查询\n\n");
printf("2.根据姓名查询\n\n");
scanf("%d",&k);
switch(k)
{
case1:
numcheck();break;
case2:
namecheck();break;
default:
printf("\n输入错误!
");
}
}
floatpingjun()
{
FILE*fp;
fp=getFile();
inti;
floatave=0.0;
for(i=0;i{
fread(&wor[i],sizeof(structworker),1,fp);
if(wor[i].num!
=0)
ave+=wor[i].gongzi;
elsebreak;
}
printf("职工的平均工资为%f",ave/i);
returnave;
}
structworker*deleteInfo(){
intcount=0,p,m;
FILE*fp;
fp=getFile();
printf("请输入要删除员工的编号:
");
scanf("%d",&p);
for(m=0;m{
fread(&wor[m],sizeof(structworker),1,fp);
if(wor[m].num==p)
{
wor[m]=wor[m+1];
count++;
}
if((fwrite(&wor[m],sizeof(structworker),1,fp))!
=1)
{
printf("文件保存失败!
\n");
}
}
if(count==0)
printf("没有你要查询职工的信息!
");
returnwor;
}
voidclear(){
FILE*fp;
if((fp=fopen("d:
//worker.txt","w+"))==NULL)
{
printf("文件打开失败");
exit(0);
}
fclose(fp);
}
voidexitSystem()
{
exit(0);
}
voidmain()
{
intn;
while
(1)
{
printf("\n\n欢迎使用员工工资管理系统\n");
printf("\n***************************《主菜单》***************************\n");
printf("\n1:
录入员工的信息:
\n");
printf("\n2:
查询职工信息:
\n");
printf("\n3:
对职工求平均工资:
\n");
printf("\n4:
删除员工信息\n");
printf("\n5:
退出系统,谢谢使用!
\n");
printf("\n****************************************************************\n");
printf("\n请输入您要选择的操作序号:
");
scanf("%d",&n);
printf("\n");
switch(n)
{
case1:
suru();break;
case2:
chaxun();break;
case3:
pingjun();break;
case4:
clear();
deleteInfo();break;
case5:
exitSystem();break;
default:
printf("\n输入错误!
请从新输入!
");
}
}
}