数据结构最先学习的就是单链表,今天就利用单链表实现一个简单的员工管理系统。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct workers
{
char name[15];
char department[18];//单位
char gender;//性别
int age;
char tel[11];//电话号
long int wage;//工资
long int num;//工职号
struct workers *next;
};
void Insert(struct workers *s,int n)//插入
{
int i;struct workers *p,*q;q=s;
for(i=0;i<n;i++)
{ p=(struct workers *)malloc(sizeof(struct workers));
printf("请输入姓名:");
gets(p->name);printf("\n");
printf("请输入单位:");
gets(p->department);printf("\n");
printf("请输入性别: (x男,n女):");
scanf("%c",&(p->gender));printf("\n");
printf("请输入年龄:");
scanf("%d",&(p->age));printf("\n");
getchar();
printf("请输入电话号:");
gets(p->tel);printf("\n");
printf("请输入工资:");
scanf("%ld",&(p->wage));printf("\n");
getchar();
printf("请输入工职号:");
scanf("%ld",&(p->num));printf("\n");
getchar();
q->next=p;
q=p;
}
}
void Paixu1(struct workers *s,int l)//按年龄排序
{ struct workers *p,*q;int i,j;
for(i=0;i<l;i++)
{ p=s->next;q=s;
for(j=0;j<l-1-i;j++)
{ if((p->age)>(p->next->age)){
q->next=p->next;p->next=p->next->next;
q->next->next=p;
}
q=q->next;
p=q->next;
}
}
}
void Paixu2(struct workers *s,int l)//按工资排序
{ struct workers *p,*q;int i,j;
for(i=0;i<l;i++)
{ p=s->next;q=s;
for(j=0;j<l-1-i;j++)
{ if((p->wage)>(p->next->wage)){
q->next=p->next;p->next=p->next->next;
q->next->next=p;
}
q=q->next;
p=q->next;
}
}
}
void Paixu3(struct workers *s,int l)//按工职号排序
{ struct workers *p,*q;int i,j;
for(i=0;i<l;i++)
{ p=s->next;q=s;
for(j=0;j<l-1-i;j++)
{ if((p->num)>(p->next->num)){
q->next=p->next;p->next=p->next->next;
q->next->next=p;
}
q=q->next;
p=q->next;
}
}
}
void Delet(struct workers *s,long int num1)//按工职号删除
{
struct workers *p,*q,*t;
int flag=0;
p=s->next;q=s;
while(p!=NULL){
if(p->num==num1){
t=p;
q->next=p->next;
free(t);
printf("删除成功!\n");
flag=1;
break;
}
q=q->next;p=p->next;
}
if(flag==0)
printf("删除失败!\n");
}
struct workers * Chazhao(struct workers *s,long int num1)//按工职号查找
{ struct workers *p;
int flag=0;
p=s->next;
while(p!=NULL){
if(p->num==num1){
printf("查找成功!\n");
flag=1;
return p;
}
p=p->next;
}
if(flag==0)
printf("查找失败!\n");
}
void Gengxin(struct workers *s,long int num1)//更新信息
{ struct workers *p;
p=Chazhao(s,num1);
printf("1.更新年龄:");
scanf("%d",&(p->age));
printf("2.更新工资:");
scanf("%ld",&(p->wage));
getchar();
printf("3.更新电话:");
gets(p->tel);
printf("4.更新住址:");
gets(p->department);
}
void prints(struct workers *s,int l)
{ int i;struct workers *p;p=s->next;
for(i=0;i<l;i++)
{ printf("姓名:");
puts(p->name);
printf("单位:");
puts(p->department);
printf("性别:");
printf("%c ",p->gender);
printf("年龄:");
printf("%d ",p->age);
printf("电话:");
puts(p->tel);
printf("工资:");
printf("%ld ",p->wage);
printf("工职号:");
printf("%ld",p->num);
printf("\n\n\n");
p=p->next;
}
}
void menu()
{ printf("\t\t\t\t1.插入员工信息\n");
printf("\t\t\t\t2.按年龄排序 \n");
printf("\t\t\t\t3.按工资排序 \n");
printf("\t\t\t\t4.按工职号排序\n");
printf("\t\t\t\t5.删除员工信息\n");
printf("\t\t\t\t6.更新员工信息\n");
printf("\t\t\t\t7.打印员工信息\n");
printf("\t\t\t\t8.退出 \n");
}
int main()
{ struct workers s;
int e,n,l=0;long int d;
menu();
while(scanf("%d",&e)!=8){
switch (e) {
case 1:
printf("输入个数:");
scanf("%d",&n);
getchar();
l=l+n;
Insert(&s,n);
break;
case 2:
Paixu1(&s,l);
prints(&s,l);
break;
case 3:
Paixu2(&s,l);
prints(&s,l);
break;
case 4:
Paixu3(&s,l);
prints(&s,l);
break;
case 5:
printf("输入要删除员工的工职号:");
scanf("%ld",&d);
Delet(&s,d);l--;
break;
case 6:
printf("输入要更新员工的工职号:");
scanf("%ld",&d);
Gengxin(&s,d);
break;
case 7:
prints(&s,l);
break;
}
menu();
}
return 0;
}//无法直接复制实验数据 直接随便输入即可