1、信息技术与工程学院 课 程 设 计 报 告课程名称 高级语言程序设计 设计题目 职工工资管理系统 专业班级 14级计本一班 小组成员 张亢元 仝亚超 王佩 指导教师 温娟娟 成绩 2015年 06月 17 日 目 录1 需求分析11。1 问题描述11.2 功能描述12 系统设计22。1 总体设计22。2 详细设计33 系统测试53.1 输入功能测试53。2 显示功能测试63。3 修改功能测试73.4 查找功能测试83.5 删除功能测试93.6 统计功能测试103。7 排序功能测试113.8 打印功能测试124 总结135 调试分析13参考文献13附录141 需求分析1.1 问题描述设计一个职工
2、工资管理系统,实现功能如下: (1)输入记录:将每一个职工的姓名、ID号、基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个结构体.(2)显示记录:根据职工姓名或者ID号显示一个或几个职工的各项工资。(3)修改记录:对任何一个结构体中的成员按照要求进行修改,并显示修改前后结构体中的所有成员信息。(4)查找记录:查找满足条件的职工信息,要求显示所有的职工成员信息。 (5)删除记录:删除满足条件的职工信息. (6)统计: a。计算各项工资的总工资及平均工资. b。统计符合指定条件(如职工工资前三项之和在3000元以上、30002000元、20001000元以内)的职工人数及占总职工人数的
3、百分比. c。按职工总工资进行排序,可从小到大,也可从大到小。 d。按字符表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资)。 1.2 功能描述 职工工资管理:通过1-5可以选择对员工工资信息的编辑:添加 查找 删除等. 员工工资输出:通过68可以将员工工资按不同顺序输出。2 系统设计2.1 总体设计struct worker 定义了一个结构体类型的员工信息。int input(struct worker work,int a)/输入函数,输入职工的信息void xianshi(struct worker work,int a)/显示,按要求显示需要显示的职工信息void xiu
4、gai(struct worker work,int a)/修改函数,修改需要修改的职工信息void search(struct worker work,int a)/查找函数,查找符合条件的员工,并输出其信息void dele(struct worker work,int a)/删除函数,删除满足条件的员工信息void tongji(struct worker work,int a)/统计函数,统计员工的信息void paixu(struct worker work,int a)/排序函数,按照要求将员工信息排序void dayin(struct worker work,int a)/打印,
5、将所有职工的信息输出2.2 详细设计根据题目需要,定义员工的信息结构体。员工信息结构体包括学生的姓名、ID号、基本工资、职务工资、岗位津贴、医疗保险、公积金。查询员工信息功能:可以通过ID号和姓名查询。通过姓名查询的话是用strcmp函数比较姓名是否相等。编辑员工信息功能:首先判断是否有该员工的信息,如果有的话再进行编辑,否则的话退出。删除员工功能:通过ID号找到员工,进行删除。系统主窗体系统主窗体输入职工确定?NY输入职工信息操作成功显示信息1、 通过姓名查询存在?NY操作成功2、 通过ID查询存在?N操作成功Y修改信息输入员工ID操作成功筛选信息输入筛选信息操作成功删除信息输入删除条件操作
6、成功统计信息操作成功排序信息1、总工资从小到大2、总工资从小到大操作成功操作成功打印信息操作成功3 系统测试3。1 输入功能测试输入“1”显示“系统已有职工的工资记录,再次输入将覆盖原记录,要继续吗?(请输入y或n):”接着输入“y显示 输入员工人数输入员工信息如下:01 张望 1286 794 198 109 135 2034 02 李明 1185 628 135 94 114 1740 03 王小民 895 438 98 64 73 1294 04 张效章 1350 868 210 116 150 2162 05 彭山 745 398 84 61 68 1098 3.2 显示功能测试3.3
7、 修改功能测试3。4 查找功能测试3。5 删除功能测试3.6 统计功能测试3。7 排序功能测试3.8 打印功能测试4 总结本次课程设计的名称是员工工资管理系统,由于我们组能力有限,加之近期课程任务比较紧迫,所以该系统还是有许多不完善的地方。系统完全实现的功能有输入记录、显示记录、修改记录、查找记录、删除记录、统计等。尽管还是有许多的不完善之处,总的来说还是收获很大的,因为通过这次的团队合作,我们组首先对c只是有了很深的了解,就是程序的分析和设计也有了很深的体会。我们将会在今后的学习和工作中发扬团队精神,而且会认真虚心的向有经验的人们学习交流。希望我们以后能再接再厉,做出更加优秀id程序。5 调
8、试分析在本次课程设计实践过程中出现了很多问题,这些问题对我来说一时间难以解决。在程序运行过程中出现的问题如下:1、 在信息输入时,未能根据需求确定职工人数,导致以后的输出出现问题.解决方案:在设计子函数时运用了值传递来确定职工总人数2、 在统计函数中不能正确输出百分比的值,输出的全是“0%,原因是:忽略了整形变量与整形变量相除得到的结果是整形结果。解决方案:将变量转化为浮点型变量。3、 修改职工信息时不能保存,原因:修改时保存的地址不是原来变量的地址,修改方案:将修改地址改回到原来的地址。4、 此程序仍存在的问题:执行完每一个任务后,要按两次回车键才能继续循环。参考文献1C语言课程设计案例精编
9、郭翠英2C程序设计教程孙淑霞代世雄著3C程序设计语言北京:机械工业出版社.杨涛4C语言程序设计教程M.第3版。高等教育出版社,2006谭浩强,张基温。附录#include#includedefine N 100struct workerint ID;char name20;float base; /base 基本工资float rate; /rate 职务工资float subsidy; /subsidy 岗位津贴float medicare; /medicare 医疗保险float fund; /fund 公积金float total; /tootal 总工资;int main()int i
10、nput(struct worker work,int a);/输入函数,输入职工的信息void xianshi(struct worker work,int a);/显示,按要求显示需要显示的职工信息void xiugai(struct worker work,int a);/修改函数,修改需要修改的职工信息void search(struct worker work,int a);/查找函数,查找符合条件的员工,并输出其信息int dele(struct worker work,int a);/删除函数,删除满足条件的员工信息void tongji(struct worker work,i
11、nt a);/统计函数,统计员工的信息void paixu(struct worker work,int a);/排序函数,按照要求将员工信息排序void dayin(struct worker work,int a);/打印,将所有职工的信息输出struct worker workN,p=work;int a=N,select;/printf(”请输入员工人数:”);scanf(”d”,&a);/printf(您是首次登陆本系统,请先输入员工信息:n”);a=input(p,a);do /打印菜单选项printf(”n *职工工资管理系统*n”);printf(”n 1。 输入职工信息n”)
12、;printf(”n 2。 通过姓名显示职工信息n”);printf(”n 3. 修改职工信息n);printf(n 4. 查找信息n);printf(n 5. 删除信息n);printf(n 6. 统计信息n);printf(n 7。 按总工资排序n);printf(n 8。 打印全部职工信息n);printf(n 0. 退出系统n);printf(”n *n);printf(请输入您选择的操作:”);scanf(d,&select);switch(select)case 1:printf(”系统已有职工的工资记录,再次输入将覆盖原记录,要继续吗?(请输入y或n):);getchar();i
13、f(getchar()=y)(getchar()=Y)a=input(p,a);break;case 2:xianshi(p,a);break;case 3:xiugai(p,a);break;case 4:search(p,a);break;case 5:a=dele(p,a);break;case 6:tongji(p,a);break;case 7:paixu(p,a);break;case 8:dayin(p,a);break;case 0:printf(”要继续操作吗?(请输入y或n):”);getchar();if((getchar()=y)|(getchar()=Y))break
14、;while(1);printf(”职工工资管理系统本次运行结束!n”);return 0;/输入函数,输入职工的信息int input(struct worker work,int a)int i;printf(请输入员工人数:n”);scanf(”%d,a);printf(”输入格式为:nID号,姓名n基本工资,职务工资,岗位津贴,医疗保险,公积金n”);for(i=0;ia;i+)scanf(”d,s,worki。ID,worki.name);scanf(”f,f,%f,f,f,&worki。base,worki.rate,&worki。subsidy,&worki.medicare,w
15、orki.fund);return a;/显示,按要求显示需要显示的职工信息void xianshi(struct worker work,int a)int i,select,t;char next,r20;printf(”n 1. 按姓名查找n”);printf(”n 2。 按查找n”);scanf(”%d,&select);switch(select)case 1:printf(请输入要显示的姓名:n);scanf(s”,r);next=r;printf(ID号 姓 名 基本工资 职务工资 岗位津贴 医疗保险 公积金n);for(i=0;ia;i+)if(strcmp(next,work
16、i.name)=0)printf(”%4d s %4f 4f 4f %4f %4fn,worki。ID,worki.name,worki。base,worki。rate,worki.subsidy,worki。medicare,worki。fund);break;case 2:printf(请输入要查询的ID:n”);scanf(%d”,t);printf(ID号 姓 名 基本工资 职务工资 岗位津贴 医疗保险 公积金n);for(i=0;ia;i+)if(t=worki.ID)printf(4d %s %4f 4f 4f 4f %4fn,worki。ID,worki。name,worki。b
17、ase,worki。rate,worki.subsidy,worki.medicare,worki。fund);break;/修改函数,修改需要修改的职工信息void xiugai(struct worker work,int a)int i,ID,t;printf(请输入要修改员工的ID:n);scanf(”d,ID);printf(”修改前职工的信息:n”);printf(”ID号 姓 名 基本工资 职务工资 岗位津贴 医疗保险 公积金n”);for(i=0;ia;i+)printf(”4d s %4f %4f 4f %4f 4fn,worki.ID,worki.name,worki.ba
18、se,worki。rate,worki。subsidy,worki.medicare,worki.fund);for(i=0;ia;i+)if(ID=worki.ID)t=i;printf(请输入该职工的信息:”);printf(”输入格式为:nID号,姓名n基本工资,职务工资,岗位津贴,医疗保险,公积金n”);scanf(d,s,&workt.ID,workt。name);scanf(%f,f,f,f,%f,workt.base,&workt。rate,&workt.subsidy,workt.medicare,&workt.fund);printf(”修改后职工的信息:n”);printf
19、(”ID号 姓 名 基本工资 职务工资 岗位津贴 医疗保险 公积金n);for(i=0;in)printf(”%4d s 4f 4f %4f 4f 4fn,worki。ID,worki。name,worki。base,worki.rate,worki。subsidy,worki.medicare,worki.fund);/删除函数,删除满足条件的员工信息int dele(struct worker work,int a)int i,n;printf(请输入筛选条件总工资小于多少);scanf(%d,n);for(i=0;ia;i+)worki。total=worki。base+worki。ra
20、te+worki.subsidy+worki。medicare+worki。fund;if(worki。total1000)d+;b=b*100/a;c=c100/a;d=d*100/a;printf(前三项工资之和在3000元以上的占dn,b);printf(前三项工资之和在30002000的占%d%n,c);printf(前三项工资之和在20001000的占dn,d);/排序函数,按照要求将员工信息排序void paixu(struct worker work,int a)int i,j,select;struct worker temp;printf(”n 1。 按从小到大排n);pri
21、ntf(n 2。 按从大到小排n”);scanf(”%d”,select);switch(select)case 1:/*for(i=0;ia;i+)worki.total=worki.base+worki。rate+worki。subsidy+worki.medicare+worki.fund;*/for(j=0;ja;j+)for(i=0;iworki+1。total)temp=worki;worki=worki+1;worki+1=temp;printf(ID号 姓 名 基本工资 职务工资 岗位津贴 医疗保险 公积金n);for(i=0;i=0;i-)printf(”%4d %s %4f
22、 %4f 4f %4f 4fn,worki。ID,worki。name,worki.base,worki.rate,worki。subsidy,worki.medicare,worki。fund);break;/打印,将所有职工的信息输出void dayin(struct worker work,int a)int i;float ave6=0,0,0,0,0,0;printf(ID号 姓 名 基本工资 职务工资 岗位津贴 医疗保险 公积金 总工资n);for(i=0;ia;i+)worki.total=worki.base+worki.rate+worki.subsidy+worki.med
23、icare+worki。fund;printf(”4d %st%8。1f 8。1f %8。1f %8。1f 8。1f %8.1fn”,worki.ID,worki.name,worki。base,worki。rate,worki。subsidy,worki.medicare,worki。fund,worki。total);for(i=0;ia;i+)ave0=worki。base+ave0;ave1=worki。rate+ave1;ave2=worki.subsidy+ave2;ave3=worki。medicare+ave3;ave4=worki.fund+ave4;ave5=worki。total+ave5;for(i=0;i6;i+)avei=avei/a;printf(” 各项平均工资 8.1f 8.1f 8。1f 8.1f 8.1f %8。1f”,ave0,ave1,ave2,ave3,ave4,ave5);19