#include "stdio.h"
#include "stdlib.h"
#include "windows.h " //清屏函数头文件
#include "string.h"
typedef struct Stuff
{
char number[10]; //编号
char name[10]; //姓名
char sex[8]; //性别
char birthday[10]; //生日
char degree[20]; //学历
char business[20]; //职务
char phone[15]; //电话
char place[50]; //住址
char con[50]; //判断关键字
struct Stuff *next;
}Stuff;
char Menu(); //菜单函数
Stuff *App(Stuff *head); //添加函数
void Sort(Stuff *head); //排序函数
Stuff *Search(Stuff *head); //查找函数
Stuff *Change(Stuff *head,char n[10]); //更改函数
void Scpy(char *p,char *q); //排序中用于交换员工信息
Stuff *Del(Stuff *head,char n[10]); //删除函数
int Sel(char ch,Stuff *p,Stuff *q); //判断排序及关键字专用函数
void Show(Stuff *head); //输出函数
void Fre(Stuff *head); //释放函数
int n=1; //定义全局变量,实现人数统计
//菜单函数
char Menu(void)
{
int ch;
printf("---------------------------菜单-------------------------\n");
printf(" 1.添加员工信息\n");
printf(" 2.员工信息排序\n");
printf(" 3.查找员工信息\n");
printf(" 4.输出员工信息\n");
printf(" 5.更改员工信息\n");
printf(" 6.删除员工信息\n");
printf(" 0.退出\n");
printf("--------------------------------------------------------\n");
printf("请选择你的操作:");
scanf(" %d",&ch);
return ch;
}
//添加成员函数
Stuff *App(Stuff *head)
{
Stuff *p=NULL,*q=head;
while(n)
{
p=(Stuff *)malloc(sizeof(Stuff)); //申请结构体空间
if(p==NULL)
{
printf("空间不足,自动退出系统!\n");
exit(0);
}
p->next =NULL; //指针域为空
printf("请输入第%d名员工:\n",n);
printf(" 编号 | 姓名 | 性别 | 出生年月 | 学历 | 职务 | 电话 | 住址 :\n");
getchar();
scanf("%s",p->number );
if(strcmp(p->number,"#"))
{
++n;
scanf("%s%s%s%s%s%s%s",p->name ,p->sex ,p->birthday ,p->degree ,p->business ,p->phone ,p->place );
p->con[0]='\0'; //防止后面判断出现随机值
if(head==NULL)
head=p;
else
{
while(q->next !=NULL)
q=q->next ;
q->next =p;
}
q=p; //尾插法
}
if(!strcmp(p->number ,"#"))
{
free(p); //完成添加,释放多余空间
break;
}
}
return head;
}
//排序函数
void Sort(Stuff *head)
{
char ch;
Stuff *p,*q,*r;
while(1)
{
printf("请选择排序条件:1.编号|2.姓名|0.退出\n");
getchar();
scanf("%c",&ch);
if(ch=='0')
break;
if(ch<'1'||ch>'2')
{
printf("输入错误,请重新输入!\n");
continue;
}
p=head;
while(p->next!=NULL) //选择排序
{
q=p->next;
r=p;
while(q!=NULL)
{
if(Sel(ch,r,q)) //调用判断函数
r=q;
q=q->next;
}
if(r!=p) //交换信息
{
Scpy(r->number,p->number);
Scpy(r->name,p->name);
Scpy(r->sex,p->sex);
Scpy(r->birthday,p->birthday);
Scpy(r->degree,p->degree);
Scpy(r->business,p->business);
Scpy(r->phone,p->phone);
Scpy(r->place,p->place);
}
p=p->next;
}
Show(head); //输出
}
}
//交换函数
void Scpy(char *p,char *q)
{
char c[50];
strcpy(c,p);
strcpy(p,q);
strcpy(q,c);
}
//判断函数
int Sel(char ch,Stuff *p,Stuff *q)
{
switch(ch) //实现各个关键字查找
{
case '1':
return strcmp(q->number ,p->number )<0||strcmp(q->con ,p->number )==0 ; case '2':
return strcmp(q->name ,p->name )<0||strcmp(q->con ,p->name )==0 ;
default :
exit(0);
}
}
//查找函数
Stuff *Search(Stuff *head)
{
Stuff *p=NULL,*q;
int flag; //查找判断
char ch,sh; //两个控制变量
while(1)
{
printf("请输入要查找的条件:1.编号2.姓名0.退出\n");
scanf(" %c",&ch);
if(ch=='0')
break;
if(ch<'1'||ch>'2')
{
printf("输入错误,请重新输入!\n");
continue;
}
getchar();
printf("请输入:");
gets(q->con);
p=head; //指向表头
flag=0;
while(p!=NULL)
{
if(strcmp(q->con,p->number)==0||strcmp(q->con,p->name)==0)
{
printf("员工信息如下:\n");
printf(" 编号 | 姓名 | 性别 | 出生年月 | 学历 | 职务 | 电话 | 住址 \n%s \t%s \t%s \t%s \t%s \t%s \t%s \t%s\n",p->number ,p->name ,p->sex ,p->birthday ,p->degree ,p->business ,p->phone ,p->place );
printf("是否需要:1.更改 2.删除 3.继续\n");
scanf(" %c",&sh);
if(sh=='1')
Change(head,p->number); //调用更改函数
else if(sh=='2')
head=Del(head,p->number); //调用删除函数 flag=1;
break;
}
p=p->next ;
}
if(flag==0)
printf("没有找到该员工信息!\n");
}
return head;
}
//更改函数
Stuff *Change(Stuff *head,char n[10])
{
Stuff *p=head;
int flag=0;
if(head==NULL)
printf("信息表为空,请先建立信息表!\n");
else
{
while(p!=NULL)
{
if(!strcmp(p->number,n))
{
printf("找到员工,请输入新的信息:\n 编号 | 姓名 | 性别 | 出生年月 | 学历 | 职务 | 电话 | 住址 \n");
scanf("%s%s%s%s%s%s%s%s",p->number ,p->name ,p->sex ,p->birthday ,p->degree ,p->business ,p->phone ,p->place );
printf("员工信息如下:\n");
flag=1;
}
p=p->next;
}
if(flag==0)
printf("未找到该员工信息!\n");
}
Show(head);
return head;
}
//删除函数
Stuff *Del(Stuff *head,char n[10])
{
Stuff *p,*pr;
int flag;
flag=0;
p=head,pr=head;
if(head==NULL)
printf("未找到员工信息!\n");
else
{
while(strcmp(p->number ,n)&&p->next !=NULL)
{
pr=p;
p=p->next ;
}
if(!strcmp(p->number ,n))
{
if(p==head)
head=p->next ;
else
pr->next=p->next ;
free(p);
printf("删除成功!\n");
n--;
}
else
printf("未找到员工信息!\n");
}
Show(head);
return head;
}
//输出函数
void Show(Stuff *head)
{
Stuff *p=head;
int i=1;
if(head!=NULL)
{
printf("员工信息如下:\n");
while(p!=NULL)
{
printf("%d. %s %s %s %s %s %s %s %s\n"
,i++,p->number ,p->name ,p->sex ,p->birthday ,p->degree ,p->business ,p->phone ,p->place);
p=p->next ;
}
}
else
{
printf("信息为空!\n");
}
}
//释放函数
void Fre(Stuff *head)
{
Stuff *p;
while(head!=NULL)
{
p=head;
head=head->next ;
free(p);
}
}
void main()
{
char Index[10];
Stuff *head=NULL; //链表头指针定义
printf("---------------欢迎使用《员工信息管理系统》-------------\n");
Sleep(1000);
while(1)
{
switch(Menu())
{
case 1:
printf("请输入员工信息,直接输入'#'结束\n");
head=App(head);
break;
case 2:
Sort(head);
break;
case 3:
head=Search(head);
break;
case 4:
Show(head);
break;
case 5:
printf("请输入员工编号:");
scanf("%s",Index);
Change(head,Index);
break;
case 6:
printf("请输入员工编号:");
scanf("%s",Index);
head=Del(head,Index);
break;
case 0:
printf("-------------------欢迎下次光临!-----------------\n");
Sleep(2000);
exit(0);
break;
default:
printf("输入错误,请重新输入!\n");
}
printf("按Enter键继续~");
getchar();
getchar();
system("cls"); //清屏效果
}
Fre(head);
} //结束
系统菜单
输入数据
(1)输入操作字符1;
(2)输入员工信息;
(3)输入“#”字符结束输入。
显示数据
信息排序
更改信息
删除信息