《C语言工资信息管理系统.doc》由会员分享,可在线阅读,更多相关《C语言工资信息管理系统.doc(19页珍藏版)》请在三一办公上搜索。
1、工资信息管理系统一、题目要求设计工资信息管理系统,要求该系统能够实现工资信息管理。系统包括录入、浏览、查询、统计等功能。其中录入功能要求能够添加新的工资信息到文件,浏览功能要求能按照工资卡号、姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号、姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。二、 需求分析根据题目要求,由于工资信息是存放在文件中,所以应提供文件的输入输出等操作;在程序中需要浏览工资信息,应提供显示、查找、排序等操作;另外还应提供键盘式选择彩旦实现功能选择。三、 总体设计工资信息管理系统菜单录入
2、追加查询浏览排序四、 详细设计1主函数 void main() menu();/*主函数只用于调用菜单*/ 2.菜单menu()int n,w1;doputs(tt*MENU*nn);puts(tttt 1.enter data);puts(tttt 2.addition data);puts(tttt 3.browse all);puts(tttt 4.search);puts(tttt 5.order);puts(tttt 6.exit);puts(nntt *n);printf(Choice your number(1-6):bb);scanf(%d,&n);if(n6)w1=1;get
3、char();else 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);return 1;3.各功能模块设计1)录入模块数据结构struct employerint month;char num11;char name20;float yfgz;float sf;float df;float sj;float sfgz;empN;N为职工人数,在此宏定义
4、为100,#define N 100i从0到n-1调用输入函数input(i)输入用户要输入职工记录的个数n那么此阶段的流程图如下i!=0保存save(n)程序enter()int i,n;printf(How many employers(0-%d)?:,N-1);scanf(%d,&n);printf(n Enter data nownn);for(i=0;in;i+)printf(n input %dth employer record.n,i+1);input(i);if(i!=0) save(n);printf_back();2)追加模块先确定要追加信息的条数,调用n=load()函
5、数,再调用输入函数input(),最后保存追加的记录。整个过的的流程图如下:调用n=load();并计算可以启示录的个数n输入用户要追加学生记录的个数nk=m+ni从n到k调用输入函数input(i)保存追加的记录程序add() int i,n,m,k;FILE *fp;n=load();printf(How many employers are you want to add(0-%d)?:,N-1-n);scanf(%d,&m); k=m+n;for (i=n;ik;i+) printf(n Input %dth employer record.n,i-n+1);input(i);if(f
6、p=fopen(record.txt,ab)=NULL) printf(cannot open filen);for(i=n;ik;i+)if(fwrite(&empi,sizeof(struct employer),1,fp)!=1) printf(file write errorn);fclose(fp);printf_back();3)查询模块下面是流程图:输入查询内容显示找到的记录让用户选择1)查找另一个2)返回菜单返回主菜单提示没有找到是否找到记录询问用户是否继续查找YYN程序search()int i,n,k,w1=1,w2,w3,w4;struct employer e;n=lo
7、ad();dodok=1;printf(nnEnter name that you want to search! name:);scanf(%s,e.name);printf_face();for(i=0;in;i+)if(strcmp(e.name,empi.name)=0)k=i;printf_one(k);break;if(k=-1)printf(nnNO exist! please);printf(nnAre you again?nt1).again 2).NO and back bb);scanf(%d,&w1);if(w1=2) break;while(k=-1&w1=1);w4
8、=0;w3=0;if(k!=-1)printf(nnWhat do you want to do?nt1).Search another 2).Back menu bb);scanf(%d,&w2);if(w3=1|w4=1)save(n);printf(nnSuccessful._.);printf(nnWhat do you want to do?nt1).Search another 2).Back bb);scanf(%d,&w2);while(w2=1);menu();4)浏览模块流程图显示记录按任意键显示下一屏按任意键返回主菜单程序browse() int i,n;n=load()
9、;printf_face();for(i=0;in;i+)if(i!=0)&i%10=0)printf(nnPsaa any key to continue .);getch();puts(nn);printf_one(i);printf(tThere are %d record.n,n); printf(nPass any key to back .);getch();menu();5)排序模块此阶段按工人工资卡号升序排列程序如下:order()int i,j,n; char t11;n=load();for(i=0;in-1;i+)for(j=i+1;j0)strcpy(t,empi.nu
10、m);strcpy(empi.num,empj.num);strcpy(empj.num,t);save(n);puts(nn); printf_back();4.公共函数1)保存函数程序如下:save(int n)FILE *fp;int i;if(fp=fopen(record.txt,wb)=NULL)printf(nCannot open filen);return NULL;for(i=0;in;i+)if(empi.yfgz!=0)if(fwrite(&empi,sizeof(struct employer),1,fp)!=1)printf(file write errorn);f
11、close(fp);return 1;2)加载函数程序如下:load()FILE *fp;int i;if(fp=fopen(record.txt,rb)=NULL)printf(nCannot open filen);return NULL;for(i=0;!feof(fp);i+)fread(&empi,sizeof(struct employer),1,fp);fclose(fp);return(i-1);3)工资信息输入函数程序如下:record_input(int i)int j;printf(month:);scanf(%d,&empi.month);no_input(i,i);
12、printf(name:);scanf(%s,&empi.name);printf(yfgz:);scanf(%f,&empi.yfgz);printf(sf:);scanf(%f,&empi.sf);printf(df:);scanf(%f,&empi.df);4)输入工资卡号的函数程序如下:no_input(int i,int n)int j,k,w1;dow1=0;printf(NO.:);scanf(%s,empi.num);for(j=0;empi.numj!=0;j+)if(empi.numj9)puts(Input error! Only be made up of (0-9).
13、Please reinput!n);w1=1;break;if(w1!=1)for(k=0;kn;k+)if(k!=i&strcmp(empk.num,empi.num)=0)puts(This record is exist.please reinput!n);w1=1;break;while(w1=1);5)计算税金的函数程序如下:sj(int i)if(empi.yfgz800&empi.yfgz1400) empi.sj=(empi.yfgz-1400)*0.1;6)计算实发工资的函数程序如下:sfgz(int i)empi.sfgz=empi.yfgz-empi.sf-empi.df
14、-empi.sj;7)显示数据结构项目函数程序如下:void printf_face()printf(ntNO. name month yfgz sf df sj sfgzn);8)显示一个记录的函数程序如下:void printf_one(int i)printf(%s %s %d %f %f %f %f %fn,empi.num,empi.name,empi.month,empi.yfgz,empi.sf,empi.df,empi.sj,empi.sfgz);9)一个任务结束时的选择浏览还是返回的函数程序如下:printf_back()int k,w;printf(nntSuccessfu
15、l._nn);printf(What do you want to do?nnt1)Browse all nowt2).Back: bb);scanf(%d,&w);if(w=1) browse();else menu();5上机操作(1) 主菜单(2) 录入模块输入1后提示输入记录的条数,输入3后界面如下再逐条输入信息后界面如下(3) 追加模块输入2后,回到主菜单,在输入2选在追加信息,提示输入追加信息条数,输入1后界面如下再将追加的信息录入后界面如下(4) 查询模块输入2后回到主菜单,输入4进入查询,输入职工名字ccc后可获得其工资信息,界面如下(5)浏览模块输入2后回到主菜单,输入3浏览工资信息,界面如下(6) 排序模块点任意键返回主菜单后输入5,可按工人工资卡号升序将信息排列后显示出来,界面如下点任意键返回主菜单后输入6退出。上机演示完毕。