#include
#include
#include
#include
#define LEN sizeof(struct employee)
typedef struct employee
{
char name[20];
long num;
char sex[5];
int age;
char addr[30];
int wage;
char health[20];
char edu[20];
struct employee * next;
}EMP;
void input();
EMP * open();
void numfind(EMP *);
void namefind(EMP *);
void modify(EMP *);
void delet(EMP *);
void numsort(EMP *);
void wagesort(EMP *);
void print(EMP *);
void renew(EMP *);
int n;
void main()
{
EMP *fhead;
int choice,flag=1;
char s;
while(flag)
{
printf("\n
printf("
printf("\n");
printf("
printf("
printf("
printf("
//输入职工信息
//将文件中的职工信息载入链表
//查找职工信息,按职工号查找
//查找职工信息,按职工姓名查找
//修改职工信息
//删除职工信息
//按工号给职工信息排序
//按工资给职工信息排序
//输出职工信息
//更新文件信息
//职工的个数
*****************************************************\n");
欢迎使用职工信息管理系统!");
*****************************************************\n\n");
>>> 主窗口菜单 <<<\n\n");
1.录入职工信息\n\n");
2.查找职工信息\n\n");
3.修改职工信息\n\n");
4.删除职工信息\n\n");
5.排序职工信息\n\n");
6.打印职工信息\n\n");
0.退出\n");
printf("
printf("
printf("
printf("
printf("
printf("\n 请选择: ");
scanf("%d",&choice);
getchar();
switch(choice)
{
case 0: exit(0);
case 1: input();break;
case 2:
system("cls");
printf("\na.按工号查找\n\n");
printf("b.按姓名查找\n");
printf("\n 请选择: ");
scanf("%c",&s);
getchar();
fhead=open();
if(s=='a')
numfind(fhead);
else if(s=='b')
namefind(fhead);
else
printf("\n 输入错误!\n");
break;
case 3: fhead=open();modify(fhead);break;
case 4: fhead=open();delet(fhead);break;
case 5:
system("cls");
printf("\na.按工号排序\n\n");
printf("b.按工资排序\n");
printf("\n 请选择: ");
scanf("%c",&s);
getchar();
fhead=open();
if(s=='a')
numsort(fhead);
else if(s=='b')
wagesort(fhead);
else
printf("\n 输入错误!\n");
break;
case 6: fhead=open();print(fhead);break;
default: printf("\n 输入错误!\n");
}
printf("\n 按任意键返回主菜单!");
getchar();
system("cls");
}
}
void input()
{
//录入信息
int flag=1;
char s;
FILE *fp;
EMP *p,*p1,*p2,*head;
head=p1=p2=(EMP *)malloc(LEN);
while(flag==1)
{
system("cls");
printf("\n 姓名: ");
scanf("%s",p1->name);
printf("\n 工号: ");
scanf("%ld",&p1->num);
getchar();
printf("\n 性别: ");
scanf("%s",p1->sex);
printf("\n 年龄: ");
scanf("%d",&p1->age);
printf("\n 地址: ");
scanf("%s",p1->addr);
printf("\n 月薪: ");
scanf("%d",&p1->wage);
printf("\n 健康状况: ");
scanf("%s",p1->health);
printf("\n 教育程度: ");
scanf("%s",p1->edu);
getchar();
printf("\n 是否继续录入?(y/n): ");
scanf("%c",&s);
getchar();
if(s=='y')
{
p2=p1;
p1=(EMP *)malloc(LEN);
p2->next=p1;
}
else
flag=0;
}
p1->next=NULL;
p=head;
if((fp=fopen("employee.txt","ab"))==NULL)
if((fp=fopen("employee.txt","wb"))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
while(p!=NULL)
{
if(fwrite(p,LEN,1,fp)!=1)
printf("无法保存!\n");
p=p->next;
}
fclose(fp);
printf("\n 录入成功!\n");
}
EMP * open(void)
{
n=0;
EMP *fhead,*p1,*p2;
FILE *fp;
fhead=NULL;
p1=p2=(EMP *)malloc(LEN);
if((fp=fopen("employee.txt","rb"))!=NULL)
{
fread(p1,LEN,1,fp);
while(!feof(fp))
{
n=n+1;
if(n==1)
fhead=p1;
else
p2->next=p1;
p2=p1;
p1=(EMP *)malloc(LEN);
fread(p1,LEN,1,fp);
}
p2->next=NULL;
}
else
fp=fopen("employee.txt","wb");
fclose(fp);
return (fhead);
}
void namefind(EMP * head)
{
int a=0;
char findname[20];
EMP *p;
p=head;
printf("\n 请输入姓名: ");
gets(findname);
while(p!=NULL)
{
if(strcmp(findname,p->name)==0)
{
a=a+1;
if(a==1)
printf("\n 姓名
工号
性别
年龄
地址
月薪
健康状况 教育程度\n\n");
printf("%-8s%-8ld%-8s%-8d%-14s%-9d%-12s%-8s\n",p->name,p->num,p->sex,p->age,p->a
ddr,p->wage,p->health,p->edu);
}
p=p->next;
}
if(a==0)
printf("\n 没有姓名为 %s 的职工\n",findname);
}
void numfind(EMP * head)
{
int findnum,a=0;
EMP *p;
p=head;
printf("\n 请输入职工号: ");
scanf("%ld",&findnum);
getchar();
while(p!=NULL)
{
if(findnum==p->num)
{
a=a+1;
printf("\n 姓名
状况 教育程度\n\n");
工号
性别
年龄
地址
月薪
健康
printf("%-8s%-8ld%-8s%-8d%-14s%-9d%-12s%-8s\n",p->name,p->num,p->sex,p->age,p->a
ddr,p->wage,p->health,p->edu);
}
p=p->next;
}
if(a==0)
printf("\n 没有工号为 %ld 的职工\n",findnum);
}
void modify(EMP * head)
{
EMP *p;
int a=0;
char findname[20];
p=head;
system("cls");
printf("\n 请输入姓名: ");
gets(findname);
while(p!=NULL)
{
if(strcmp(findname,p->name)==0)
{
a=a+1;
printf("\n 姓名
状况 教育程度\n\n");
工号
性别
年龄
地址
月薪
健康
printf("%-8s%-8ld%-8s%-8d%-14s%-9d%-12s%-8s\n",p->name,p->num,p->sex,p->age,p->a
ddr,p->wage,p->health,p->edu);
printf("\n 请修改!\n");
printf("\n 姓名: ");
scanf("%s",p->name);
printf("\n 工号: ");
scanf("%ld",&p->num);
getchar();
printf("\n 性别: ");
scanf("%s",p->sex);
printf("\n 年龄: ");
scanf("%d",&p->age);
printf("\n 地址: ");
scanf("%s",p->addr);
printf("\n 月薪: ");
scanf("%d",&p->wage);
printf("\n 健康状况: ");
scanf("%s",p->health);
printf("\n 教育程度: ");
scanf("%s",p->edu);
getchar();
printf("\n 修改成功!\n");
}
p=p->next;
}
if(a==0)
printf("\n 没有姓名为 %s 的职工\n",findname);
else
renew(head);
}
void delet(EMP * head)
{
int a=0;
char c,findname[20];
EMP *p1,*p2;
p1=p2=head;
system("cls");
printf("\n 请输入姓名: ");
scanf("%s",findname);
getchar();
while(p1!=NULL)
{
//清空缓冲区
if(strcmp(findname,p1->name)==0)
{
a=a+1;
printf("\n 姓名
状况 教育程度\n\n");
工号
性别
年龄
地址
月薪
健康
printf("%-8s%-8ld%-8s%-8d%-14s%-9d%-12s%-8s\n",p1->name,p1->num,p1->sex,p1->age,
p1->addr,p1->wage,p1->health,p1->edu);
printf("\n 确定删除该职工信息?(y/n): ");
c=getchar();
getchar();
if(c=='y')
{
//清空缓冲区
if(p1==head)
p1=p2=head=p1->next;
else
{
p2->next=p1->next;
free(p1);
p1=p2;
}
printf("\n 删除成功!\n");
}
}
p2=p1;
if(p1!=NULL)
p1=p1->next;
else;
}
if(a==0)
printf("\n 没有姓名为 %s 的职工\n",findname);
else
renew(head);
}
void renew(EMP * head)
{
FILE *fp;
struct employee *p;
p=head;
if((fp=fopen("employee.txt","wb"))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
while(p!=NULL)
{
if(fwrite(p,LEN,1,fp)!=1)
printf("无法保存!\n");
p=p->next;
}
fclose(fp);
}
void print(EMP * head)