void display()/*显示职工信息*/
{
FILE *fp;
int i;
if((fp=fopen("employee.txt","r"))==NULL)
return;
printf("输出结果:/n");
printf("工号 职位 姓名 性别 文化程度 工资 身体情况/n");
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
{
printf("工号%d/n",em[i].num);
printf("职位为%d/n",em[i].position);
printf("1为董事长2为总经理3为副总经理/n");
printf("4为经理5为副经理6为秘书/n");
printf("7为技术员8为领班9为员工/n");
printf("姓名为%s/n",em[i].name);
printf("性别为%s/n",em[i].sex);
printf("其中m为男f为女/n");
printf("文化程度为%d/n",em[i].cult);
printf("1为专家2为博士3为硕士4为学士5为其他/n");
printf("工资为%d/n",em[i].salary);
printf("身体情况为%d/n",em[i].state);
printf("1好2为一般3为差/n");
}
printf("完毕按任意键返回/n");
getch();
fclose(fp);
return;
}
void change()
{
FILE *fp;
int i;
char chname[8];
int choicechange;
printf("请你输入要修改的人的姓名:/n");
scanf("%s",&chname);
if((fp=fopen("employee.txt","w+"))==NULL)
{
printf("不能够打开这个文件/n");
return;
}
for(i=0;i<N;i++)
{
if(strcmp(chname,em[i].name)==0)
{
printf("这是你要修改的人的信息/n");
printf("工号为%d职位为%d姓名为%s性别为%s文化程度为%d工资为%d身体为%d/n",em[i].num,em[i].position,em[i].name,em[i].sex,em[i].cult,em[i].salary,em[i].state);
printf("------------------------------------------------------------/n");
printf("请你输入要修改的部分:/n");
printf("======================/n");
printf("1修改职位/n");
printf("2修改文化程度/n");
printf("3修改工资/n");
printf("4修改身体情况/n");
printf("0退出系统/n");
printf("======================/n");
printf("请选择/n");
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("输入有错误");
}
fwrite(&em[i],sizeof(struct employee),1,fp);
}
}
fclose(fp);
printf("操作完成按任意键返回/n");
getch();
return;
}
int changeposition()
{
int newposition;
printf("请你输入新职位:/n");
printf("1为董事长2为总经理3为副总经理/n");
printf("4为经理5为副经理6为秘书/n");
printf("7为技术员8为领班9为员工/n");
scanf("%d",&newposition);
return(newposition);
}
int changecult()
{
int newcult;
printf("请你输入新的文凭:/n");
printf("1为专家2为博士3为硕士4为学士5为其他/n");
scanf("%d",&newcult);
return(newcult);
}
int changesalary()
{
int newsalary;
printf("请你输入新的工资:/n");
scanf("%d",&newsalary);
return(newsalary);
}
int changestate()
{
int newstate;
printf("请你输入现在的身体情况:/n");
printf("1好2为一般3为差/n");
scanf("%d",&newstate);
return(newstate);
}
void add()/*追加一个职工信息*/
{
struct employee emp;
FILE *fp;
if((fp=fopen("employee.txt","ab+"))==NULL)
{
printf("不能够打开这个文件/n");
getch();
return;
}
printf("请你输入新人的内容:/n");
printf("请你输入工号:/n");/*输入工号*/
scanf("%d",&emp.num);
printf("请你输入职位:/n");/*输入职位*/
printf("1为董事长2为总经理3为副总经理/n");
printf("4为经理5为副经理6为秘书/n");
printf("7为技术员8为领班9为员工/n");
scanf("%d",&emp.position);
printf("请你输入姓名:/n");/*输入姓名*/
scanf("%s",emp.name);
printf("请你输入性别以m为男f为女:/n");/*输入性别*/
scanf("%s",emp.sex);
printf("请你输入文化程度:/n");/*输入文化程度*/
printf("1为专家2为博士3为硕士4为学士5为其他/n");
scanf("%d",&emp.cult);
printf("请你输入工资:/n");/*输入工资*/
scanf("%d",&emp.salary);
printf("请你输入身体情况:/n");/*身体情况*/
printf("1好2为一般3为差/n");
scanf("%d",&emp.state);
fwrite(&emp,sizeof(struct employee),1,fp);
rewind(fp);
printf("插入完毕,按任意键返回/n");
getch();
fclose(fp);
return;
}
void del()/*删除一个职工信息*/
{
int i=0;
char delname[8];
FILE *fp;
if((fp=fopen("employee.txt","w"))==NULL)
{
printf("文件为空,不能够打开/n");
printf("按任意键返回/n");
getch();
return;
}
printf("请你输入要删除的人的姓名:/n");/*删除的职工的信息*/
scanf("%s",delname);
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
{
if(strcmp(em[i].name,delname)!=0)
fwrite(&em[i],sizeof(struct employee),1,fp);
}
fclose(fp);
if((fp=fopen("employee.txt","r"))==NULL)/*显示新的职工的信息*/
return;
printf("新的职工的信息为:/n");
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
{
printf("工号%d",em[i].num);
printf("职位为%d",em[i].position);
printf("1为董事长2为总经理3为副总经理/n");
printf("4为经理5为副经理6为秘书/n");
printf("7为技术员8为领班9为员工/n");
printf("姓名为%s",em[i].name[8]);
printf("性别为%s",em[i].sex[2]);
printf("其中m为男f为女");
printf("文化程度为%d",em[i].cult);
printf("1为专家2为博士3为硕士4为学士5为其他/n");
printf("工资为%d",em[i].salary);
printf("身体情况为%d",em[i].state);
printf("1好2为一般3为差/n");
fclose(fp);
}
}
void count()
{
FILE *fp;
int i=0;
int num=0;/*总人数统计*/
int mnum=0,fnum=0;/*性别人数统计*/
int expernum=0,doctornum=0,masternum=0,bechelornum=0,othernum=0;/*学位人数统计*/
int dsznum=0,zglnum=0,fzglnum=0,glnum=0,fglnum=0;/*职位人数统计*/
int mishunum=0,jsynum=0,lbnum=0,ygnum=0;
if((fp=fopen("employee.txt","r"))==NULL)
{
printf("不能够打开这个文件/n");
printf("按任意键继续/n");
getch();
return;
}
do
{
fread(&em[i],sizeof(struct employee),1,fp);
if(feof(fp))
break;
num++;
if(strcmp(em[i].sex,"m")==0)
mnum++;
if(strcmp(em[i].sex,"f")==0)
fnum++;
if(em[i].cult==1)
expernum++;
if(em[i].cult==2)
doctornum++;
if(em[i].cult==3)
masternum++;
if(em[i].cult==4)
bechelornum++;
if(em[i].cult==5)
othernum++;
if(em[i].position==1)/*职位统计*/
dsznum++;
if(em[i].position==2)
zglnum++;
if(em[i].position==3)
fzglnum++;
if(em[i].position==4)
glnum++;
if(em[i].position==5)
fglnum++;
if(em[i].position==6)
mishunum++;
if(em[i].position==7)
jsynum++;
if(em[i].position==8)
lbnum++;
if(em[i].position==9)
ygnum++;
i++;
}while(1);
printf("总人数为%d/n",num);
printf("====性别分类=====/n");
printf("男人数为%d/n",mnum);
printf("女人数为%d/n",fnum);
printf("=====文凭分类=====/n");
printf("专家数为%d/n",expernum);
printf("博士数为%d/n",doctornum);
printf("硕士数为%d/n",masternum);
printf("学士数为%d/n",bechelornum);
printf("其他的数为%d/n",othernum);
printf("=====职位分类========/n");
printf("董事长数为%d/n",dsznum);
printf("总经理数为%d/n",zglnum);
printf("副总经理数为%d",fzglnum);
printf("经理数为%d",glnum);
printf("副经理数为%d",fglnum);
printf("秘书数为%d",mishunum);
printf("技术员数为%d",jsynum);
printf("领班人数为%d",lbnum);
printf("员工数为%d",ygnum);
fclose(fp);
return;
}
void query()
{
FILE *fp;
int i=0;
char quename[8];
if((fp=fopen("employee.txt","r"))==NULL)
{
printf("不能够打开文件,按任意键返回/n");
getch();
return;
}
printf("请你输入要查询的人的姓名/n");
scanf("%s",quename);
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
{
if(strcmp(em[i].name,quename)==0) /*找到,并显示该职工记录*/
{
printf("/t/t/n查询到的职工号或姓名为的信息如下:/n");
printf("以下是你要查询的人的信息/n");
printf("工号%d",em[i].num);
printf("职位为%d",em[i].position);
printf("/t1为董事长2为总经理3为副总经理/n");
printf("/t4为经理5为副经理6为秘书/n");
printf("/t7为技术员8为领班9为员工/n");
printf("姓名为%s",em[i].name);
printf("性别为%s",em[i].sex);
printf("/t其中m为男f为女");
printf("文化程度为%d",em[i].cult);
printf("/t1为专家2为博士3为硕士4为学士5为其他/n");
printf("工资为%d",em[i].salary);
printf("身体情况为%d",em[i].state);
printf("/n");
printf("查询完毕,按任意键返回/n");
getch();
fclose(fp);
return;
}
}
printf("没有这样的人,按任意键返回/n");
getch();
fclose(fp);
return;
}
void querysalary()
{
int i;
FILE *fp1,*fp2;
creat();
if((fp1=fopen("employee.txt","w+"))==NULL)
return;
for(i=0;fread(&em[i],sizeof(struct employee),1,fp1)!=0;i++)
{
printf("输出结果为:/n");
printf("工号%d",em[i].num);
printf("职位为%d",em[i].position);
printf("1为董事长2为总经理3为副总经理/n");
printf("4为经理5为副经理6为秘书/n");
printf("7为技术员8为领班9为员工/n");
printf("姓名为%s",em[i].name[8]);
printf("性别为%s",em[i].sex[2]);
printf("其中m为男f为女");
printf("文化程度为%d",em[i].cult);
printf("1为专家2为博士3为硕士4为学士5为其他/n");
printf("工资为%d",em[i].salary);
printf("身体情况为%d",em[i].state);
printf("1好2为一般3为差/n");
strcpy(emps[i].name,em[i].name);
emps[i].salary=em[i].salary;
}
if((fp2=fopen("empsalary.txt","w"))==NULL)
return;
for(i=0;i<N;i++)
fwrite(&emps[i],sizeof(struct empsalary),1,fp2);
fclose(fp1);
fclose(fp2);
}
void creat()
{
FILE *fp;
if((fp=fopen("employee.txt","w+"))==NULL)
return;
input();
fclose(fp);
}
int INDEX[N];
void sort_it(char nn)
{
int n,m,p,x,t[N];
for(n=0;n<N;n++)
{
switch(nn)
{case'1':t[n]=em[n].num;break;
case'2':t[n]=em[n].name;break;
case'3':t[n]=em[n].sex;break;
case'4':t[n]=em[n].position;break;
case'5':t[n]=em[n].cult;break;
case'6':t[n]=em[n].salary;break;
}
}
for(n=0;n<N;n++)
{
x=0;
p=-1;
for(m=0;m<N;m++)
{
if(t[m]>x)
{
x=t[m];p=m;
}
}
t[p]=-1;
INDEX[n]=p;
}
}
void browser(void)
{
int x ,n;
char k;
sort_it('1');
while(1)
{
input("浏览");
printf("按数字键选择排序方式或按0返回/n");
printf("工号-1/t姓名/t性别/t年龄/t职位-2/t文化程度-3/t工资-4/n");
for(n=0;n<N;n++)
{
if(INDEX[n]!=-1)
{
x=INDEX[n];
printf("%d/t%s/t",em[x].num,em[x].name);
printf("%d/t%d/t",em[x].sex,em[x].age);
printf("%d/t%d/t",em[x].position,em[x].cult);
printf("%d/t%d/t",em[x].salary);
}
}
k=getch();
if(k<'6'&&k>'0')sort_it(k);
else if(k==0)break;
else continue;
}
}
四、运行结果
开始程序,输入密码,进入程序
输入“1”,进入管理系统
输入“1”,开始输入职工信息
继续输入
继续输入
输入完毕,返回管理系统
输入“2”,使用功能——显示职工信息
返回后,输入“3”,修改职工信息
修改其“文凭”
返回,输入“6”,统计职工信息
输入“n”,返回主菜单,输入“2”,进入查询系统。输入要查询人姓名,可以得到其信息
使用完毕,输入“0”,退出系统
经过试验,程序可以有效的运行,并成功达到预期目的。