C语言实现麦当劳菜单

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>

// 设计用户节点
struct user
{
    int account;
    char password[6];
    struct user *next;
};
// 初始化用户链表
struct user *init_user()
{
    struct user *u = malloc(sizeof(struct user));
    if (u == NULL)
    {
        printf("u malloc fail\n");
        return NULL;
    }
    u->account = 0;
    memset(u->password, 0, sizeof(u->password));
    u->next = NULL;
}
// 注册
void reg(struct user *u)
{
    struct user *un = malloc(sizeof(struct user));
    if (un == NULL)
    {
        printf("un malloc fail\n");
        return;
    }
    printf("请输入11位整数账号:\n");
    scanf("%d", &un->account);
    printf("请输入6位密码:\n");
    scanf("%s", un->password);
    // 头插
    un->next = u->next;
    u->next = un;
    printf("\n注册成功!\n");
}
// 普通用户登录
int login(struct user *u)
{
    int account;
    char password[6];
    printf("请输入11位整数账号:\n");
    scanf("%d", &account);
    printf("请输入6位密码:\n");
    scanf("%s", password);
    struct user *p;
    for (p = u->next; p != NULL; p = p->next)
    {
        if (p->account == account)
        {
            if (strcmp(p->password, password) == 0)
            {
                printf("\n登录成功!\n");
                return 1;
            }
            else
            {
                printf("\n密码输入错误!\n");
                return 0;
            }
        }
    }
    printf("\n用户名不存在,请先注册!\n");
}
// 管理员登录
int admin_login()
{
    while (1)
    {
        int account;
        char password[6];
        printf("请输入8位整数账号:\n");
        scanf("%d", &account);
        printf("请输入6位密码:\n");
        scanf("%s", password);
        if (account == 88888888)
        {
            if (strcmp("123456", password) == 0)
            {
                printf("登录成功!\n");
                return 1;
            }
            else
            {
                printf("密码输入错误!\n");
            }
        }
        printf("用户名输入错误!\n");
    }
}
// 设计食物的节点
struct food
{
    char food_name[50]; // 食物名字
    int price;          // 价格
    struct food *next;  // 后继指针
    struct food *prev;  // 前驱指针
};
// 设计菜单节点
struct menu
{
    int num;             // 序号
    char menu_name[50];  // 菜单名字
    struct food *f_head; // 指向食物链表头的节点
    struct menu *next;   // 后继指针
    struct menu *prev;   // 前驱指针
};
// 初始化食物节点
struct food *init_food()
{
    struct food *f_head = malloc(sizeof(struct food));
    if (f_head == NULL)
    {
        printf("f_head malloc fail\n");
        return NULL;
    }
    memset(f_head->food_name, 0, sizeof(f_head->food_name));
    f_head->price = 0;
    f_head->next = f_head;
    f_head->prev = f_head;
    return f_head;
}
// 初始化菜单节点
struct menu *init_menu()
{
    struct menu *m_head = malloc(sizeof(struct menu));
    if (m_head == NULL)
    {
        printf("m_head malloc fail\n");
        return NULL;
    }
    m_head->num = 0;
    bzero(m_head->menu_name, 50);
    m_head->f_head = NULL;
    m_head->next = m_head;
    m_head->prev = m_head;
    return m_head;
}
// 食物头插
void insert_food_head(struct food *f_head, int food_num)
{
    for (int i = 0; i < food_num; i++)
    {
        struct food *new_f = malloc(sizeof(struct food));
        if (new_f == NULL)
        {
            printf("new_f malloc fail\n");
            return;
        }
        char foodname[50];
        printf("please input foodname\n");
        scanf("%s", foodname);
        strcpy(new_f->food_name, foodname);
        int price;
        printf("please input foodprice\n");
        scanf("%d", &price);
        new_f->price = price;

        new_f->next = f_head->next;
        new_f->prev = f_head;
        f_head->next->prev = new_f;
        f_head->next = new_f;
    }
}
// 菜单头插
void insert_menu_head(struct menu *m_head, struct food *f_head)
{
    struct menu *new_m = malloc(sizeof(struct menu));
    if (new_m == NULL)
    {
        printf("new_m malloc fail\n");
        return;
    }
    // 初始化节点
    int num;
    printf("please input menunum\n");
    scanf("%d", &num);
    new_m->num = num;
    char menuname[50];
    printf("please input menuname\n");
    scanf("%s", menuname);
    strcpy(new_m->menu_name, menuname);
    new_m->f_head = f_head;

    new_m->next = m_head->next;
    new_m->prev = m_head;
    m_head->next->prev = new_m;
    m_head->next = new_m;
}
// 食物头插
void insert_food_head1(struct food *f_head, char foodname[50], int price)
{
    struct food *new_f = malloc(sizeof(struct food));
    if (new_f == NULL)
    {
        printf("new_f malloc fail\n");
        return;
    }
    strcpy(new_f->food_name, foodname);
    new_f->price = price;

    new_f->next = f_head->next;
    new_f->prev = f_head;
    f_head->next->prev = new_f;
    f_head->next = new_f;
}
// 菜单头插
void insert_menu_head1(struct menu *m_head, struct food *f_head, int num, char menuname[50])
{
    struct menu *new_m = malloc(sizeof(struct menu));
    if (new_m == NULL)
    {
        printf("new_m malloc fail\n");
        return;
    }
    // 初始化节点
    new_m->num = num;
    strcpy(new_m->menu_name, menuname);
    new_m->f_head = f_head;

    new_m->next = m_head->next;
    new_m->prev = m_head;
    m_head->next->prev = new_m;
    m_head->next = new_m;
}
#if 1
// 食物尾插
void insert_food_tail(struct food *f_head, int food_num)
{
    for (int i = 0; i < food_num; i++)
    {
        struct food *new_f = malloc(sizeof(struct food));
        if (new_f == NULL)
        {
            printf("new_f malloc fail\n");
            return;
        }
        char foodname[50];
        printf("please input foodname\n");
        scanf("%s", foodname);
        strcpy(new_f->food_name, foodname);
        int price;
        printf("please input foodprice\n");
        scanf("%d", &price);
        new_f->price = price;
        // 不用分情况
        new_f->next = f_head;
        new_f->prev = f_head->next;
        f_head->prev->next = new_f;
        f_head->prev = new_f;
    }
}
// 菜单尾插
void insert_menu_tail(struct menu *m_head, struct food *f_head)
{
    struct menu *new_m = malloc(sizeof(struct menu));
    if (new_m == NULL)
    {
        printf("new_m malloc fail\n");
        return;
    }
    // 初始化节点
    int num;
    printf("please input menunum\n");
    scanf("%d", &num);
    new_m->num = num;
    char menuname[50];
    printf("please input menuname\n");
    scanf("%s", menuname);
    strcpy(new_m->menu_name, menuname);
    new_m->f_head = f_head;
    // 不用分情况
    new_m->next = m_head;
    new_m->prev = m_head->prev;
    m_head->prev->next = new_m;
    m_head->prev = new_m;
}
#else
// 食物尾插
void insert_food_tail(struct food *f_head, char foodname[50], int price)
{
    struct food *new_f = malloc(sizeof(struct food));
    if (new_f == NULL)
    {
        printf("new_f malloc fail\n");
        return;
    }
    strcpy(new_f->food_name, foodname);
    new_f->price = price;

    new_f->next = f_head;
    new_f->prev = f_head->next;
    f_head->prev->next = new_f;
    f_head->prev = new_f;
}
// 菜单尾插
void insert_menu_tail(struct menu *m_head, struct food *f_head, int num, char menuname[50])
{
    struct menu *new_m = malloc(sizeof(struct menu));
    if (new_m == NULL)
    {
        printf("new_m malloc fail\n");
        return;
    }
    // 初始化节点
    new_m->num = num;
    strcpy(new_m->menu_name, menuname);
    new_m->f_head = f_head;

    new_m->next = m_head;
    new_m->prev = m_head->prev;
    m_head->prev->next = new_m;
    m_head->prev = new_m;
}
#endif

