如何在结帐时打印购买的物品?

How do I print the bought items at the time of bill?

我想在打印账单时打印我在 starters 方法中订购的商品和数量。关于我将如何做有什么建议吗?我只写了一个我的程序实例,因为它整个问题非常大。

提前致谢。

    static void Bill()
    {

        System.out.println("\f");
        System.out.println("*********************************************************");
        System.out.println("*********************************************************");
        System.out.println("**************************BILL***************************");
        System.out.println(ob);
        System.out.println("Your phone number - "+j);
        int Z = (int)(Math.random()*10000000);
        System.out.println("Bill number is "+Z);
        System.out.println("The total bill amount is Rs."+sum);
        System.out.println();
        System.out.println("Hope you enjoyed. Visit us again soon!");
        Food=0; 
    }

        static void Starters()
    {
        System.out.println("You have selected Starters");
        System.out.println();
        System.out.println("1. Spring Rolls               - Rs 350");
        System.out.println("2. Onion Rings                - Rs 350");
        System.out.println("3. Fried Raviolli             - Rs 400");
        System.out.println("4. Gorgonzola                 - Rs 400");
        System.out.println("5. Fresh Ricotta Crostini     - Rs 475");
        System.out.println("6. Potato Fritters            - Rs 500");
        System.out.println();
        System.out.println("Enter your desired option");
        starterOption=sc.nextInt();
        System.out.println("Enter quantity");
        quantity=sc.nextInt();
        switch(starterOption)
        {
            case 1:
            s1 = quantity * 350;
            break;
            case 2:
            s2 = quantity * 350;
            break;
            case 3:
            s3 = quantity * 400;
            break;
            case 4:
            s4 = quantity * 400;
            break;
            case 5:
            s5 = quantity * 475;
            break;
            case 6:
            s6 = quantity * 500;
            break;
            default:
            System.out.println("You haven't ordered anything");
            break;
        }
        System.out.println("Do you want to order anything else? Y/N");
        A = sc1.next();
        if(A.equalsIgnoreCase("Y"))
        {
            System.out.println("Do you want to order from the same section? Y/N ");
            F=sc.next();
            if(F.equalsIgnoreCase("Y"))
            {
                sum=s1+s2+s3+s4+s5+s6;
                Starters();
            }
            else
            {
                sum=s1+s2+s3+s4+s5+s6;
                Food_Items();
            }
        }
        else
        {
            sum=s1+s2+s3+s4+s5+s6;
            Bill();
        }
    }

如上所述:这是一个非常简单的问题的很长的代码。

当你想打印订购的东西时,你必须将它保存在一个变量中,例如数组。或者按照集合中的建议,例如一个列表。您可以按照与之前相同的方式扩展您的代码。但强烈建议您优化代码。

您可以对代码进行多项改进。如果您想在账单上显示所有元素,则必须存储您已经订购的东西。每次订购时,您可以将元素添加到 List

您需要在列表中存储对象,以便为您的菜肴创建一些对象。 Enums 似乎适合您的申请,这可能是初学者的一些示例:

enum Starters {
    SPRING_ROLLS("Spring Rolls", "Rs 350", 5),
    FRIED_RAVIOLLI("Fried Raviolli", "Rs 400", 9),
    ... // All other starters...

    String name;
    String code;
    int price;

    public Starters(String name, String code, String price) {
        this.name = name;
        this.code = code;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public String getCode(){
        return code;
    }

    public int getPrice(){
        return price;
    }
}

然后你这样显示你的菜单:

for (Starters starter : Starters.values()) {
    System.out.println(starter.getName() + " " starter.getCode()); // Just an example, modify to fit your format
}

您将拥有不同类型的枚举,并且想要将相同类型的对象添加到列表中。您可以为此使用一个接口,并使所有枚举都实现该接口:

public interface Orderable {
    public String getName();
    public String getCode();
    public String getPrice();
}

您可以像这样初始化列表:

List<Orderable> orders = new ArrayList<>();

并像这样将元素添加到列表中(枚举需要实现 Orderable 接口):

orders.add(Starters.SPRING_ROLLS);
order.add(Desserts.CHEESE_CAKE);
...

当你想显示账单时,你可以遍历列表并显示订单:

int totalPrice = 0;
for (Orderable order : orders) {
    System.out.println(order.getName() + " - " order.getPrice());
    totalPrice += order.getPrice();
}
System.out.println("Total price: ");

我建议使用 HashMap, read the example in the tutorial in this link

您的问题的可能解决方案可能是:-

在class声明变量,最好'private'

private static HashMap<String, Integer> Starters    = new HashMap<String, Integer>();
private static HashMap<String, Integer> Orders      = new HashMap<String, Integer>();

使用一些 Init 函数或 class 的构造函数对 Startres

的所有可能值进行初始化
Starters.put("Spring Rolls", 350);
Starters.put("Onion Rings", 400);

在您可以使用的 Starters() 函数中(精简示例)

    System.out.println("You have selected Starters");
    System.out.println();
    int i = 1;
    String[] mystarters = Starters.keySet().toArray(new String[Starters.keySet().size()]);
    for (String starter : mystarters) {
        System.out.println(i++ + ". " + starter + " : Rs. " + Starters.get(starter));
    }

    System.out.println("Enter your desired option");
    //get option
    System.out.println("Enter quantity");
    //get quantity
    // I am using s. as a prefix for starters, for Main course you could use m. or mc. or something
    Orders.put("s." + mystarters[option - 1], quantity);

当然,如果这个Starter已经存在于订单中,你可以获取数量并添加到现有数量,或者询问是否需要覆盖。

// example
if(Orders.containsKey("s." + mystarters[option - 1]))
   Orders.put(("s." + mystarters[option - 1]), Orders.get("s." + mystarters[option - 1])+quantity);
else
   Orders.put("s." + mystarters[option - 1], quantity);

在 Bill 中,您可以使用以下内容:-

    int sum = 0;
    for (String orderItem : Orders.keySet()) {
        int price = 0;
        int quant = Orders.get(orderItem);
        if (orderItem.startsWith("s.")) {
            orderItem = orderItem.substring(2);
            price = Starters.get(orderItem);
            System.out.println(orderItem + " x " + quant + " = Rs. " + price * quant);
        }
        sum += price * quant;

    }

    System.out.println("Total Price : Rs." + sum);