程序设计-在校整理-02 食堂自动化管理系统

这是一个简化的食堂自动化管理系统,包括学生就餐卡管理、菜品管理及消费记录统计功能。系统采用文件存储数据,支持管理员对学生卡的注册、充值、挂失等操作,以及菜品的增删改查。同时,学生可以查询余额和消费记录,购买菜品。程序实现了字符界面的菜单操作,并确保数据完整性。测试结果显示系统功能运行正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、课题内容和要求

1、问题描述

编写一份简化的食堂自动化管理系统,实现学生就餐卡管理和菜品管理以及消费记录统计等相关功能。所有数据包括学生就餐卡信息,菜品信息等都要利用文件系统保存,以备系统下次运行时使用。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法的应用。

2、功能要求

(1)学生就餐卡和菜品数据是由多条数据记录构成,其信息包括:
学生就餐卡:卡号,姓名,余额,状态(正常和挂失。)
食堂菜品数据:编号 名称 金额 消费次数
(2)数据保存形式:
所有就餐卡信息,菜品信息数据要以文本或二进制文件保存。
(3)需要实现的功能
代码要能提供以下两个基本模块。
管理员模块:
管理员以密码登录系统,可以完成以下功能
A. 注册学生就餐卡
B.就餐卡的充值挂失模块
C.食堂菜单管理功能,包括对菜单的增删修改查等功能。
学生模块:
以就餐卡号登录系统(说明:卡处于挂失,则拒绝登录。)
可以查询卡中余额。
可以查询本卡的消费记录(选做)
可以浏览菜品并按照金额购买
(4)界面功能要求:
A.采用友好的字符界面,实现一个功能控制菜单。
B.每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。

选做要求:
(1)数据完整性保证。例如:就餐卡号和菜单编号不得重复。
(2)学生每次消费可以自动生成消费记录(卡号,购买时间,购买菜品编号,购买金额)。该消费记录表永久保存,用于事后查询和统计。具体请学生自己构思、设计。

二、需求分析

食堂自动化管理系统的功能框架图如图所示。

1
(1) 提供可操作的主菜单:输出菜单,用于显示以从文件中加载的主菜单信息和若干个可选的功能选项。根据客户输入的选项来进入不同的模式,运行不同的函数。流程操作如下图所示。
2
(2)程序入口与多级菜单显示:在主菜单下,根据用户输入的不同选择,进入各级菜单,进而调用不同的函数,实现不同的功能。
(3)数据结构体的设计与初始化:在程序一开始就将自动构建各类用户结构体的实例,并且构造实例,为不同用户提供服务。在用户进行不同的选择时,会读入不同的数据信息,来构建具体的结构体实例,以满足用户需求。
(4)用户信息存储:在程序一始,会将相关数据结构自动初始化置空。在用户使用非存储类功能时,将不会对相关数据信息进行任何更改,也不涉及对文件内容的读写操作;当用户使用设计相关信息存储的功能时,将会从文件中按需写入相关信息到结构体中,在使用完毕后,再次进行信息的存储。如果是仅涉及存储,不涉及更改已存入信息功能的函数,将限制其使用文件的权限,已达到相关数据安全的保障。
(5)面向不同用户的功能协调:本程序设计了两种不同的用户模式:管理员模式与学生模式;程序的主入口是一致的,都将由用户来选择进入任何一种模式继续运行,两种模式都是采用一定的检测手段来进行登录使用,如下图所示。
3

三、概要设计

主要存储结构

// 代码很烂,轻喷。注:仅供参考学习使用。
//主要存储结构
//================ 结构体 ================
struct Student{
   
    char card_num[20]; //卡号
    char name[20];//姓名
    char money[20];//余额
    char mode[2];//状态 
};
typedef struct Student student;//别名student 

struct Food{
   
    char id[20];
    char name[20];
    char price[20];
    char num[10];
};
typedef struct Food food;//和student内容相似 

struct Record{
   
    char stu_id[20];
    char food_id[20];
    char food_price[20];
    char record_time[255];
};
typedef struct Record record;//和student内容相似

四、源程序代码

// 代码很烂,轻喷。注:仅供参考学习使用。
//头文件   
#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>  
#include <math.h> 
#include <time.h> 

//全局变量定义   
#define USER_FILE "user.txt"  
#define RECORD_FILE "record.txt" 
#define FOOD_FILE "food.txt"   
#define CONSOLE "CON"
#define BUFLEN 255
#define NUM 50  
#define password 123

//================ 结构体 ================
struct Student{
   
    char card_num[20]; //卡号
    char name[20];//姓名
    char money[20];//余额
    char mode[2];//状态 
};
typedef struct Student student;//别名student 

struct Food{
   
    char id[20];
    char name[20];
    char price[20];
    char num[10];
};
typedef struct Food food;//和student内容相似 

struct Record{
   
    char stu_id[20];
    char food_id[20];
    char food_price[20];
    char record_time[255];
};
typedef struct Record record;//和student内容相似 
 
//================ 函数声明 ================
//主函数
int main(void);
//重启函数
void rerun();
//主菜单显示
int menu();
//结构体内容初始化 
void init(student *stu,food *fd,record *re);
//从文件读入学生卡信息
void readfile(student *stu);
//从文件读入菜品信息
void readfood(food *fd);
//从文件读入记录信息
void readrecord(record *re);
//保存学生信息 
void savefile(student *stu);
//保存食物信息 
void savefood(food *fd);
//保存记录信息
void saverecord(record *re);

//管理模式 
void admin_mode(student *stu,food *fd);
//管理模式菜单 
int admin_menu();
//注册学生卡
void regist();
//充值 
void charge(student *stu);
//挂失 
void report_of_loss(student *stu);
//解挂 
void hanging_solutions(student *stu);
//注销 
void del(student *stu);
//录入菜品 
void input(food *fd);
//查询菜品 
void check(food *fd);
//统计功能 (打印所有菜品信息) 
void count(food *fd);

//学生模式 
void stu_mode(student *stu,food *fd,record *re);
//学生模式菜单 
int stu_menu();
//查余额 
void surplus(student *stu,char *num);
//消费记录 
void sturecord(record *re,char *num);
//购物 
void purchase(student *stu,food *fd,char *num);

//================ 程序辅助功能实现 ================
//结构体内容初始化 
void init(student *stu,food *fd,record *re){
   
    
    for(int i = 0; i<NUM;i++){
   
        strcpy(stu[i].card_num,"");
        strcpy(stu[i].name,"");         
        strcpy(stu[i].money,"");            
        strcpy(stu[i].mode,"");
    }
    
    for(int i = 0; i<NUM;i++){
   
        strcpy(fd[i].id,"");
        strcpy(fd[i].name,"");          
        strcpy(fd[i].price,"");         
        strcpy(fd[i].num,"");
    }

    for(int i = 0; i<BUFLEN;i++){
   
        strcpy(re[i].stu_id,"");
        strcpy(re[i].food_id,"");           
        strcpy(re[i].food_price,"");            
        strcpy(re[i].record_time,
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值