/*八、简单的职工治理系统
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);
}