// 食物遍历
void dispaly_food(struct food *f_head)
{
    if (f_head->next == f_head)
    {
        printf("food null\n");
        return;
    }
    struct food *p;
    for (p = f_head->next; p != f_head; p = p->next)
    {
        printf("│食物名字:[%-s]\n", p->food_name);
        printf("│食物价格:[%-d]\n", p->price);
    }
    printf("╰───────────────────────╯\n");
}
// 菜单和食物遍历
void display(struct menu *m_head)
{
    if (m_head->next == m_head)
    {
        printf("menu null\n");
        return;
    }
    struct menu *p;
    for (p = m_head->next; p != m_head; p = p->next)
    {
        printf("╭───────────────────────╮\n");
        printf("│菜单编号:[%-d]\n", p->num);
        printf("│菜单名字:[%-s]\n", p->menu_name);
        printf("│\n");
        printf("│\n");
        dispaly_food(p->f_head);
    }
}
// 释放食物链表
void release_food(struct food *f_head)
{
    // 只有头结点
    if (f_head->next == f_head)
    {
        printf("food null\n");
        free(f_head);
        return;
    }
    // 多个节点
    struct food *tmp, *p;
    for (p = f_head->next; p != f_head;)
    {
        tmp = p;
        p = p->next;
        free(tmp);
    }
    free(f_head);
}
// 释放菜单和食物链表
void release_menu(struct menu *m_head)
{
    // 只有头结点
    if (m_head == NULL)
    {
        return;
    }
    // 多个节点
    struct menu *tmp, *p;
    for (p = m_head->next; p != m_head;)
    {
        tmp = p;
        p = p->next;
        release_food(tmp->f_head);
        free(tmp);
    }
    m_head->next = m_head;
    m_head->prev = m_head;
}
// 头删菜单
void delete_menu_head(struct menu *m_head)
{
    // 空
    if (m_head->next == m_head)
    {
        printf("menu null\n");
        free(m_head->next);
        return;
    }
    // 只有一个节点
    struct menu *p;
    if (m_head->next->next == m_head)
    {
        p = m_head->next;
        m_head->next = m_head;
        m_head->prev = m_head;
        release_food(p->f_head);
        free(p);
    }
    // 多个节点
    p = m_head->next;
    p->next->prev = m_head;
    m_head->next = p->next;
    release_food(p->f_head);
    free(p);
}
// 尾删菜单
void delete_menu_tail(struct menu *m_head)
{
    // 空
    if (m_head->next == m_head)
    {
        printf("menu null\n");
        free(m_head->next);
        return;
    }
    // 只有一个节点
    struct menu *p;
    if (m_head->prev->prev == m_head)
    {
        p = m_head->prev;
        m_head->next = m_head;
        m_head->prev = m_head;
        release_food(p->f_head);
        free(p);
    }
    // 多个节点
    p = m_head->prev;
    p->prev->next = m_head;
    m_head->prev = p->prev;
    release_food(p->f_head);
    free(p);
}

