coincé sur la façon d'ajouter un article à une liste de stock java


J'ai créé un programme de contrôle de stock en java, mais je suis bloqué sur la partie d'entrée utilisateur. L'utilisateur doit pouvoir sélectionner "Ajouter un article" dans le menu principal de l'interface, et à partir de là, entrez un ID, une description, un Prix, une Quantité et un niveau de commande de l'article, puis choisissez s'il souhaite ajouter un autre article ou revenir au menu principal.

J'ai codé dans un ensemble de scanners pour lire l'entrée des attributs des articles, mais je ne sais pas comment les ajouter à ma liste de stock, et aussi pas certain du type de boucle que je devrais utiliser si l'utilisateur veut ajouter un autre élément ou revenir au menu principal.

Quelqu'un a une idée de la meilleure façon de résoudre un de ces problèmes? Tout conseil / solution serait très apprécié. Merci

CODE DE STOCK:

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() {}





}

Liste de stock:

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");
}



}

StockListInterface:

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() {}
}

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() {}
}
Author: adatapost, 2013-05-03

1 answers

Quelques commentaires d'abord:

Vos variables d'instance dans StockItem doivent être privées.

StockList a un constructeur public mais utilise une liste statique - cela signifie que toutes les instances de StockList partagent la même liste - sauf si c'est ce que vous voulez (ce que je suppose que ce n'est pas), vous devriez rendre cette liste non statique. Alors faites-en simplement une variable membre privée.

StockListInterface devrait également être une interface réelle si c'est votre intention.

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.
}

Remarque j' conseillerait d'utiliser deleteItemById car vous pouvez facilement fournir une méthode appelée deleteItem qui a pris un StockItem et addItem prend un StockItem comme paramètre et non comme chaîne. Ensuite, faites une implémentation (cela me semble exagéré ici, mais cela pourrait être argumenté de toute façon), si c'était moi, une simple classe de StockList suffirait ici.

public class StockListImpl implements StockList {

   private List<StockItem> stockList = new LinkedList<StockItem>();

   public void addItem(StockItem item) {
         stockList.add(item);
   }

  //etc...

Remarque vous devez utiliser des génériques pour éviter la coulée de type:

private List<StockItem> = new LinkedList<StockItem>();

De Cette façon, vous obtiendrez un itérateur qui renvoie StockItems et vous n'aurez pas jeter. Vous pouvez donc implémenter removeItemById comme ceci:

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;
    }
   }
}

Donc à votre question.

Vous voulez probablement utiliser un scanner je suppose-voir cette réponse

Comment utiliser la méthode readline () en Java?

Je pense que vous voulez une méthode pour créer chaque sous-menu et une autre méthode qui prend l'entrée des utilisateurs et décide quel menu afficher. Cela devrait être séparé de votre classe StockList.

Vous pouvez rendre cela aussi sophistiqué que vous le souhaitez, mais depuis Je suppose que vous êtes un débutant, un exemple de base serait :

Par exemple

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;
      }
    }

}

}

N'oubliez pas d'appeler scanner.close() lorsque l'utilisateur choisit de Quitter.

 1
Author: Woody, 2017-05-23 11:52:30