Java 关于如何将项目添加到库存列表的问题
我已经用java创建了一个库存控制程序,但是我仍然停留在用户输入部分。 用户需要能够从界面的主菜单中选择“添加项目”,并从中输入项目的ID、说明、价格、数量和重新订购级别,然后选择是否要添加其他项目,或退出主菜单 我已经在一组扫描仪中编码,以读取条目属性的输入,但不确定如何将它们添加到我的库存列表中,也不确定如果用户想要添加其他条目或导航回主菜单,我应该使用什么类型的循环 有人知道如何最好地解决这两个问题吗?如有任何建议/解决方案,将不胜感激。 谢谢 库存商品代码:Java 关于如何将项目添加到库存列表的问题,java,interface,linked-list,Java,Interface,Linked List,我已经用java创建了一个库存控制程序,但是我仍然停留在用户输入部分。 用户需要能够从界面的主菜单中选择“添加项目”,并从中输入项目的ID、说明、价格、数量和重新订购级别,然后选择是否要添加其他项目,或退出主菜单 我已经在一组扫描仪中编码,以读取条目属性的输入,但不确定如何将它们添加到我的库存列表中,也不确定如果用户想要添加其他条目或导航回主菜单,我应该使用什么类型的循环 有人知道如何最好地解决这两个问题吗?如有任何建议/解决方案,将不胜感激。 谢谢 库存商品代码: public class S
public class StockItem {
String itemID;
String itemDesc;
Double price;
int quantity;
int reOrderLevel;
//declaring my instance variables
public StockItem (String itemID, String itemDesc, Double price, int quantity, int reOrderLevel)
{
this.itemID = itemID;
this.itemDesc = itemDesc;
this.price = price;
this.quantity = quantity;
this.reOrderLevel = reOrderLevel;
}
//declaring a contructor with 5 parameters for my instance variables
public String getitemID() {
return itemID;
}
public String getitemDesc() {
return itemDesc;
}
public Double getprice() {
return price;
}
public int getquantity() {
return quantity;
}
public int getreOrderLevel() {
return reOrderLevel;
}
//creating my getters for all instance variables
public void setprice(Double price) {
this.price = price;
}
public void setquantity(int quantity) {
this.quantity = quantity;
}
public void setreOrderLevel(int reOrderLevel) {
this.reOrderLevel = reOrderLevel;
}
//creating my setters for 3 instance variables
public String toString()
{
return getClass().getName() + "itemID: " + itemID + "itemDesc: " + itemDesc + "price: "
+ price + "quantity: " + quantity + "reOrderLevel: " + reOrderLevel;
}
//public String format() {}
}
存货清单:
import java.util.*;
public class StockList
{
public static LinkedList<StockItem> stock
= new LinkedList<StockItem>();
public StockList() {};
// Adds item to end of stock list
public void addItem(StockItem item)
{
StockList.stock.addLast(item);
}
// Removes item identified by productID from stock list
public void deleteItem(String itemID)
{
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID().equals(itemID))
{
itr.remove();
break;
}
}
}
// Updates price of existing item
public void updateItemPrice(String itemID, double price)
{
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID().equals(itemID))
{
item.setprice(price);
break;
}
}
}
// Updates quantity of existing item
public void updateItemQuantity(String itemID, int quantity)
{
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID().equals(itemID))
{
item.setquantity(quantity);
break;
}
}
}
// Updates re-order level of existing item
public void updateReOrderLevel(String itemID,
int reOrderLevel)
{
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID().equals(itemID))
{
item.setreOrderLevel(reOrderLevel);
break;
}
}
}
@Override public String toString()
{
return "" + stock;
}
// Returns formatted representation of the stock list
// public String formatStockList()
// {…}
// Returns formatted representation of re-order list
// Items are on this list if quantity < reOrderLevel
// public String formatReOrderList()
// {…}
ListIterator listIterator() {
throw new UnsupportedOperationException("Not yet implemented");
}
}
StockListApp:
import java.util.*;
public class StockListInterface
{
private StockList stock = null;
public StockListInterface(StockList stock){}
// Displays main menu and gets valid option from user
public void doMenu()
{
System.out.println("StockList Main Menu");
System.out.println("*******************");
System.out.println("1. Add an Item");
System.out.println("2. Delete an Item");
System.out.println("3. Update Item Price");
System.out.println("4. Update Item Quantity");
System.out.println("5. Update ReOrder Level");
System.out.println("6. Print Stock List");
System.out.println("7. Print ReOrder List");
System.out.println("8. Exit");
System.out.println("Select option [1-8] :>");
}
// Obtain input for stock list operation
// and invoke operation
private void doAddItem(StockItem item)
{
StockList.stock.addLast(item);
}
private void doDeleteItem(String itemID)
{
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID().equals(itemID))
{
itr.remove();
break;
}
}
private void doUpdateItemPrice(String itemID, double price)
{
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID().equals(itemID))
{
item.setprice(price);
break;
}
}
}
private void doUpdateItemQuantity(String itemID, int quantity)
{
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID().equals(itemID))
{
item.setquantity(quantity);
break;
}
}
}
private void doUpdateReOrderLevel(String itemID, int reOrderLevel)
{
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID().equals(itemID))
{
item.setreOrderLevel(reOrderLevel);
break;
}
}
}
// Display contents of stock list
private void doPrintStockList() {}
// Display contents of re-order list
private void doPrintReorderLIst() {}
}
首先有几点评论: StockItem中的实例变量应该是私有的 StockList有一个公共构造函数,但使用一个静态列表-这意味着StockList的所有实例共享同一个列表-除非这是您想要的(我想不是),否则应该使该列表非静态。因此,只需将其设置为私有成员变量 StockListInterface也应该是一个实际的接口,如果这是您的意图的话
public interface StockList {
public void addItem(StockItem item);
public void deleteItemById(String itemID);
// Updates price of existing item
public void updateItemPrice(String itemID, double price);
/// etc.
}
注意,我建议使用deleteItemById,因为您可以轻松提供一个名为deleteItem的方法,该方法接受StockItem,addItem将StockItem作为参数而不是字符串。
然后做一个实现(在我看来,这似乎有些过分,但这两种方式都有争议),如果是我的话,一个简单的StockList类在这里就足够了
public class StockListImpl implements StockList {
private List<StockItem> stockList = new LinkedList<StockItem>();
public void addItem(StockItem item) {
stockList.add(item);
}
//etc...
记得当用户选择退出时,调用Scult.CeleU.(.P/> > POST)相关的代码。SturtListApp和SturtListPo界面看起来相同的复制粘贴,只考虑粘贴相关代码。企业模式是非常感谢的,这解决了我正在经历的所有问题!!
public class StockListImpl implements StockList {
private List<StockItem> stockList = new LinkedList<StockItem>();
public void addItem(StockItem item) {
stockList.add(item);
}
//etc...
private List<StockItem> = new LinkedList<StockItem>();
public void removeItemById(String itemId) {
Iterator<StockItem> itr = stockList.listIterator();
while(itr.hasNext()) {
StockItem item = itr.next();
if(item.getitemID().equals(itemId)) {
itr.remove();
break;
}
}
}
class StockListApp {
private static Scanner scanner = new Scanner(System.in);
private static final int ADD_ITEM = 1;
private static final int DELETE_ITEM = 2;
private StockListApp() {}
public static void displayRootMenu() {
System.out.println("StockList Main Menu");
System.out.println("*******************");
System.out.println("1. Add an Item");
System.out.println("2. Delete an Item");
System.out.println("3. Update Item Price");
System.out.println("4. Update Item Quantity");
System.out.println("5. Update ReOrder Level");
System.out.println("6. Print Stock List");
System.out.println("7. Print ReOrder List");
System.out.println("8. Exit");
System.out.println("Select option [1-8] :>");
int choice = scanner.nextInt();
displaySubMenu(choice);
}
private static void displayAddItemMenu() {
// display menu and read next char from scanner.
}
private static void displayDeleteMenu() {
// display menu and read next char from scanner.
}
private static void displaySubMenu(int option) {
switch (option) {
case StockListApp.ADD_ITEM: {
displayAddItemMenu();
break;
}
case StockListApp.DELETE_ITEM: {
displayDeleteMenu();
break;
}
}
}
}