/*八、简单的职工治理系统 1.问题描述 对单位的职工进行治理,包括插入、删除、查找、排序等功能。 2.要求 职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。 (1)新增一名职工:将新增职工对象按姓名以字典方式职工治理文件中。 (2)删除一名职工:从职工治理文件中删除一名职工对象。 (3)查询:从职工治理文件中查询符合某些条件的职工。 (4)修改:检索某个职工对象,对其某些属性进行修改。 (5)排序:按某种需要对职工对象文件进行排序。 3.实现提示 职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。 (1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。 (2)对职工对象中的"姓名"按字典顺序进行排序。 (3)对排序后的职工对象进行增、删、查询、修改、排序等操作。 4.选做内容 将职工对象按散列法存储,并设计解决冲突的方法。在此基础上实现增、删、查询、修改、排序等操作。 */
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #define N 100
typedef strUCt employee//职工基本情况 { int num;//工号 int position;//职位1为董事长2为总经理3为副总经理等 char name[8];//姓名 char sex[2];//性别f为女m为男 int age;//年龄 int cult;//文化程度1为专家2为博士3为硕士4为学士5为其他 int salary;//工资 int state;//健康情况分为good,general,bad char day[10];//工作年月 }ro; ro em[N];
typedef struct communication//职工通讯录 { char name[8]; char Officetel[13]; char hometel[13]; char handtel[13]; char address[13]; char time[13]; }el; el empc[N];
void manage(); void query(); void communicate(); void input(); void display(); void change(); void del(); void add(); int changeposition(); int changecult(); int changesalary(); int changestate(); void inputcommunicate(); void querycommunicate(); void changecommunicate(); char *changetel1(); char *changetel2(); char *changetel3();
int total; int p;
char passWord[10]="talentxch";
void main() { int choice; char s[10]; int flag=0; int n=3; do { printf("请你输入密码: "); scanf("%s",s); if(!strcmp(s,password))//若密码正确 { printf("恭喜你成功登陆了 "); flag=1; break;
} else { printf("输入有错误请重新输入: "); n--; } }while(n>0); if(!flag) { printf("你的输入次数已到再见 "); } do { printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "); printf(" 欢迎进入职工治理系统中文版 "); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "); printf(" 请你选择操作类型: "); printf("====================================================== "); printf(" 1进入治理系统 "); printf(" 2进入查询系统 "); printf(" 3进入通讯录 "); printf(" 0退出系统 "); printf("====================================================== "); scanf("%d",&choice); switch(choice) { case 1:manage(); break; case 2:query(); break; case 3:communicate(); break; case 0: { printf("谢谢使用再见 "); exit(0); } default: { printf("输入有错误请重新输入: "); return; } } }while(1); }
void manage() { int choicemanage; char choice='y'; while(choice=='y'choice=='Y')
{ printf(" 欢迎进入治理系统 "); printf("====================================================== "); printf(" 请你选择操作类型: "); printf(" 1输入职工信息 "); printf(" 2显示职工信息 "); printf(" 3修改职工信息 "); printf(" 4追加一个职工信息 "); printf(" 5删除一个职工信息 "); printf(" 0返回 "); printf("====================================================== "); scanf("%d",&choicemanage); switch(choicemanage) { case 1: input();//输入职工信息 break; case 2:display();//显示职工信息 break; case 3:change();//修改职工信息 break; case 4:add();//追加一个职工信息 break; case 5:del();//删除一个职工信息 break; case 0: printf("谢谢你的使用再见 "); return; default:printf("你的输入有错请重新输入 "); } printf("是否继续治理?(y/n)"); scanf("%s",&choice); } if(toupper(choice)=='N'(choice)=='n') { printf("输入完毕,任意键返回 "); getch(); return; } }
void input() { FILE *fp; int i=0; char choiceinput='y'; if((fp=fopen("employee.txt","w"))==NULL) return; while(choiceinput=='y'choiceinput=='Y')
{ i++; total++; printf("第%d个职工 ",i); printf(" "); printf("请你输入工号: ");//输入工号 scanf("%d",&em[i].num); printf(" "); printf("请你输入职位: ");//输入职位 printf("1董事长 2总经理 3副总经理 "); printf("4部门经理 5工程师 6秘书 "); printf("7技术员 8领班 9员工 "); scanf("%d",&em[i].position); printf(" "); printf("请你输入姓名: ");//输入姓名 scanf("%s",em[i].name); printf(" "); printf("请你输入性别以(m男f女): ");//输入性别 scanf("%s",em[i].sex); printf(" "); printf("请你输入文化程度: ");//输入文化程度 printf("1专家 2博士 3硕士 4学士 5其他 "); scanf("%d",&em[i].cult); printf(" "); printf("请你输入工资: ");//输入工资 scanf("%d",&em[i].salary); printf(" "); printf("请你输入身体情况: ");//身体情况 printf("1好 2一般 3差 "); scanf("%d",&em[i].state); printf("请你输入工作年月: "); scanf("%s",em[i].day); printf(" "); printf("是否继续输入?(y/n) "); scanf("%s",&choiceinput); fwrite(&em[i],sizeof(struct employee),1,fp); } if(toupper(choiceinput)=='N') //字符大小写转换 { fclose(fp); printf("输入完毕,任意键返回 "); getch(); return; } }
void display()//显示职工信息 { FILE *fp; int i; if((fp=fopen("employee.txt","r"))==NULL) return; printf("输出结果: "); printf("工号 职位 姓名 性别 文化程度 工资 身体情况 "); printf(" "); for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++) {
printf(" "); printf("工号: %d ",em[i].num); printf("职位: %d ",em[i].position); printf("1董事长 2总经理 3副总经理 "); printf("4部门经理 5工程师 6秘书 "); printf("7技术员 8领班 9员工 "); printf("姓名: %s ",em[i].name); printf("性别: %s ",em[i].sex); printf("其中(m男f女) "); printf("文化程度: %d ",em[i].cult); printf("1专家 2博士 3硕士 4学士 5其他 "); printf("工资: %d ",em[i].salary); printf("身体情况: %d ",em[i].state); printf("1好 2一般 3差 "); printf("工作年月: %s",em[i].day); printf(" "); } printf(" "); printf("完毕按任意键返回 "); getch(); //文件里用 fclose(fp); return; }
void change() { FILE *fp; int i; char chname[8]; int choicechange; ro a[N]; printf("请你输入要修改的人的姓名: "); scanf("%s",&chname); if((fp=fopen("employee.txt","w+"))==NULL) { printf("不能够打开这个文件 "); return; } for(i=0;i<N;i++) { if(strcmp(chname,em[i].name)==0) { printf("这是你要修改的人的信息 "); printf("工号:%d 职位:%d 姓名:%s 性别:%s 文化程度:%d 工资:%d 身体:%d ",em[i].num,em[i].position,em[i].name,em[i].sex,em[i].cult,em[i].salary,em[i].state); printf("-------------------------------------------------------- "); printf("请你输入要修改的部分: "); printf("======================================================== "); printf("1修改职位 "); printf("2修改文化程度 "); printf("3修改工资 "); printf("4修改身体情况 "); printf("0退出系统 "); printf("======================================================== "); printf("请选择 "); scanf("%d",&choicechange); switch(choicechange) { case 1: em[i].position=changeposition(); break; case 2: em[i].cult=changecult(); break; case 3: em[i].salary=changesalary();
break; case 4: em[i].state=changestate(); break; case 0: return; default : printf("输入有错误"); } a[i]=em[i]; } else { a[i]=em[i]; } } for(i=0;i<total;i++) { em[i]=a[i]; } i=0; fwrite(&em[i],sizeof(struct employee),total,fp); fclose(fp); printf("操作完成按任意键返回 "); getch(); return; }
int changeposition() { int newposition; printf("请你输入新职位: "); printf("1董事长 2总经理 3副总经理 "); printf("4部门经理 5工程师 6秘书 "); printf("7技术员 8领班 9员工 "); scanf("%d",&newposition); return(newposition); }
int changecult() { int newcult; printf("请你输入新的文凭: "); printf("1专家 2博士 3硕士 4学士 5其他 "); scanf("%d",&newcult); return(newcult); }
int changesalary() { int newsalary; printf("请你输入新的工资: "); scanf("%d",&newsalary); return(newsalary); }
int changestate() { int newstate; printf("请你输入现在的身体情况: "); printf("1好 2一般 3差 "); scanf("%d",&newstate); return(newstate); }
void add()//追加一个职工信息 { struct employee emp; FILE *fp; int i=0; if((fp=fopen("employee.txt","ab+"))==NULL) { printf("不能够打开这个文件 "); getch(); return; } printf("请你输入新人的内容: "); printf("请你输入工号: ");//输入工号 scanf("%d",&emp.num); printf("请你输入职位: ");//输入职位 printf("1董事长 2总经理 3副总经理 "); printf("4部门经理 5工程师 6秘书 "); printf("7技术员 8领班 9员工 "); scanf("%d",&emp.position); printf("请你输入姓名: ");//输入姓名 scanf("%s",emp.name); printf("请你输入性别以(m男f女): ");//输入性别 scanf("%s",emp.sex); printf("请你输入文化程度: ");//输入文化程度 printf("1专家 2博士 3硕士 4学士 5其他 "); scanf("%d",&emp.cult); printf("请你输入工资: ");//输入工资 scanf("%d",&emp.salary); printf("请你输入身体情况: ");//身体情况 printf("1好 2一般 3差 "); scanf("%d",&emp.state); printf("请你输入工作年月: "); scanf("%s",emp.day); fwrite(&emp,sizeof(struct employee),1,fp); rewind(fp); printf("插入完毕,按任意键返回 "); getch(); total=total+1; fclose(fp); return; }
void del()//删除一个职工信息 { int i=0; char delname[8]; FILE *fp; if((fp=fopen("employee.txt","w"))==NULL) { printf("文件为空,不能够打开 "); printf("按任意键返回 "); getch(); return; } printf("请你输入要删除的人的姓名: ");//删除的职工的信息 scanf("%s",delname); for(i=0;i<N;i++) { if(strcmp(em[i].name,delname)==0) { total--; for(;i<N;i++) { em[i]=em[i+1]; } } } i=0; fwrite(&em[i],sizeof(struct employee),total,fp); fclose(fp); }
void query() { FILE *fp; int i=0; char quename[8]; if((fp=fopen("employee.txt","r"))==NULL) { printf("不能够打开文件,按任意键返回 "); getch(); return; } printf("请你输入要查询的人的姓名 "); scanf("%s",quename); for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++) { if(strcmp(em[i].name,quename)==0) /*找到,并显示该职工记录*/ { printf(" 查询到的职工号或姓名为的信息如下: "); printf("以下是你要查询的人的信息 "); printf("工号: %d ",em[i].num); printf("职位: %d ",em[i].position); printf("1董事长 2总经理 3副总经理 "); printf("4部门经理 5工程师 6秘书 "); printf("7技术员 8领班 9员工 "); printf("姓名: %s ",em[i].name); printf("性别: %s ",em[i].sex); printf("其中(m男f女) "); printf("文化程度: %d ",em[i].cult); printf("1专家 2博士 3硕士 4学士 5其他 "); printf("工资: %d ",em[i].salary); printf("身体情况: %d ",em[i].state); printf("1好 2一般 3差 "); printf("工作年月: %s ",em[i].day); printf(" "); printf("查询完毕,按任意键返回 "); getch();
fclose(fp); return; } } printf("没有这样的人,按任意键返回 "); getch(); fclose(fp); return; }
void communicate() { int choicecommunicate; printf("欢迎进入通讯录系统 "); printf("请你选择操作类型: "); printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "); printf("1为输入通讯录信息 "); printf("2为查询通讯录信息 "); printf("3为修改通讯录信息 "); printf("0为退出通讯录系统 "); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "); scanf("%d",&choicecommunicate); switch(choicecommunicate) { case 1:inputcommunicate(); break; case 2:querycommunicate(); break; case 3:changecommunicate(); break; case 0: { printf("谢谢使用再见 "); printf("按任意键返回 "); getch(); return; } default: printf("输入有错 "); } }
void inputcommunicate() { FILE *fp; int choiceincom='y'; int i=0; if((fp=fopen("empcom.txt","w"))==NULL) { printf("不能够打开文件 "); printf("任意键返回 "); getch(); return; } printf("请你输入通讯录的信息: "); while(choiceincom=='y'choiceincom=='Y') { p++; i++;
printf("第%d个职工 ",i); printf("请你输入姓名: "); scanf("%s",empc[i].name); printf("请你输入生日: "); scanf("%s",empc[i].time); printf("请你输入办公室电话号码: "); scanf("%s",empc[i].officetel); printf("请你输入家庭电话号码: "); scanf("%s",empc[i].hometel); printf("请你输入手机号码: "); scanf("%s",empc[i].handtel); printf("请你输入地址: "); scanf("%s",empc[i].address); printf("是否继续输入?(y/n) "); choiceincom=getch(); fwrite(&empc[i],sizeof(struct communication),1,fp); } if(toupper(choiceincom)=='N') { fclose(fp); printf("输入完毕,任意键返回 "); return; } }
void querycommunicate() { FILE *fp; int i=0; char qcname[8]; if((fp=fopen("empcom.txt","r"))==NULL) { printf("不能够打开文件,按任意键返回 "); getch();
return; } printf("请你输入要查询的人的姓名: "); scanf("%s",qcname); for(i=0;fread(&empc[i],sizeof(struct communication),1,fp)!=0;i++) { if(strcmp(empc[i].name,qcname)==0) { printf("以下为您所要求的信息: "); printf("姓名: %s ",empc[i].name); printf("生日: %s ",empc[i].time); printf("办公室电话号码: %s ",empc[i].officetel); printf("家庭电话号码: %s ",empc[i].hometel); printf("手机号码: %s ",empc[i].handtel); printf("家庭地址: %s ",empc[i].address); printf("查询完毕,按任意键返回 "); getch(); fclose(fp); return; } } printf("没有这样的人,按任意键返回 "); getch(); fclose(fp); return; }
void changecommunicate() { FILE *fp; int i=0; char chcname[8]; int choicecom; el b[N]; if((fp=fopen("empcom.txt","w+"))==NULL) { printf("打不开文件按任意键返回 "); getch(); return; } printf("请你输入你要修改的人的姓名: "); scanf("%s",chcname); for(i=0;i<p;i++) { if(strcmp(empc[i].name,chcname)==0)
{ printf("以下为您所要修改的人的信息: "); printf("姓名:%s ",empc[i].name); printf("生日: %s ",empc[i].time); printf("办公室电话号码: %s ",empc[i].officetel); printf("家庭电话号码: %s ",empc[i].hometel); printf("手机号码: %s ",empc[i].handtel); printf("家庭地址: %s ",empc[i].address); printf("请你选择要修改的东西: "); printf("$$$$$$$$$$$$$$$$$$$$$$ "); printf("1修改办公室电话号码 "); printf("2修改家庭电话号码 "); printf("3修改手机电话号码 "); printf("0退出系统 "); printf("$$$$$$$$$$$$$$$$$$$$$$ "); scanf("%d",&choicecom); switch(choicecom) { case 1:strcpy(empc[i].officetel,changetel1()); break; case 2:strcpy(empc[i].hometel,changetel2()); break; case 3:strcpy(empc[i].handtel,changetel3()); break; case 0:
return; default: printf("输入有错 "); } b[i]=empc[i]; } else } for(i=0;i<p;i++) i=0; fwrite(&empc[i],sizeof(struct communication),p,fp); fclose(fp); printf("操作完成按任意键返回 "); getch(); return; }
char *changetel1() { char newofficetel[13]; printf("请你输入新办公室电话号码: "); scanf("%s",newofficetel); return(newofficetel); }
char *changetel2() { char newhometel[13]; printf("请你输入新家庭电话号码: "); scanf("%s",newhometel); return(newhometel); }
char *changetel3() { char newhandtel[13]; printf("请你输入新手机电话号码: "); scanf("%s",newhandtel); return(newhandtel); }
|