如何在结帐时打印购买的物品?
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);
我想在打印账单时打印我在 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);