C语言实现最全自动售货机

C语言实现最全自动售货机的攻略

介绍

自动售货机是一种非常实用的设备,能够自动完成商品的销售和付款收取。在实际中,我们可以用C语言的编程知识来实现一个自动售货机,以供学习和使用。

基本功能

自动售货机的基本功能是:选择商品、投币、找零、出货。接下来,我们来详细讲解C语言如何实现这些功能。

选择商品

定义一个数组来存储售货机中的商品,每个商品包括商品名、价格和数量信息。可以使用结构体来实现此功能,例如:

struct product {
    char name[30];
    int price;
    int quantity;
};
struct product products[3] = {
    {"cola", 4, 10},
    {"water", 2, 20},
    {"snack", 3, 30}
};

上述代码表示售货机中有三种商品:"cola"、"water"、"snack",价格分别为4元、2元、3元,数量分别为10、20、30个。

投币

实现投币功能需要结合键盘输入和价格计算,例如:

int coin;
scanf("%d", &coin);
if (coin == 1 || coin == 5 || coin == 10) {
    balance += coin;
    printf("当前余额:%d元\n", balance);
} else {
    printf("不支持的货币,仅支持1元、5元和10元硬币。\n");
}

上述代码表示,当用户输入1元、5元或10元硬币时,程序会将用户投入的硬币加上到余额中,并输出当前的余额。如果投入的货币不是支持的硬币,则会给出错误提示。

找零

实现找零功能需要结合余额的计算和硬币的输出,例如:

if (balance < price) {
    printf("余额不足,请投入更多的货币。\n");
} else {
    int change = balance - price;
    printf("找零:%d元。\n", change);
    balance = 0;
    while (change > 0) {
        if (change >= 10) {
            printf("10元硬币 ");
            change -= 10;
        } else if (change >= 5) {
            printf("5元硬币 ");
            change -= 5;
        } else {
            printf("1元硬币 ");
            change -= 1;
        }
    }
    printf("\n");
}

上述代码表示,当余额大于等于商品价格时,程序会计算找零并输出到控制台,同时输出所需的硬币,并将余额重置为0。

出货

实现出货功能需要结合商品数量的计算和购买记录的输出,例如:

if (quantity == 0) {
    printf("商品卖完了,请选择其他商品。\n");
} else if (balance < price) {
    printf("余额不足,请投入更多的货币。\n");
} else {
    printf("购买成功!\n");
    quantity--;
    sales++;
    printf("当前余额:%d元,%s还剩%d个,已售出%d个。\n", balance-price, name, quantity, sales);
}

上述代码表示,当商品数量为0时,程序会给出错误提示;当余额小于商品价格时,程序会给出错误提示;当购买成功时,程序会减少商品数量、增加销售记录,并输出当前余额、商品数量和销售记录。

示例

下面给出两个示例,分别演示了用户使用自动售货机购买商品和维护售货机的过程。

示例1:用户购买商品

#include <stdio.h>
#include <string.h>

struct product {
    char name[30];
    int price;
    int quantity;
};
struct product products[3] = {
    {"cola", 4, 10},
    {"water", 2, 20},
    {"snack", 3, 30}
};
int balance = 0, sales = 0;

int main() {
    while (1) {
        printf("请选择您需要购买的商品:\n");
        for (int i = 0; i < 3; i++) {
            printf("%d. %s(%d元/个,还剩%d个)\n", i+1, products[i].name, products[i].price, products[i].quantity);
        }
        int choice, price, quantity;
        char name[30];
        scanf("%d", &choice);
        if (choice < 1 || choice > 3) {
            printf("请选择有效的商品。\n");
            continue;
        }
        price = products[choice-1].price;
        quantity = products[choice-1].quantity;
        strcpy(name, products[choice-1].name);
        printf("您选择的商品是%s,请投入金额(1元、5元、10元):\n", name);
        while (1) {
            int coin;
            scanf("%d", &coin);
            if (coin == 1 || coin == 5 || coin == 10) {
                balance += coin;
                printf("当前余额:%d元\n", balance);
            } else {
                printf("不支持的货币,仅支持1元、5元和10元硬币。\n");
            }
            if (balance >= price) {
                break;
            }
        }
        if (quantity == 0) {
            printf("商品卖完了,请选择其他商品。\n");
        } else if (balance < price) {
            printf("余额不足,请投入更多的货币。\n");
        } else {
            printf("购买成功!\n");
            quantity--;
            sales++;
            printf("当前余额:%d元,%s还剩%d个,已售出%d个。\n", balance-price, name, quantity, sales);
        }
        balance = 0;
    }
}

