实验三:自动售货机
题目:
图所示为简易自动售货机,物品架1、2上共有10样商品,按顺序进行编号分别为1~10,标有价格与名称,如下图:
用户购买商品的操作方法如下。
1.售货机物品架上共有10样商品依次编号1-10,标有名称与价格。
2.售货机接受1/2/5/10面值的硬/纸币,用户可以一次性投入多个硬币并选择多种商品,售货机将一次性将商品输出并找零。
3.投入钱币和选择商品皆以-1作为结束,若输入商品编号超出范围或余额不足将自动结束购物,输出购买商品,钱币总额和找零。
输入不需要空格,10请输入’0’,-1请输入’-’
输入输出示例:
输入:
1 1 2 2 5 5 10 10 -1 /钱币序列/
1 2 3 5 1 6 9 10 -1 /商品编号/
输出:
Total:36yuan, change:19 yuan
Table-water1:2
Table-water2:1
Table-water3:1
Milk:1
Beer:1
Oolong-Tea:1
Green-Tea:1
注释:
主要是熟悉关于switch()函数的相关用法;
下面贴的代码并不是正确解,使用了个十分奇葩的方法(……)请注意看售货机的使用方法(233);
附录(瞎搞的解答):
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <bits/stdc++.h>
using namespace std;
void jiemian(){
printf("\n");
printf("\n");
printf(" 程序设计与实践 实验(三) 自动售货机\n");
printf("\n");
printf(" 自动售货机使用方法\n");
printf(" ============================= \n");
printf("\n 1.售货机物品架上共有10样商品依次编号1-10,标有名称与价格。\n");
printf(" 2.售货机接受1/2/5/10面值的硬/纸币,用户可以一次性投入多个硬币并选择多种商品,售货机将一次性将商品输出并找零。\n");
printf(" 3.投入钱币和选择商品皆以-1作为结束,若输入商品编号超出范围或余额不足将自动结束购物,输出购买商品,钱币总额和找零。\n");
printf(" (输入不需要空格,10请输入'0',-1请输入'-')\n");
printf("\n");
printf(" 1---Table-water1 1 yuan 2---Table-water2 1 yuan\n");
printf(" 3---Table-water3 1 yuan 4---Coca-Cola 2 yuan\n");
printf(" 5---Milk 2 yuan 6---Beer 3 yuan\n");
printf(" 7---Orange-Juice 3 yuan 8---Sprite 3 yuan\n");
printf(" 9---Oolong-Tea 4 yuan 10---Green-Tea 4 yuan\n");\
printf("\n");
}
int main(){
char *g[10]={"Table-water1", "Table-water2", "Table-water3", "Coca-Cola",
"Milk","Beer", "Orange-Juice", "Sprite", "Oolong-Tea", "Green-Tea"};/*定义指针数组,其中每个元素都是
一个字符指针,分别指向各商品名称*/
int price[10]={1,1,1,2,2,3,3,3,4,4}; /*各商品对应的价格*/
static int countp[10];
int change=0,t=0,*p=price,i;
char x,y;
int a[100],b[100],k;
jiemian();
printf(" Please enter a coin sequence:");
while(x!='-'){
x=getch();
switch(x){
case '1':
t+=1;cout<<"1 ";break;
case '2':
t+=2;cout<<"2 ";break;
case '5':
t+=5;cout<<"5 ";break;
case '0':
t+=10;cout<<"10 ";break;
case '-':
cout<<"-1";break;
default:break;
}
}
cout<<endl<<endl<<" 总计投入金额:"<<t<<" yuan"<<endl;
cout<<endl;
change=t;
printf(" Please enter a goods sequence:");
while(y!='-'){
y=getch();
if(change<*(p+(y-49))){
cout<<" 余额不足,结束购物。";
break;
}
switch(y){
case '1':
cout<<"1 ";change-=*p;countp[0]++;break;
case '2':
cout<<"2 ";change-=*(p+1);countp[1]++;break;
case '3':
cout<<"3 ";change-=*(p+2);countp[2]++;break;
case '4':
cout<<"4 ";change-=*(p+3);countp[3]++;break;
case '5':
cout<<"5 ";change-=*(p+4);countp[4]++;break;
case '6':
cout<<"6 ";change-=*(p+5);countp[5]++;break;
case '7':
cout<<"7 ";change-=*(p+6);countp[6]++;break;
case '8':
cout<<"8 ";change-=*(p+7);countp[7]++;break;
case '9':
cout<<"9 ";change-=*(p+8);countp[8]++;break;
case '0':
cout<<"10 ";change-=*(p+9);countp[9]++;break;
case '-':
cout<<"-1";break;
default:
cout<<" 商品编号超出范围 ";y='-';break;
}
}
/*输出总金额,应找回的金额*/
printf("\n\n Total: %d yuan , change: %d yuan\n",t,change);
/*输出物品名称与数量*/
for(i=0;i<10;i++) {
if(countp[i]>0)
printf(" %s : %d \n",g[i],countp[i]);
}
printf("\n");
return 0;
}