if (n->gonghao <= p2->gonghao) { if (head == p2) { printf(\当前工号已存在,请检查后重新输入\\n\head = n;
else if (n->gonghao == p2->gonghao)
goto begin2; } else
p1->next = n; n->next = p2;
} else { p2->next = n; n->next = NULL; }
printf(head); fanhuicaidan();
}
void
del(struct //(3)删除员工信息函数 {
struct yuangong *p1,*p2;
yuangong *del= (yuangong *)malloc(LEN); begin3: p2 = head;
printf(\请输入要删除员工的名字:\ scanf(\ while ((strcmp(del->name,
p2->name)
//找到要删除的名字位于那两个结点之间
{ p1 = p2; p2 = p2->next;
}
if ((strcmp(del->name, p2->name) == 0)) { if (p2
//等于头地址的话说明要删除的结点位于第一个
head = p2->next;
else
yuangong 0)
&&
==
*head)
NULL))
head)
!=
(p2->next
!=
}
}
p1->next = p2->next;
//删除结点p2
else { }
printf(head); fanhuicaidan();
printf(\未找到此员工,请核实后重新输入\\n\goto begin3;
//输出链表
void { } void {
int i;
real(struct yuangong *head, int realmoney[])
//(4)计算实发工资函数
printf(\┌────────────────┐\\n\printf(\│工号 姓名 实发工资 │\\n\printf(\├────────────────┤\\n\for (i = 0; i < 10; i++) { }
printf(\└────────────────┘\\n\fanhuicaidan();
printf(\│%-9d%-12s%-11d│\\n\head = head->next;
all(struct yuangong *head, int realmoney[])
//(5)求所有员工各项总和函数
int x, allgongzi = 0, allbutie = 0, alljiangjin = 0, allshuidian = 0, allfangzu = 0, allshifa for (i = 0; i < 10; i++) {
allgongzi = allgongzi + head->gongzi; allbutie = allbutie + head->butie;
alljiangjin = alljiangjin + head->jiangjin; allshuidian = allshuidian + head->shuidian; allfangzu = allfangzu + head->fangzu;
= 0, i;
}
}
allshifa = allshifa + realmoney[i]; head = head->next;
printf(\┌──────────────────────────────────printf(\│总基本工资 总补贴 总奖金 总水电费 总房租 总实发printf(\├───────────────────────────────────printf(\│%-18d%-12d%-13d%-12d%-12d%-17d│\\n\allgongzi, allbutie, alljiangjin, printf(\└───────────────────────────────────fanhuicaidan();
────────┐\\n\工资 │\\n\───────┤\\n\
allshuidian, allfangzu, allshifa); ───────┘\\n\
void {
rank(struct yuangong *head, int realmoney[])
//(6)排序函数
int num,j=1; char str[256];
struct yuangong *p1, *p2, *real; real = (struct yuangong *)malloc(LEN); int i = 0; p1 = head;
for (real = head; real!= NULL; real = real->next) //将主函数{ }
for (p1; p1->next != NULL; p1 = p1->next) //开始冒泡{
for (p2 = p1->next; p2 != NULL; p2 = p2->next) {
if (p1->realmoney > p2->realmoney) {
num = p1->gonghao; //交换结p1->gonghao = p2->gonghao; p2->gonghao = num;
real->realmoney = realmoney[i]; i = i + 1;
中计算的实发工资赋值到链表中
排序
点元素
}
}
}
strcpy(str, p1->name); strcpy(p1->name, p2->name); strcpy(p2->name, str); num = p1->gongzi; p1->gongzi = p2->gongzi; p2->gongzi = num; num = p1->butie; p1->butie = p2->butie; p2->butie = num; num = p1->jiangjin;
p1->jiangjin = p2->jiangjin; p2->jiangjin = num; num = p1->shuidian;
p1->shuidian = p2->shuidian; p2->shuidian = num; num = p1->fangzu; p1->fangzu = p2->fangzu; p2->fangzu = num; num = p1->realmoney;
p1->realmoney = p2->realmoney; p2->realmoney = num;
printf(\┌──────────────────────────────────printf(\│工号 姓名 基本工资 补贴 奖金 水电 房租 printf(\├───────────────────────────────────while (head!= NULL) {
printf(\│%-8d%-14s%-16d%-10d%-10d%-8d%-14d%-14d%-6d│\\n\head->gonghao,
────────────────┐\\n\实发工资 实发工资排名│\\n\
───────────────┤\\n\
head->name, head->gongzi, head->butie, head->jiangjin, head->shuidian, head->fangzu, head->realmoney,j); }
}
printf(\└───────────────────────────────────fanhuicaidan();
head = head->next; j = j + 1;
───────────────┘\\n\
void main() { 法
{
switch (a) {
case 0:exit(0); break;
case 1:search(lianbiao()); system(\case 2:add(lianbiao(), realmoney); system(\
int a, i, j, s = 0;
int realmoney[10]; //定义一个计算实发工struct yuangong *head; FILE *fp;
system(\更换背景为湖蓝色,fp = fopen(\课程设计员工信息.txt\
printf(\╭═════════■□■□═══╮\\n\菜单界面 printf(\│ 员工信息管理系统 │\\n\printf(\╰═══■□■□══════════╯\\n\printf(\┌─────────────—┐\\n\printf(\│ 1. 查询信息 2. 添加员工 │\\n\printf(\│ │\\n\printf(\│ 3. 删除信息 4. 实发工资 │\\n\printf(\│ │\\n\printf(\│ 5. 费用总和 6. 工资排名 │\\n\printf(\│ │\\n\printf(\│ 0. 退出程序 │\\n\printf(\└─────────────—┘\\n\
if (setjmp(fanhuizhi)) //longjum跳到此处 {
head = lianbiao(); for (j = 0; j < 10; j++) { }
printf(\
请
您
选
择
realmoney[j] = head->gongzi + head->butie + head->jiangjin - head->shuidian - head = head->next; goto begin;
资的数组
字体为黑色
head->fangzu; //计算实发工资
begin:
(0-6):\
//程序返回开始处
scanf(\序号选择 if (a >= 0 && a <= 6) //判断序号是否合
case 3:del(lianbiao()), system(\
case 4:real(lianbiao(), realmoney); system(\ case 5:all(lianbiao(), realmoney); system(\ case 6:rank(lianbiao(), realmoney); system(\ }
}
else { printf(\请输入正确的功能序号**\\n\
goto begin; //回输出序号处
}
}
system(\
}
序号错误程序跳