(注意:本人目前仅仅学习至C语言数组部分,仅作分享,不喜勿喷,谢谢!)
项目描述:该项目模拟饮料自动售货机的销售过程。顾客先投币,系统显示投币金额。
接下来顾客选择要购买的饮料,如果投币金额足够并且所购饮料存在,则提示用户取走饮料,同时找零。
如果投币金额不足,显示提示信息。如果所购饮料已经售完,显示售完信息。
实现功能:
① : 只接受 10 元、5 元、2 元、1 元和 0.5 元的纸币和硬币。
② : 顾客一次只能投入上述一种金额的纸币或硬币,当用户重复投入时货币金额累加。
③ : 销售饮料包括 5 种:可口可乐(2 元)百事可乐(2 元)橙汁(3 元) 咖啡(5 元) 纯净水(1.5 元)。
④ : 系统通过必要的提示信息,提示用户完成相应的操作。
⑤ : 若顾客购买的饮料已经售完,则进行提示并询问用户是否购买其它饮料。
⑥ : 完成一次售卖后,系统自动结算找零
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
char category = 0;//category类别(用于给饮料分类)
float money = 0;//投入的钱的面额
float Sum = 0;//投入售卖机的总金额
float sum = 0;//购买饮料后的余额
int i = 1;//定义i为库存,赋初始值为1
int userInput;//userInput_用户,对其定义,用于客户多次进行购物
printf(" ****************************************欢迎使用饮料自动售货机:****************************************\n\n");
printf(" 商品:A 可口可乐 ( 2元 )\n");
printf(" B 百事可乐 ( 2元 )\n");
printf(" C 橙汁 ( 3元 )\n");
printf(" D 咖啡 ( 5元 )\n");
printf(" E 纯净水 (1.5元)\n");
while (1) {//重复 输入/执行 以下代码
Sum = 0;//清空之前投币记录
do//利用 do...while 语句使得用户可多次投入money
{
printf("注意!投币完成请按 0 进行确认\n");
printf("请投入硬币或纸币(只接受 10元、5元、2元、1元和0.5元的纸币和硬币!):");
scanf("%f", &money);
if (money == 10) {//计算客户投入的面额
Sum = Sum + money;
printf("总投入Sum:%.2f\n\n", Sum);//客户目前投入的总金额
}
else if (money == 5) {
Sum = Sum + money;
printf("总投入Sum:%.2f\n\n", Sum);//小数点'.'前面的数字是表示字符串总长度,2表示小数点后的位数
}
else if (money == 2) {
Sum = Sum + money;
printf("总投入Sum:%.2f\n\n", Sum);
}
else if (money == 1) {
Sum = Sum + money;
printf("总投入Sum:%.2f\n\n", Sum);
}
else if (money == 0.5) {
Sum = Sum + money;
printf("总投入Sum:%.2f\n\n", Sum);
}
else if (money == 0) {
printf("投币完成,即将进入选购饮料!\n\n");
break;
}
else {
printf("不支持此面额!请重新投入可识别的货币!\n\n");
}
} while (money);//条件判断语句,true则返回循环,false则执行下面
printf("请选择你需要购买的饮料:");
scanf("%d", &category);
category = getchar();//获取一个字符 category,读取缓冲区里的内容
switch (category)
{
case'A': {
if (Sum >= 2) {
if (i >= 2) {
//限定饮料自动售卖机里面只有一瓶,如果买此饮料第二次则表示售完
//饮料剩余量可根据实际来更改,不仅仅为1
printf("饮料已经售完\n"); break;
}
else {
sum = Sum - 2;
printf("可口可乐,找零:%.2f元,请收好饮料和零钱,欢迎再次光临!\n", sum);
i++;//购买的数量自增,也可理解为库存 -1
break;
}
}
else {
printf("投币金额不足,请投币!\n");
break;
}
}
case'B': {
if (Sum >= 2) {
if (i >= 2) {
printf("饮料已经售完\n"); break;
}
else {
sum = Sum - 2;
printf("百事可乐,找零:%.2f元,请收好饮料和零钱,欢迎再次光临!\n", sum);
i++;
break;
}
}
else {
printf("投币金额不足,请投币!\n");
break;
}
}
case'C': {
if (Sum >= 3) {
if (i >= 2) {
printf("饮料已经售完\n"); break;
}
else {
sum = Sum - 3;
printf("橙汁,找零:%.2f元,请收好饮料和零钱,欢迎再次光临!\n", sum);
i++;
break;
}
}
else {
printf("投币金额不足,请投币!\n");
break;
}
}
case'D': {
if (Sum >= 5) {
if (i >= 2) {
printf("饮料已经售完\n"); break;
}
else {
sum = Sum - 5;
printf("咖啡,找零:%.2f元,请收好饮料和零钱,欢迎再次光临!\n", sum);
i++;
break;
}
}
else {
printf("投币金额不足,请投币!\n");
break;
}
}
case'E': {
if (Sum >= 1.5) {
if (i >= 2) {
printf("饮料已经售完\n"); break;
}
else {
sum = Sum - 1.5;
printf("纯净水,找零:%.2f元,请收好饮料和零钱,欢迎再次光临!\n", sum);
i++;
break;
}
}
else {
printf("投币金额不足,请投币!\n");
break;
}
}
}
printf("是否继续购买东西?是:Y/y 否:N/n!\n");
while (getchar() != '\n');//清空缓冲区 \n
userInput = getchar();//userInput_用户__输入
if (userInput == 'n' || userInput == 'N') {
break;
}
}
return 0;
}