运行程序后,用户可以通过屏幕上的数字键选择要购买的商品,并通过硬币投入方式完成支付。程序支持多次购买,并能正确输出余额、数量和销售记录。

示例2:管理员维护售货机

下面给出一个示例,演示售货机管理员如何维护自动售货机。

#include <stdio.h>
#include <string.h>

struct product {
    char name[30];
    int price;
    int quantity;
};
struct product products[3] = {
    {"cola", 4, 10},
    {"water", 2, 20},
    {"snack", 3, 30}
};
int balance = 0, sales = 0;

void add_product(int index, char *name, int price, int quantity) {
    strcpy(products[index].name, name);
    products[index].price = price;
    products[index].quantity = quantity;
}

void update_product(int index, char *name, int price, int quantity) {
    if (name != NULL) {
        strcpy(products[index].name, name);
    }
    if (price > 0) {
        products[index].price = price;
    }
    if (quantity >= 0) {
        products[index].quantity = quantity;
    }
}

int main() {
    while (1) {
        printf("请选择您要进行的操作:\n");
        printf("1. 查看商品信息\n");
        printf("2. 添加/修改商品信息\n");
        printf("3. 查询余额与销售记录\n");
        printf("4. 退出\n");
        int choice;
        scanf("%d", &choice);
        if (choice == 1) {
            printf("当前售货机中的商品有:\n");
            for (int i = 0; i < 3; i++) {
                printf("%d. %s(%d元/个,还剩%d个)\n", i+1, products[i].name, products[i].price, products[i].quantity);
            }
        } else if (choice == 2) {
            printf("请选择您要添加/修改的商品:\n");
            for (int i = 0; i < 3; i++) {
                printf("%d. %s(%d元/个,还剩%d个)\n", i+1, products[i].name, products[i].price, products[i].quantity);
            }
            int index, price, quantity;
            char name[30];
            scanf("%d", &index);
            if (index < 1 || index > 3) {
                printf("请选择有效的商品。\n");
                continue;
            }
            printf("您选择的是%d号商品,请输入商品名:\n", index);
            scanf("%s", name);
            printf("请设置商品价格:\n");
            scanf("%d", &price);
            printf("请设置商品数量:\n");
            scanf("%d", &quantity);
            if (products[index-1].quantity == 0) {
                printf("该商品已卖完,只能修改商品名和价格。\n");
                update_product(index-1, name, price, -1);
            } else {
                add_product(index-1, name, price, quantity);
            }
        } else if (choice == 3) {
            printf("当前余额:%d元,共售出%d个商品。\n", balance, sales);
        } else if (choice == 4) {
            printf("谢谢使用,再见!\n");
            break;
        } else {
            printf("请选择有效的操作。\n");
        }
    }
}

