【发布时间】:2020-08-15 13:53:21
【问题描述】:
我正在做一个杂货订购系统,但订购逻辑有问题。
目前,该程序会询问客户他们想要订购多少杂货,但我发现这是一种订购方式,无需在一开始就指定要订购的订单数量。
有人知道吗?谢谢。
下面是驱动类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.2f\n", "Grand Total: ", order.getGrandTotalPrice());
}
public static void displayMenu(Groceries[] groceries){
System.out.printf("\t========================================\n");
System.out.printf("\tWelcome to the Groceries Ordering System\n");
System.out.printf("\t========================================\n");
System.out.printf("%-10s %-25s %-11s %s \n\n", "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("\n\t\t\t\t Ordered Item\n");
System.out.printf("\t\t\t\t===============\n");
System.out.printf("%-10s %-20s %-14s %-13s %-13s\n", "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");
}
}
这是杂货类(不会发布此类的子类(类别),因为我认为没有任何相关性)
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());
}
}
最后是 Order 类
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;
}
}
【问题讨论】:
标签: java arrays oop methods logic