2016-02-27 55 views
2

我被要求编写一个小的在线销售应用程序。单个客户端中的多个产品(arrayList)

理论上听起来很简单(但对我来说这是一个地狱)。我只是应该有一个arrayList约5个产品,然后让客户购买1到5个产品并打印销售总额。

public class Product { 

    private String name; 
    private double price; 

    public Product(String name, double price) { 
     this.name = name; 
     this.price = price; 
    } 

    public String getName() { 
     return name; 
    } 

    public double getPrice() { 
     return price; 
    } 

    public String printInfo() { 
     return "Product: " + name + " Cost: " + price; 
    } 
} 

然后,我有一个客户端类:

public class Cliente { 

    private String name; 
    private int numPedido; 
    ArrayList<Producto> products = new ArrayList<Producto>(); 

    public void listBuilder() { 
     Producto shirt = new Producto("Shirt", 30); 
     Producto tshirt = new Producto("T-Shirt", 40); 
     Producto sweater = new Producto("Sweater", 50); 
    } 

    public Cliente(String name, int numPedido) { 
     this.name = name; 
     this.numPedido = numPedido; 
    } 

    public Cliente() { 
    } 

    public String getName() { 
     return name; 
    } 

    public int getNumPedido() { 
     return (int) (Math.random() * 100); 
    } 

    public void addNewClient() { 
     name = JOptionPane.showInputDialog("Nombre: "); 
    } 

    public String printInfo() { 
     return "Nombre: " + name; 
    } 
} 

现在,我就如何使客户选择产品和获取连接到他卡住的思维。我正在考虑做一个arrayList的arrayList,但我相信这会让事情变得复杂。我知道可能有更简单的方法来连接它们,但我想不出任何。我想到的选项是一种显示1到3的数字(对应于每种产品)的方法,并且当用户选择一个时,它应该返回物品的价格。

仍然不确定如何以用户可以选择多个产品的方式实现它。

编辑:

我也有一个管理类,它是这样的:

public class Admin { 

    private Client[] clientList; 

    public AdminPedidos() { 
     clientList = new Client[2]; 
    } 

    public void AddContact() { 

     clienteList[0] = addProduct(); 
     clienteList[1] = addProduct(); 

     fillList(); 
    } 

    public Cliente addProduct() { 
     String contactoString = JOptionPane.showInputDialog("Are you a new client? Press 1 if yes."); 

     if (contactoString.equals("1")) { 
      return new Cliente(); 
     } else { 
      return new Cliente(); //just for testing 
     } 
    } 

    private void fillList() { 
     for (Client i : clientList) { 
      i.addNewClient(); 
     } 
    } 

    public void printContact() { 
     for (Client i : clientList) { 
      System.out.println(i.printInfo()); 
     } 
    } 
} 
+0

一是认为正常和分析,认为其中应listBuilder的方法以及如何访问使用ArrayList的 – Vinod

回答

2

您可以连接到每个Client一些purchaseProduct方法。

public void purchaseProduct(Product product) { this.products.add(product); } 

然后每个Client你实例化(Client client = new Client(name, id);)可以添加Products他/她的车与purchaseProduct方法。

我假设你正在使用某种用户输入法(Scanner)。有了这个,你可以读取用户输入的Product他们想要的,并相应地调用右边的Product功能。

listBuilder函数对我来说不是很合理btw(并且在编辑之后,很难理解类应该代表什么类型)。

编辑:您可能想创建一个ArrayList<Product>,它将附加到您已拥有的每个客户端。我觉得你难以决定把你的实际Products放在哪里。你应该不是把它们放在你的Client班里。
你应该考虑他们将要使用的人物/地点。大概在main对不对?所以只要实例他们那里,然后再在Client可以选择购买哪一个(通过我之前介绍的方法):

client.purchaseProduct(product); 
+0

是的,我正在使用JOptionPane来做到这一点。 我应该在哪里创建产品arrayList? – LeinadDC

+0

我不明白你在哪里做的,你可以添加你的'main'吗?或者以任何方式了解您希望如何使用这些类? – Idos

+0

哦,那个“listBuilder”应该是产品的arrayList。我现在没有任何东西,只是我刚发布的Admin类测试正确地打印客户端名称。我正在考虑在该Admin类中创建产品的arrayList。不知道这是否是一个正确的做法。还是应该在产品类中完成? 编辑:管理类应该是某种控制类,其中的一切都完成了,添加客户端和他们的车应该在那里工作。正如在主要我只允许执行程序本身。 – LeinadDC