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驱动开发环境