自动售货机程序
出售若干种价格不一的货物
投币存入余额中,购买商品从余额中扣款,不足则提示继续投币
1.有停止购物选项,出货,根据购物情况找零
2.有继续投币选项
3.记录开机以来的营业额
4.货物存量应有固定数量,售完则提示缺货该商品不进行售卖
5.补货功能,补入货物后商品恢复售卖
6.售货机启动后应保持运行

自动售货机程序 c语言程序 求解答
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- qfl_sdu 2022-06-23 11:23关注
定义一个结构体保存货物信息。
//当投币金额小于需要支付的金额是,询问是否继续投币,如果不继续投币,则结算失败
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXNMB 100 //定义货品信息 typedef struct _stuf { char name[20]; //物品名称 double price; //价格 int nmb; //数量 }Stuf; //录入货品信息 void input(Stuf a[], int* n) { int i; char ch; while (1) { system("cls"); printf("请输入货品的名称:"); scanf("%s", a[*n].name); printf("请输入货品的价格:"); scanf("%lf", &a[*n].price); printf("请输入货品的数量:"); scanf("%d", &a[*n].nmb); *n += 1; printf("是否继续录入(Y/N):"); rewind(stdin); //清空输入缓存 while (1) { ch = getchar(); getchar(); //吸收回车符 if (ch == 'n' || ch == 'N') return; else if (ch == 'y' || ch == 'Y') break; else printf("是否继续录入(Y/N):"); } } } //购物 double shopping(Stuf a[], int n) { char tmp[20],ch; int cnt = 0; double sum = 0; int i; int flag = 0; system("cls"); while (1) { printf("请输入要购买的货品名称:"); scanf("%s", tmp); flag = 1; for (i = 0; i < n; i++) { if (strcmp(a[i].name, tmp) == 0) { if (a[i].nmb <= 0) flag = 0; else flag = 1; break; } } if (flag == 0) { printf("该商品目前缺货!\n"); } else { while (1) { printf("请输入购买数量:"); scanf("%d", &cnt); if (cnt > a[i].nmb) printf("库存不足,当前库存:%d", a[i].nmb); else break; } sum += a[i].price * cnt; a[i].nmb -= cnt; } //询问是否继续购物 rewind(stdin); while (1) { printf("是否继续购物(Y/N):"); ch = getchar(); getchar(); //吸收回车符 if (ch == 'n' || ch == 'N') { printf("购物完成,请结算!\n"); system("pause"); return sum; } else if (ch == 'y' || ch == 'Y') break; } } } //结算 int jieSuan(double price) { int sum = 0; int op; char ch; while (1) { system("cls"); printf("1.投币1元\n"); printf("2.投币5元\n"); printf("3.投币10元\n"); printf("4.投币50元\n"); printf("5.投币100元\n"); scanf("%d", &op); if (op == 1) sum += 1; else if (op == 2) sum += 5; else if (op == 3) sum += 10; else if (op == 4) sum += 50; else if (op == 5) sum += 100; else continue; if (sum < price) { rewind(stdin); while (1) { printf("是否继续投币(Y/N)?"); ch = getchar(); getchar(); //吸收回车符 if (ch == 'n' || ch == 'N') //购物失败 { printf("投币不足,购物失败,退还投币!\n"); return 0; } else if (ch == 'y' || ch == 'Y') break; } } else { printf("总投币:%d,找零:%.1f,购物成功!\n", sum, sum - price); system("pause"); return 1; } } } //补充货品 void addStuf(Stuf a[], int n) { char tmp[20], ch; int nmb,i; while (1) { system("cls"); printf("请输入需要补充数量的货品名称:"); scanf("%s", tmp); printf("请输入补充数量:"); scanf("%d", &nmb); for (i = 0; i < n; i++) { if (strcmp(a[i].name, tmp) == 0) { a[i].nmb += nmb; printf("补货成功!\n"); break; } } if (i == n) printf("未找到该货品,补货失败!\n"); printf("是否继续补货(Y/N):"); rewind(stdin); while (1) { ch = getchar(); getchar(); if (ch == 'y' || ch == 'Y') break; else if (ch == 'N' || ch == 'n') return; else printf("是否继续补货(Y/N):"); } } } int main() { Stuf a[MAXNMB]; int nmb = 0; int choise; double price=0; double sum = 0; while (1) { system("cls"); printf("--------------欢迎使用自动售货机-----------\n"); printf(" 1.添加货物\n"); printf(" 2.购买货物\n"); printf(" 3.结算\n"); printf(" 4.补货\n"); printf(" 5.统计销售额\n"); printf(" 0.退出系统\n"); scanf("%d", &choise); switch (choise) { case 0:return 0; case 1:input(a, &nmb); break; case 2:price = shopping(a, nmb); break; case 3: if (jieSuan(price)) sum += price; price = 0; break; case 4:addStuf(a, nmb); break; case 5: printf("自开机以来的销售额:%.1lf\n", sum); break; } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用 1