职工信息管理系统c语言版.docx
《职工信息管理系统c语言版.docx》由会员分享,可在线阅读,更多相关《职工信息管理系统c语言版.docx(17页珍藏版)》请在冰豆网上搜索。
职工信息管理系统c语言版
#include
#include
#include
#include
#defineLENsizeof(structemployee)
typedefstructemployee
{
charname[20];
longnum;
charsex[5];
intage;
charaddr[30];
intwage;
charhealth[20];
charedu[20];
structemployee*next;
}EMP;
voidinput();//输入职工信息
EMP*open();//将文件中的职工信息载入链表
voidnumfind(EMP*);//查找职工信息,按职工号查找
voidnamefind(EMP*);//查找职工信息,按职工姓名查找
voidmodify(EMP*);//修改职工信息
voiddelet(EMP*);//删除职工信息
voidnumsort(EMP*);//按工号给职工信息排序
voidwagesort(EMP*);//按工资给职工信息排序
voidprint(EMP*);//输出职工信息
voidrenew(EMP*);//更新文件信息
intn;//职工的个数
voidmain()
{
EMP*fhead;
intchoice,flag=1;
chars;
while(flag)
{
printf("\n*****************************************************\n");
printf("欢迎使用职工信息管理系统!
");
printf("\n");
printf("*****************************************************\n\n");
printf(">>>主窗口菜单<<<\n\n");
printf("1.录入职工信息\n\n");
printf("2.查找职工信息\n\n");
printf("3.修改职工信息\n\n");
printf("4.删除职工信息\n\n");
printf("5.排序职工信息\n\n");
printf("6.打印职工信息\n\n");
printf("0.退出\n");
printf("\n请选择:
");
scanf("%d",&choice);
getchar();
switch(choice)
{
case0:
exit(0);
case1:
input();break;
case2:
system("cls");
printf("\na.按工号查找\n\n");
printf("b.按姓名查找\n");
printf("\n请选择:
");
scanf("%c",&s);
getchar();
fhead=open();
if(s=='a')
numfind(fhead);
elseif(s=='b')
namefind(fhead);
else
printf("\n输入错误!
\n");
break;
case3:
fhead=open();modify(fhead);break;
case4:
fhead=open();delet(fhead);break;
case5:
system("cls");
printf("\na.按工号排序\n\n");
printf("b.按工资排序\n");
printf("\n请选择:
");
scanf("%c",&s);
getchar();
fhead=open();
if(s=='a')
numsort(fhead);
elseif(s=='b')
wagesort(fhead);
else
printf("\n输入错误!
\n");
break;
case6:
fhead=open();print(fhead);break;
default:
printf("\n输入错误!
\n");
}
printf("\n按任意键返回主菜单!
");
getchar();
system("cls");
}
}
voidinput()//录入信息
{
intflag=1;
chars;
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);
}
voidnamefind(EMP*head)
{
inta=0;
charfindname[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->addr,p->wage,p->health,p->edu);
}
p=p->next;
}
if(a==0)
printf("\n没有姓名为%s的职工\n",findname);
}
voidnumfind(EMP*head)
{
intfindnum,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->addr,p->wage,p->health,p->edu);
}
p=p->next;
}
if(a==0)
printf("\n没有工号为%ld的职工\n",findnum);
}
voidmodify(EMP*head)
{
EMP*p;
inta=0;
charfindname[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->addr,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);
}
voiddelet(EMP*head)
{
inta=0;
charc,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);
}
voidrenew(EMP*head)
{
FILE*fp;
structemployee*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);
}
voidprint(EMP*head)
{
EMP*p;
p=head;
system("cls");
if(p==NULL)
printf("\n无任何信息!
\n");
else
{
printf("\n姓名工号性别年龄地址月薪健康状况教育程度\n\n");
while(p!
=NULL)
{
printf("%-8s%-8ld%-8s%-8d%-14s%-9d%-12s%-8s\n\n",p->name,p->num,p->sex,p->age,p->addr,p->wage,p->health,p->edu);
p=p->next;
}
}
}
voidnumsort(EMP*head)//按工号排序
{
inti;
EMP*p1,*p2,*p3,*end=NULL;
p1=p2=p3=head;
if(head!
=NULL&&head->next!
=NULL)
for(i=1;i{
p1=p1->next;
while(p1!
=end)
if(p1->numnum)
{
p2->next=p1->next;
p1->next=p2;
if(p2==p3)
head=p1;
else
p3->next=p1;
p3=p1;
p1=p2->next;
}
else
{
p3=p2;
p2=p1;
p1=p1->next;
}
end=p2;
p1=p2=p3=head;
}
renew(head);
}
voidwagesort(EMP*head)//按工资排序
{
inti;
EMP*p1,*p2,*p3,*end=NULL;
p1=p2=p3=head;
if(head!
=NULL&&head->next!
=NULL)
for(i=1;i{
p1=p1->next;
while(p1!
=end)
if(p1->wagewage)
{
p2->next=p1->next;
p1->next=p2;
if(p2==p3)
head=p1;
else
p3->next=p1;
p3=p1;
p1=p2->next;
}
else
{
p3=p2;
p2=p1;
p1=p1->next;
}
end=p2;
p1=p2=p3=head;
}
renew(head);
}