【C语言】设计一个智能化的自动售卖机系统(包括源代码、论文及数据文件)【独具特色】

【C编程】独特的C语言自动售菜系统(附源码、论文和数据文件)


一、设计任务

打造一个智能自动售菜系统,用户通过卡号验证后可挑选不同种类的货品(例如蔬菜和肉类)。首先,系统通过 verifyCard 函数检查用户输入的卡号是否在文件 cards.txt 中存在,如果验证成功,可进入购买流程;否则,提示刷卡失败。接下来,用户可选购有机蔬菜或肉类,每类别展示不同商品选项及价格。用户通过商品编号进行购物,系统会自动累加所选商品的价格,直至用户选择返回或结束。商品分为两大类:蔬菜(如菠菜、上海青、大白菜等)和肉类(例如鸡肉、牛肉、猪肉等),每个商品有相应名称和价格。程序设计简洁易懂,引导用户选购商品通过 showMenushowProducts 函数。最终,程序将显示用户购买的商品总价,完成购物体验。本程序模拟了一个基本的自动售货机功能,通过文件验证和商品选购方式为用户带来自动购物体验。


二、设计良机

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. 核心控制模块与主流程

设计思路

主函数是整个程序的控制核心模块,主要负责以下工作:

  1. 启动程序时通过 welcome() 显示欢迎信息;
  2. 提示用户输入卡号,并用 verifyCard() 进行验证,验证失败即退出程序;
  3. 定义蔬菜和肉类两个货品数组以及初始总价变量;
  4. 进入主菜单循环:
    • 调用 showMenu() 展示主菜单,让用户选择购买种类;
    • 若用户选择有机蔬菜或肉类,进入对应内部循环,调用 showProducts() 展示具体的货品列表;
    • 用户在内部菜单选择具体货品,将货品价格累加到总价;用户输入 0 以返回上一级继续选择其他种类;
  5. 当用户在主菜单中输入 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;
}

  1. 欢迎显示器:展示欢迎信息,引导用户进入系统。
  2. 卡号验证模块:读取文件验证用户卡号,确保用户合法身份。
  3. 主菜单与货品展示处理器:展示购物主菜单和具体货品列表,便于用户选择。
  4. 货品数据结构模块:通过 Product 结构体存储货品信息,为后续操作提供数据支持。
  5. 核心控制模块(主函数):控制整个购物流程,调用各模块完成验证、选择、金额累加及最终输出总价。

三、视觉分析



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值