#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct
{
long num;
char name[10];
char date[15];
double pay;
}employee;
typedef struct node
{
employee p;
struct node *pre;
struct node *next;
}node, *linklist;
linklist head, last;
void setdata(linklist p)
{
printf("编号:");
scanf("%ld", &p->p.num);
printf("姓名:");
scanf("%s", p->p.name);
printf("入职日期:");
scanf("%s", p->p.date);
printf("工资:");
scanf("%lf", &p->p.pay);
}
void insert(linklist p)
{
p->next = last;
last->pre->next = p;
p->pre = last->pre;
last->pre = p;
}
void add()
{
char ch;
do
{
linklist q = (linklist)malloc(sizeof(node));
setdata(q);
insert(q);
printf("是否继续添加 (Y键继续)");
getchar();
scanf("%c", &ch);
} while (ch == 'Y' || ch == 'y');
system("pause");
}
linklist find()
{
char Name[10];
char Date[15];
int i;
linklist a=head->next;//临时指针
printf("选择查询方式(1.姓名 2.入职日期)");
scanf("%d", &i);
if (i == 1)
{
printf("请输入需要查找的姓名:");
scanf("%s", Name);
while (a != last)
{
if (strcmp(Name, a->p.name) == 0)
break;
a = a->next;
}
}
if (i == 2)
{
printf("请输入需要查找的入职日期");
scanf("%s", Date);
while (a != last)
{
if (strcmp(Name, a->p.date) == 0)
break;
a = a->next;
}
}
if (a = last)
{
printf("未找到
");
system("pause");
}
return a;
}
void del()
{
linklist a = NULL;
linklist q = find();
if (q !=last)
{
a = q->pre;//临时指针
q->pre->next = q->next;
q->next->pre = a;
free(q);
}
else
printf("管理系统未收录此信息,删除失败");
system("pause");
}
void modifydata()
{
linklist a;
printf("请按要求输入以下信息");
a = find();
if (a != NULL)
{
setdata(a);
printf("修改成功");
}
else
{
printf("7管理系统未收录此信息,修改失败");
}
system("pause");
}
void show(linklist p)
{
printf("%ld %s %s %.2lf
", p->p.num, p->p.name, p->p.date, p->p.pay);
}
void sort()
{
int ch;
linklist a = head->next,b=a->next;
char x[15];
int y;
double z;
printf("请选择排序方式:1.工号 2.姓名 3.入职日期 4.工资
");
scanf("%d", &ch);
if (ch == 1)
{
for (; a != last; a = a->next)
for (; b != last; b = b->next)
{
if (a->p.num > b->p.num)
{
y = a->p.num;
a->p.num = b->p.num;
b->p.num = y;
}
}
printf("排序成功!
");
system("pause");
}
else if (ch == 2)
{
for (; a != last;a=a->next)
for (; b != last; b = b->next)
{
if (strcmp(a->p.name, b->p.name)>0)
{
strcpy(x, a->p.name);
strcpy(a->p.name, b->p.name);
strcpy(b->p.name, x);
}
}
printf("排序成功!
");
}
else if (ch == 3)
{
for (; a != last; a = a->next)
for (; b != last; b = b->next)
{
if (strcmp(a->p.date, b->p.date)>0)
{
strcpy(x, a->p.date);
strcpy(a->p.date, b->p.date);
strcpy(b->p.date, x);
}
}
printf("排序成功!
");
}
else if (ch == 4)
{
for (; a != last; a = a->next)
for (; b != last; b = b->next)
{
if (a->p.pay > b->p.pay)
{
z = a->p.pay;
a->p.pay = b->p.pay;
b->p.pay = z;
}
}
printf("排序成功!
");
}
else
printf("输入有误7
");
}
void Tongji()
{
linklist a = head->next;
printf("工号 姓名 入职日期 工资
");
while (a != last)
{
show(a);
a = a->next;
}
system("pause");
}
void meun(void)
{
printf("**********工资管理系统**********
");
printf("* 1.添加 *
");
printf("* 2.删除 *
");
printf("* 3.查询 *
");
printf("* 4.修改 *
");
printf("* 5.统计 *
");
printf("* 6.排序 *
");
printf("* 0.退出 *
");
printf("********************************
");
}
int choose()
{
int i;
scanf("%d", &i);
switch (i)
{
case 1:add(); break;
case 2: del(); break;
case 3: {linklist a = find(); if (a != last){ show(a); system("pause"); } break; }
case 4: modifydata(); break;
case 5: Tongji(); break;
case 6: sort(); break;
case 0: printf("欢迎使用本系统!"); break;
default:printf("输入有误!,请重新操作!7");
break;
}
return i;
}
void destroy()
{
linklist p = head->next;
while (p != last)
{
head->next = p->next;
free(p);
p = head->next;
}
free(head);
free(last);
}
int main()
{
int i=1;
head = (linklist)malloc(sizeof(node));
last = (linklist)malloc(sizeof(node));
head->next = last;
last->next = NULL;
head->pre = NULL;
last->pre = head;
while (i=1)
{
meun();
i = choose();
system("cls");
}
system("pause");
destroy();
return 0;
}