运行程序后,管理员可以通过屏幕上的数字键来执行添加/修改商品、查询余额与销售记录等操作。程序具备错误提示和数据更新功能,能够使售货机始终保持最新状态。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现最全自动售货机 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Windows系统下使用C语言编写单线程的文件备份程序

    下面我详细讲解一下在Windows系统下使用C语言编写单线程的文件备份程序。 准备工作 首先,我们需要在Windows系统下安装MinGW工具链。MinGW是一个基于Windows的开源GCC编译器集合,可用于编译C语言程序。 安装好MinGW后,我们需要设置环境变量,方便我们在终端中使用编译器。在Windows系统中,可通过以下步骤设置环境变量: 右键单击…

    C 2023年5月22日
    00
  • C++实现学生宿舍管理系统

    C++实现学生宿舍管理系统攻略 1. 概述 学生宿舍管理系统是一种管理学生宿舍、学生入住、退房、缴费、维护等功能的软件系统。该系统可以实现学生宿舍信息自动化管理,提高管理效率,节省管理资源,方便学生宿舍的维护和管理。本文将详细讲解如何使用C++实现学生宿舍管理系统。 2. 功能模块 学生宿舍管理系统主要包括用户登录、学生入住、房间管理、缴费管理、维护管理等功…

    C 2023年5月23日
    00
  • C语言实现图的搜索算法示例

    C语言实现图的搜索算法示例 在C语言中,我们可以使用邻接矩阵或邻接表来表示图,实现图的搜索算法,本篇文章将详细介绍如何使用C语言实现图的搜索算法,以及提供两个示例说明。 邻接矩阵表示图 邻接矩阵是使用二维数组表示图的一种方法,其中数组的每个元素代表图中的一个节点,如果两个节点之间存在边,则数组元素的值为1,否则为0。例如,下面是一个由邻接矩阵表示的无向图。 …

    C 2023年5月23日
    00
  • C语言中各种运算类型全面总结

    C语言中各种运算类型全面总结 在C语言中,常见的运算类型有整型、浮点型、字符型以及指针类型。本文将对这些运算类型及其运算方式进行详细讲解。 整型运算 C语言中的整型运算指的是对整数进行的运算,常用的整型有int、short和long。整型运算中,常见的运算符有加号+、减号-、乘号*、除号/和取模(取余)运算符%。 int a = 5; int b = 2; …

    C 2023年5月23日
    00
  • sqlmap之os shell图文详细解析

    让我来详细讲解“sqlmap之os shell图文详细解析”的完整攻略。 SQLMap之OS Shell图文详细解析 什么是SQLMap SQLMap是一个用于检测和利用SQL注入漏洞的开源工具,可以自动化地进行注入测试,并且提供了多种手段来发现和利用漏洞,是渗透测试中非常实用的工具之一。SQLMap完全基于Python开发,支持Linux和Windows操…

    C 2023年5月23日
    00
  • NodeJs基本语法和类型

    Node.js是一种运行在服务器端的JavaScript,可以用于构建高效的事件驱动应用程序。在使用Node.js时,掌握其基本语法和类型非常重要。 基本语法 注释 JavaScript中的注释分为两种:单行注释和多行注释。单行注释用//表示,多行注释用/…/表示。 // 这是单行注释 /* 这是 多行 注释 */ 变量 使用var、let、const声…

    C 2023年5月23日
    00
  • JDK 7 新特性小结实例代码解析

    JDK 7 新特性小结实例代码解析 简介 JDK 7 是 Java Development Kit 的版本号,是 Java 的一个版本。JDK 7 主要添加了许多新特性,包括小型语言改进、文件访问/输入和输出的 I/O 改进、内部脚本引擎、实例创建类型推断、字符串开头的结尾和 switch 语句中的字符串变量、数字下划线等。本文将从例子出发,详细地介绍 JD…

    C 2023年5月23日
    00
  • C语言 指向指针的指针

    C语言指向指针的指针是一种高级的指针类型,也称为二级指针。它可以通过指向指针的指针来实现多级指针操作,用于处理多层嵌套的数据结构,如链表、树等。下面是指向指针的指针的使用攻略。 声明指向指针的指针 在使用指向指针的指针时,需要先声明它们的类型和名称。指向指针的指针的类型为int **p,其中**表示指向指针的指针。 示例代码: int **p; 给指向指针的…

    C 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部