#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#define LEN sizeof(struct info)
typedef struct info
{
int num;
int age;
char sex;
struct info *next;
}INFO;
INFO *establish();
void count(INFO *head);
void addnew(INFO *head);
void del(INFO *head,int num);
INFO *delother(INFO *head);
void zcd();
void main()
{
zcd();
}
void zcd()
{
static INFO *p=NULL,*q=NULL;
int i,num;
printf("\n\n\n\n\n\n\n\n\n");
printf("\t\t\t1---------创建链表\n\n");
printf("\t\t\t2---------统计男女职工人数\n\n");
printf("\t\t\t3---------添加新员工\n\n");
printf("\t\t\t4---------删除指定编号的职工\n\n");
printf("\t\t\t5---------删除60岁以上的男员工和55岁以上的女员工\n\n");
printf("\t\t\t6---------退出程序\n\n");
do{
scanf("%d",&i);getchar();
switch(i)
{
case 1:system("cls");p=establish();system("cls");zcd();
case 2:system("cls");count(p);
case 3:system("cls");addnew(p);
case 4:system("cls");
printf("\t\t\t请输入要删除的数字:");
scanf("%d",&num);getchar();
del(p,num);
case 5:system("cls");q=delother(p);system("cls");zcd();
case 6:exit(0);
default :printf("\n\n\t\t\t命令错误,请重新输入\n");
}
}while(i>6||i<1);
}
INFO *establish()
{
INFO *head=NULL,*p1,*p2;
int num;
head=p2=(INFO *)malloc(LEN);
printf("\n\n请输入职工编号(输入0退出输入):");
scanf("%d",&num);
while(num!=0)
{
p1=(INFO *)malloc(LEN);
p1->num=num;
printf("请输入职工年龄:");
scanf("%d",&p1->age);getchar();
printf("请输入职性别,m(男)/f(女):");
scanf("%c",&p1->sex);
p2->next=p1;
p2=p1;
printf("请输入职工编号(输入0退出输入):");
scanf("%d",&num);
}
p2->next=NULL;
return head;
}
void count(INFO *head)
{
char c;
int m=0,f=0;
INFO *p=head->next;
while(p!=NULL)
{
if(p->sex=='M'||p->sex=='m')
m++;
else
f++;
p=p->next;
}
printf("\n\n\n\n\n\n\n\n");
printf("\t\t\t男职工的人数为:%d\n\n",m);
printf("\t\t\t女职工的人数为:%d\n\n",f);
do{
printf("\t\t\t按【q】返回主菜单:");
c=getchar();getchar();
if(c=='q')
{system("cls");zcd();}
else
printf("\t\t\t命令错误,请重新输入\n");
}while(c!='q');
}
void addnew(INFO *head)
{
INFO *p,*q=head;
char c;
p=(INFO *)malloc(LEN);
printf("\n\n请输入新职工编号,年龄和性别:\n");
scanf("%d%d",&p->num,&p->age);getchar();
scanf("%c",&p->sex);getchar();
while(q->next!=NULL)
q=q->next;
q->next=p;
p->next=NULL;
do{
printf("\t\t\t按【q】返回主菜单:");
c=getchar();getchar();
if(c=='q')
{system("cls");zcd();}
else
printf("\t\t\t命令错误,请重新输入\n");
}while(c!='q');
}
void del(INFO *head,int num)
{
INFO *p=head->next,*q=head;
char c;
if(p==NULL)
{
printf("\t\t\t空信息\n");
goto laber;
}
while(p!=NULL&&p->num!=num)
{
q=p;
p=p->next;
}
if(p==NULL)
{
printf("\t\t\t无此信息\n");
goto laber;
}
else
{
q->next=p->next;
free(p);
}
laber:
do{
printf("\t\t\t按【q】返回主菜单:");
c=getchar();getchar();
if(c=='q')
{system("cls");zcd();}
else
printf("\t\t\t命令错误,请重新输入\n");
}while(c!='q');
}
INFO *delother(INFO *head)
{
INFO *h=NULL,*p=head->next,*q=head,*r;
h=r=(INFO *)malloc(LEN);
while(p!=NULL)
{
if(((p->sex=='M'||p->sex=='m')&&p->age>=60)||((p->sex=='F'||p->sex=='f')&&p->age>=55))
{
q->next=p->next;
r->next=p;
r=p;
p=p->next;
}
else
{
q=p;
p=p->next;
}
}
return h;
}