职工工资管理系统报告.docx
- 文档编号:6685645
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:21
- 大小:150.38KB
职工工资管理系统报告.docx
《职工工资管理系统报告.docx》由会员分享,可在线阅读,更多相关《职工工资管理系统报告.docx(21页珍藏版)》请在冰豆网上搜索。
职工工资管理系统报告
信息技术与工程学院
课程设计报告
课程名称高级语言程序设计
设计题目职工工资管理系统
专业班级14级计本一班
小组成员张亢元仝亚超王佩
指导教师温娟娟
成绩
2015年06月17日
1需求分析
1.1问题描述
设计一个职工工资管理系统,实现功能如下:
(1)输入记录:
将每一个职工的姓名、ID号、基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个结构体。
(2)显示记录:
根据职工姓名或者ID号显示一个或几个职工的各项工资。
(3)修改记录:
对任何一个结构体中的成员按照要求进行修改,并显示修改前后结构体中的所有成员信息。
(4)查找记录:
查找满足条件的职工信息,要求显示所有的职工成员信息。
(5)删除记录:
删除满足条件的职工信息。
(6)统计:
a.计算各项工资的总工资及平均工资。
b.统计符合指定条件(如职工工资前三项之和在3000元以上、3000~2000元、2000~1000元以内)的职工人数及占总职工人数的百分比。
c.按职工总工资进行排序,可从小到大,也可从大到小。
d.按字符表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资)。
1.2功能描述
职工工资管理:
通过1-5可以选择对员工工资信息的编辑:
添加查找删除等。
员工工资输出:
通过6-8可以将员工工资按不同顺序输出。
2系统设计
2.1总体设计
structworker
定义了一个结构体类型的员工信息。
intinput(structworkerwork[],inta)
//输入函数,输入职工的信息
voidxianshi(structworkerwork[],inta)
//显示,按要求显示需要显示的职工信息
voidxiugai(structworkerwork[],inta)
//修改函数,修改需要修改的职工信息
voidsearch(structworkerwork[],inta)
//查找函数,查找符合条件的员工,并输出其信息
voiddele(structworkerwork[],inta)
//删除函数,删除满足条件的员工信息
voidtongji(structworkerwork[],inta)
//统计函数,统计员工的信息
voidpaixu(structworkerwork[],inta)
//排序函数,按照要求将员工信息排序
voiddayin(structworkerwork[],inta)
//打印,将所有职工的信息输出
2.2详细设计
根据题目需要,定义员工的信息结构体。
员工信息结构体包括学生的姓名、ID号、基本工资、职务工资、岗位津贴、医疗保险、公积金。
查询员工信息功能:
可以通过ID号和姓名查询。
通过姓名查询的话是用strcmp函数比较姓名是否相等。
编辑员工信息功能:
首先判断是否有该员工的信息,如果有的话再进行编辑,否则的话退出。
删除员工功能:
通过ID号找到员工,进行删除。
3系统测试
3.1输入功能测试
输入“1”显示“系统已有职工的工资记录,再次输入将覆盖原记录,要继续吗?
(请输入'y'或'n'):
”
接着输入“y”显示输入员工人数
输入员工信息如下:
01张望12867941981091352034
02李明1185628135941141740
03王小民8954389864731294
04张效章13508682101161502162
05彭山7453988461681098
3.2显示功能测试
3.3修改功能测试
3.4查找功能测试
3.5删除功能测试
3.6统计功能测试
3.7排序功能测试
3.8打印功能测试
4总结
本次课程设计的名称是员工工资管理系统,由于我们组能力有限,加之近期课程任务比较紧迫,所以该系统还是有许多不完善的地方。
系统完全实现的功能有输入记录、显示记录、修改记录、查找记录、删除记录、统计等。
尽管还是有许多的不完善之处,总的来说还是收获很大的,因为通过这次的团队合作,我们组首先对c只是有了很深的了解,就是程序的分析和设计也有了很深的体会。
我们将会在今后的学习和工作中发扬团队精神,而且会认真虚心的向有经验的人们学习交流。
希望我们以后能再接再厉,做出更加优秀id程序。
5调试分析
在本次课程设计实践过程中出现了很多问题,这些问题对我来说一时间难以解决。
在程序运行过程中出现的问题如下:
1、在信息输入时,未能根据需求确定职工人数,导致以后的输出出现问题。
解决方案:
在设计子函数时运用了值传递来确定职工总人数
2、在统计函数中不能正确输出百分比的值,输出的全是“0%”,原因是:
忽略了整形变量与整形变量相除得到的结果是整形结果。
解决方案:
将变量转化为浮点型变量。
3、修改职工信息时不能保存,原因:
修改时保存的地址不是原来变量的地址,修改方案:
将修改地址改回到原来的地址。
4、此程序仍存在的问题:
执行完每一个任务后,要按两次回车键才能继续循环。
参考文献
1《C语言课程设计案例精编》郭翠英
2《C程序设计教程》孙淑霞 代世雄著
3《C程序设计语言》.北京:
机械工业出版社.杨涛
4《C语言程序设计教程[M]》.第3版.高等教育出版社,2006谭浩强,张基温.
附录
#include
#include
#defineN100
structworker
{
intID;
charname[20];
floatbase;//base基本工资
floatrate;//rate职务工资
floatsubsidy;//subsidy岗位津贴
floatmedicare;//medicare医疗保险
floatfund;//fund公积金
floattotal;//tootal总工资
};
intmain()
{
intinput(structworkerwork[],inta);//输入函数,输入职工的信息
voidxianshi(structworkerwork[],inta);//显示,按要求显示需要显示的职工信息
voidxiugai(structworkerwork[],inta);//修改函数,修改需要修改的职工信息
voidsearch(structworkerwork[],inta);//查找函数,查找符合条件的员工,并输出其信息
intdele(structworkerwork[],inta);//删除函数,删除满足条件的员工信息
voidtongji(structworkerwork[],inta);//统计函数,统计员工的信息
voidpaixu(structworkerwork[],inta);//排序函数,按照要求将员工信息排序
voiddayin(structworkerwork[],inta);//打印,将所有职工的信息输出
structworkerwork[N],*p=work;
inta=N,select;
/*printf("请输入员工人数:
");
scanf("%d",&a);*/
printf("您是首次登陆本系统,请先输入员工信息:
\n");
a=input(p,a);
do
{
//打印菜单选项
printf("\n**************职工工资管理系统**************\n");
printf("\n1.输入职工信息\n");
printf("\n2.通过姓名显示职工信息\n");
printf("\n3.修改职工信息\n");
printf("\n4.查找信息\n");
printf("\n5.删除信息\n");
printf("\n6.统计信息\n");
printf("\n7.按总工资排序\n");
printf("\n8.打印全部职工信息\n");
printf("\n0.退出系统\n");
printf("\n********************************************\n");
printf("请输入您选择的操作:
");
scanf("%d",&select);
switch(select)
{
case1:
printf("系统已有职工的工资记录,再次输入将覆盖原记录,要继续吗?
(请输入'y'或'n'):
");
getchar();
if((getchar()=='y')||(getchar()=='Y'))
a=input(p,a);
break;
case2:
xianshi(p,a);
break;
case3:
xiugai(p,a);
break;
case4:
search(p,a);
break;
case5:
a=dele(p,a);
break;
case6:
tongji(p,a);
break;
case7:
paixu(p,a);
break;
case8:
dayin(p,a);
break;
case0:
printf("要继续操作吗?
(请输入'y'或'n'):
");
}
getchar();
if((getchar()=='y')||(getchar()=='Y'))
break;
}
while
(1);
printf("职工工资管理系统本次运行结束!
\n");
return0;
}
//输入函数,输入职工的信息
intinput(structworkerwork[],inta)
{
inti;
printf("请输入员工人数:
\n");
scanf("%d",&a);
printf("输入格式为:
\nID号,姓名\n基本工资,职务工资,岗位津贴,医疗保险,公积金\n");
for(i=0;i { scanf("%d,%s",&work[i].ID,work[i].name); scanf("%f,%f,%f,%f,%f",&work[i].base,&work[i].rate,&work[i].subsidy,&work[i].medicare,&work[i].fund); } returna; } //显示,按要求显示需要显示的职工信息 voidxianshi(structworkerwork[],inta) { inti,select,t; char*next,r[20]; printf("\n1.按姓名查找\n"); printf("\n2.按ID查找\n"); scanf("%d",&select); switch(select) { case1: printf("请输入要显示的姓名: \n"); scanf("%s",r); next=r; printf("ID号姓名基本工资职务工资岗位津贴医疗保险公积金\n"); for(i=0;i if(strcmp(next,work[i].name)==0) printf("%4d%s%4f%4f%4f%4f%4f\n",work[i].ID,work[i].name,work[i].base,work[i].rate,work[i].subsidy,work[i].medicare,work[i].fund); break; case2: printf("请输入要查询的ID: \n"); scanf("%d",&t); printf("ID号姓名基本工资职务工资岗位津贴医疗保险公积金\n"); for(i=0;i if(t==work[i].ID) printf("%4d%s%4f%4f%4f%4f%4f\n",work[i].ID,work[i].name,work[i].base,work[i].rate,work[i].subsidy,work[i].medicare,work[i].fund); break; } } //修改函数,修改需要修改的职工信息 voidxiugai(structworkerwork[],inta) { inti,ID,t; printf("请输入要修改员工的ID: \n"); scanf("%d",&ID); printf("修改前职工的信息: \n"); printf("ID号姓名基本工资职务工资岗位津贴医疗保险公积金\n"); for(i=0;i printf("%4d%s%4f%4f%4f%4f%4f\n",work[i].ID,work[i].name,work[i].base,work[i].rate,work[i].subsidy,work[i].medicare,work[i].fund); for(i=0;i if(ID==work[i].ID) t=i; printf("请输入该职工的信息: "); printf("输入格式为: \nID号,姓名\n基本工资,职务工资,岗位津贴,医疗保险,公积金\n"); scanf("%d,%s",&work[t].ID,work[t].name); scanf("%f,%f,%f,%f,%f",&work[t].base,&work[t].rate,&work[t].subsidy,&work[t].medicare,&work[t].fund); printf("修改后职工的信息: \n"); printf("ID号姓名基本工资职务工资岗位津贴医疗保险公积金\n"); for(i=0;i printf("%4d%s%4f%4f%4f%4f%4f\n",work[i].ID,work[i].name,work[i].base,work[i].rate,work[i].subsidy,work[i].medicare,work[i].fund); } //查找函数,查找符合条件的员工,并输出其信息 voidsearch(structworkerwork[],inta) { inti; floatn; printf("请输入筛选条件总工资大于多少"); scanf("%f",&n); printf("ID号姓名基本工资职务工资岗位津贴医疗保险公积金\n"); for(i=0;i { work[i].total=work[i].base+work[i].rate+work[i].subsidy+work[i].medicare+work[i].fund; if(work[i].total>n) printf("%4d%s%4f%4f%4f%4f%4f\n",work[i].ID,work[i].name,work[i].base,work[i].rate,work[i].subsidy,work[i].medicare,work[i].fund); } } //删除函数,删除满足条件的员工信息 intdele(structworkerwork[],inta) { inti,n; printf("请输入筛选条件总工资小于多少"); scanf("%d",&n); for(i=0;i { work[i].total=work[i].base+work[i].rate+work[i].subsidy+work[i].medicare+work[i].fund; if(work[i].total { printf("ID号姓名基本工资职务工资岗位津贴医疗保险公积金\n"); printf("%4d%s%4f%4f%4f%4f%4f\n",work[i].ID,work[i].name,work[i].base,work[i].rate,work[i].subsidy,work[i].medicare,work[i].fund); printf("您确定要删除该职工信息吗? (请输入'y'或'n'): "); getchar(); if((getchar()=='y')||(getchar()=='Y')) { work[i]=work[i+1]; i--; a--; } else break; } } returna; } //统计函数,统计员工的信息 voidtongji(structworkerwork[],inta) { inti,b=0,c=0,d=0; floatadd[5]; for(i=0;i { add[i]=work[i].base+work[i].rate+work[i].subsidy; if(add[i]>3000) b++; if(add[i]<3000&&add[i]>2000) c++; if(add[i]<2000&&add[i]>1000) d++; } b=b*100/a; c=c*100/a; d=d*100/a; printf("前三项工资之和在3000元以上的占%d%%\n",b); printf("前三项工资之和在3000~2000的占%d%%\n",c); printf("前三项工资之和在2000~1000的占%d%%\n",d); } //排序函数,按照要求将员工信息排序 voidpaixu(structworkerwork[],inta) { inti,j,select; structworkertemp; printf("\n1.按从小到大排\n"); printf("\n2.按从大到小排\n"); scanf("%d",&select); switch(select) { case1: /*for(i=0;i work[i].total=work[i].base+work[i].rate+work[i].subsidy+work[i].medicare+work[i].fund;*/ for(j=0;j for(i=0;i if(work[i].total>work[i+1].total) { temp=work[i]; work[i]=work[i+1]; work[i+1]=temp; } printf("ID号姓名基本工资职务工资岗位津贴医疗保险公积金\n"); for(i=0;i printf("%4d%s%4f%4f%4f%4f%4f\n",work[i].ID,work[i].name,work[i].base,work[i].rate,work[i].subsidy,work[i].medicare,work[i].fund); break; case2: for(i=a-1;i>=0;i--) printf("%4d%s%4f%4f%4f%4f%4f\n",work[i].ID,work[i].name,work[i].base,work[i].rate,work[i].subsidy,work[i].medicare,work[i].fund); break; } } //打印,将所有职工的信息输出 voiddayin(structworkerwork[],inta) { inti; floatave[6]={0,0,0,0,0,0}; printf("ID号姓名基本工资职务工资岗位津贴医疗保险公积金总工资\n");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 职工工资 管理 系统 报告