实验三:自动售货机

下图所示为简易自动售货机,物品架1、2上共有10样商品,按顺序进行编号分别为1~10,标有价格与名称,一个编号对应一个可操作按钮,供选择商品使用。如果物品架上的商品被用户买走,储物柜中会自动取出商品送到物品架上,保证物品架上一定会有商品。用户可以一次投入较多钱币,并可以选择多样商品,售货机可以一次性将商品输出并找零钱。

用户购买商品的操作方法如下。

    (1)从“钱币入口”放入钱币,依次放入多个硬币或纸币。钱币可支持1元(纸币、硬币)、2元(纸币)、5元(纸币)、10元(纸币),放入钱币时,控制器会先对钱币进行检验以识别出币值,并统计币值总额,显示在控制器显示屏中,提示用户确认钱币放入完毕。

    (2)用户确认钱币放入完毕,便可选择商品,只要用手指按对应商品外面的编号按钮即可。每选中一样商品,售货机控制器会判断钱币是否足够购买,如果钱币足够,自动根据编号将物品进行计数和计算所需钱币值; 如果钱币不足,则结束购物。

    请为自动售货机编程,输入钱币值序列,以-1作为结束,依次输入多个购买商品编号,若编号超出范围或余额不足则输入结束,输出钱币总额与找回零钱(找零要求按人民币的实际流通币值,取张数最少),以及所购买商品名称及数量。

输入输出示例:

输入:

1 1 2 2 5 5 10 10 -1      /*钱币序列*/

1 2 3 5 1 6 9 10 -1       /*物品编号*/

输出:

Total:36yuan, change:19 yuan(10 x 1 + 5 x 1 + 1 x 4)

Table-water:2;Table-water:1;Table-water:1;Milk:1;Beer:1;Oolong-Tea:1;Green-Tea:1;

笨方法:

import java.util.Scanner;

public class p3 {
    public p3() {
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int total = 0;
        int needmoney = 0;
        int n1 = 0;
        int n2 = 0;
        int n3 = 0;
        int n4 = 0;
        int n5 = 0;
        int n6 = 0;
        int n7 = 0;
        int n8 = 0;
        int n9 = 0;
        int n10 = 0;

        int num1;
        int num2;
        int num3;
        int change;
        do {
            num1 = in.nextInt();
            if (num1 == 1) {
                total += num1;
            }

            if (num1 == 2) {
                total += num1;
            }

            if (num1 == 5) {
                total += num1;
            }

            if (num1 == 10) {
                total += num1;
            }

            if (num1 == -1) {
                do {
                    num1 = in.nextInt();
                    if (num1 == 1) {
                        ++needmoney;
                        ++n1;
                    }

                    if (num1 == 2) {
                        ++needmoney;
                        ++n2;
                    }

                    if (num1 == 3) {
                        ++needmoney;
                        ++n3;
                    }

                    if (num1 == 4) {
                        needmoney += 2;
                        ++n4;
                    }

                    if (num1 == 5) {
                        needmoney += 2;
                        ++n5;
                    }

                    if (num1 == 6) {
                        needmoney += 3;
                        ++n6;
                    }

                    if (num1 == 7) {
                        needmoney += 3;
                        ++n7;
                    }

                    if (num1 == 8) {
                        needmoney += 3;
                        ++n8;
                    }

                    if (num1 == 9) {
                        needmoney += 4;
                        ++n9;
                    }

                    if (num1 == 10) {
                        needmoney += 4;
                        ++n10;
                    }

                    if (num1 == -1) {
                        num1 = needmoney / 10;
                        num2 = (needmoney - 10 * num1) / 5;
                        num3 = needmoney - 10 * num1 - 5 * num2;
                        change = total - needmoney;
                        int nm1 = change / 10;
                        int nm2 = (change - 10 * nm1) / 5;
                        int nm3 = change - 10 * nm1 - 5 * nm2;
                        if (change < 0) {
                            System.out.println("钱币不足,请重新投入!");
                            System.out.print("Total:" + total + "yuan, change:" + needmoney + "yuan(10x" + num1 + "+5x" + num2 + "+1x" + num3 + ")");
                            return;
                        }

                        System.out.println("Total:" + total + "yuan, change:" + change + "yuan(10x" + nm1 + "+5x" + nm2 + "+1x" + nm3 + ")");
                        if (n1 >= 1) {
                            System.out.print("Table-water:" + n1 + ";");
                        }

                        if (n2 >= 1) {
                            System.out.print("Table-water:" + n2 + ";");
                        }

                        if (n3 >= 1) {
                            System.out.print("Table-water:" + n3 + ";");
                        }

                        if (n4 >= 1) {
                            System.out.print("Coca-Cola:" + n4 + ";");
                        }

                        if (n5 >= 1) {
                            System.out.print("Milk:" + n5 + ";");
                        }

                        if (n6 >= 1) {
                            System.out.print("Beer:" + n6 + ";");
                        }

                        if (n7 >= 1) {
                            System.out.print("Orange-Juice:" + n7 + ";");
                        }

                        if (n8 >= 1) {
                            System.out.print("Sprite:" + n8 + ";");
                        }

                        if (n9 >= 1) {
                            System.out.print("Oolong-Tea:" + n9 + ";");
                        }

                        if (n10 >= 1) {
                            System.out.print("Green-Tea:" + n10 + ";");
                        }

                        return;
                    }
                } while(num1 >= -1 && num1 <= 10);

                System.out.println("请输入正确的物品编号!");
                num2 = total / 10;
                num3 = (total - 10 * num2) / 5;
                change = total - 10 * num2 - 5 * num3;
                System.out.print("Total:" + total + "yuan, change:" + total + "yuan(10x" + num2 + "+5x" + num3 + "+1x" + change + ")");
                return;
            }
        } while(num1 == 1 || num1 == 2 || num1 == 5 || num1 == 10 || num1 == -1);

        System.out.println("请输入正确的钱币序列!");
        num2 = total / 10;
        num3 = (total - 10 * num2) / 5;
        change = total - 10 * num2 - 5 * num3;
        System.out.print("Total:" + total + "yuan, change:" + total + "yuan(10x" + num2 + "+5x" + num3 + "+1x" + change + ")");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值