// 根据序号查找菜单
void find_menu_num(struct menu *m_head, int num)
{
    struct menu *p;
    for (p = m_head->next; p != m_head; p = p->next)
    {
        if (p->num == num)
        {
            printf("╭───────────────────────╮\n");
            printf("│菜单序号:[%d]\n", p->num);
            printf("│菜单名字:[%s]\n", p->menu_name);
            printf("│\n");
            printf("│\n");
            dispaly_food(p->f_head);
            return;
        }
    }
    printf("\n没有找到菜单\n");
}
// 根据名字查找菜单
void find_menu_name(struct menu *m_head, char menu_name[50])
{
    struct menu *p;
    for (p = m_head->next; p != m_head; p = p->next)
    {
        if (strcmp(p->menu_name, menu_name) == 0)
        {
            printf("╭───────────────────────╮\n");
            printf("│菜单序号:[%d]\n", p->num);
            printf("│菜单名字:[%s]\n", p->menu_name);
            printf("│\n");
            printf("│\n");
            dispaly_food(p->f_head);
            return;
        }
    }
    printf("\n没有找到菜单\n");
}
// 修改food
void change_food(struct food *f_head)
{
    struct food *q;
    for (q = f_head->next; q != f_head; q = q->next)
    {
        printf("please input change foodname:\n");
        scanf("%s", q->food_name);
        printf("please input change foodprice:\n");
        scanf("%d", &q->price);
    }
}
// 根据序号修改菜单
void change_menu_num(struct menu *m_head, int num)
{
    struct menu *p;
    for (p = m_head->next; p != m_head; p = p->next)
    {
        if (p->num == num)
        {
            printf("please input change menunum:\n");
            scanf("%d", &p->num);
            printf("please input change menuname:\n");
            scanf("%s", p->menu_name);
            change_food(p->f_head);
        }
    }
}
// 根据名字修改菜单
void change_menu_name(struct menu *m_head, char menu_name[50])
{
    struct menu *p;
    for (p = m_head->next; p != m_head; p = p->next)
    {
        if (strcmp(p->menu_name, menu_name) == 0)
        {
            printf("please input change menunum:\n");
            scanf("%d", &p->num);
            printf("please input change menuname:\n");
            scanf("%s", p->menu_name);
            change_food(p->f_head);
        }
    }
}
int menu_length(struct menu *m_head)
{
    if (m_head->next == m_head)
    {
        return 0;
    }
    int length = 0;
    struct menu *p;
    for (p = m_head->next; p != m_head; p = p->next)
    {
        length++;
    }
    return length;
}

