typedef struct w
{
int no;
char name[100];
int depno;
int salary;
struct w* next;
} worker;
void input(worker*&L);
void show(worker*L);
void num_sort(worker*&L);
void dep_sort(worker*&L);
void sal_sort(worker*&L);
void Delete(worker*&L);
void destroy(worker*&L);
void end(worker*&L);
void menu();
#include<stdio.h>
#include<stdlib.h>
#include"staff.h"
//typedef struct w
//{
//int no;
//char name[100];
//int depno;
//int salary;
//struct w* next;
//} worker;
void input(worker*&L)
{
worker*p;
p=(worker*)malloc(sizeof(worker));
printf("请按顺序分别输入职工编号,姓名,部门,工资(两信息间用空格分离)\n");
scanf("%d %s %d %d",&p->no,&p->name,&p->depno,&p->salary);
p->next=L->next;
L->next=p;
}
void show(worker*L)
{
worker*p=L->next;
printf("工号 姓名 部门 工资\n");
for(p=L->next;p!=NULL;p=p->next)
printf("%d %s %d %d\n",p->no,p->name,p->depno,p->salary);
}
void num_sort(worker*&L)
{
worker*p,*q,*s;
if(L->next==NULL)
{
printf("链表为空\n");
return;
}
q=L->next->next;
L->next->next=NULL;
while(q!=NULL)
{
p=L;
while(p->next!=NULL && q->no >= p->next->no)
p=p->next;
s=q->next;
q->next=p->next;
p->next=q;
q=s;
}
printf("已排序完毕\n");
}
void dep_sort(worker*&L)
{
worker*p,*q,*s;
if(L->next==NULL)
{
printf("链表为空\n");
return;
}
q=L->next->next;
L->next->next=NULL;
while(q!=NULL)
{
p=L;
while(p->next!=NULL && q->depno >= p->next->depno)
p=p->next;
s=q->next;
q->next=p->next;
p->next=q;
q=s;
}
printf("已排序完毕\n");
}
void sal_sort(worker*&L)
{
worker*p,*q,*s;
if(L->next==NULL)
{
printf("链表为空\n");
return;
}
q=L->next->next;
L->next->next=NULL;
while(q!=NULL)
{
p=L;
while(p->next!=NULL && q->salary >= p->next->salary)
p=p->next;
s=q->next;
q->next=p->next;
p->next=q;
q=s;
}
printf("已排序完毕\n");
}
void Delete(worker*&L)
{
worker*p,*dele;
int a;
printf("请输入要删除职工记录的工号:");
scanf("%d",&a);
for(p=L;p->next!=NULL;p=p->next)
if(p->next->no == a)
{
dele=p->next;
p->next=dele->next;
free(dele);
printf("已删除工号为%d的职工记录\n",a);
return;
}
printf("未找到工号为%d的职工记录\n",a);
}
void destroy(worker*&L)
{
worker*p=L->next,*q;
while(p!=NULL)
{
q=p;
p=p->next;
free(q);
}
L->next=NULL;
printf("已删除全部职工记录\n");
}
void end(worker*&L)
{
destroy(L);
free(L);
}
void menu()
{
printf(" ┏━━━━━━━━━━━━━━━┓\n");
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\n");
}
#include<stdio.h>
#include<stdlib.h>
#include "staff.h"
int main()
{
int option,T=0;
menu();
worker*L=(worker*)malloc(sizeof(worker));
L->next=NULL;
for(;;)
{
printf("请输入选项序号: ");
scanf("%d",&option);
switch(option)
{
case 1:
input(L);
break;
case 2:
show(L);
break;
case 3:
num_sort(L);
break;
case 4:
dep_sort(L);
break;
case 5:
sal_sort(L);
break;
case 6:
Delete(L);
break;
case 7:
destroy(L);
break;
case 8:
end(L);
T=1;
break;
default:
printf("选项序号输入错误,请重新输入!\n");
}
if(T)
break;
}
printf("程序运行结束!\n");
}