[CSS] 纯文本查看 复制代码 #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <string.h> #define FORMART "|%-20d|%-15s|%-20lld|%-12.1f|\n" #define txtA emp[i].Number,emp[i].name,emp[i].Tel,emp[i].money struct employee{//员工信息结构体 int Number;//职工号 char name[20];//姓名 float money;//工资 long long int Tel;//电话 }; struct employee emp[1000],emp1; //功能函数声明 void Welcome(); //主菜单 void in(); //输入员工信息 void save(int m); //存储信息 int read(); // 读取信息 void Print();//浏览信息 void add() ; //添加 void find(); //查找 void findname(); //按姓名查找 void findnum(); //按职工号查找 void Delete(); //删除操作 void change(); //修改操作 //主函数 int main() { system("color 0e"); int n; while(1) { Welcome(); scanf("%d",&n); if(n==0) { printf("输入错误,麦克企业管理请重新输入!\n"); system("pause"); fflush(stdin); continue; } switch(n) { case 1: system("cls"); printf("\n\t\t\t 录入职工信息\n\n"); in(); break; case 2: system("cls"); printf("\n\t\t\t\t浏览职工信息\n"); Print(); system("cls"); break; case 3: system("cls"); printf("\n\t\t\t\t查询职工信息\n"); find(); break; case 4: system("cls"); printf("\n\t\t添加职工信息"); add() ; break; case 5: system("cls"); printf("\n\t\t\t\t删除职工信息\n\n"); Delete(); case 6: system("cls"); printf("\n\t\t\t\t修改职工信息\n"); change(); Print(); system("cls"); break; case 7: getchar(); exit(7); break; } } } void Welcome(){ //主菜单 printf("\n\n\n"); printf("\t\t**************************欢迎访问职工信息管理系统************************\n"); printf("\t\t** **\n"); printf("\t\t** **\n"); printf("\t\t** 1---录入职工信息数据 **\n"); printf("\t\t** 2---浏览职工信息数据 **\n"); printf("\t\t** 3---查询职工信息数据 **\n"); printf("\t\t** 4---添加职工信息数据 **\n"); printf("\t\t** 5---删除职工信息数据 **\n"); printf("\t\t** 6---修改职工信息数据 **\n"); printf("\t\t** 7---退出职工信息系统 **\n"); printf("\t\t** **\n"); printf("\t\t** **\n"); printf("\t\t**************************************************************************"); printf("\n请您选择你需要的操作(1-7): "); } void in(){ //录入职工信息 int i,m,num; printf("请您输入需要创建信息的职工人数: "); scanf("%d",&m); system("cls"); printf("\n"); for (i=0;i<m;i++) { printf("第%d个员工信息输入:\n", i+1); printf("请输入职工号: "); scanf("%d",&num); for(int j=0;j<i;j++) while(emp[j].Number==num) { printf("职工号为 %d 的员工已存在,请重新输入:\n",num); scanf("%d",&num); } emp[i].Number=num; printf("请输入姓名: "); scanf("%s",&emp[i].name); do { printf("请输入工资: "); scanf("%f",&emp[i].money); if(emp[i].money>0) break; else printf("对不起,您输入格式错误,请重新输入!\n"); }while(1); do { printf("请输入电话: "); scanf("%lld",&emp[i].Tel); if(emp[i].Tel>0) { break; } else { printf("对不起,您输入格式错误,请重新输入!\n"); } }while(1); system("cls"); printf("\n职工信息创建完成!\n\n"); } save(m); //保存入文件中 } void save(int m){ int i; FILE *fp; if ((fp=fopen("employee.dat","wb"))==NULL) { printf ("cannot open file!\n"); exit(0); } for (i=0;i<m;i++) if (fwrite(&emp[i],sizeof(struct employee),1,fp)!=1) printf("file write error!\n"); fclose(fp); } int read(){ //导入函数 FILE*fp; int i=0; if((fp=fopen("employee.dat","rb"))==NULL) { printf ("cannot open file!\n"); exit(0); } else { do { fread(&emp[i],sizeof(struct employee),1,fp); i++; }while(feof(fp)==0); } fclose(fp); return(i-1); } void Print(){ //浏览职工信息 char ch; int m=read(),x; int page=1,firstindex=0,i,pageamount=m/20+1,j;//定义联系人为一页 x=m-19; do { system("cls"); if(page>pageamount) printf("**对不起,页数的最大值为%d\n",pageamount); else if (page < 0) printf("**对不起,输入的数字必须为正数\n"); else { firstindex=20*(page - 1)-1; printf("\n贵公司所有职工信息(共计%d人):\n",m); printf("************************************************************************\n"); printf("|\t\t\t\t\t\t\t\t |\n"); printf("|职工号 |姓名 |电话 |工资 |\t\n"); for(i=0;i<firstindex;++i) m=i; i=0; //x=m-19; while(m!=NULL&&i<20) { if(j>=m+x) { break; } i++; j=i+firstindex; printf("|%-20d|%-15s|%-20lld|%-12.1f|\n",emp[j].Number,emp[j].name,emp[j].Tel,emp[j].money); } printf("|\t\t\t\t\t\t\t\t |\n"); printf("|\t\t\t\t\t\t\t\t |\n"); printf("|*************************** 第%d页(共%d页) *****************************|\n", page, pageamount); } printf("请输入跳转页面(按0返回通讯录主菜单):"); scanf("%d",&page); } while (page); printf("\n"); } void Delete(){ //删除职工信息 int m=read(); int i,j,t,n,f,Num; //Print(); printf("请您输入要删除的职工的职工号: "); scanf("%d",&Num); for(i=0,f=1;f&&i<m;i++) //遍历全部职员 { if(emp[i].Number==Num) //判断输入职工号是否与原职工号相同 { printf("\n已找到此人,原始记录为:\n"); printf("************************************************************************\n"); printf("|\t\t\t\t\t\t\t\t |\n"); printf("|职工号 |姓名 |电话 |工资 |\t\n"); printf(FORMART,txtA); printf("\n确认删除请按 1,取消删除请按 0: "); scanf("%d",&n); if(n==1) { for(j=i;j<m-1;j++) emp[j]=emp[j+1]; f=0; } else f=2; } } system("cls"); switch(f){ case 0: m=m-1; printf("\n\t\t\t\t删除成功!\n"); save(m); //调用保存函数 //Print(); //调用浏览函数 break; case 1: printf("\n\t\t\t没有该员工!\n"); //Print(); //调用浏览函数 break; case 2: printf("\n\t\t\t\t取消删除!\n"); break; } //Print(); /*调用浏览函数*/ printf("\n继续删除请按1,返回主菜单请按0: "); scanf("%d",&t); //输入t调用switch中的函数 system("cls"); switch(t) { case 1: Delete(); break; case 0: system("cls"); main(); break; default: break; } system("cls"); } void add(){ //添加职工信息 int n=read(); //读取文件 int i,m,num=0; printf("(目前职工人数%d人)\n\n",n); printf("请您输入需要添加信息的职工人数: "); scanf("%d",&m); if(m+n>1000) { system("cls"); printf("\n职工人数超出范围,请重新输入(0至%d之间):\n\n",1000-n); add(); //重新调用add()函数 } else{ for (i=n;i<m+n;i++) { printf("第%d个员工信息输入(按Enter确认输入): \n", i+1); printf("请输入职工号:"); scanf("%d",&num); for(int j=0;j<i;j++) while(emp[j].Number==num) //判断输入职工号是否与原职工号重复 { printf("职工号为 %d 的员工已存在,请重新输入\n",num); scanf("%d",&num); //重新输入职工号 } emp[i].Number=num; printf("请输入姓名:"); scanf("%s",emp[i].name); do { printf("请输入工资:"); scanf("%f",&emp[i].money); if(emp[i].money>0) { break; } else { printf("对不起,您输入格式错误,请重新输入!\n"); } }while(1); printf("请输入电话:"); scanf("%lld",&emp[i].Tel); system("cls"); printf("\n一个职工的信息档案创建完毕!请输入下一个职工的信息\n"); printf("\n"); } save(m+n); //调用save并保存文件 system("cls"); printf("\n添加职工信息完成! \n"); Print(); //调用Print函数 浏览全部信息 printf("\n按Enter键继续\n"); getchar(); //吸收回车 getchar(); //吸收回车 system("cls"); } } void find(){ //查询职工信息 int t; do { printf("\n 姓名查询请按 1; 职工号查询请按 2; 进入主菜单请按 0 : "); scanf("%d",&t); //输入数字对应操作选项 if(t>=0&&t<=3) { break; } else { printf("您输入有误,请重新选择!"); } }while(0); system("cls"); while(1) { switch(t) { case 0: main(); break; case 1: printf("\n按姓名查询\n"); findname(); break; case 2: printf("\n按职工号查询\n"); findnum(); break; default:break; } system("cls"); } } void findname(){ //按姓名查找职工信息 char name1[20]; //定义一个数组指向字符串 int i,t,n=0; int m=read(); printf("\n请输入要查找的姓名: "); scanf("%s",name1); for(i=0;i<m;i++) //遍历 if(strcmp(name1,emp[i].name)==0) //strcmp对两个字符串的大小进行比较 { if(n==0) { printf("\n已找到以下信息:\n"); printf("************************************************************************\n"); printf("|\t\t\t\t\t\t\t\t |\n"); printf("|职工号 |姓名 |电话 |工资 |\t\n"); } n++; printf(FORMART,txtA); } if(n==0) //没有一个符合条件 { printf("\n对不起,贵公司没有该员工!\n"); getchar(); getchar(); } else { printf("\n查询到有 %d 个员工符合要求。\n",n); printf("\n"); printf("删除员工请按 1,修改信息请按 2,继续查询请按 3,返回上一层请按 4,返回主菜单请按 0 :"); scanf("%d",&t); //输入数字对应操作选项 switch(t) { case 0: system("cls"); main(); break; case 1: Delete(); break; case 2: change(); break; case 3: break; case 4: system("cls"); find(); break; default:break; } } } void findnum(){ //按职工号查找职工信息 int num1; int i,t,n=0; int m=read(); printf("\n请输入要查找的职工号: "); scanf("%d",&num1); for(i=0;i<m;i++) //遍历 if(num1==emp[i].Number) { if(n==0) { printf("\n已找到以下信息:\n"); printf("************************************************************************\n"); printf("|\t\t\t\t\t\t\t\t |\n"); printf("|职工号 |姓名 |电话 |工资 |\t\n"); } n++; printf(FORMART,txtA); } if(n==0) //没有一个符合条件 { printf("\n对不起,贵公司没有该员工!\n"); getchar(); getchar(); } else { printf("\n查询到有 %d 个员工符合要求。\n",n); printf("\n"); printf("删除员工请按 1,修改信息请按 2,继续查询请按 3,返回上一层请按 4,返回主菜单请按 0 :"); scanf("%d",&t); //输入数字对应操作选项 switch(t) { case 0: system("cls"); main(); break; case 1: Delete(); break; case 2: change(); break; case 3: break; case 4: system("cls"); find(); break; default:break; } } } void change() { //修改职工信息 int Number; //职工号 char name[20]; //姓名 float money; //工资 int Tel; //电话 int b=1,c,i,n,t,k=0,g; int m=read(); //导入文件内的信息 printf("\n"); printf("请输入要修改的职工的职工号: "); scanf("%d",&Number); system("cls"); for(i=0;i<m;i++) { if(emp[i].Number==Number) //判断输入的职工号是否与原职工号相同 { k=1; printf("\n已找到该职工号员工,其记录为:\n"); printf("************************************************************************\n"); printf("|\t\t\t\t\t\t\t\t |\n"); printf("|职工号 |姓名 |电话 |工资 |\t\n"); printf(FORMART,txtA); printf("\n确认修改请按1,取消修改请按0:"); scanf("%d",&n); if(n==1) { printf("\n需要进行修改的选项\n 1.职工号 2.姓名 3.电话 4.工资 \n"); printf("请输入你想修改的那一项序号: "); scanf("%d",&c); //输入数字对应操作选项 do { switch(c) { case 1: printf("职工号改为: "); scanf("%d",&g); for(int i=0;i<m;i++) while(emp[i].Number==g) //判断输入的职工号是否与原来的重复 { printf("职工号为 %d 的员工已存在,请重新输入:\n",g); scanf("%d",&g); } emp[i].Number=g; //将重新输入的职工号录入程序中 break; case 2: printf("姓名改为: "); scanf("%s",name); strcpy(emp[i].name,name); break; case 4: printf("基本工资改为: "); scanf("%f",&money); emp[i].money=money; break; case 3: printf("电话改为: "); scanf("%lld",Tel); emp[i].Tel=Tel; break; } printf("\n确认修改 请按1,重新输入 请按2: "); scanf("%d",&b); if(b==1) { system("cls"); save(m);//储存修改后的数据 printf("\n"); } } while(b==2); } } else if(i==(m-1)) i++; } if(k==0) { printf("\n对不起,您输入有误!\n"); getchar(); getchar(); } else{ printf("\n继续修改请按 1,退出修改请按 0: "); scanf("%d",&t); } system("cls"); switch(t) { case 1: change();//返回修改函数 break; case 0: break; default:break; } system("cls"); } (责任编辑:) |