// 实现指定位置插入菜单
void insert_menu_at(struct menu *m_head, int pos)
{
    if (pos <= 0)
    {
        printf("无效的位置\n");
        return;
    }

    int length = menu_length(m_head);
    if (pos > length + 1)
    {
        printf("位置超出范围\n");
        return;
    }

    struct menu *new_m = malloc(sizeof(struct menu));
    if (new_m == NULL)
    {
        printf("内存分配失败\n");
        return;
    }

    struct food *new_food_head = init_food();
    if (new_food_head == NULL)
    {
        printf("食物链表初始化失败\n");
        free(new_m);
        return;
    }

    printf("请输入要插入的食物数量\n");
    int food_num;
    scanf("%d", &food_num);
    insert_food_head(new_food_head, food_num);

    struct menu *p = m_head;
    for (int i = 0; i < pos - 1; i++)
    {
        p = p->next;
    }

    new_m->next = p->next;
    new_m->prev = p;
    p->next->prev = new_m;
    p->next = new_m;

    printf("请输入菜单编号:\n");
    scanf("%d", &new_m->num);
    printf("请输入菜单名字:\n");
    scanf("%s", new_m->menu_name);
    new_m->f_head = new_food_head;
}

// 实现指定位置删除菜单
void delete_menu_at(struct menu *m_head, int pos)
{
    if (pos <= 0)
    {
        printf("无效的位置\n");
        return;
    }

    int length = menu_length(m_head);
    if (pos > length)
    {
        printf("位置超出范围\n");
        return;
    }

    struct menu *p = m_head;
    for (int i = 0; i < pos; i++)
    {
        p = p->next;
    }

    p->prev->next = p->next;
    p->next->prev = p->prev;

    release_food(p->f_head);
    free(p);
    printf("删除成功\n");
}

