📅  最后修改于: 2023-12-03 14:40:25.499000             🧑  作者: Mango
本程序旨在帮助食堂、餐馆等单位简化点餐、结算流程,提高服务效率和准确性。该系统可以实现菜品浏览、点餐、结算、订单管理等功能。
用户可通过该功能浏览可供选择的所有菜品,包括菜品的编号、名称、价格等详细信息。
用户可通过该功能选择想要的菜品,系统将显示所选菜品的总价和数量;用户可以随时修改已选择的菜品、增加或减少菜品数量。用户确认后,将生成订单并更新库存,并显示订单号和订单时间。
用户可以通过该功能查看历史订单,包括订单号、时间、总价和菜品详情。
管理员可通过该功能查看当日销售总额、不同菜品的销售量和销售额,并进行数据导出。
菜品信息存储采用链表结构,每个节点表示一道菜品,包含菜品编号、名称、价格和库存。订单信息用链表结构存储,每个节点表示一个订单,包含订单编号、时间、总价和菜品详情。实现链表使用C语言指针。
菜品信息和订单信息均以文件形式存储,实现数据的可持久化存储。利用fread、fwrite等标准函数实现数据的读取、写入和修改。
使用Windows API函数实现控制台用户界面,提供简单友好的交互方式,方便用户使用和操作。
以下为C语言食物订购系统中基于文件的数据存储示例:
#include <stdio.h>
#include <stdlib.h>
#define FILENAME "food.txt" // 菜品信息文件名
typedef struct node {
int id; // 菜品编号
char name[64]; // 菜品名称
float price; // 价格
int stock; // 库存
struct node* next; // 指向下一个节点的指针
} Food;
// 读取菜品信息
Food* readFood() {
FILE* fp = fopen(FILENAME, "rb");
if (fp == NULL) {
printf("Unable to open file %s\n", FILENAME);
exit(-1);
}
Food* head = NULL, * tail = NULL, * p = NULL;
while (!feof(fp)) {
p = (Food*)malloc(sizeof(Food));
fread(p, sizeof(Food), 1, fp);
if (head == NULL) {
head = tail = p;
}
else {
tail->next = p;
tail = p;
}
}
if (tail != NULL) {
tail->next = NULL;
}
fclose(fp);
return head;
}
// 保存菜品信息
void saveFood(Food* head) {
FILE* fp = fopen(FILENAME, "wb");
if (fp == NULL) {
printf("Unable to open file %s\n", FILENAME);
exit(-1);
}
Food* p = head;
while (p != NULL) {
fwrite(p, sizeof(Food), 1, fp);
p = p->next;
}
fclose(fp);
}