下图所示为简易自动售货机,物品架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; } } } } }