📜  C中的食物订购系统(1)

📅  最后修改于: 2023-12-03 14:40:25.499000             🧑  作者: Mango

C中的食物订购系统简介

本程序旨在帮助食堂、餐馆等单位简化点餐、结算流程,提高服务效率和准确性。该系统可以实现菜品浏览、点餐、结算、订单管理等功能。

功能模块
菜单浏览

用户可通过该功能浏览可供选择的所有菜品,包括菜品的编号、名称、价格等详细信息。

菜品点餐

用户可通过该功能选择想要的菜品,系统将显示所选菜品的总价和数量;用户可以随时修改已选择的菜品、增加或减少菜品数量。用户确认后,将生成订单并更新库存,并显示订单号和订单时间。

订单查询

用户可以通过该功能查看历史订单,包括订单号、时间、总价和菜品详情。

订单统计

管理员可通过该功能查看当日销售总额、不同菜品的销售量和销售额,并进行数据导出。

技术实现
数据结构

菜品信息存储采用链表结构,每个节点表示一道菜品,包含菜品编号、名称、价格和库存。订单信息用链表结构存储,每个节点表示一个订单,包含订单编号、时间、总价和菜品详情。实现链表使用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);
}