职工信息的综合运算c语言,数据结构:职工信息的综合运算

#includetypedef struct w //节点结构体

{

int no;

char name[100];

int depno;

int salary;

struct w* next;

} worker;

void input(worker*&L) //选项1的功能,也是题目(2)小题

{ //输入一个职工记录

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) //选项2的功能,也是题目(3)小题

{ //显示所有职工记录

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) //选项3的功能,也是题目(4)小题

{ //按工号升序排序,插入排序

worker*p,*q,*s; //p指向已排序列待插入位置的前驱节点,q指向未排序列第一个节点(既指向待插入节点)

if(L->next==NULL) //由于所有函数均不判断L空,所有这里也默认L不空(整个程序不会出现空值传进来的情况)

{

printf("链表为空\n");

return;

}

q=L->next->next;

L->next->next=NULL; //断开已排序列与未排序列,以保证排序完毕后最后节点->next为空

while(q!=NULL)

{

p=L;

while(p->next!=NULL && q->no >= p->next->no) //如果待插入位置节点no值≥待插入节点,则待插位置后移

p=p->next;

s=q->next; //已找到正确插入位置,将p节点插入到pre节点的后面

q->next=p->next;

p->next=q;

q=s;

}

printf("已排序完毕\n");

}

void dep_sort(worker*&L) //选项4的功能,也是题目(5)小题

{ //按部门升序排序

worker*p,*q,*s; //算法与num_sort一致,不再叙述

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) //选项5的功能,也是题目(6)小题

{ //按工资升序排序

worker*p,*q,*s; //算法与num_sort一致,不再叙述

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) //选项6的功能,也是题目(7)小题

{ //按工号删除一个职工记录

worker*p,*dele; //算法与num_sort一致,不再叙述

int a;

printf("请输入要删除职工记录的工号:");

scanf("%d",&a);

for(p=L;p->next!=NULL;p=p->next) //p指向被删节点的前驱节点

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) //选项7的功能,也是题目(8)小题

{ //删除全部职工记录,这里不删除头结点

worker*p=L->next,*q;

while(p!=NULL)

{

q=p;

p=p->next;

free(q);

}

L->next=NULL;

printf("已删除全部职工记录\n");

}

void end(worker*&L) //选项8的功能,自己加的功能,不是题目要求

{ //删除全部记录并结束程序

destroy(L);

free(L); //调用end之后主函数结束,不会再访问L,所以释放空间

}

void menu()

{

printf(" ┏━━━━━━━━━━━━━━━┓\n");

printf(" ┃ 菜单 ┃\n");

printf(" ┠┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨\n");

printf(" ┠输入1:输入一个职工记录 ┃\n"); //本题不考虑文件OI,所以省去OI部分

printf(" ┠输入2:显示所有职工记录 ┃\n");

printf(" ┠输入3:按工号升序排序 ┃\n");

printf(" ┠输入4:按部门升序排序 ┃\n");

printf(" ┠输入5:按工资升序排序 ┃\n");

printf(" ┠输入6:按工号删除一个职工记录 ┃\n");

printf(" ┠输入7:删除全部职工记录 ┃\n");

printf(" ┠输入8:删除全部记录并结束程序 ┃\n"); //第八条为自己加的功能,不是题目要求

printf(" ┗━━━━━━━━━━━━━━━┛\n\n");

}

void main()

{

int option,T=0; //option记录输入选项号,T为辅助变量

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");

}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
//职工管理程序 //问题描述: //请设计一个职工信息管理程序,以方便人事部门对本单位职工的管理,该程序应该具有以下功能: //(1)能从键盘输入职工信息 。 //(2)给定职工号,显示职工信息。 //(3)给定工作部门,显示该部门的职工信息。 //(4)给定职工号,修改职工信息。 //(5)给定职工号,删除职工信息。 //题目要求: //(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。 //(2)职工信息应该包含职工号、姓名、工作部门、职称、入厂时间、工资。 //(3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。 //输入要求: // (1)应用程序运行后在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。程序根据用户输入的信息完成相应的处理,实现要求的功能。 // (2)能对输入的数据进行简单的校验,例如,入厂时间必须是合法的日期格式,职工号是唯一的(一个职工号对应一个职工职工信息)。 //输出要求: // (1)应用程序运行后,要在屏幕上显示一个菜单。 // (2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式以及结束方式等。 //(3)在程序完成处理后,要清楚地给出程序的处理结果。例如,在给定职工号删除职工信息时,如果该职工不存在,要提示没能删除,如果删除成功要提示删除成功。 //实现要求: // (1)在程序中使用链表存储职工信息。 // (2)采用模块化程序设计的方法,将程序中的各项功能用函数实现。 //提示: // (1)使用结构体表示职工信息,一个结点保存一条职工信息。 //扩展功能: // (1)提供一些统计功能。例如统计每个部门的人数,统计平均工资、统计各职称的人数。 // (2)职工信息从文件读入。 // (3)将职工信息保存到文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值