m0_53356205 2021-05-07 13:58 采纳率: 0%
浏览 19

1 问题描述 编写一份简化的食堂自动化管理系统,实现学生就餐卡管理和菜品管理以及消费记录 统计等

1 问题描述 编写一份简化的食堂自动化管理系统,实现学生就餐卡管理和菜品管理以及消费记录 统计等相关功能。所有数据包括学生就餐卡信息,菜品信息等都要利用文件系统保存,以 备系统下次运行时使用。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些 基本算法的应用。 2 功能要求 (1)学生就餐卡和菜品数据是由多条数据记录构成,其信息包括: 学生就餐卡:卡号,姓名,余额,状态(正常和挂失。) 食堂菜品数据:编号 名称 金额 消费次数 (2)数据保存形式: 所有就餐卡信息,菜品信息数据要以文本或二进制文件保存。 (3)需要实现的功能 代码要能提供以下两个基本模块。 管理员模块: 管理员以密码登录系统,可以完成以下功能 A. 注册学生就餐卡 B.就餐卡的充值挂失模块 C.食堂菜单管理功能,包括对菜单的增删修改查等功能。 D.统计功能:统计菜品销售情况(销售排行),以及学生卡的使用情况(选做) 学生模块 以就餐卡号登录系统(说明:卡处于挂失,则拒绝登录。) 可以查询卡中余额。 可以查询本卡的消费记录(选做) 可以浏览菜品并按照金额购买
  • 写回答

