有没有大佬帮忙改一下代码(从输入函数就开始错了)


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
enum sex
{
    man=0,
   woman=1,
};
enum degree
{
    primary = 0,
    junior=1,
    high=2,
    college=3,
    master=4,
    doctor=5,
};
struct worker
{
    int id;
    char name[20];
    sex  sex;
    int age;
    degree degree;
    int salary;
    char address[50];
    int tele;
    struct worker* next;
};
void select();
void managersystem();
void workersystem();
void workerstats();
int stats_sex(struct worker* head);
int stats_age(struct worker* head);
int stats_degree(struct worker* head);
int stats_wage(struct worker* head);
void input(struct worker* head);
void browse(struct worker* head);
int check_degree(struct worker* head);
int check_id(struct worker* head);
int Delete(struct worker* head);
int insert(struct worker* head);
int revise_worker(struct worker* head);
int revise_salary(struct worker* head);
struct worker* head = (struct worker*)malloc(sizeof(struct worker));
int main()
{
    select();
    FILE* w = fopen("input.txt", "wb");
    if ((w = fopen("input.txt", "wb")) == NULL)
    {
        printf("cannot open file\n");
        exit(0);
    }
    struct worker* p = head;
    while (p != NULL)  //链表数据循环输入到文件内
    {
        fprintf(w, "%d ", p->id);
        fprintf(w, "%s ", p->name);
        fprintf(w, "%d ", p->sex);
        fprintf(w, "%d ", p->age);
        fprintf(w, "%d", p->degree);
        fprintf(w, "%d ", p->salary);
        fprintf(w, "%s ", p->address);
        fprintf(w, "%d ", p->tele);
        fprintf(w, "%s", "\r\n");
        p = p->next;
    }
    fclose(w);
    return 0;
}
void workerstats()
{
    int e;
    do
    {
        printf("==职工统计系统==\n");
        printf("1:按性别统计职工个数\n");
        printf("2:按年龄统计职工个数\n");
        printf("3:按学历统计职工个数\n");
        printf("4:按工资统计职工个数\n");
        printf("0:返回上一级页面\n");
        printf("===\n");
        printf("请输入你的选择\n");
        scanf("%d", &e);
        switch (e)
        {
        case 1:stats_sex(head);
        case 2:stats_age(head);
        case 3:stats_degree(head);
        case 4:stats_wage(head);
        case 0:managersystem();
            break;
        default:
            printf("无效的输入,请重新输入:\n");
        }
    } while (e != 0);
        return ;
}
void managersystem()
{
    int e;
    do
    {
        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("0:返回上级页面\n");
        printf("===\n");
        printf("请输入你的选择\n");
        scanf("%d", &e);
        switch (e)
        {
        case 1:input(head);
        case 2:browse(head);
        case 3:check_degree(head);
        case 4:check_id(head);
        case 5:Delete(head);
        case 6:insert(head);
        case 7:workerstats();
        case 8:revise_salary(head);
        case 0:
            select();
            break;
        default:
            printf("无效的选择,请重新输入:\n");
        }

    } while (e != 0);
        return ;
}
void workersystem()
{
    int e;
    
    do
    {
        printf("==职工操作==\n");
        printf("1:修改职工信息(性别/年龄/电话/住址)\n");
        printf("2:按职工号查询职工信息\n");
        printf("0:返回上级页面\n");
        printf("==\n");
        printf("请输入你的选择\n");
        scanf("%d", &e);
        switch (e)
        {
        case 1:revise_worker(head);
        case 2:check_id(head);
        case 0:
            select();
            break;
        default:
            printf("无效的选择,请重新输入:\n");
        }
    } while (e != 0);
        return;
}
void select()
{
    int e;
    do
    {
        printf("欢迎进入职工管理系统\n");
        printf("请选择进入哪个系统\n");
        printf("0:经理管理系统\n");
        printf("1:职工自检系统\n");
        printf("2:退出\n");
        printf("请输入你的选择:");
        scanf("%d", &e);
        switch (e)
        {
        case 0: managersystem();
        case 1: workersystem();
        case 2:exit(0);
        default:
            printf("无效的选择,请重新输入。\n");
        }    } while (e != 2);
        return ;
}
int stats_sex(struct worker* head)//输入性别,统计该性别人数
{
    printf("请输入你要统计人数的性别:\n");
    int cnt=0;
    sex sex;
    scanf("%d", &sex);
    struct worker* p;
    p = head;
    while (p != NULL)
    {
        if (p->sex== sex)
        {
            cnt++;
        }
        p = p->next;
    }
    return cnt;
}
int stats_age(struct worker *head)//输入年龄,统计小于该年龄人数
{
    printf("请输入你要统计人数的年龄上限:\n");
    int age;
    int cnt=0;
    scanf("%d", &age);
    struct worker* p;
    p = head;
    while (p != NULL)
    {
        if (p->age <= age&&p->age>0)
        {
            cnt++;
        }
        p = p->next;
    }
    return cnt;
}
int stats_degree(struct worker *head)//输入学历,统计该学历人数
{
    printf("请输入你要统计人数的学历:\n");
    degree degree;
    int cnt = 0;
    scanf("%d", &degree);
    struct worker* p;
    p = head;
    while (p != NULL)
    {
        if (p->degree==degree)
        {
            cnt++;
        }
        p = p->next;
    }
    return cnt;
}
int stats_wage(struct worker *head)//输入工资数,统计小于该工资数人数
{
    printf("请输入你要统计人数的工资上限:\n");
    int wage;
    int cnt = 0;
    scanf("%d", &wage);
    struct worker* p;
    p = head;
    while (p != NULL)
    {
        if (p->salary <= wage && p->salary > 0)
        {
            cnt++;
        }
        p = p->next;
    }
    return cnt;
}
void input(struct worker *head)
{
    struct worker* cur, * tail;
    int id;
    tail = head;
    int n;
    printf("请输入职工人数:\n");
    scanf("%d", &n);
    for(int i=0;i<n;i++)
    {
        printf("请输入职工号:\n");
        scanf("%d", &id);
        if (id==0)
        {
            break;
        }
        cur = (struct worker*)malloc(sizeof(struct worker));
        cur->id = id; 
        printf("请输入姓名:\n");
        scanf("%s", cur->name);
        printf("请输入性别:\n");
        scanf("%d", &cur->sex);
        printf("请输入年龄:\n");
        scanf("%d", &cur->age);
        printf("请输入学历:\n");
        scanf("%d", &cur->degree);
        printf("请输入工资:\n");
        scanf("%d", &cur->salary);
        printf("请输入地址:\n");
        scanf("%s", cur->address);
        printf("请输入电话:\n");
        scanf("%d", &cur->tele);
        cur->next = NULL;
        tail->next = cur;
        tail = cur;
    }
}
void browse(struct worker *head)
{
    struct worker* p;
    p = head;
    while (p != NULL)
    {
        printf("%d %s %d %d %s %d", p->id, p->name, p->age, p->salary, p->address, p->tele);
        switch (p->sex)
        {
        case 0:printf("man");
        case 1:printf("woman");
        }
        switch (p->degree)
        {
        case 0:printf("primary");
        case 1:    printf("junior");
        case 2:printf("high");
        case 3:printf("college");
        case 4:    printf("master");
        case 5:    printf("doctor");
        }
        p = p->next;
    }
}
int check_degree(struct worker* head)//通过职工学历查询职工信息
{
    degree degree;
    printf("请输入要查询员工的学历:\n");
    scanf("%d", &degree);
    int a = 0;
    struct worker* p;
    p = head;
    while (p != NULL)
    {
        if (p->degree == degree)
        {
            a = 1;
            printf("%d %s %d %d %s %d", p->id, p->name, p->age, p->salary, p->address, p->tele);
            switch (p->sex)
            {
            case 0:printf("man");
            case 1:printf("woman");
            }
            switch (p->degree)
            {
            case 0:printf("primary");
            case 1:    printf("junior");
            case 2:printf("high");
            case 3:printf("college");
            case 4:    printf("master");
            case 5:    printf("doctor");
            }
        }
        p = p->next;
    }
    return a;
}
int check_id(struct worker* head)//通过职工号查询职工信息
{
    int id;
    printf("请输入要查询员工的职工号:\n");
    scanf("%d", &id);
    int a = 0;
    struct worker* p;
    p = head;
    while (p != NULL)
    {
        if (p->id==id)
        {
            a = 1;
            printf("%d %s %d %d %s %d", p->id, p->name, p->age, p->salary, p->address, p->tele);
            switch (p->sex)
            {
            case 0:printf("man");
            case 1:printf("woman");
            }
            switch (p->degree)
            {
            case 0:printf("primary");
            case 1:    printf("junior");
            case 2:printf("high");
            case 3:printf("college");
            case 4:    printf("master");
            case 5:    printf("doctor");
            }
        }
        p = p->next;
    }
    return a;
}
int Delete(struct worker* head)//删除职工号相同的职工
{
    int e;
    printf("请输入你要删除的职工的职工号:\n");
    scanf("%d", &e);
    struct worker* pre=head, * tail=head;
    if (tail != NULL)
    {
        tail = head;
        if (tail->id==e)
        {
            head = head->next;
            free(tail);
            return 1;
        }
        else
        {
            while (tail != NULL)
            {
                if (tail->id == e)
                    break;
                pre = tail;
                tail = tail->next;
            }
            if (tail != NULL)
            {
                pre->next = tail->next;
                free(tail);
                return 1;
            }
        }
    }
    return 0;
}
int insert(struct worker* head)//插入职工号前一个位置
{
    int e;
    printf("请输入你要插入结点后员工的职工号:\n");
    scanf("%d", &e);
    struct worker* cur, * node = head, * pre;
    cur = (struct worker*)malloc(sizeof(struct worker));
    scanf("%d %s %d &d %d &d %s %d", &cur->id, cur->name,&cur->sex, &cur->age,&cur->degree, &cur->salary, cur->address, &cur->tele);
    cur->next = NULL;
    if (head->id == e)
    {
        cur->next = head;
        head = cur;
        return 1;
    }
    else
    {
        pre = node;
        node = node->next;
        while (node != NULL)
        {
            if (node->id == e)
                break;
            pre = node;
            node = node->next;
        }
        if (node != NULL)
        {
            cur->next = node;
            pre->next = cur;
            return 1;
        }
    }
    return 0;
}
int revise_worker(struct worker *head)//通过职工号找到修改的职工
{
    int a = 0;
    int id;
    int age;
    sex sex;
    int tele;
    char address[50];
    printf("请输入需要修改职工的职工号:\n");
    scanf("%d", &id);
    struct worker* cur;
    cur = head;
    while (cur != NULL)
    {
        if (cur->id == id)
            a = 1;
            break;
    }
    printf("请输入修改之后的信息:\n");
    printf("请输入性别:\n");
    scanf("%d", &sex);
    printf("请输入年龄:\n");
    scanf("%d", &age);
    printf("请输入地址:\n");
    scanf("%s", address);
    printf("请输入手机号:\n");
    scanf("%d", &tele);
    cur->sex = sex;
    cur->age = age;
    strcpy(cur->address, address);
    cur->tele = tele;
    return a;
}
int revise_salary(struct worker* head)
{
    int a = 0;
    int id;
    int salary;
    printf("请输入需要修改职工的职工号:\n");
    scanf("%d", &id);
    struct worker* cur;
    cur = head;
    while (cur != NULL)
    {
        if (cur->id == id)
            a = 1;
            break;
    }
    printf("请输入修改之后的信息:\n");
    printf("请输入工资:\n");
    scanf("%d", &salary);
    cur->salary = salary;
    return a;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值