#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct staff * Linklist;
struct staff
{
int number,age,income;
char name[50],gender[10],xueli[20],address[100],telephone[20];
struct staff *next;
};
Linklist input(Linklist p);//输入员工信息
void preserve(Linklist p);//将员工信息保存到文件中
void view(Linklist p);//浏览
void searchnumber(Linklist p);//按工号查询
void searchxueli(Linklist p);//按学历查询
struct staff *deletem(Linklist L);//删除职工
Linklist insert(Linklist L);//插入职工信息
Linklist revise(Linklist L);//修改职工信息
void countstaff(Linklist L); //统计职工人数
void countxueli(Linklist L);//统计各学历人数
void countincome(Linklist L);//统计各阶段收入人数
void read (Linklist p); //从文件中读取职工信息
int main()
{
printf("\n=============================职 工 信 息 管 理 系 统===========================\n\n");
printf("======================================菜 单============================================\n\n ");
printf("————————————————-选择要进行的操作————————————————\n\n");
int sign;Linklist p=NULL;
while(sign!=12)
{
printf("\n(1)录入职工信息;(2)浏览所有职工信息;(3)按工号查询;(4)按学历查询;(5)删除职工信息;(6)插入职工;\n(7)修改职工信息;(8)统计职工人数;(9)统计各学历人数;(10)统计各阶段收入人数;(11)读取;(12)退出\n");
scanf("%d",&sign);
switch(sign)
{
case 1:p=input(p);break;//p是所有员工信息的链表
case 2:view(p);break;
case 3:searchnumber(p);break;
case 4:searchxueli(p);break;
case 5:p=deletem(p); break;//删除后的职工信息链表
case 6:insert(p);break;
case 7:revise(p); break;
case 8:countstaff(p);break;
case 9:countxueli(p);break;
case 10:countincome(p);break;
case 11:read(p);break;
default:break;
}
}
preserve(p);//将链表保存到文件中
printf("\n——————————————————程序已退出————————————————\n\n");
return 0;
}
Linklist input(Linklist p)
{
int a;
struct staff *head=NULL,*tail;
printf("请输入职工号:");
scanf("%d",&a);
while(a!=0)
{
p=(struct staff*)malloc(sizeof(struct staff));
p->number=a;p->next=NULL;
printf("请分别输入姓名 性别 年龄 学历 收入 住址 电话号码\n");
scanf("%s %s %d %s %d %s %s",p->name,p->gender,&p->age,p->xueli,&p->income,p->address,p->telephone);
if(head==NULL)
{
head=p;tail=p;
}
else
{
tail->next=p;tail=p;
}
printf("请输入职工号:");scanf("%d",&a);
}
printf("信息录入成功!\n");
return head;
}
void view(Linklist p)
{
if(p==NULL)
printf("\n未录入任何职工信息\n") ;
else
{
printf("\n所有职工信息如下:\n");
printf("工号 姓 名 性别 年龄 学 历 收 入 地址 电话号码\n") ;
while(p!=NULL)
{
printf("%03d %2s %s %d %s %d %s %s\n",p->number,p->name,p->gender,p->age,p->xueli,p->income,p->address,p->telephone);
p=p->next;
}
}
}
void searchnumber(Linklist p)
{
if(p==NULL)
{
printf("\n未录入任何职工信息\n") ;
}
else
{
printf("\n请输入您要查询的员工号:\n");
int number; //要查询的工号
scanf("%d",&number);
while(p)
{
if(p->number==number)
{
printf("查询到的员工信息为:\n工号 姓 名 性别 年龄 学 历 收 入 地址 电话号码\n%03d %s %s %d %s %d %s %s\n",p->number,p->name,p->gender,p->age,p->xueli,p->income,p->address,p->telephone);
break;
}
else
p=p->next;
}
if(p==NULL)
printf("未查询到的员工信息,请检查是否输入错误\n");
}
}
void searchxueli(Linklist p)
{
if(p==NULL)
{
printf("\n未录入任何职工信息\n") ;
}
else
{
printf("\n请输入您要查询的学历:\n");
char str[1000];//要查询的学历
scanf("%s",str);
int c=0;
while(p)
{
if(strcmp(p->xueli,str)==0)
{
printf("查询到该员工信息为:%03d %s %s %d %s %d %s %s\n%03d %s %s %d %s %d %s %s\n",p->number,p->name,p->gender,p->age,p->xueli,p->income,p->address,p->telephone);
p=p->next;
c++;
}
else
p=p->next;
}
if(p==NULL&&c==0)
printf("未查询到该员工信息,请检查是否输入错误\n");
}
}
Linklist deletem(Linklist L)
{
Linklist p, q;
char k[15];
printf("请输入要删除的员工姓名:\n");
scanf("%s",k);
p = L;
p=L;
q=NULL;
while(p)
{
if(strcmp(p->name,k)==0)
{
if(q)
{
q->next=p->next;free(p);
}
else
{
L=p->next;free(p);
}
}
else
q=p;
p=p->next;
}
return L;
}
Linklist insert(Linklist L)
{
if(L==NULL)
{printf("\n未录入任何职工信息\n") ; }
printf("\n请输入新加入员工的信息\n") ;
struct staff *p,*head=NULL,*tail,*h=L;
p=(struct staff*)malloc(sizeof(struct staff));
p->next=NULL;
scanf("%d %s %s %d %s %d %s %s",&p->number,p->name,p->gender,&p->age,p->xueli,&p->income,p->address,p->telephone);
if(L==NULL)
{
L=p;
}
while(L->next!=NULL)
{
L=L->next;
}
L->next=p;
return h;
}
Linklist revise(Linklist L)
{
if(L==NULL)
printf("\n未录入任何职工信息\n") ;
char str[100];//被修改的员工姓名
printf("\n请输入您要修改信息的员工姓名:\n");
scanf("%s",str);
Linklist p=L;
while(p!=NULL)
{
if(strcmp(p->name,str)==0)
{
printf("该员工的信息为:\n工号 姓 名 性别 年龄 学 历 收 入 地址 电话号码\n%03d %s %s %d %s %d %s %s\n",p->number,p->name,p->gender,p->age,p->xueli,p->income,p->address,p->telephone);break;
}
else
p=p->next;
}
if(p==NULL)
{
printf("无该员工信息,请检查是否姓名输入错误\n");return L;
}
int c;//选择修改的信息
printf("1:修改姓名;2:修改工号;3:修改性别;4:修改年龄;5:修改学历;6:修改收入;7:修改地址;8:修改电话号码;9:结束\n");
scanf("%d",&c);
switch(c)
{
case 1:
printf("姓名修改为:");
scanf("%s",p->name);break;
case 2:
printf("工号修改为:");
scanf("%d",&p->number);break;
case 3:
printf("性别修改为:");
scanf("%s",p->gender);break;
case 4:
printf("年龄修改为:");
scanf("%d",&p->age);break;
case 5:
printf("学历修改为:");
scanf("%s",p->xueli);break;
case 6:
printf("收入修改为:");
scanf("%d",&p->income);break;
case 7:
printf("地址修改为:");
scanf("%s",p->address);
break;
case 8:
printf("电话修改为:");
scanf("%s",p->telephone);break;
case 9:
break;
}
printf("信息修改成功!\n") ;
return p;
}
void countstaff(Linklist L)
{
if(L==NULL)
printf("\n未录入任何职工信息\n") ;
int c=0;
while(L!=NULL)
{
c++;L=L->next;
}
printf("\n一共有%d名职工\n",c);
}
void countxueli(Linklist L)
{
if(L==NULL)
printf("\n未录入任何职工信息\n") ;
int a=0,b=0,c=0,d=0,e=0;
while(L!=NULL)
{
a++;
if(strcmp(L->xueli,"大学本科")==0)
b++;
else if(strcmp(L->xueli,"硕士研究生")==0)
c++;
else if(strcmp(L->xueli,"博士研究生")==0)
d++;
else if(strcmp(L->xueli,"博士后")==0)
e++;
L=L->next;
}
printf("\n大学本科以下:%d名;大学本科:%d名;硕士研究生:%d名;博士研究生:%d名;博士后:%d名\n",a-b-c-d-e,b,c,d,e);
}
void countincome(Linklist L)
{
if(L==NULL)
printf("\n未录入任何职工信息\n") ;
int a=0,b=0,c=0,d=0;
while(L!=NULL)
{
if(L->income<=5000)
a++;
else if(L->income>5000&&L->income<=10000)
b++;
else if(L->income>10000&&L->income<=20000)
c++;
else
d++;
L=L->next;
}
printf("\n工资在5000以下:%d名;5000-10000:%d名;10000-20000:%d名;20000以上:%d名\n",a,b,c,d);
}
void preserve(Linklist p)
{
FILE *fp;//定义文件
fp=fopen("staff.txt","wb");//以二进制方式打开文件供写
if(fp==NULL)
{
printf("不能打开文件");
exit(0);
}
while(p!=NULL)
{
fprintf(fp,"%d\t %s\t %s\t %d\t %s\t %d\t %s\t %s\t",p->number,p->name,p->gender,p->age,p->xueli,p->income,p->address,p->telephone);
p=p->next;
}
fclose(fp);
}
void read (Linklist p)
{
FILE *fp;
fp=fopen("staff.txt","rb"); //以只读方式打开当前目录下的.txt
if(fp==NULL)
{
printf("无法打开文件\n");
exit(0); //-------- 终止程序 ---------
}
while(1)
{
Linklist p=(Linklist )malloc(sizeof(struct staff)),head=NULL,tail;
if(fscanf(fp,"%d",&p->number)==EOF)
break;
fscanf(fp,"%d\t %s\t %s\t %d\t %s\t %d\t %s\t %s\t",&p->number,p->name,p->gender,&p->age,p->xueli,&p->income,p->address,p->telephone);
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;tail=p;
}
fclose(fp);
}
球球了,有没有大佬帮忙看一看,输入信息了之后,从文件中读取内容的时候为什么还是空的啊。球球了,救救孩子吧,我一个女生已经快秃头了,现在是凌晨两点半,我还是没找出来问题在哪里