#include #include #include #include void xitong ( );//系统总体框架 void shuru(FILE *);//实现输入数据 void xianshi(FILE *);//实现显示数据 void chazhao(FILE *);//实现查找数据 void shanchu(FILE *,char *s);//实现删除数据 void tongji(FILE *);//实现统计 void xiugai(char *);//实现修改数据 struct tongjishuju {//用于统计的数组 double pjgz1;//基本工资平均值 double pjgz2;//职务工资平均值 double pjgz3;//津贴平均值 double pjgz4;//医疗保险 double pjgz5;//公积金 double pjzgz;//总工资 }; struct zhigong {//职工数组 char id[3];//序号 char name[8];//名字 int jibengongzi;//基本工资 int zhiwugongzi;//职务工资 int jintie;//津贴 int yiliaobaoxian;//医疗保险 int gongjijin;//公积金 int zonggongzi;//总工资 }; void xitong( ) {//框架函数 int a,x;//a用来选择功能x用来选择打开旧文件还是新建新文件 system("mode con cols=100 lines=40"); system("color bc"); printf("\t\t\t\t ☆欢迎使用职工工资系统☆\n"); char s[20];//存储文件名字 FILE *fp=NULL; printf("是否需要新建一个文件\n"); printf("1:是 2:否\n"); scanf("%d",&x);//选择打开旧文件还是新建新文件 TTTT://实现重新输入 if(x==2) { printf("请输入您需要打开的文件名\n"); scanf("%s",s); if((fp=fopen(s,"a+"))==NULL) { //判断文件是否正确打开 printf("文件打开错误,请重新输入\n"); goto TTTT; //实现重新输入 } } if(x==1) { printf("请输入您需要新建的文件名\n"); scanf("%s",s); if((fp=fopen(s,"w+"))==NULL) { //判断文件是否正确打开 printf("文件打开错误,请重新输入\n"); goto TTTT; //实现重新输入 } } system("cls"); printf(" 请选择您所需要的功能\n"); printf("1.输入信息 2.显示信息\n"); printf("3.修改信息 4.查找信息\n"); printf("5.删除信息 6.统计信息\n"); printf("输入其他,关闭程序\n"); scanf("%d",&a); switch(a) { //实现各个功能 case 1://输入 system("cls"); shuru(fp); break; case 2://显示 system("cls"); xianshi(fp); break; case 3://修改 system("cls"); xiugai(s); fclose(fp); break; case 4://查找 system("cls"); chazhao(fp); break; case 5://删除 system("cls"); shanchu(fp,s); break; case 6://统计 system("cls"); tongji(fp); break; default://关闭 exit(1); } } void shuru(FILE *fp) { int c;//实现继续和返回主菜单 printf("请输入您所需要增加的数据\n"); printf("ID号\t姓名\t基本工资\t职务工资\t津贴\t医疗保险\t公积金\n"); struct zhigong a; scanf("%s%s%d%d%d%d%d",a.id,a.name,&a.jibengongzi,&a.zhiwugongzi,&a.jintie,&a.yiliaobaoxian,&a.gongjijin); a.zonggongzi=a.jibengongzi+a.gongjijin+a.jintie+a.yiliaobaoxian+a.zhiwugongzi; fprintf(fp,"%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",a.id,a.name,a.jibengongzi,a.zhiwugongzi,a.jintie,a.yiliaobaoxian,a.gongjijin,a.zonggongzi);//将内容输入到文件中 printf("输入1:返回主界面 输入2:继续输入 输入其他:关闭程序\n"); scanf("%d",&c); if(c==1) { fclose(fp); xitong( ); } else if(c==2) { shuru(fp); } else fclose(fp); } void chazhao(FILE *fp) { int l;//实现继续和返回主菜单 char c[20]; printf("请输入您所需要查找的数据的姓名\n"); struct zhigong a; scanf("%s",c);//输入查找的名字 while(1) { if(fscanf(fp,"%s%s%d%d%d%d%d%d",a.id,a.name,&a.jibengongzi,&a.zhiwugongzi,&a.jintie,&a.yiliaobaoxian,&a.gongjijin,&a.zonggongzi)==EOF) break; if(strcmp(c,a.name)==0) {//已找到 printf("\t%d\t%d\t%d\t%d\t%d\t%d\n",a.jibengongzi,a.zhiwugongzi,a.jintie,a.yiliaobaoxian,a.gongjijin,a.zonggongzi); break; } } if(feof(fp)!=0) {//未找到 printf("没能找到有关数据\n"); } printf("输入1:返回主界面 输入2:继续查找 输入其他:关闭程序\n"); scanf("%d",&l); if(l==1) { fclose(fp); xitong( ); } else if(l==2) { rewind(fp); chazhao(fp); } else fclose(fp); } void xianshi(FILE *fp) { int l,n;//l实现继续和返回主菜单,n计人数 char c[20][8];//姓名 struct zhigong a; int i,f=0;//i实现循环,f算总和 printf("ID号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资\n"); for(i=0; i<100; i++) {//一一显示 if(fscanf(fp,"%s%s%d%d%d%d%d%d",a.id,a.name,&a.jibengongzi,&a.zhiwugongzi,&a.jintie,&a.yiliaobaoxian,&a.gongjijin,&a.zonggongzi)!=EOF) printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",a.id,a.name,a.jibengongzi,a.zhiwugongzi,a.jintie,a.yiliaobaoxian,a.gongjijin,a.zonggongzi); else break; } tttt://前面的功能不需要重复实现 printf("请输入您所需要查找的数据的数目\n"); scanf("%d",&n); printf("请输入您所需要查找的数据的姓名\n"); for(i=0; i=3000) m1++; if((b[i].jibengongzi+b[i].zhiwugongzi+b[i].jintie)>=2000&&(b[i].jibengongzi+b[i].zhiwugongzi+b[i].jintie)<3000) m2++; if((b[i].jibengongzi+b[i].zhiwugongzi+b[i].jintie)<2000&&(b[i].jibengongzi+b[i].zhiwugongzi+b[i].jintie)>=1000) m3++; } printf("3000元以上占%lf\n3000~2000元占%lf\n2000元~1000元占%lf\n",(double)m1/f,(double)m2/f,(double)m3/f); break; case 2://实现平均数计算 for(i=0; i