职工信息综合

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

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值