/*(2)员工管理系统
问题描述:每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等功能。
基本要求:排序:按不同关键字,对所有员工的信息进行排序;查询:按特定条件查找员工;更新,按编号对某个员工的某项信息进行修改;插入,加入新员工的信息;删除,按编号删除已离职的员工的信息。
选作内容:实现图形用户界面。 */
#include "stdlib.h"
#include "stdio.h"
#include <string>
//员工结构体定义
typedef struct node
{
int number; //编号
char name[20]; //姓名
long wage ; //工资
int age ; //年龄
struct node *next;
}link,*linkedlist;
//建立一个新的员工信息表
linkedlist listcreat()
{ //建立一个带头结点的空链表
link *l;
l=(link*)malloc(sizeof(link));
l->next=NULL;
return l;
}
//信息的录入
linkedlist listinput(link *l)
{
link *p; int numflag=-1;
printf("请输入员工的信息\n");
p=(link*)malloc(sizeof(link));
printf("请输入员工编号\n");
scanf("%d",&p->number);
printf("请输入员工姓名\n");
scanf("%s",&p->name);
printf("请输入员工年龄\n");
scanf("%d",&p->age);
printf("请输入员工工资\n");
scanf("%d",&p->wage);
while(p->number!=numflag)
{
p->next=l->next;
l->next=p;
printf("请输入下一位员工的信息 -1代表退出\n");
p=(link*)malloc(sizeof(link));
printf("请输入员工编号\n");
scanf("%d",&p->number);
if(p->number==numflag) break;
else
printf("请输入员工姓名\n");
scanf("%s",&p->name);
printf("请输入员工年龄\n");
scanf("%d",&p->age);
printf("请输入员工工资\n");
scanf("%d",&p->wage);
}
return l;
}
//信息的查寻
int listsearch(link *l)
{
int i,n; link *p; char a[20];
printf("请选择要查询的模式 1:按编号查寻 2:按姓名查询 3:全部输出\n");
scanf("%d",&i);
switch (i)
{
case 1:
{
printf("您选择了按编号查询 请输入要查询的编号\n");
scanf("%d",&n);
p=l->next;
while(p!=NULL&&p->number!=n)
{
p=p->next;
}
if(p!=NULL)
printf("编号:%d 姓名:%s 工资:%ld 年龄:%d\n",p->number,p->name,p->wage,p->age);
else
printf("对不起输入有误查找失败\n");
} break;
case 2:
{
printf("您选择了按姓名查询 请输入要查询的姓名\n");
scanf("%s",a);
p=l->next;
while(p!=NULL&&(strcmp(p->name,a)!=0))
{
p=p->next;
}
if(p!=NULL)
printf("编号:%d 姓名:%s 工资:%ld 年龄:%d\n",p->number,p->name,p->wage,p->age);
else
printf("对不起输入有误查找失败\n");
}
case 3:
p=l->next;
while(p!=NULL)
{
printf("编号:%d 姓名:%s 工资:%ld 年龄:%d\n",p->number,p->name,p->wage,p->age);
p=p->next;
}
}
return 0;
}
//更新即插入、删除和修改
linkedlist listrenew(link *l)
{
link *p,*q; int i,j,n; long m;
printf("请选择要执行的操作 1.插入 2.删除 3.修改\n");
scanf("%d",&i);
if(i==1)
{
p=l->next; q=(link*)malloc(sizeof(link));
printf("请输入员工的编号 0代表退出\n");
scanf("%d",&j);
while(j!=0)
{
q->number=j;
q->next=p->next;
p->next=q;
printf("请输入该员工的姓名\n");
scanf("%s",&q->name);
printf("请输入员工年龄\n");
scanf("%d",&n); q->age=n;
printf("请输入员工工资\n");
scanf("%ld",&m); q->wage=m;
printf("请输入下一位员工的信息\n");
printf("请输入员工的编号 0代表退出\n");
scanf("%d",&j);
}
}
else if(i==2)
{
p=l->next;
printf("请输入要删除员工的编号 0代表退出\n");
scanf("%d",&j);
q=l;
while(p!=NULL&&p->number!=j)
{
p=p->next;
q=q->next;
}
if(p!=NULL)
{
q->next=p->next; free(p);
}
else
printf("对不起输入有误删除失败\n");
}
else if(i==3)
{
p=l->next;
printf("请输入要修改员工的编号 0代表退出\n");
scanf("%d",&j);
while(p!=NULL&&p->number!=j)
{
p=p->next;
}
if(p!=NULL)
{
printf("您想修改什么信息 1.修改编号 2.修改姓名 3.\n");
scanf("%d",&i);
if(i==1)
{
printf("请输入新的编号\n");
scanf("%d",&j);
p->number=j;
}
else if(i==2)
{
printf("请输入新的姓名\n");
scanf("%s",&p->name);
printf("请输入员工年龄\n");
scanf("%d",&p->age);
printf("请输入员工工资\n");
scanf("%ld",&p->wage);
}
}
else
printf("对不起输入有误修改失败\n");
}
return l;
}
//排序
linkedlist listorder(link *l)
{
int i; link *h,*p,*q;
p=l->next;
q=p->next;
while(p->next!=NULL)
{
while(q!=NULL)
{
if(p->number>q->number)
{
h=(link*)malloc(sizeof(link));
h->number=p->number;
strcpy(h->name,p->name);
h->age=p->age;
h->wage=p->wage;
p->number=q->number;
strcpy(p->name,q->name);
p->age=q->age;
p->wage=q->wage;
q->number=h->number;
strcpy(q->name,h->name);
q->age=h->age;
q->wage=h->wage;