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日

相关文章

  • 浅谈C++空间配置器allocator

    浅谈C++空间配置器allocator 什么是空间配置器allocator C++中的空间配置器allocator是在使用new/delete进行内存管理的时候,对内存进行分配和释放的一种通用工具。allocator的主要目的是为了解决C++标准库中容器和算法在内存管理方面的低效问题。C++标准库提供了多个类型的allocator,可以满足不同场景下的需求。…

    C 2023年5月22日
    00
  • C++语言基础 命名空间

    C++是一门支持命名空间的语言,命名空间是C++中避免命名冲突的一个重要方式。我们可以通过使用命名空间,把定义在不同范围内的标识符分开,从而保证程序中的标识符不会冲突。 在C++中,命名空间是用关键字“namespace”来定义,如下所示: namespace MyNamespace { // 声明和定义各种变量、函数、类等成员 } 这里的“MyNamesp…

    C 2023年5月23日
    00
  • C语言逆向分析语法超详细分析

    C语言逆向分析语法超详细分析 概述 C语言逆向分析是指通过分析可执行文件中的C语言代码,来理解和修改程序的行为。逆向分析的过程需要对C语言的语法和底层知识有一定的了解。 准备工作 进行C语言逆向分析需要用到一些工具,如IDA Pro、Ghidra等反汇编、反编译软件、调试工具如gdb。还需要一定的汇编和操作系统原理基础知识。 C语言的指针和内存分配 指针是进…

    C 2023年5月22日
    00
  • C语言自研定时器计划任务语法详解

    下面我将详细讲解“C语言自研定时器计划任务语法详解”的完整攻略。 概述 在C语言中,我们常常需要进行一些定时处理或者周期性任务等操作。为了方便这些操作,我们可以自研一个定时器计划任务,这个任务包含有启动和停止定时器、注册和注销任务、定时器中断处理等功能。下面我们将具体讲解这些功能的实现方法。 启动和停止定时器 启动定时器的方式如下: int timer_st…

    C 2023年5月23日
    00
  • C++进程链接工具之通信器详解

    C++进程链接工具之通信器详解 什么是C++进程链接工具之通信器 C++进程链接工具之通信器(又称共享内存通信器)是一种实现进程间通信的方式。它使用共享内存的方式,允许多个进程共享同一块内存区域,并利用操作系统提供的信号量等机制,实现对共享内存的并发访问。 通信器主要由以下三个部分组成: 共享内存区域:即多个进程共享的内存区域,用于存储需要交换的数据。 读写…

    C 2023年5月23日
    00
  • C语言 按值函数调用

    C语言 按值函数调用 在 C 语言中,函数可以按值调用(也称为传值调用)或按引用调用(也称为传引用调用)。 按值调用函数时,函数会使用参数的值进行计算,并在函数中对其进行修改不会影响原始值。 下面是一个按值调用的例子: #include <stdio.h> // 定义一个函数,输入两个整数并返回它们的和 int add(int a, int b)…

    C 2023年5月9日
    00
  • golang croncli 定时器命令详解

    Golang Croncli定时器命令详解 Croncli是golang中一个用于定时执行任务的命令工具。它允许在固定的时间间隔内运行特定的命令或任务。本文将详细介绍croncli的使用方法,并提供两个示例说明。 安装 Croncli可以通过go命令来安装: $ go get github.com/robfig/cron/v3 使用 Croncli是通过go…

    C 2023年5月23日
    00
  • JS中函数科里化的背景与应用实例教程

    JS中函数科里化的背景与应用实例教程 函数科里化(function currying)是JavaScript中一项非常有用的技术,本篇文章将详细讲解科里化的背景、实现原理和应用实例。 什么是函数科里化? 函数科里化是指将一个接受多个参数的函数转化成一个只接受一个参数的函数,并返回接受剩下参数而且返回结果的新函数的技术。 换句话说,函数科里化的实现可以将接受多…

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