[英]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.