Main.java 改
package Stock;public class Main {
private static StockList stockList = new StockList(); public static void main(String[] args) {
StockItem temp = new StockItem("bread", 0.86, 100);
stockList.addStock(temp); temp = new StockItem("cake", 1.10, 7);
stockList.addStock(temp); temp = new StockItem("car", 12.50, 2);
stockList.addStock(temp); temp = new StockItem("chair", 62.0, 10);
stockList.addStock(temp); temp = new StockItem("cup", 0.50, 200);
stockList.addStock(temp); temp = new StockItem("door", 72.95, 4);
stockList.addStock(temp); temp = new StockItem("juice", 2.50, 36);
stockList.addStock(temp); temp = new StockItem("phone", 96.99, 35);
stockList.addStock(temp); temp = new StockItem("towel", 2.40, 80);
stockList.addStock(temp); temp = new StockItem("vase", 8.76, 40);
stockList.addStock(temp); System.out.println(stockList); for (String s : stockList.Items().keySet()) {
System.out.println(s);
}
}
}
輸出結果:
Stock List
bread : $0.86 There are 100 items in stock. Total value of items: 86.00
cake : $1.1 There are 7 items in stock. Total value of items: 7.70
car : $12.5 There are 2 items in stock. Total value of items: 25.00
chair : $62.0 There are 10 items in stock. Total value of items: 620.00
cup : $0.5 There are 200 items in stock. Total value of items: 100.00
door : $72.95 There are 4 items in stock. Total value of items: 291.80
juice : $2.5 There are 36 items in stock. Total value of items: 90.00
phone : $96.99 There are 35 items in stock. Total value of items: 3394.65
towel : $2.4 There are 80 items in stock. Total value of items: 192.00
vase : $8.76 There are 40 items in stock. Total value of items: 350.40
Total stock value 5157.55
bread
cake
car
chair
cup
door
juice
phone
towel
vase
public Map<String, StockItem> Items() {
return Collections.unmodifiableMap(list);
}
這個呈現方式就跟著 list,看是用 HashMap<>()
或 LinkedHashMap<>()
或其他
StockList.java 改
package Stock;import java.util.Collections;
import java.util.HashMap;
import java.util.Map;public class StockList {
private final Map<String, StockItem> list; public StockList() {
this.list = new HashMap<>();
} public int addStock(StockItem stockItem) {
if (stockItem != null) {
// check if already have stockItem, jf get null just pass stockItem of parameter
StockItem inStock = list.getOrDefault(stockItem.getName(), stockItem);
// if there are already stocks on this item, adjust the quantity
if (inStock != stockItem) {
stockItem.adjustStock(inStock.quantityInStock());
}
list.put(stockItem.getName(), stockItem);
return stockItem.quantityInStock();
}
return 0;
} public int sellStock(String item, int quantity) {
StockItem inStock = list.getOrDefault(item, null);
if ((inStock != null) && (inStock.quantityInStock() >= quantity) && (quantity > 0)) {
inStock.adjustStock(-quantity);
return quantity;
}
return 0;
} public StockItem getStockItem(String key) {
return list.get(key);
} public Map<String, StockItem> Item() {
return Collections.unmodifiableMap(list);
} @Override
public String toString() {
String s = "\nStock List\n";
double totalCost = 0.0;
for (Map.Entry<String, StockItem> item : list.entrySet()) {
StockItem stockItem = item.getValue(); double itemValue = stockItem.getPrice() * stockItem.quantityInStock(); s = s + stockItem + " There are " + stockItem.quantityInStock() + " items in stock. Total value of items: ";
s = s + String.format("%.2f", itemValue) + "\n";
totalCost += itemValue;
} return s + " Total stock value " + String.format("%.2f", totalCost);
}
}
輸出結果:
Stock List
door : $72.95 There are 4 items in stock. Total value of items: 291.80
bread : $0.86 There are 100 items in stock. Total value of items: 86.00
car : $12.5 There are 2 items in stock. Total value of items: 25.00
phone : $96.99 There are 35 items in stock. Total value of items: 3394.65
towel : $2.4 There are 80 items in stock. Total value of items: 192.00
cake : $1.1 There are 7 items in stock. Total value of items: 7.70
chair : $62.0 There are 10 items in stock. Total value of items: 620.00
vase : $8.76 There are 40 items in stock. Total value of items: 350.40
juice : $2.5 There are 36 items in stock. Total value of items: 90.00
cup : $0.5 There are 200 items in stock. Total value of items: 100.00
Total stock value 5157.55
door
bread
car
phone
towel
cake
chair
vase
juice
cup
這邊改回 HashMap<>()
順序也跟著改變
改完記得改回去 LinkedHashMap<>()
StockItem.java 改
StockList.java 改
Basket.java 改
Main.java 改
package Stock;public class Main {
private static StockList stockList = new StockList(); public static void main(String[] args) {
StockItem temp = new StockItem("bread", 0.86, 100);
stockList.addStock(temp); temp = new StockItem("bread", 0.2, 500);
stockList.addStock(temp);// temp = new StockItem("cake", 1.10, 7);
// stockList.addStock(temp);
//
// temp = new StockItem("car", 12.50, 2);
// stockList.addStock(temp);
//
// temp = new StockItem("chair", 62.0, 10);
// stockList.addStock(temp);
//
// temp = new StockItem("cup", 0.50, 200);
// stockList.addStock(temp);
//
// temp = new StockItem("door", 72.95, 4);
// stockList.addStock(temp);
//
// temp = new StockItem("juice", 2.50, 36);
// stockList.addStock(temp);
//
// temp = new StockItem("phone", 96.99, 35);
// stockList.addStock(temp);
//
// temp = new StockItem("towel", 2.40, 80);
// stockList.addStock(temp);
//
// temp = new StockItem("vase", 8.76, 40);
// stockList.addStock(temp); System.out.println(stockList);// for (String s : stockList.Items().keySet()) {
// System.out.println(s);
// }
}
}
輸出結果:
Stock List
bread : $0.2 There are 600 items in stock. Total value of items: 120.00
Total stock value 120.00
測試重複加入,有無正確顯示,商品要累加,總價格以新價格為主
Main.java 改
package Stock;public class Main {
private static StockList stockList = new StockList(); public static void main(String[] args) {
StockItem temp = new StockItem("bread", 0.86, 100);
stockList.addStock(temp); temp = new StockItem("bread", 0.2, 500);
stockList.addStock(temp); temp = new StockItem("cake", 1.10, 7);
stockList.addStock(temp); temp = new StockItem("car", 12.50, 2);
stockList.addStock(temp); temp = new StockItem("chair", 62.0, 10);
stockList.addStock(temp); temp = new StockItem("cup", 0.50, 200);
stockList.addStock(temp); temp = new StockItem("door", 72.95, 4);
stockList.addStock(temp); temp = new StockItem("juice", 2.50, 36);
stockList.addStock(temp); temp = new StockItem("phone", 96.99, 35);
stockList.addStock(temp); temp = new StockItem("towel", 2.40, 80);
stockList.addStock(temp); temp = new StockItem("vase", 8.76, 40);
stockList.addStock(temp);
// for (String s : stockList.Items().keySet()) {
// System.out.println(s);
// } Basket zedBasket = new Basket("Zed");
sellItem(zedBasket, "car", 1);
System.out.println(zedBasket); sellItem(zedBasket, "car", 1);
System.out.println(zedBasket);
sellItem(zedBasket, "car", 1);
sellItem(zedBasket, "something", 1);
System.out.println(zedBasket); sellItem(zedBasket, "juice", 4);
sellItem(zedBasket, "cup", 12);
sellItem(zedBasket, "bread", 1);
System.out.println(zedBasket); System.out.println(stockList);
} public static int sellItem(Basket basket, String item, int quantity) {
// retrieve the item from stock list
StockItem stockItem = stockList.getStockItem(item);
if (stockItem == null) {
System.out.println("We don't sell " + item);
return 0;
} if (stockList.sellStock(item, quantity) != 0) {
basket.addToBasket(stockItem, quantity);
return quantity;
} return 0;
}
}
輸出結果:
Shopping basket Zed contains 1 items
car : $12.5. 1 purchased
Total cost 12.5
Shopping basket Zed contains 1 items
car : $12.5. 2 purchased
Total cost 25.0
We don’t sell something
Shopping basket Zed contains 1 items
car : $12.5. 2 purchased
Total cost 25.0
Shopping basket Zed contains 4 items
bread : $0.2. 1 purchased
car : $12.5. 2 purchased
juice : $2.5. 4 purchased
cup : $0.5. 12 purchased
Total cost 41.2
Stock List
bread : $0.2 There are 599 items in stock. Total value of items: 119.80
cake : $1.1 There are 7 items in stock. Total value of items: 7.70
car : $12.5 There are 0 items in stock. Total value of items: 0.00
chair : $62.0 There are 10 items in stock. Total value of items: 620.00
cup : $0.5 There are 188 items in stock. Total value of items: 94.00
door : $72.95 There are 4 items in stock. Total value of items: 291.80
juice : $2.5 There are 32 items in stock. Total value of items: 80.00
phone : $96.99 There are 35 items in stock. Total value of items: 3394.65
towel : $2.4 There are 80 items in stock. Total value of items: 192.00
vase : $8.76 There are 40 items in stock. Total value of items: 350.40
Total stock value 5150.35
買東西,看看庫存跟購物清單能否正確顯示
測試了購買超過庫存數量
還測試了購買不存在的商品