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技术站