1、C语言实习职工工资信息管理系统江西师范大学本科生课程论文封面课程名称 C语言课程设计 类别: C.本科生 组长: 黄金峰 组员:谢熊飞 吴云清 王伟 林梦婷日期: 2014年7月7日 课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总 成 绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。一 课程论文题目职工工资信息管理系统【要求】该系统能够实现工资信息管理.系统包括录入,浏览,查询,统计等功能.其中录入功能要求能够添加新的工资信息到文件;浏览功能要求能按照工资卡号,姓名分类浏览,提供分屏显
2、示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号,姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。【提示】1、 文件中一行数据对应一个职工工资信息。2、 工资信息的数据结构采用结构体数组,一个数组元素对应一条工资单记录。3、 工资单信息包括工资卡号、姓名、月份、应发工资、税费、电费、税金、实发工资等。4、 实发工资=应发工资税费电费税金,其中税金计算方法为:(1) 应发工资800元,税金=0(2) 800应发工资1400元,税金=(应发工资1400)*10%二程序设计思路1、设计思路(1)根据题目要求,应该把职工工资信息用结构体形
3、式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;(2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立相应的功能模块来实现;(3)另外还需要提供键盘式选择菜单实现功能,在运行时达到所要的目的。2、总体设计整个系统可以分为信息输入、信息新增、信息浏览、信息排序和信息查询五个主要模块。3、详细设计(1)工资信息采用结构体数组:struct list int num; /工资卡号 char name20; /姓名 int month; /月份 int salary1; /应发工资 int water;
4、 /水费 int electrisity; /电费 float fax; /税金 float salary2; /实发工资listN; /listN中每个数组元素对应一个职工工资信息(2)输入模块按照工资卡号、姓名、月份、应发工资、水费、电费的顺序输入信息,税金和实发工资根据输入的信息进行计算得到,这些信息被录入到文件中。文件操作函数:fopen,fwrite,fclose.税金的计算:if(应发工资800&应发工资1400) 税金=(应发工资-1400)*10%;实发工资=应发工资-水费-电费-税金。(3)新增模块增加新的职工工资信息,从键盘输入并逐条写到原来的输入文件中,采用追加而不是覆盖
5、的方式(以“ab”方式打开文件)。(4)浏览模块 调用排序模块的排序功能,可以浏览排序后的所有职工信息。(5)排序模块排序模块提供菜单选择,实现按照工资卡号升序、实发工资升序排序。排序方法可以选择冒泡排序、插入排序、选择排序等,本系统用的是冒泡排序。(6)查询模块实现按照工资卡号和姓名的查询,采用基本的查找方法即可。三功能模块图四 数据结构设计系统用将职工各项信息以结构体类型struct list来定义,它包括num,name20,month,salary1,water,electricity,fax,salaly2等不同类型的数据项,同时定义了结构体数组,包括N个数组元素,对应N个职工,每一
6、个元素用来存放一个职工的数据;每个职工的信息以结构体方式从内存和磁盘文件中进行存储和导出。以结构体方式来整合职工的不同信息,将不同的数据组合成一个有机整体,非常方便程序的调用。五算法设计1、主函数主函数一般设计比较简单,只提供输入、处理和输出部分的函数调用。各功能模块用菜单方式选择。流程图 N Y#include#include#include#include#define N 50void main() /*主函数*/ void menu(); /*声明菜单函数*/ menu(); /*调用菜单函数*/void menu() /*菜单函数*/ void enter(); void add()
7、; void browse(); void search(); void order(); int n,w1; do puts(tt*MENU*nn); puts(ttt 1.Enter ); puts(ttt 2.Add); puts(ttt 3.browse all); puts(ttt 4.Search ); puts(ttt 5.Order ); puts(ttt 6.Exit); puts(nntt*n); printf(Choice your number(1-6): bb); scanf(%d,&n); if(n6) /*对选择数字作判断*/ w1=1; getchar(); e
8、lse w1=0; while(w1=1); switch(n) /*选择功能*/ case 1:enter();break; /*输入模块*/ case 2:add();break; /*追加模块*/ case 3:browse();break; /*浏览模块*/ case 4:search();break; /*查找模块*/ case 5:order();break; /*排序模块*/ case 6:exit(0); 2、各功能模块设计(1) 输入模块数据结构把职工的卡号、月份应发工资、水费、电费、税金、实发工资作为结构体成员,如果存放若干个职工信息就用结构体数组。struct list
9、int num; char name20; int month; int salary1; int water; int electrisity; float fax; float salary2;listN; /*listN中每个数组元素对应一个职工*/流程图 1 2/*输入模块*/void enter() /*输入模块*/ void printf_back(); void save(int n); void input(int i); int i,n; printf(how many workers (0-%d)?:,N-1); scanf(%d,&n); printf(n enter d
10、ate nownn); for(i=0;in;i+) printf(n input %dth worker record.n,i+1); input(i); /*调用输入函数*/ if(i!=0)save(n); /*调用保存函数*/ printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/ 追加模块需求分析该模块的功能是用户需要增加新的职工记录,请从键盘输入并逐条写到原来的输入文件中是追加不是覆盖.流程图 1 2程序 /*追加模块*/void add() /*追加模块*/ void printf_back(); int i,n,m,k; int load(); void
11、save(int n); void input(int i); FILE *fp; n=load(); printf(how many workers are you want to add(0-%d)?:,N-1-n); scanf(%d,&m); /*输入要追加的个数*/ k=m+n; for(i=n+1;i=k;i+) printf(n input %dth workers record.n,i-n); input(i); /*调用输入函数*/ fp=fopen(workers.txt,ab) /*以ab方式打开文件,追加保存*/; for(i=n+1;i=k;i+) /*输出到文件*/
12、 fwrite(&listi,sizeof(struct list),1,fp); fclose(fp); printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/ 浏览模块需求分析该模块的功能是显示所有职工记录工资信息.流程图程序 /*浏览(全部)模块*/ void browse() /*浏览模块*/ void printf_one(int i); void printf_face(); int load(); void menu(); int i,n; n=load(); /*加载记录*/ printf_face(); /*调用显示数据结构项目函数*/ for(i=0;
13、in;i+) if(i!=0)&(i%10=0) /*目的是分屏显示*/ printf(nnpress any key to contiune.); getch(); puts(nn); printf_one(i); /*调用显示一个记录的函数*/ printf(n); printf(t there are %d record.n,n); printf(n pass any key to back.); getch(); /*按任意键*/ menu(); 查找模块需求分析该模块的功能是根据输入的职工姓名和卡号查找对应的记录.流程图 N Y 1 2 1 2 程序 /*查找函数*/ void se
14、arch() /*查找模块*/ int n,w1; do puts(ttt1.search by name); puts(ttt2.search by num); scanf(%d,&n); if(n2) /*对选择数字作判断*/ w1=1; getchar(); else w1=0; while(w1=1); switch(n) void search_1(); void search_2(); case 1:search_1();break; case 2:search_2();break; void search_1() /*按姓名查找*/ int load(); void printf
15、_face(); void menu(); void printf_one(int i); int i,n,k,w1=1,w2,w3,w4; struct list s; n=load(); do do k=-1; printf(nnenter name that you want to search! name:); scanf(%s,s.name); printf_face(); /*调用显示数据结构项目函数*/ for(i=0;in;i+) /*查找所需数据*/ if(strcmp(s.name,listi.name)=0) k=i; /*找到数据*/ printf_one(k);bre
16、ak; /*调用显示一个记录的函数*/ if(k=-1) printf(nn NO.exit!please); printf(nnare you again?nt1).again 2).NO and back bb); scanf(%d,&w1); if(w1=2)break; while(k=-1&w1=1); /*如果w1不等于1这直接返回*/ w4=0;w3=0; if(k!=-1) /*k不等于-1表示已找到,如果找到则选择操作*/ printf(successful); printf(nn what do you want to do?nt1).search another 2).b
17、ack bb); scanf(%d,&w2); while(w2=1); menu(); void search_2() /*按卡号查找*/ int load(); void printf_face(); void menu(); void printf_one(int i); struct list s; int i,n,k,w1=1,w2,w3,w4; n=load(); do do k=-1; printf(nnenter num that you want to search! num:); scanf(%d,&s.num); printf_face(); /*调用显示数据结构项目函数
18、*/ for(i=0;in;i+) /*查找所需数据*/ if(s.num=listi.num) k=i; /*找到数据*/ printf_one(k);break; /*调用显示一个记录的函数*/ if(k=-1) printf(nn NO.exit!please); printf(nnare you again?nt1).again 2).NO and back bb); scanf(%d,&w1); if(w1=2)break; while(k=-1&w1=1); /*如果w1不等于1这直接返回*/ w4=0;w3=0; if(k!=-1) /*k不等于-1表示已找到,如果找到则选择操作
19、*/ printf(nsuccessful); printf(nn what do you want to do?nt1).search another 2).back bb); scanf(%d,&w2); while(w2=1); menu(); 排序模块需求分析该模块的功能是将职工记录按照一定顺序排序.流程图 NY 1 2 1 2/*排序模块*/ void order() /*排序模块*/ int w1,n; void order_1(); void order_2(); do puts(ttt1.order by num); puts(ttt2.order by salary); sc
20、anf(%d,&n); if(n2) /*对选择数字作判断*/ w1=1; getchar(); else w1=0; while(w1=1); switch(n) case 1:order_1();break; case 2:order_2();break; void order_1() /*卡号升序排*/ int load(); void printf_back(); void save(int i); int i,j,n,k; void browse(); struct list s; n=load(); for(i=0;in-1;i+) /*选择法排序*/ k=i; for(j=i+1
21、;jn;j+) if(listj.numlistk.num)k=j; s=listi; listi=listk; listk=s; save(n); browse(); puts(nn); printf_back(); void order_2() /*工资降序排*/ int load(); void printf_back(); void save(int i); int i,j,n,k; struct list s; n=load(); for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) /*选择法排序*/ if(listk.salary2listj.salary
22、2)k=j; s=listi;listi=listk;listk=s; save(n); browse(); puts(nn); printf_back();六、程序代码(每个函数都要有功能说明)#include#include#include#include#define N 50void main() void menu(); menu();void menu() /主菜单函数 void enter(); void add(); void browse(); void search(); void order(); int n,w1; do puts(tt*MENU*nn); puts(t
23、tt 1.Enter ); puts(ttt 2.Add); puts(ttt 3.browse all); puts(ttt 4.Search ); puts(ttt 5.Order ); puts(ttt 6.Exit); puts(nntt*n); printf(Choice your number(1-6):bb); scanf(%d,&n); if(n6) /*对选择的数字进行判断*/ w1=1; getchar(); else w1=0; while(w1=1); switch(n) case 1:enter();break; /*输入模块*/ case 2:add();break
24、; /*新增模块*/ case 3:browse();break; /*浏览模块*/ case 4:search();break; /*查找模块*/ case 5:order();break; /*排序模块*/ case 6:exit(0); /*退出模块*/ struct list /结构体定义工资信息 int num; /工资卡号 char name20; /姓名 int month; /月份 int salary1; /应发工资 int water; /水费 int electrisity; /电费 float fax; /税金 float salary2; /实发工资listN; /l
25、istN中每个数组元素对应一个职工工资信息void enter() /输入模块函数 void printf_back(); void save(int n); void input(int i); int i,n; printf(how many workers (1-%d)?:,N-1); scanf(%d,&n); /输入职工数目 printf(n enter date nownn); for(i=0;in;i+) /输入职工各项信息 printf(n input %dth student record.n,i+1); input(i); /调用职工信息输入函数 if(i!=0)save(n); /储存职工信息 printf_back(); /执行返回函数void add() /新增模
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1