下图所示为简易自动售货机,物品架1、2上共有10样商品,按顺序进行编号分别为1~10,标有价格与名称,一个编号对应一个可操作按钮,供选择商品使用。如果物品架上的商品被用户买走,储物柜中会自动取出商品送到物品架上,保证物品架上一定会有商品。用户可以一次投入较多钱币,并可以选择多样商品,售货机可以一次性将商品输出并找零钱。
// (1)从“钱币入口”放入钱币,依次放入多个硬币或纸币。钱币可支持1元(纸币、硬币)、2元(纸币)、5元(纸币)、10元(纸币),
// 放入钱币时,控制器会先对钱币进行检验以识别出币值,并统计币值总额,显示在控制器显示屏中,提示用户确认钱币放入完毕。
// (2)用户确认钱币放入完毕,便可选择商品,只要用手指按对应商品外面的编号按钮即可。每选中一样商品,
// 售货机控制器会判断钱币是否足够购买,如果钱币足够,自动根据编号将物品进行计数和计算所需钱币值; 如果钱币不足,则结束购物。
// 请为自动售货机编程,输入钱币值序列,以-1作为结束,依次输入多个购买商品编号,若编号超出范围或余额不足则输入结束,
// 输出钱币总额与找回零钱(找零要求按人民币的实际流通币值,取张数最少),以及所购买商品名称及数量。
import java.util.Scanner;
public class P3 {
public static void main(String[] args) {
auto();
}
public static void auto() {
int total = 0;//投币总数
Scanner sc = new Scanner(System.in);
int test;//输入数据
System.out.println("Please input the money");
while (true) {
test = sc.nextInt();
//判断投入钱币不等于1,2,5,10,且不是-1退出输入的情况
if (test != 1 && test != 2 && test != 5 && test != 10 && test != -1) {
System.out.println("Incorrect input");
continue;
}
//如果输入的数等于-1则退出循环
if (test == -1) {
break;
}
//累加计算钱币总数
total += test;
}
int totalprice = 0,change;//totalprice储存需要支付的总额;change储存找零数额
int[] sum = new int[10];//定义sum数组存储每个商品购买的数量
System.out.println("Please input the goods number");
while (true) {
test = sc.nextInt();
//判断输入是否终止
if (test == -1) {
break;
}
//判断选择的商品是否合法
if(test > total||total <= totalprice||test<1 && test>10 && test != -1) {
System.out.println("Insufficient coins");
continue;
}
//判断输入的数,使得商品的数量累加
switch (test) {
case 1:
totalprice += 1;
sum[0]++;
break;
case 2:
totalprice += 1;
sum[1]++;
break;
case 3:
totalprice += 1;
sum[2]++;
break;
case 4:
totalprice += 2;
sum[3]++;
break;
case 5:
totalprice += 2;
sum[4]++;
break;
case 6:
totalprice += 3;
sum[5]++;
break;
case 7:
totalprice += 3;
sum[6]++;
break;
case 8:
totalprice += 3;
sum[7]++;
break;
case 9:
totalprice += 4;
sum[8]++;
break;
case 10:
totalprice += 4;
sum[9]++;
break;
}
}
change = total - totalprice;
int x = change;
int[] changearr = new int[6];//定义changearr数组存储找零时每个币种的数量
while(x >= 100) {
changearr[0]++;
x -= 100;
}while(x >= 50) {
changearr[1]++;
x -= 50;
}while(x >= 20) {
changearr[2]++;
x -= 20;
}while(x >= 10) {
changearr[3]++;
x -= 10;
}while(x >= 5) {
changearr[4]++;
x -= 5;
}while(x >= 1) {
changearr[5]++;
x -= 1;
}
System.out.print("Total:" + total + "yuan"+",");
System.out.println("Change:" + change + "yuan"+"("+100+"x"+changearr[0]+"+"+50+"x"+changearr[1]+"+"+20+"x"+changearr[2]+10+"x"+changearr[3]+5+"x"+changearr[4]+1+"x"+changearr[5]+")");
for(int num = 0;num<10;num++){
//打印每种饮料购买的数量
if(sum[num] != 0){
switch(num){
case 0:
System.out.print("Table-water:"+sum[num]+";");
break;
case 1:
System.out.print("Table-water:"+sum[num]+";");
break;
case 2:
System.out.print("Table-water:"+sum[num]+";");
break;
case 3:
System.out.print("Coca-Cola:"+sum[num]+";");
break;
case 4:
System.out.print("Milk:"+sum[num]+";");
break;
case 5:
System.out.print("Beer:"+sum[num]+";");
break;
case 6:
System.out.print("orange-Juice:"+sum[num]+";");
break;
case 7:
System.out.print("Sprite:"+sum[num]+";");
break;
case 8:
System.out.print("Oolong-Tea:"+sum[num]+";");
break;
case 9:
System.out.print("Green_Tea:"+sum[num]+";");
break;
}
}
}
}
}