#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
struct Staff//员工结构体
{
long num;
float salary;//基本工资
float award;//奖金
};
typedef struct Link{
Staff sta;
struct Link *next;
struct Link *front;
}link;
int n=0;
void welcome();
link * initLink();
void creat(link *p);
void delsame(link *p);
void rev(link *p);
void add(link *p);
void sortnum(link *p);
void sortsal(link *p);
void sortawa(link *p);
void change(link *p);
void print(link* p);
main()
{
link *p = initLink();
while(1)
{
welcome();
char ch=getch();/*接受字符选择*/
switch(ch)
{
case '1':
system("cls");
creat(p);
printf("创建结果如下:\n");
print(p);
system("pause");
system("cls");
break;
case '2':
delsame(p);
printf("工号唯一性如下:\n");
print(p);
system("pause");
system("cls");
break;
case '3':
printf("双向链表的长度为%d\n",n);
system("pause");
system("cls");
break;
case '4':
rev(p);
printf("逆置后信息如下:\n");
print(p);
system("pause");
system("cls");
break;
case '5':
system("cls");
add(p);
printf("添加后信息如下:\n");
sortnum(p);
print(p);
system("pause");
system("cls");
break;
case '6':
system("cls");
change(p);
break;
case '7':
printf("Bye~");
return 0;
default :
printf("输入有误!\n");
system("pause");
system("cls");
break;
}
}
}
void welcome()/*首页 */
{ printf("*************************************************\n");
printf("*\t欢迎使用员工信息管理系统 1.0\t\t*\n");
printf("*************************************************\n");
printf("*\t\t请选择功能列表\t\t\t*\n");
printf("*************************************************\n");
printf("*\t\t1.建立信息\t\t\t*\n");
printf("*\t\t2.删除重复\t\t\t*\n");
printf("*\t\t3.链表长度\t\t\t*\n");
printf("*\t\t4.链表逆置\t\t\t*\n");
printf("*\t\t5.插入结点\t\t\t*\n");
printf("*\t\t6.换值排序\t\t\t*\n");
printf("*\t\t7.退出系统\t\t\t*\n");
printf("*************************************************\n");
}
//初始化链表
link * initLink(){
link * p = (link*)malloc(sizeof(link));
p -> next = p -> front = NULL;
return p;
}
void creat(link *p){
printf("请输入员工信息(输入格式工号 工资 奖金(如202001 5000 600))\n");
printf("输入0 0 0停止\n");
link *tp=p;
link * a = (link*)malloc(sizeof(link));
scanf("%d %f %f",&a->sta.num,&a->sta.salary,&a->sta.award);
while(a->sta.num!=0){
n++;
if(n==1){
p->sta.num=a->sta.num;
p->sta.salary=a->sta.salary;
p->sta.award=a->sta.award;
}
else{
a->next=tp->next;
tp->next=a;
a->front=tp;
tp = a;
}
a = (link*)malloc(sizeof(link));
scanf("%d %f %f",&a->sta.num,&a->sta.salary,&a->sta.award);
}
printf("创建成功!");
}
void delsame(link *p){//工号相同删除
int i, j;
link * pnext, *p1;//工作指针
for (; p; p = p->next)
{
for (pnext = p->next; pnext;)
{
if (pnext->sta.num == p->sta.num)
{
p1 = pnext;
if (pnext->next)//不是尾结点
{
pnext = pnext->next;
p1->front->next = pnext;
pnext->front = p1->front;
n--;
free(p1);
}
else//是尾结点
{
p1->front->next = NULL;
n--;
free(p1);
break;
}
}
else
{
if (pnext->next)
pnext = pnext->next;
else
break;
}
}
}
printf("删除成功!");
}
void rev(link *p){
link * pnext;//工作指针
long temnum;
float temslary,temaward;//中间变量
for (; p; p = p->next)
{
for (pnext = p->next; pnext; pnext = pnext->next)
{
temnum = p->sta.num;
temslary = p->sta.salary;
temaward=p->sta.award;
p->sta.num = pnext->sta.num;
p->sta.salary = pnext->sta.salary;
p->sta.award = pnext->sta.award;
pnext->sta.num = temnum;
pnext->sta.salary = temslary;
pnext->sta.award = temaward;
}
}
}
void add(link *p){
long nu;
printf("请输入员工工号:");
scanf("%d",&nu);
link *t = p;
if(t->next == 0)
{ link * a=(link*)malloc(sizeof(link));
a -> next = t -> next;
t -> next = a;
a -> front = t;
a -> sta.num = nu;
printf("请输入员工基本工资:");scanf("%s",&a -> sta.salary);
printf("请输入员工奖金:");scanf("%s",&a -> sta.award);
n++;
printf("添加成功!");
}
else
{
while(t -> next){
t = t ->next;
if(nu==t -> sta.num){
printf("员工已存在,输入失败!\t");
system("pause");
system("cls");
return;
}
}
t = p;
link * c=(link*)malloc(sizeof(link));
while(t -> next){
if(nu < t -> next -> sta.num)
break;
t = t -> next;
}
t -> next -> front = c;
c -> next = t -> next;
c -> front = t;
t -> next = c;
c -> sta.num=nu;
printf("请输入员工基本工资:");scanf("%f",&c -> sta.salary);
printf("请输入员工奖金:");scanf("%f",&c -> sta.award);
n++;
printf("添加成功!\n");
}
}
//根据工号递增排列
void sortnum(link *p)
{
link * p1,* p2;//工作指针
p1=p;
p2 = p1->next;
int i, j;
//只有一个结点
if (n == 1)
{
return;
}
//只有两个结点
if (n == 2)
{
if (p1->sta.num > p2->sta.num)
{
p1->next = NULL;
p1->front = p2;
p2->next = p1;
p2->front = NULL;
p = p2;
return;
}
else
return;
}
//不止两个结点
else
{
long temnum;
float temsalary,temaward;//中间变量,存学号和分数
for (; p1->next; p1 = p1->next)
{
for (p2 = p1->next; p2; p2 = p2->next)
{
if (p1->sta.num > p2->sta.num)
{
temaward = p1->sta.award;
temsalary = p1->sta.salary;
temnum = p1->sta.num;
p1->sta.num = p2->sta.num;
p1->sta.salary = p2->sta.salary;
p1->sta.award = p2 ->sta.award;
p2->sta.num = temnum;
p2->sta.salary = temsalary;
p2->sta.award = temaward;
}
}
}
}
}
//根据工资递增排列
void sortsal(link *p){
link * p1,* p2;//工作指针
p1=p;
p2 = p1->next;
int i, j;
//只有一个结点
if (n == 1)
{
return;
}
//只有两个结点
if (n == 2)
{
if (p1->sta.salary > p2->sta.salary)
{
p1->next = NULL;
p1->front = p2;
p2->next = p1;
p2->front = NULL;
p = p2;
return;
}
else
return;
}
//不止两个结点
else
{
long temnum;
float temsalary,temaward;//中间变量,存学号和分数
for (; p1->next; p1 = p1->next)
{
for (p2 = p1->next; p2; p2 = p2->next)
{
if (p1->sta.salary > p2->sta.salary)
{
temaward = p1->sta.award;
temsalary = p1->sta.salary;
temnum = p1->sta.num;
p1->sta.num = p2->sta.num;
p1->sta.salary = p2->sta.salary;
p1->sta.award = p2 ->sta.award;
p2->sta.num = temnum;
p2->sta.salary = temsalary;
p2->sta.award = temaward;
}
}
}
}
}
void sortawa(link *p){
link * p1,* p2;//工作指针
p1=p;
p2 = p1->next;
int i, j;
//只有一个结点
if (n == 1)
{
return;
}
//只有两个结点
if (n == 2)
{
if (p1->sta.award > p2->sta.award)
{
p1->next = NULL;
p1->front = p2;
p2->next = p1;
p2->front = NULL;
p = p2;
return;
}
else
return;
}
//不止两个结点
else
{
long temnum;
float temsalary,temaward;//中间变量,存学号和分数
for (; p1->next; p1 = p1->next)
{
for (p2 = p1->next; p2; p2 = p2->next)
{
if (p1->sta.award > p2->sta.award)
{
temaward
评论0