1条回答

  • yule.yang 2024-07-08 19:00
    关注
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX_CARDS 100   // 最大学生卡数量
    #define MAX_ITEMS 50    // 最大菜品数量
    #define PASSWORD "admin123"  // 管理员密码
    
    // 学生卡结构体
    typedef struct {
        int card_number;
        char name[50];
        float balance;
        char status[10]; // "正常" 或 "挂失"
    } StudentCard;
    
    // 菜品结构体
    typedef struct {
        int item_number;
        char name[50];
        float price;
        int sales_count;
    } MenuItem;
    
    // 全局变量
    StudentCard student_cards[MAX_CARDS];
    MenuItem menu_items[MAX_ITEMS];
    int num_student_cards = 0;
    int num_menu_items = 0;
    
    // 函数声明
    void admin_login();
    void register_card();
    void recharge_card();
    void report_loss();
    void manage_menu();
    void add_menu_item();
    void delete_menu_item();
    void modify_menu_item();
    void list_menu_items();
    void sales_report();
    void student_login();
    void check_balance();
    void browse_menu();
    void purchase_item();
    
    int main() {
        int choice;
        
        while (1) {
            printf("\
    ========== 食堂自动化管理系统 ==========\
    ");
            printf("1. 管理员登录
    ");
            printf("2. 学生登录
    ");
            printf("3. 退出系统
    ");
            printf("请选择操作:");
            scanf("%d", &choice);
            
            switch (choice) {
                case 1:
                    admin_login();
                    break;
                case 2:
                    student_login();
                    break;
                case 3:
                    printf("谢谢使用!\
    ");
                    return 0;
                default:
                    printf("无效选择,请重新输入。\
    ");
                    break;
            }
        }
        
        return 0;
    }
    
    void admin_login() {
        char password[20];
        printf("\
    请输入管理员密码:");
        scanf("%s", password);
        
        if (strcmp(password, PASSWORD) == 0) {
            int admin_choice;
            while (1) {
                printf("\
    ========== 管理员模块 ==========\
    ");
                printf("1. 注册学生就餐卡
    ");
                printf("2. 充值学生就餐卡
    ");
                printf("3. 挂失/解挂学生就餐卡
    ");
                printf("4. 食堂菜单管理
    ");
                printf("5. 统计功能
    ");
                printf("6. 返回上一级菜单
    ");
                printf("请选择操作:");
                scanf("%d", &admin_choice);
                
                switch (admin_choice) {
                    case 1:
                        register_card();
                        break;
                    case 2:
                        recharge_card();
                        break;
                    case 3:
                        report_loss();
                        break;
                    case 4:
                        manage_menu();
                        break;
                    case 5:
                        sales_report();
                        break;
                    case 6:
                        return;
                    default:
                        printf("无效选择,请重新输入。\
    ");
                        break;
                }
            }
        } else {
            printf("密码错误,登录失败。\
    ");
        }
    }
    
    void register_card() {
        if (num_student_cards >= MAX_CARDS) {
            printf("系统容量已满,无法注册新的学生卡。\
    ");
            return;
        }
        
        StudentCard new_card;
        printf("\
    请输入学生卡号:");
        scanf("%d", &new_card.card_number);
        
        // 检查卡号是否已存在
        for (int i = 0; i < num_student_cards; ++i) {
            if (student_cards[i].card_number == new_card.card_number) {
                printf("该卡号已存在,请重新输入。\
    ");
                return;
            }
        }
        
        printf("请输入学生姓名:");
        scanf("%s", new_card.name);
        
        new_card.balance = 0.0;
        strcpy(new_card.status, "正常");
        
        student_cards[num_student_cards++] = new_card;
        
        printf("学生卡注册成功!\
    ");
    }
    
    void recharge_card() {
        int card_number;
        float amount;
        printf("\
    请输入要充值的学生卡号:");
        scanf("%d", &card_number);
        
        int found = 0;
        for (int i = 0; i < num_student_cards; ++i) {
            if (student_cards[i].card_number == card_number) {
                found = 1;
                printf("请输入充值金额:");
                scanf("%f", &amount);
                
                student_cards[i].balance += amount;
                printf("充值成功,当前余额为 %.2f 元。\
    ", student_cards[i].balance);
                break;
            }
        }
        
        if (!found) {
            printf("找不到该学生卡号,请确认输入是否正确。\
    ");
        }
    }
    
    void report_loss() {
        int card_number;
        char choice[10];
        printf("\
    请输入要操作的学生卡号:");
        scanf("%d", &card_number);
        
        int found = 0;
        for (int i = 0; i < num_student_cards; ++i) {
            if (student_cards[i].card_number == card_number) {
                found = 1;
                printf("当前状态:%s
    ", student_cards[i].status);
                printf("是否挂失该学生卡?(是/否):");
                scanf("%s", choice);
                
                if (strcmp(choice, "是") == 0) {
                    strcpy(student_cards[i].status, "挂失");
                    printf("学生卡已挂失。\
    ");
                } else if (strcmp(choice, "否") == 0) {
                    strcpy(student_cards[i].status, "正常");
                    printf("学生卡已解挂。\
    ");
                } else {
                    printf("无效选择。\
    ");
                }
                
                break;
            }
        }
        
        if (!found) {
            printf("找不到该学生卡号,请确认输入是否正确。\
    ");
        }
    }
    
    void manage_menu() {
        int menu_choice;
        while (1) {
            printf("\
    ========== 食堂菜单管理 ==========\
    ");
            printf("1. 添加菜品
    ");
            printf("2. 删除菜品
    ");
            printf("3. 修改菜品信息
    ");
            printf("4. 查看菜单列表
    ");
            printf("5. 返回上一级菜单
    ");
            printf("请选择操作:");
            scanf("%d", &menu_choice);
            
            switch (menu_choice) {
                case 1:
                    add_menu_item();
                    break;
                case 2:
                    delete_menu_item();
                    break;
                case 3:
                    modify_menu_item();
                    break;
                case 4:
                    list_menu_items();
                    break;
                case 5:
                    return;
                default:
                    printf("无效选择,请重新输入。\
    ");
                    break;
            }
        }
    }
    
    void add_menu_item() {
        if (num_menu_items >= MAX_ITEMS) {
            printf("菜单容量已满,无法添加新的菜品。\
    ");
            return;
        }
        
        MenuItem new_item;
        printf("\
    请输入菜品编号:");
        scanf("%d", &new_item.item_number);
        
        // 检查编号是否已存在
        for (int i = 0; i < num_menu_items; ++i) {
            if (menu_items[i].item_number == new_item.item_number) {
                printf("该编号已存在,请重新输入。\
    ");
                return;
            }
        }
        
        printf("请输入菜品名称:");
        scanf("%s", new_item.name);
        
        printf("请输入菜品价格:");
        scanf("%f", &new_item.price);
        
        new_item.sales_count = 0;
        
        menu_items[num_menu_items++] = new_item;
        
        printf("菜品添加成功!\
    ");
    }
    
    void delete_menu_item() {
        int item_number;
        printf("\
    请输入要删除的菜品编号:");
        scanf("%d", &item_number);
        
        int found = 0;
        for (int i = 0; i < num_menu_items; ++i) {
            if (menu_items[i].item_number == item_number) {
                found = 1;
                
                // 将最后一个菜品移到当前位置,实现删除
                menu_items[i] = menu_items[num_menu_items - 1];
                num_menu_items--;
                
                printf("菜品删除成功。\
    ");
                break;
            }
        }
        
        if (!found) {
            printf("找不到该菜品编号,请确认输入是否正确。\
    ");
        }
    }
    
    void modify_menu_item() {
        int
    
    评论

报告相同问题?

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境