#include"stdio.h"
#include"stdlib.h"
#include "string.h"
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct LNode
{
char id[20];
char name[15];
char sex[10];
char phone[20];
char dep[30];
char age[5];
char wage[10];
struct LNode *next;
}LNode,*Linklist;//定义节点类型
int CreatList(Linklist &L)
{
Linklist p;
p=(Linklist)malloc(sizeof(LNode));
if(!p)
{
return (0);
}
else
{
printf("请输入员工职工号\n");
scanf("%s",p->id);
printf("请输入员工姓名\n");
scanf("%s",p->name);
printf("请输入员工性别\n");
scanf("%s",p->sex);
printf("请输入员工电话\n");
scanf("%s",p->phone);
printf("请输入员工单位\n");
scanf("%s",p->dep);
printf("请输入员工年龄\n");
scanf("%s",p->age);
printf("请输入员工工资\n");
scanf("%s",p->wage);
}
p->next=L->next;
L->next=p;
}//头插法生成单链表
int Initlist(Linklist &L)
{
L=(Linklist)malloc(sizeof(LNode));
if(!L)
return (0);
L->next=NULL;
return OK;
}//初始化单链表
void Display(Linklist &L)
{
Linklist p;
for(p=L->next;p;p=p->next)
{
printf("编号 %s\n",p->id);
printf("姓名 %s\n",p->name);
printf("性别 %s\n",p->sex);
printf("电话 %s\n",p->phone);
printf("年龄 %s\n",p->age);
printf("工资 %s\n",p->wage);
}
}//显示所有员工信息
int SearchID(Linklist &L,char id[20])
{
LNode *p;
p=L;
while(p)
{
if(strcmp(p->id,id)==0)
{
printf("编号 %s\n",p->id);
printf("姓名 %s\n",p->name);
printf("性别 %s\n",p->sex);
printf("电话 %s\n",p->phone);
printf("年龄 %s\n",p->age);
printf("工资 %s\n",p->wage);
}
p=p->next;
}
return OK;
}//查询ID
int SearchName(Linklist &L,char name[10])
{
LNode *p;
p=L;
while(p)
{
if(strcmp(p->name,name)==0)
{
printf("编号 %s\n",p->id);
printf("姓名 %s\n",p->name);
printf("性别 %s\n",p->sex);
printf("电话 %s\n",p->phone);
printf("年龄 %s\n",p->age);
printf("工资 %s\n",p->wage);
}
p=p->next;
}
return OK;
}//查询姓名
void Sort(Linklist &L)
{
Linklist La;
Linklist p,q,m;
La=(Linklist)malloc(sizeof(LNode));
La->next =NULL;
while(L->next)
{
for(q=L->next ,p=L->next ;p->next ;p=p->next )
{
if((strcmp( p->next->id,q->id ))>0 )
{
m=p;
q=p->next ;
}
}
if(q==L->next)
{
L->next =L->next->next ;
}
else
{
m->next =q->next ;
}
q->next =La->next ;
La->next =q ;
}
L=La;
Display(L);
}//排序
int Alter(Linklist &L,char id[20])
{
LNode *p;
p=L;
while(p)
{
if(strcmp(p->id,id)==0)
{
printf("请输入员工职工号\n");
scanf("%s",p->id);
printf("请输入员工姓名\n");
scanf("%s",p->name);
printf("请输入员工性别\n");
scanf("%s",p->sex);
printf("请输入员工电话\n");
scanf("%s",p->phone);
printf("请输入员工单位\n");
scanf("%s",p->dep);
printf("请输入员工年龄\n");
scanf("%s",p->age);
printf("请输入员工工资\n");
scanf("%s",p->wage);
}
p=p->next;
}
return OK;
}//更改
int Del(Linklist &L,char id[20])
{
LNode *p;
LNode *r;
p=L->next;
r=L;
while(!(strcmp(p->id,id)==0)&&p)
{
r=p;
p=p->next;
}
if(!p)
printf("\n删除位置不合理\n");
else
{
r->next=p->next;
free(p);
printf("删除成功\n");
}
return OK;
}//按ID删除
void ShowWage(Linklist &L){
Linklist p;
int ave=0;
int zz;
int i=0;
for(p=L->next;p;p=p->next){
i++;
printf("%s 的工资是:%s\n",p->name,p->wage);
zz=atoi(p->wage);
ave=ave+zz;
}
printf("平均工资是:%d\n",ave/i);
}//平均工资
int main()
{
Linklist L;
int a;
char m;
char name[10];
char id[20];
Initlist(L);
int y;
int x=1;
while(x)
{
printf("****************************\n");
printf("****************************\n");
printf("1.添加员工信息\n");
printf("2.查询员工信息\n");
printf("3.排序员工信息\n");
printf("4.显示所有员工信息\n");
printf("5.更改员工信息\n");
printf("6.删除员工信息\n");
printf("7.显示工资及平均工资\n");
printf("8.退出\n");
printf("****************************\n");
printf("请输入操作序号:");
scanf("%d",&y);
switch(y)
{
case 1: CreatList(L);
do
{
printf("是否继续输入?(y/n)");
getchar();
scanf("%c",&m);
if(m=='y')
{
CreatList(L);
}
}
while(m!='n');
break;
case 2: printf("请输入查询方式:(1.按编号查询,2.按姓名查找)");
scanf("%d",&a);
if(a==1)
{
printf("请输入查询员工编号\n");
scanf("%s",&id);
SearchID(L,id);
}
if(a==2)
{
printf("请输入查询员工姓名\n");
scanf("%s",&name);
SearchName(L,name);
}
break;
case 3:
Sort(L);
break;
case 4: printf("所有员工信息如下所示\n");
Display(L);
break;
case 5: printf("请输入更改员工编号");
getchar();
scanf("%s",&id);
Alter(L,id);
break;
case 6: printf("请输入删除员工编号");
getchar();
scanf("%s",&id);
Del(L,id);
break;
case 7:printf("工资情况如下所示:\n ");
ShowWage(L);
break;
case 8: x=0;
break;
default:
printf("请输入正确序号!\n");
break;
}
}
}