具有OOP的Java应用程序杂货订购逻辑



我正在做一个杂货订购系统,在订购逻辑方面有问题。

目前,该程序会询问顾客他们想订购多少食品杂货,但我发现有一种订购方式,一开始不需要指定订单数量

有人知道吗?非常感谢。

下面是驱动程序类Shop.java

package groceries.ordering.system;

import java.util.*;

public class Shop {

public static void main(String[] args){

Scanner myScanner = new Scanner(System.in);

Category[] groceries = {new Category("Apple 1pcs", 1.5, "Fruit"),
new Category("Orange 1pcs", 1.4, "Fruit"),
new Category("Egg 10pcs", 8, "Dairy"),
new Category("Full Cream Milk", 6.5, "Dairy"),
new Category("Olive Oil 1L", 30, "Cooking Oil"),
new Category("Palm Oil 1L", 20, "Cooking Oil")};


displayMenu(groceries);
System.out.print("How many groceries you would like to order: ");
int totalGroceries = myScanner.nextInt();

OrderItem[] items = new OrderItem[totalGroceries];

for(int i=0;i<items.length;i++){
System.out.println("Enter your choice of groceries (1 - 6) : ");
int choice = myScanner.nextInt()-1;
System.out.println("Enter quantity ordered: ");
int quantity = myScanner.nextInt();

items[i] = new OrderItem(groceries[choice],quantity);
}

Order order = new Order(items,totalGroceries);
displayOrderItem(items);
System.out.printf("%65s %9.2fn", "Grand Total: ", order.getGrandTotalPrice());
} 
public static void displayMenu(Groceries[] groceries){

System.out.printf("t========================================n");
System.out.printf("tWelcome to the Groceries Ordering Systemn");
System.out.printf("t========================================n");
System.out.printf("%-10s %-25s %-11s %s nn", "No", "Groceries", "Price(RM)", "Category");
for(Groceries grocery : groceries){
System.out.println(grocery.displayMenu());

}
System.out.println("n");
}

public static void displayOrderItem(OrderItem[] items){
System.out.printf("ntttt Ordered Itemn");
System.out.printf("tttt===============n");
System.out.printf("%-10s %-20s %-14s %-13s %-13sn", "No","Groceries", "Price(RM)","Quantity","Total Price(RM)");
System.out.printf("--------------------------------------------------------------------------------------n");
for(OrderItem item : items){
System.out.println(item.displayOrder());
}
System.out.printf("--------------------------------------------------------------------------------------n");
}     

}

这是Groceries类(不会发布这个类的子类(类别(,因为我认为没有任何相关的(

package groceries.ordering.system;

public abstract class Groceries {

private String name;
private double price;
public Groceries() {
this("",0);
}

public Groceries(String prodName, double prodPrice){
super();
name = prodName;
price = prodPrice;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public String displayMenu(){
return String.format("%-25s %-11.2f ", name,price);
}

}

这是OrderItem类

public class OrderItem {

private Groceries groceries;
private int quantity;
private static int prodCount = 1;

public OrderItem(Groceries groceries, int quantity) {
this.groceries = groceries;
this.quantity = quantity;
}

public double getUnitPrice(){
return groceries.getPrice();

}

public double getSubTotalPrice(){
return getUnitPrice() * quantity;
}

public String displayOrder() {
return String.format("%-10d %-20s %9.2f %13d %19.2f",prodCount++, groceries.getName(),
getUnitPrice(),quantity,getSubTotalPrice());
}
}

最后是订单类

public class Order {

private OrderItem[] items;
private int totalItem;

public Order(OrderItem[] items, int totalItem) {
this.items = items;
this.totalItem = totalItem;
}

public double getGrandTotalPrice() {
double price = 0.0;
for (OrderItem item : items) {
price += item.getSubTotalPrice();
}
return price;
}

}

当然。你可以用两种方法来做。

  1. 预先创建一个非常大的数组(不推荐(
  2. 使用一些List(ArrayListLinkedList或其他(并不断添加项目,直到用户完成为止

List<OrderItem> items = new ArrayList<>();

do {
System.out.println("Enter your choice of groceries (1 - 6) : ");
int choice = myScanner.nextInt()-1;
System.out.println("Enter quantity ordered: ");
int quantity = myScanner.nextInt();

items.add(new OrderItem(groceries[choice],quantity));
// compute shouldContinue - something like asking the user to enter -1 to quit.
} while(shouldContinue);


是,在数组下面的位置使用列表实现ArrayListLinkedList,并使用其函数:

更换此-OrderItem[] items = new OrderItem[totalGroceries];

带阵列列表-List<OrderItem> items = new ArrayList<>();

如果您想在多线程环境中运行此应用程序,也可以使用CopyOnWriteArrayList

最新更新