员工工资管理.doc
【精品文档】如有侵权,请联系网站删除,仅供学习与交流员工工资管理.精品文档. 课程设计学 号 _班 级 _ 姓 名 _指导教师 _ 年 月 日课程设计任务书一、课程设计题目:某企业职工工资管理系统二、课程设计工作自2007年7月9日起至2007年7月15日止三、课程设计内容:用C语言编写软件完成以下任务:1 录入职工信息;2 对职工按工资排序并显示; 3 能够增加新职工数据并按工资高低排序。四、课程设计要求:程序质量:l 贯彻结构化程序设计思想。l 用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。l 用户界面中的菜单至少应包括“职工信息录入”、“按工资排序”、“插入新职工并按工资高低排序”、“退出”4项。l 代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书:课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:l 封面l 课程设计任务书l 目录l 需求分析(分析题目的要求)l 程序流程图(总体流程图和主要功能模块流程图)l 核心技术的实现说明及相应程序段l 个人总结l 参考资料l 源程序及适当的注释指导教师:_员工签名:_目录一、程序设计题目1二、需求分析1三、程序流程图3四、核心技术的实现方法、程序段及注释7五、个人总结10六、参考文献10七、源程序11一、程序设计题目某企业职工工资管理,具体要求如下:1、录入职工信息2、对职工按工资排序并显示3、能够增加新职工数据并按工资高低排序4、退出注:每个员工数据至少应该包括工号、姓名、工资,员工数据要保存在worker.dat文件中。二、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一个函数,他们的功能分别是:录入职工信息函数(shuru),工资排序并显示函数(sore),增加新职工数据函数(add),主函数(main)。1、录入职工信息函数 主要实现程序最初运行时员工数据的录入;2、工资排序并显示函数 实现的功能是按照工资由多到少对员工的数据进行排序,把排序后的文件保存到sore.dat文件中,并打印目前所有的有效员工记录信息;3、增加新职工数据函数 按插入新职工并按工资高低排序;4、主函数 实现的是程序界面的设计和各功能函数的调用;除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。每一个员工记录都包含工号、姓名、工资,在程序当中,将员工记录类型定义为结构体类型,添加以及追加的员工信息直接写入worker.dat文件中,其他函数每次对员工记录的访问,其数据来源都是worker.dat文件,这样做不但可以保证员工数据的一致性,而且可以对员工数据进行永久保存,保证每次运行程序都可以采用原来的数据。三、程序流程图1、 程序总体结构图图1程序总体结构图2、具体功能框图(1) 录入职工信息函数 shuru图2录入职工信息函数(2)工资排序并显示函数 sore图3工资排序并显示函数(3)增加新职工数据函数(add)图4增加新职工数据函数四、核心技术的实现方法、程序段及注释本程序主要由三个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,工资排序并显示函数和增加新职工数据函数是程序中较为核心的部分,下面分别进行说明。1、工资排序并显示函数 工资排序使用冒泡法,将结构体中的数据按照工资由多到少的顺序排序,把排序后的结果保存打印到屏幕上,并将结果保存到sore.dat文件中。具体的程序段如下:void sore(int n)int i,j=1;struct worker temp;FILE *fp1;for(i=0;i<n-1;i+)for(j=0;j<n-1-i;j+)if(worj.gongzi<worj+1.gongzi) strcpy(temp.num,worj.num); strcpy(temp.name,worj.name); temp.gongzi=worj.gongzi; strcpy(worj.num,worj+1.num); strcpy(worj.name,worj+1.name); worj.gongzi=worj+1.gongzi; strcpy(worj+1.num,temp.num); strcpy(worj+1.name,temp.name); worj+1.gongzi=temp.gongzi;if(fp1=fopen("sore.dat","wb")=NULL) printf("打开文件失败!"); exit(0);printf("序号 工号 姓名 工资n"); for(i=0;i<n;i+) fwrite(&wori,sizeof(struct worker),1,fp1);if(wori.gongzi=wori+1.gongzi) printf("%3d%5s%5s%8.2fn",j,wori.num,wori.name,wori.gongzi);else printf("%3d%5s%5s%8.2fn",j+,wori.num,wori.name,wori.gongzi);fclose(fp1);2、增加新职工数据函数该函数的核心内容是增加新的员工信息,保存到结构体中,并调用sore()函数将增加后的员工信息重新进行排序。最后把增加后的总人数返回给主函数。具体程序段如下:int add(int n)int i,j;FILE *fp;if(fp=fopen("worker.dat","rb+")!=NULL) printf("请输入要追加的员工数量,按回车键确认:"); scanf("%d",&j); for(i=1;i<=j;i+)printf("n请输入第%d个员工的工号、姓名、工资,并按回车键确认:n",i); scanf("%s%s%f",&worn+i-1.num,&worn+i-1.name,&worn+i-1.gongzi); fwrite(&worn+i-1,sizeof(struct worker),1,fp);sore(n+j);return (n+j);五、个人总结通过这几天的实习,我对vc 6.0软件有了新的认识,对c语言的应用也有了一定能力, 通过这次课程设计我学到了以前没有掌握的很多知识,同时,我对学过的知识又进一步熟练掌握了。我想这次课程设计对我未来的学习一定会有很大的帮助。六、参考文献1 谭浩强C程序设计北京:清华大学出版社,20052 刘成等C语言程序设计实验指导与习题集北京:中国铁道出版社,2006七、源程序#include <stdio.h>#include <string.h>#define N 5struct workerchar num20;char name10;float gongzi;worN;int shuru()int i,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("%s%s%f",&wori-1.num,&wori-1.name,&wori-1.gongzi); if(fwrite(&wori-1,sizeof(struct worker),1,fp)!=1)printf("文件保存失败!n");fclose(fp);return (n);void sore(int n)int i,j=1;struct worker temp;FILE *fp1;for(i=0;i<n-1;i+)for(j=0;j<n-1-i;j+)if(worj.gongzi<worj+1.gongzi) strcpy(temp.num,worj.num); strcpy(temp.name,worj.name); temp.gongzi=worj.gongzi; strcpy(worj.num,worj+1.num); strcpy(worj.name,worj+1.name); worj.gongzi=worj+1.gongzi; strcpy(worj+1.num,temp.num); strcpy(worj+1.name,temp.name); worj+1.gongzi=temp.gongzi;if(fp1=fopen("sore.dat","wb")=NULL) printf("打开文件失败!"); exit(0);printf("序号 工号 姓名 工资n"); for(i=0;i<n;i+) fwrite(&wori,sizeof(struct worker),1,fp1);if(wori.gongzi=wori+1.gongzi) printf("%3d%5s%5s%8.2fn",j,wori.num,wori.name,wori.gongzi);else printf("%3d%5s%5s%8.2fn",j+,wori.num,wori.name,wori.gongzi);fclose(fp1);int add(int n)int i,j;FILE *fp;if(fp=fopen("worker.dat","rb+")!=NULL) printf("请输入要追加的员工数量,按回车键确认:"); scanf("%d",&j); for(i=1;i<=j;i+)printf("n请输入第%d个员工的工号、姓名、工资,并按回车键确认:n",i); scanf("%s%s%f",&worn+i-1.num,&worn+i-1.name,&worn+i-1.gongzi); fwrite(&worn+i-1,sizeof(struct worker),1,fp);sore(n+j);return (n+j);main()int i,n=0;printf("*n");printf("*n");printf("*欢迎使用员工工资管理系统*n");printf("*n");printf("*按r输入员工信息*n");printf("*按s根据工资排序*n");printf("*按a增加新员工数据*n");printf("*按q退出程序*n");printf("*n");while(1)switch(getch()case 'r':n=shuru();break;case 's':sore(n);break;case 'a':n=add(n);break;case 'q':printf("*4406105班李翔版权所有*n"); exit(0);