【C编程】独特的C语言自动售菜系统(附源码、论文和数据文件)
Table of Contents
一、设计任务
打造一个智能自动售菜系统,用户通过卡号验证后可挑选不同种类的货品(例如蔬菜和肉类)。首先,系统通过 verifyCard
函数检查用户输入的卡号是否在文件 cards.txt
中存在,如果验证成功,可进入购买流程;否则,提示刷卡失败。接下来,用户可选购有机蔬菜或肉类,每类别展示不同商品选项及价格。用户通过商品编号进行购物,系统会自动累加所选商品的价格,直至用户选择返回或结束。商品分为两大类:蔬菜(如菠菜、上海青、大白菜等)和肉类(例如鸡肉、牛肉、猪肉等),每个商品有相应名称和价格。程序设计简洁易懂,引导用户选购商品通过 showMenu
和 showProducts
函数。最终,程序将显示用户购买的商品总价,完成购物体验。本程序模拟了一个基本的自动售货机功能,通过文件验证和商品选购方式为用户带来自动购物体验。
二、设计良机
1. 欢迎启动器
想法概要
本模块用于启动程序时展示欢迎信息,向用户展示全智能自动售菜系统。函数 welcome()
直接应用 printf
打印欢迎信息,极具用户友好性。
代码示例
void welcome() {
printf("*********************************\n");
printf("* 欢迎启用全智能自动售菜器 *\n");
printf("*********************************\n");
}
2. 卡号验证模块
设计概念
为避免非法用户使用自动售菜机,该模块读取存储合法卡号的文件(例如 "cards.txt"
),并验证用户输入的卡号与文件中记录的卡号是否匹配。
- 当打开文件失败时,给予提示;
- 使用
fgets
按行读取数据,并利用strcmp
进行比对; - 若发现匹配卡号,则验证成功,否则验证失败。
代码展示
int verifyCard(const char *filename, char *cardNumber) {
FILE *file = fopen(filename, "r");
if (!file) {
printf("卡号文件无法打开!\n");
return 0;
}
char line[20];
// 以下代码行数较多,已略过
fclose(file);
return 0; // 验证失败
}
3. 主菜单显示器
设计思路
showMenu()
用于展示购物主菜单,列出商品类别(如有机蔬菜、肉类)及退出选项,让用户根据需要进行选择。
- 清晰呈现菜单内容,有利于后续流程控制。
代码范例
void showMenu() {
printf("请选择需要购买的商品类型:\n");
printf("1. 有机蔬菜\n");
printf("2. 肉类\n");
printf("0. 退出\n");
}
4. 商品展示处理器
设计想法
showProducts()
用于呈现某一类别的具体货品列表。
- 接受一个货品数组和该数组的货品数量,逐一展示每个货品的名字和价格;
- 同时提醒通过输入 0 来返回上一级选项。
代码示例
void showProducts(Product products[], int count) {
printf("请选择商品:\n");
// 以下代码行数较多,已略去
printf("0. 返回上一级\n");
}
注:根据需要,代码中货币符号的 “?” 可进行调整。
5. 货品数据结构定义模块
设计想法
定义 Product
结构体用于描述售卖货品,其中包含货品名称和价格属性。
- 便于构建货品数组,存储不同种类(例如蔬菜、肉类)的货品信息。
代码展示
typedef struct {
char name[20];
double price;
} Product;
6. 核心控制模块与主流程
设计思路
主函数是整个程序的控制核心模块,主要负责以下工作:
- 启动程序时通过
welcome()
显示欢迎信息; - 提示用户输入卡号,并用
verifyCard()
进行验证,验证失败即退出程序; - 定义蔬菜和肉类两个货品数组以及初始总价变量;
- 进入主菜单循环:
- 调用
showMenu()
展示主菜单,让用户选择购买种类; - 若用户选择有机蔬菜或肉类,进入对应内部循环,调用
showProducts()
展示具体的货品列表; - 用户在内部菜单选择具体货品,将货品价格累加到总价;用户输入 0 以返回上一级继续选择其他种类;
- 调用
- 当用户在主菜单中输入 0 时退出循环,最后输出购买完成的总价。
代码示例
int main() {
welcome();
// 卡号验证
char cardNumber[20];
printf("请输入卡号:");
scanf("%s", cardNumber);
if (!verifyCard("cards.txt", cardNumber)) {
printf("卡号不存在,刷卡失败。\n");
return 0;
}
printf("刷卡成功,欢迎您!\n");
// 定义货品:有机蔬菜和肉类
Product vegetables[] = {
{"菠菜", 3.5}, {"上海青", 4.0}, {"大白菜", 2.5}, {"鸡毛菜", 5.0}, {"空心菜", 4.5}};
Product meats[] = {
{"鸡肉", 17.0}, {"牛肉", 25.0}, {"猪肉", 20.0}, {"羊肉", 28.0}};
double totalPrice = 0.0;
int choice;
// 主菜单循环
do {
showMenu();
scanf("%d", &choice);
// 以下代码行数较多,已略过
} while (choice != 0);
printf("购买完成,总价为:?%.2f\n", totalPrice);
return 0;
}
- 欢迎显示器:展示欢迎信息,引导用户进入系统。
- 卡号验证模块:读取文件验证用户卡号,确保用户合法身份。
- 主菜单与货品展示处理器:展示购物主菜单和具体货品列表,便于用户选择。
- 货品数据结构模块:通过
Product
结构体存储货品信息,为后续操作提供数据支持。 - 核心控制模块(主函数):控制整个购物流程,调用各模块完成验证、选择、金额累加及最终输出总价。
三、视觉分析