// 实现指定序号删除菜单
void delete_menu_by_num(struct menu *m_head, int num)
{
    struct menu *p = m_head->next;
    while (p != m_head)
    {
        if (p->num == num)
        {
            p->prev->next = p->next;
            p->next->prev = p->prev;

            release_food(p->f_head);
            free(p);
            printf("删除成功\n");
            return;
        }
        p = p->next;
    }
    printf("未找到指定序号的菜单\n");
}

int main(int argc, char **argv)
{
    struct user *u = init_user();
    if (u == NULL)
    {
        printf("u init_user fail\n");
        return -1;
    }
    struct menu *m_head = init_menu();
    if (m_head == NULL)
    {
        printf("m_head init_menu fail\n");
        return -1;
    }
    struct food *f_head1 = init_food();
    if (f_head1 == NULL)
    {
        printf("f_head1 init_food fail\n");
        return -1;
    }
    struct food *f_head2 = init_food();
    if (f_head2 == NULL)
    {
        printf("f_head2 init_food fail\n");
        return -1;
    }
    struct food *f_head3 = init_food();
    if (f_head3 == NULL)
    {
        printf("f_head3 init_food fail\n");
        return -1;
    }
    // 原始菜单
    insert_food_head1(f_head1, "香辣鸡腿汉堡", 20);
    insert_food_head1(f_head1, "可乐", 6);
    insert_food_head1(f_head1, "薯条", 12);
    insert_food_head1(f_head2, "黑椒鸡块", 12);
    insert_food_head1(f_head2, "薯条", 12);
    insert_food_head1(f_head2, "鸡腿", 12);
    insert_food_head1(f_head3, "沙拉", 15);
    insert_food_head1(f_head3, "小蛋糕", 20);
    insert_food_head1(f_head3, "年糕", 15);
    insert_menu_head1(m_head, f_head1, 3, "超值三件套");
    insert_menu_head1(m_head, f_head2, 2, "小吃");
    insert_menu_head1(m_head, f_head3, 1, "甜品");

    struct food *new_food_head;
    struct food *new_food_tail;
    int food_num;
    int flag = 1;
    int flag1 = 1;
    int fun;
    int fun1;
    int fun2;
    int fun3;
    int num;
    char a[50];
    while (1)
    {
        printf("\n===登录菜单===\n");
        printf("1. 注册\n");
        printf("2. 登录\n");
        printf("3. 管理员登录\n");
        printf("4. 退出\n");
        printf("请选择操作:");
        scanf("%d", &fun);
        switch (fun)
        {
        case 1:
            reg(u);
            break;
        case 2:
            // 普通用户
            if (login(u) == 1)
            {
                flag = 1;
                struct menu *p = m_head;
                struct food *q;
                while (flag)
                {
                    printf("\n===== 用户菜单 =====\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("请选择操作:");
                    scanf("%d", &fun1);
                    switch (fun1)
                    {
                    case 1:
                        if (p->next == m_head) // 如果当前已经是尾节点,则不能再往后翻
                        {
                            printf("已经是最后一本\n");
                        }
                        else
                        {
                            p = p->next;
                            printf("╭───────────────────────╮\n");
                            printf("│菜单序号:[%d]\n", p->num);
                            printf("│菜单名字:[%s]\n", p->menu_name);
                            printf("│\n");
                            printf("│\n");
                            dispaly_food(p->f_head);
                        }
                        break;
                    case 2:
                        if (p->prev == m_head) // 如果当前已经是尾节点,则不能再往后翻
                        {
                            printf("已经是最后一本\n");
                        }
                        else
                        {
                            p = p->prev;
                            printf("╭───────────────────────╮\n");
                            printf("│菜单序号:[%d]\n", p->num);
                            printf("│菜单名字:[%s]\n", p->menu_name);
                            printf("│\n");
                            printf("│\n");
                            dispaly_food(p->f_head);
                        }
                        break;
                    case 3:
                        flag1 = 1;
                        q = p->f_head;
                        while (flag1)
                        {
                            printf("\n===== 菜单食物 =====\n");
                            printf("1. 下一个食物\n");
                            printf("2. 上一个食物\n");
                            printf("3. 购买\n");
                            printf("4. 退出\n");
                            printf("请选择操作:");
                            scanf("%d", &fun3);
                            switch (fun3)
                            {
                            case 1:
                                if (q->next == p->f_head) // 如果当前已经是尾节点,则不能再往后翻
                                {
                                    printf("已经是最后一本\n");
                                }
                                else
                                {
                                    q = q->next;
                                    printf("╭───────────────────────╮\n");
                                    printf("│食物名字:[%s]\n", q->food_name);
                                    printf("│\n");
                                    printf("│食物价格:[%d]\n", q->price);
                                    printf("│\n");
                                    printf("╰───────────────────────╯\n");
                                }
                                break;
                            case 2:
                                if (q->prev == p->f_head) // 如果当前已经是尾节点,则不能再往后翻
                                {
                                    printf("已经是最后一本\n");
                                }
                                else
                                {
                                    q = q->prev;
                                    printf("╭───────────────────────╮\n");
                                    printf("│食物名字:[%s]\n", q->food_name);
                                    printf("│\n");
                                    printf("│食物价格:[%d]\n", q->price);
                                    printf("│\n");
                                    printf("╰───────────────────────╯\n");
                                }
                                break;
                            case 3:
                                printf("\n购买成功!\n");
                                break;
                            case 4:
                                flag1 = 0;
                                break;
                            default:
                                printf("error\n");
                                return -1;
                            }
                        }
                        break;
                    case 4:
                        printf("请输入菜单编号:\n");
                        scanf("%d", &num);
                        find_menu_num(m_head, num); // 根据序号查找菜单
                        break;
                    case 5:
                        printf("请输入菜单名字:\n");
                        scanf("%s", a);
                        find_menu_name(m_head, a); // 根据名字查找菜单
                        break;
                    case 6:
                        display(m_head); // 展示所有菜单
                        break;
                    case 7:
                        printf("\n%d\n", menu_length(m_head)); // 输出菜单个数
                        break;
                    case 8:
                        flag = 0;
                        break;
                    default:
                        printf("error\n");
                        return -1;
                    }
                }
                break;
            }
            break;
        case 3:
            // 管理员
            if (admin_login() == 1)
            {
                flag = 1;
                while (flag)
                {
                    printf("\n===== 管理员操作菜单 =====\n");
                    printf("1. 插入菜单\n");
                    printf("2. 删除菜单\n");
                    printf("3. 修改菜单\n");
                    printf("4. 查找菜单\n");
                    printf("5. 退出\n");
                    printf("请选择操作:");
                    scanf("%d", &fun1);
                    switch (fun1)
                    {
                    case 1:
                        printf("\n----- 插入菜单 -----\n");
                        printf("1. 在头部插入菜单\n");
                        printf("2. 在尾部插入菜单\n");
                        printf("3. 在指定位置插入菜单\n");
                        printf("4. 退出\n");
                        printf("请选择操作:");
                        scanf("%d", &fun2);
                        switch (fun2)
                        {
                        case 1:
                            // 插入头部
                            new_food_head = init_food();
                            if (new_food_head == NULL)
                            {
                                printf("new_food_head init fail\n");
                                break;
                            }
                            printf("请输入要插入的食物数量\n");
                            scanf("%d", &food_num);
                            insert_food_head(new_food_head, food_num);
                            insert_menu_head(m_head, new_food_head); // 头插菜单
                            break;
                        case 2:
                            // 插入尾部
                            new_food_tail = init_food();
                            if (new_food_tail == NULL)
                            {
                                printf("new_food_head init fail\n");
                                break;
                            }
                            printf("请输入要插入的食物数量\n");
                            scanf("%d", &food_num);
                            insert_food_tail(new_food_tail, food_num);
                            insert_menu_tail(m_head, new_food_tail); // 尾插菜单
                            break;
                        case 3:
                            // 指定位置插入
                            printf("请输入插入位置:\n");
                            int pos;
                            scanf("%d", &pos);
                            insert_menu_at(m_head, pos); // 在指定位置插入
                            break;
                        case 4:
                            break;
                        default:
                            break;
                        }
                        break;
                    case 2:
                        printf("\n----- 删除菜单 -----\n");
                        printf("1. 在头部删除菜单\n");
                        printf("2. 在尾部删除菜单\n");
                        printf("3. 删除指定位置的菜单\n");
                        printf("4. 删除指定序号的菜单\n");
                        printf("5. 清空所有菜单\n");
                        printf("6. 退出\n");
                        printf("请选择操作:");
                        scanf("%d", &fun2);
                        switch (fun2)
                        {
                        case 1:
                            delete_menu_head(m_head); // 头删
                            break;
                        case 2:
                            delete_menu_tail(m_head); // 尾删
                            break;
                        case 3:
                            // 指定位置删除
                            printf("请输入删除位置:\n");
                            int pos;
                            scanf("%d", &pos);
                            delete_menu_at(m_head, pos); // 指定位置删除
                            break;
                        case 4:
                            // 指定序号删除
                            printf("请输入删除序号:\n");
                            int num;
                            scanf("%d", &num);
                            delete_menu_by_num(m_head, num); // 指定序号删除
                            break;
                        case 5:
                            release_menu(m_head); // 清空链表
                            printf("\n菜单已经清空\n");
                            break;
                        case 6:
                            break;
                        default:
                            break;
                        }
                        break;
                    case 3:
                        printf("\n----- 改变菜单 -----\n");
                        printf("1. 根据序号修改菜单\n");
                        printf("2. 根据名字修改菜单\n");
                        printf("3. 退出\n");
                        printf("请选择操作:");
                        scanf("%d", &fun2);
                        switch (fun2)
                        {
                        case 1:
                            printf("请输入菜单编号:\n");
                            scanf("%d", &num);
                            change_menu_num(m_head, num); // 根据序号修改菜单
                            break;
                        case 2:
                            printf("请输入菜单名字:\n");
                            scanf("%s", a);
                            change_menu_name(m_head, a); // 根据名字修改菜单
                            break;
                        case 3:
                            break;
                        default:
                            break;
                        }
                        break;
                    case 4:
                        printf("\n----- 输出菜单 -----\n");
                        printf("1. 根据序号查找菜单\n");
                        printf("2. 根据名字查找菜单\n");
                        printf("3. 展示所有菜单\n");
                        printf("4. 输出菜单个数\n");
                        printf("5. 退出\n");
                        printf("请选择操作:");
                        scanf("%d", &fun2);
                        switch (fun2)
                        {
                        case 1:
                            printf("请输入菜单编号:\n");
                            scanf("%d", &num);
                            find_menu_num(m_head, num); // 根据序号查找菜单
                            break;
                        case 2:
                            printf("请输入菜单名字:\n");
                            scanf("%s", a);
                            find_menu_name(m_head, a); // 根据名字查找菜单
                            break;
                        case 3:
                            display(m_head); // 展示所有菜单
                            break;
                        case 4:
                            printf("\n%d\n", menu_length(m_head)); // 输出菜单个数
                            break;
                        case 5:
                            break;
                        default:
                            break;
                        }
                        break;
                    case 5:
                        // free_linklist(head); // 释放
                        flag = 0;
                        break;
                    default:
                        printf("error");
                        return -1;
                    }
                }
            }
            break;
        case 4:
            printf("成功退出\n");
            return 0;
        default:
            printf("error\n");
            return -1;
        }
    }
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啦啦啦噜啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值