题目要求 做一个工资管理系统,要能按照姓名和卡号查找员工的工资信息,以及员工工资信息的插入,删除。同时这些信息要存储在TXT文件中…还要可以按照一定顺序输出所有员工工资的信息
#include #include #define N 100 struct mygz { int yuefen; float yfgz; float sf; float df; float sj; float sfgz; }; struct worker { int kahao; char xingming[20]; struct mygz m[12]; float zsfgz; }; int ygsm; struct worker a[N]; float shuijin(float m) { float shui1,shui2; float tmp; shui1=0;shui2=0; if(m>=1400) { shui1=(m-1400)*0.1; shui2=30; } else { if(m>=800 && m<1400) { shui2=(m-800)*0.05; } } tmp=shui1+shui2; return(tmp); }float shifagongzi(float a,float b,float c,float d) { float e=a-b-c-d; return(e); } void duqu() { FILE *fp; if((fp=fopen("D:工资信息.txt"))==NULL) { printf("无法读取文件"); ;return; } while(!feof(fp)) { fread(&a[ygsm],sizeof(struct worker),1,fp); ygsm++; } } void chaxun() { int b; int i; int j; label_3: b=0; while(b!=1&&b!=2) { printf("1,选择姓名查询.\\n2,选择卡号查询.\\n"); scanf("%d",&b); } if(b==1) { char c[20]; printf("请输入您的姓名:\\n"); scanf("%s",c); i=0; while(!(strcmp(a[i].xingming,c)==0)&&i i++; } if(i==ygsm) { printf("您查找的名字不存在,请正确输入您的名字或用卡号查询\\n"); return; } printf("%-10d %-20s \n",a[i].kahao,a[i].xingming); for(j=0;a[i].m[j].yuefen!=NULL;j++) { printf("月份:%5d,应发工资:%10.2f,水费:%7.2f,电费:%7.2f,税金:%7.2f,实发工资:%10.2f.\\n",a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz); } printf("总实发工资:%10f\\n",a[i].zsfgz); b=0; while(b!=1&&b!=2) { printf("1,继续查询.\\n2,返回主菜单.\\n"); scanf("%d",&b); } if(b==1) { goto label_3; } else { ;return; } } else { int d=0; while(!(d>=10001&&d<=32767)) { printf("请输入您的卡号(五位数字),例如:10001\\n"); scanf("%d",&d); } i=0; while(a[i].kahao!=d&&i i++; } if(i==ygsm) { printf("您查找的名字不存在,请正确输入您的名字或用卡号查询\\n"); return; } printf("%-10d %-20s \n",d,a[i].xingming); for(j=0;a[i].m[j].yuefen!=NULL;j++) { printf("月份:%5d,应发工资:%10.2f,水费:%7.2f,电费:%7.2f,税金:%7.2f,实发工资:%10.2f.\\n",a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz); } printf("总实发工资:%10f\\n",a[i].zsfgz); b=0; while(b!=1&&b!=2) { printf("1,继续查询.\\n2,返回主菜单.\\n"); scanf("%d",&b); } if(b==1) { goto label_3; } else { ;return; } } } void liulan() { struct worker x; int c; float d; int i; int j; int k; for(i=0;i c=a[i].kahao; k=i; for(j=i+1;j if(c>a[j].kahao) { c=a[j].kahao; k=j; } } x=a[i]; a[i]=a[k]; a[k]=x; } for(i=0;i printf("%-10d %-20s \n",a[i].kahao,a[i].xingming); for(j=0;a[i].m[j].yuefen!=NULL;j++) { printf("月份:%5d,应发工资:%10.2f,水费:%7.2f,电费:%7.2f,税金:%7.2f,实发工资:%10.2f.\\n",a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz); } printf("总实发工资:%10f\\n",a[i].zsfgz); } for(i=0;i<40;i++) { printf("\\n"); } for(i=0;i d=a[i].zsfgz; k=i; for(j=i+1;j if(d { d=a[j].zsfgz; k=j; } } x=a[i]; a[i]=a[k]; a[k]=x; } for(i=0;i printf("%-20s %-10d \n",a[i].xingming,a[i].kahao); for(j=0;a[i].m[j].yuefen!=NULL;j++) { printf("月份:%5d,应发工资:%10.2f,水费:%7.2f,电费:%7.2f,税金:%7.2f,实发工资:%10.2f.\\n",a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz); } printf("总实发工资:%10f\\n",a[i].zsfgz); } } void shanchu() { FILE *fp; int b; int c; int i; int j; label_4: printf("请输入要删除信息的卡号:\\n"); scanf("%d",&b); for(i=0;i if(a[i].kahao==b) { j=i; } } for(i=j+1;i a[i-1]=a[i]; } ygsm--; fp=fopen("D:工资信息.txt"); for(i=0;i fwrite(&a[i],sizeof(struct worker),1,fp); } fclose(fp); c=0; while(c!=1&&c!=2) { printf("1.继续删除\\n2 返回主菜单\\n"); scanf("%d",&c); } if(c==1) { goto label_4; } else { return; } } void luru() { FILE *fp; int k; int i; int j; int b; int c; int d; if((fp=fopen("D:工资信息.txt"))==NULL) { printf("无法找到目标文件\\n"); return; } label_1: b=0; while(!(b>=1&&b<=12)) { printf("请您输入您要建立的月份\\n"); scanf("%d",&b); } b=b-1; d=0; while(!(d>=10001&&d<=32767)) { printf("请输入您要录入工资的卡号(五位数字),例如:10001\\n"); scanf("%d",&d); } for(i=0;i { c=0; while(c!=1&&c!=2) { printf("没有该卡号记录.\\n1 新建\\n2 返回上一级\\n"); scanf("%d",&c); } if(c==2) { goto label_1; } if(c==1) { a[i].kahao=d; printf("请输入姓名:\\n"); scanf("%s",a[i].xingming); a[i].m[b].yuefen=b+1; printf("请输入此人该月的应发工资:\\n"); scanf("%f",&a[i].m[b].yfgz); printf("请输入此人该月所用水费:\\n"); scanf("%f",&a[i].m[b].sf); printf("请输入此人该月所用电费\\n"); scanf("%f",&a[i].m[b].df); a[i].m[b].sj=shuijin(a[i].m[b].yfgz); a[i].m[b].sfgz=shifagongzi(a[i].m[b].yfgz,a[i].m[b].sf,a[i].m[b].df,a[i].m[b].sj); a[i].zsfgz=0; for(k=0;k<12;k++) { a[i].zsfgz+=a[i].m[k].sfgz; } ygsm++; c=0; while(c!=1 && c!=2) { printf("1 继续\\n2 返回主菜单\\n"); scanf("%d",&c); } if(c==1) { goto label_1; } if(c==2) { goto label_2; } } } else { if(a[i].m[b].yuefen==b+1) { c=0; while(c!=1 && c!=2) { printf("已有该月记录\\n1 覆盖原有记录\\n2 返回上级\\n"); scanf("%d",&c); } if(c==1) { printf("请输入此人该月的应发工资:\\n"); scanf("%d",&a[i].m[b].yfgz); printf("请输入此人该月所用水费:\\n"); scanf("%d",&a[i].m[b].sf); printf("请输入此人该月所用电费\\n"); scanf("%d",&a[i].m[b].df); a[i].m[b].sj=shuijin(a[i].m[b].yfgz); a[i].m[b].sfgz=shifagongzi(a[i].m[b].yfgz,a[i].m[b].sf,a[i].m[b].df,a[i].m[b].sj); a[i].zsfgz=0; for(k=0;k<12;k++) { a[i].zsfgz+=a[i].m[k].sfgz; } while(c!=1 && c!=2) { printf("1 继续\\n2 返回主菜单\\n"); scanf("%d",&c); } if(c==1) { goto label_1; } if(c==2) { goto label_2; } } else { goto label_1; } } if(a[i].m[b].yuefen==NULL) { a[i].m[b].yuefen=b+1; printf("请输入此人该月的应发工资:\\n"); scanf("%f",&a[i].m[b].yfgz); printf("请输入此人该月所用水费:\\n"); scanf("%f",&a[i].m[b].sf); printf("请输入此人该月所用电费\\n"); scanf("%f",&a[i].m[b].df); a[i].m[b].sj=shuijin(a[i].m[b].yfgz); a[i].m[b].sfgz=shifagongzi(a[i].m[b].yfgz,a[i].m[b].sf,a[i].m[b].df,a[i].m[b].sj); a[i].zsfgz=0; for(k=0;k<12;k++) { a[i].zsfgz+=a[i].m[k].sfgz; } c=0; while(c!=1 && c!=2) { printf("1 继续\\n2 返主主菜单\\n"); scanf("%d",&c); } if(c==1) { goto label_1; } if(c==2) { goto label_2; } } c=0; while(c!=1 && c!=2) { printf("1 继续\\n2返回主菜单\\n"); scanf("%d",&c); } if(c==1) { goto label_1; } if(c==2) { goto label_2; } } label_2: fp=fopen("D:工资信息.txt+"); for(j=0;j fwrite(&a[i],sizeof(struct worker),1,fp); } fclose(fp); } void main() { int a=0; duqu(); while(a!=5) { printf("/*******************欢迎使用*********************/\\n"); printf("/************* 请按菜单选项进行选择 *************/\\n"); printf("/************* 1.查询个人工资情况 *************/\\n"); printf("/************* 2.录入工资信息 *************/\\n"); printf("/************* 3.删除个人工资信息 *************/\\n"); printf("/************* 4.浏览员工工资信息 *************/\\n"); printf("/************* 5.退出工资管理系统 *************/\\n"); printf("/******************^_^ ^_^ ^_^*******************/\\n"); scanf("%d",&a); switch(a) { case 1:chaxun();break; case 2:luru();break; case 3:shanchu();break; case 4:liulan();break; default :break; } } }下载本文