繁体   English   中英

Java 新手 - 设计帮助

[英]New to Java - help on design

当我从 Head First Java 学习时,我希望创建一个基本的订单系统来了解 OO 概念。

在我看来,我的核心课程是:
客户:ID、姓名、邮编
订单:id、日期、customer_id、total_value、product_id、单价、数量
库存:ID、名称、单价

如果我对我的对象应用简单的标准化,我希望将订单分解为订单和订单行,例如:

命令:
订单编号
顾客ID
总价值
订购日期

订单行:
订单编号
线路编号
产品编号
数量
单价
总行值

问题是,如果我有一个数组、列表、LinkedList,我如何为我的订单和订单行传入另一个值的引用,例如处理将客户 ID 从客户对象传递到订单对象的最佳方法是什么和将 Product 对象中的产品 ID 转换为我的订单行对象?

目前我的基本报价是这样的:

顾客:

public class Customer {

   int id;
   String name;
   String zip;

public Customer() {

}

public Customer(int i, String n, String z) {
    setId(i);
    setName(n);
    setZip(z);
}`

产品:

public class Inventory {
  int id;
  String name;
  double price;

public Inventory(int i, String string, double d) {
    // TODO Auto-generated constructor stub

    setId(i);
    setName(string);
    setPrice(d);

}

命令:

public class Order {
int orderID;
String orderDate;
int productID;
int Quantity;
double unitPrice;
double orderTotal;

public Order(int o, String oD, int pI, int q, double uP) {
    setOrderID(o);
    setOrderDate(oD);
    setProductID(pI);
    setQuantity(q);
    setUnitPrice(uP);
    setOrderTotal(uP, q);

然后我在我的主要内容中有以下内容,并且认为这不是正确的实施方式:

public class OrderSystem {

static List<Inventory> inventory = new ArrayList<Inventory>();
static List<Customer> customers = new ArrayList<Customer>();
static List<Order> orders = new ArrayList<Order>();

public OrderSystem() {
    inventory.add(new Inventory(1, "Nails", 2.50));
    inventory.add(new Inventory(2, "Screws", 2.95));
    inventory.add(new Inventory(3, "Pins", 3.50));
    inventory.add(new Inventory(4, "Tape", 4.50));
    inventory.add(new Inventory(5, "Wire", 2.99));
    customers.add(new Customer(1, "Bob", "01305"));
}

public static void main(String[] args) {
    new OrderSystem();
    mainMenu();
    // TODO Auto-generated method stub
}

public static void mainMenu() {
    Scanner input = new Scanner(System.in);

    clearConsole();
    System.out.println("Please enter a validation selection");
    System.out.println("Option 1: Inventory Add");
    System.out.println("Option 2: Inventory List");
    System.out.println("Option 3: Customer Add");
    System.out.println("Option 4: Customer List");
    System.out.println("Option 5: Create Order");
    System.out.println("Option 6: Print Orders");
    System.out.println("Option 7: Quit");
    int selection = input.nextInt();

    switch (selection) {
    case 1:
        addInventory();
        mainMenu();
    case 2:
        printInventory();
        mainMenu();
    case 3:
        addCustomer();
        mainMenu();
    case 4:
        printCustomer();
        mainMenu();
    case 5:
        addOrder();
        mainMenu();
    case 6:
        printOrder();
        mainMenu();
    case 7:
        System.exit(0);
    default:
        System.out.println("Invalid selection!");
        pressAnyKeyToContinue();
        mainMenu();
    }

}


private static void addOrder() {
    // TODO Auto-generated method stub
    clearConsole();
    Scanner input = new Scanner(System.in);
    System.out.println("Please enter Order ID: ");
    int orderID = input.nextInt();
    System.out.println("Please enter Order Date: ");
    String orderDate = input.next();
    printInventory();
    System.out.println("Please enter the Product ID: ");
    int productID = input.nextInt();

    List<Inventory> items = inventory.stream().filter(p -> p.getId() == productID).collect(Collectors.toList());

    int prodID = items.get(0).getId();
    System.out.println("Selected Product: " + items.get(0).getName());
    System.out.println("Unit Price: " + items.get(0).getPrice());

    System.out.println("Please enter Order Quantity: ");
    int orderQuantity = input.nextInt();
    double orderTotal = items.get(0).getPrice() * orderQuantity;

    System.out.println("Total Order Value: $" + orderTotal);
    input.nextLine();
    orders.add(new Order(orderID, orderDate, prodID, orderQuantity, items.get(0).getPrice()));
    pressAnyKeyToContinue();

}

人们的想法是什么? 再次不找你重新编写代码,因为我想学习。 我正在寻找我是否走错了花园小径,有没有更好的方法。 我应该使用 List、ArrayList 还是其他?

为什么不为每个 Customer 对象设置一个 Order 对象列表? 此外,对于每个 Order 对象,都有一个 Product 对象列表。 这样,一个客户可以有多个订单,每个订单可以有多个产品。

顺便说一下,您还应该考虑如何使用这些类以及各个成员之间存在多少重叠。 例如,如果它更以客户为中心,那么我们希望能够从 Customer 类中获取所有信息。 如果它更以订单为中心,那么我们可以修改 Order 类,以便它提供我们需要的东西

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM