51498766 2022-12-10 23:00 采纳率: 100%
浏览 63
已结题

请按照案例写一个会员信息管理系统

请写一个代码管理会员信息,会员余位为2。录入会员信息并可选择功能查询。(注:malloc,calloc,realloc,free等函数希望可以用上;用户输入数字1~7,即转入相应的功能)具体案例如下:

img

img

img

img

img


时间紧急,付费请教!

  • 写回答

4条回答 默认 最新

  • 叶落花枯 2022-12-11 00:55
    关注

    代码如下,完全按照案例编写。
    如有帮助,望采纳!

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    typedef struct _member {
        char first_name[20];
        char last_name[20];
        int number;
        int joined;
        int fee[5];
    } Member;
    
    typedef struct _node {
        Member member;
        struct _node *next;
    } Node;
    
    Node *create_head()
    {
        Node *head = (Node *)malloc(sizeof(Node));
        if(head == NULL) {
            return NULL;
        }
        head->next = NULL;
        return head;
    }
    
    void free_head(Node *head)
    {
        if(head == NULL) {
            return;
        }
        Node *p = head;
        Node *q = p;
        while(p) {
            q = p->next;
            free(p);
            p = q;
        }
    }
    
    void add(Node *head)
    {
        if(head == NULL) {
            return;
        }
        int n = 0;
        Node *node = (Node *)malloc(sizeof(Node));
        node->next = NULL;
        printf("Give the first and last name > ");
        scanf("%s %s", node->member.first_name, node->member.last_name);
        printf("Give member number > ");
        scanf("%d", &node->member.number);
        printf("Give year joined > ");
        scanf("%d", &node->member.joined);
        printf("Give fee for year 2017 > ");
        scanf("%d", &node->member.fee[0]);
        printf("Give fee for year 2018 > ");
        scanf("%d", &node->member.fee[1]);
        printf("Give fee for year 2019 > ");
        scanf("%d", &node->member.fee[2]);
        printf("Give fee for year 2020 > ");
        scanf("%d", &node->member.fee[3]);
        printf("Give fee for year 2021 > ");
        scanf("%d", &node->member.fee[4]);
        for(int i=0; i<5; i++) {
            if(node->member.fee[i] == 0) {
                n++;
            }
        }
        printf("Free slots %d\n", n);
        Node *p = head;
        while(p) {
            if(p->member.number == node->member.number) {
                printf("\n");
                printf("Add failed, member number is exist!\n");
                printf("\n");
                break;
            }
            if(p->next == NULL) {
                p->next = node;
                break;
            }
            p = p->next;
        }
    }
    
    void remove(Node *head)
    {
        if(head == NULL) {
            return;
        }
        int number;
        printf("Give member number to remove > ");
        scanf("%d", &number);
        Node *pre = head;
        Node *p = head->next;
        while(p) {
            if(p->member.number == number) {
                pre->next = p->next;
                free(p);
                p = NULL;
                break;
            }
            pre = p;
            p = p->next;
        }
    }
    
    void update(Node *head)
    {
        if(head == NULL) {
            return;
        }
        int number, select;
        printf("Give member number to update > ");
        scanf("%d", &number);
        Node *p = head->next;
        while(p) {
            if(p->member.number == number) {
                break;
            }
            p = p->next;
        }
        if(p == NULL) {
            return;
        }
        printf("\n");
        printf("1 Change last name\n");
        printf("2 Change member number\n");
        printf("3 Change year joined\n");
        printf("4 Change member fees\n");
        printf("Select > ");
        scanf("%d", &select);
        if(select == 1) {
            printf("Give new last name > ");
            scanf("%s", p->member.last_name);
        }
        else if(select == 2) {
            printf("Give new member number > ");
            scanf("%d", &p->member.number);
        }
        else if(select == 3) {
            printf("Give new year joined > ");
            scanf("%d", &p->member.joined);
        }
        else if(select == 4) {
            printf("Give new fee for year 2017 > ");
            scanf("%d", &p->member.fee[0]);
            printf("Give new fee for year 2018 > ");
            scanf("%d", &p->member.fee[1]);
            printf("Give new fee for year 2019 > ");
            scanf("%d", &p->member.fee[2]);
            printf("Give new fee for year 2020 > ");
            scanf("%d", &p->member.fee[3]);
            printf("Give new fee for year 2021 > ");
            scanf("%d", &p->member.fee[4]);
            int n = 0;
            for(int i=0; i<5; i++) {
                if(p->member.fee[i] == 0) {
                    n++;
                }
            }
            printf("Free slots %d\n", n);
        }
    }
    
    void print_member(Node *head)
    {
        if(head == NULL) {
            return;
        }
        int number;
        printf("Give member number > ");
        scanf("%d", &number);
        printf("\n");
        printf("********************************\n\n");
        Node *p = head->next;
        while(p) {
            if(p->member.number == number) {
                break;
            }
            p = p->next;
        }
        if(p) {
            printf("First name: %s\n", p->member.first_name);
            printf("Last name:  %s\n", p->member.last_name);
            printf("Member num: %d\n", p->member.number);
            printf("Joined:     %d\n", p->member.joined);
            printf("\n");
        }
        else {
            printf("Not found, cannot print data!\n");
            printf("\n");
        }
        printf("********************************\n");
    }
    
    void print_register(Node *head)
    {
        if(head == NULL) {
            return;
        }
        printf("********************************\n\n");
        Node *p = head->next;
        while(p) {
            printf("First name: %s\n", p->member.first_name);
            printf("Last name:  %s\n", p->member.last_name);
            printf("Member num: %d\n", p->member.number);
            printf("Joined:     %d\n", p->member.joined);
            printf("\n");
            p = p->next;
        }
        printf("********************************\n");
    }
    
    void search(Node *head)
    {
        if(head == NULL) {
            return;
        }
        int select;
        printf("1 Search first name\n");
        printf("2 Search last name\n");
        printf("3 Search member number\n");
        printf("4 Search year joined\n");
        printf("Select > ");
        scanf("%d", &select);
        printf("\n");
        if(select == 1) {
            char name[20];
            printf("Give first name > ");
            scanf("%s", name);
            Node *p = head->next;
            while(p) {
                if(strcmp(p->member.first_name, name) == 0) {
                    printf("\n");
                    printf("First name: %s\n", p->member.first_name);
                    printf("Last name:  %s\n", p->member.last_name);
                    printf("Member num: %d\n", p->member.number);
                    printf("Joined:     %d\n", p->member.joined);
                    printf("\n");
                }
                p = p->next;
            }
        }
        else if(select == 2) {
            char name[20];
            printf("Give last name > ");
            scanf("%s", name);
            Node *p = head->next;
            while(p) {
                if(strcmp(p->member.last_name, name) == 0) {
                    printf("\n");
                    printf("First name: %s\n", p->member.first_name);
                    printf("Last name:  %s\n", p->member.last_name);
                    printf("Member num: %d\n", p->member.number);
                    printf("Joined:     %d\n", p->member.joined);
                    printf("\n");
                }
                p = p->next;
            }
        }
        else if(select == 3) {
            int number;
            printf("Give member number > ");
            scanf("%d", &number);
            Node *p = head->next;
            while(p) {
                if(p->member.number == number) {
                    printf("\n");
                    printf("First name: %s\n", p->member.first_name);
                    printf("Last name:  %s\n", p->member.last_name);
                    printf("Member num: %d\n", p->member.number);
                    printf("Joined:     %d\n", p->member.joined);
                    printf("\n");
                }
                p = p->next;
            }
        }
        else if(select == 4) {
            int joined;
            printf("Give year joined > ");
            scanf("%d", &joined);
            Node *p = head->next;
            while(p) {
                if(p->member.joined == joined) {
                    printf("\n");
                    printf("First name: %s\n", p->member.first_name);
                    printf("Last name:  %s\n", p->member.last_name);
                    printf("Member num: %d\n", p->member.number);
                    printf("Joined:     %d\n", p->member.joined);
                }
                printf("\n");
                p = p->next;
            }
        }
    }
    
    void menu()
    {
        int select, running = 1;
        Node *head = create_head();
        while(running == 1) {
            printf("1 Add new member\n");
            printf("2 Remove a member\n");
            printf("3 Updata member\n");
            printf("4 Print member\n");
            printf("5 Print register\n");
            printf("6 Search\n");
            printf("7 End\n");
            printf("Select > ");
            scanf("%d", &select);
            printf("\n");
            switch (select) {
            case 1:
                add(head);
                break;
            case 2:
                remove(head);
                break;
            case 3:
                update(head);
                break;
            case 4:
                print_member(head);
                break;
            case 5:
                print_register(head);
                break;
            case 6:
                search(head);
                break;
            case 7:
                running = 0;
                break;
            default:
                break;
            }
            printf("\n");
        }
        free_head(head);
    }
    
    int main()
    {
        menu();
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月11日
  • 创建了问题 12月10日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大