Smart Vending Machine
Submit solution
Points:
50
Time limit:
1.0s
Memory limit:
10M
Author:
Problem type
Allowed languages
Java 19
Description
某販賣機販售三種商品:
NormalItem 表示一般商品,DiscountItem 表示折扣商品,LimitedItem 表示限量商品。
請設計一個簡單的系統,管理你輸入的所有商品。
Requirements
第一行輸入商品數量 n,接著輸入 n 筆商品資料:
| 類型 | 格式 |
|---|---|
| NormalItem | NormalItem name price stock |
| DiscountItem | DiscountItem name price stock discount |
| LimitedItem | LimitedItem name price stock maxBuy |
接著輸入購買次數 m,最後輸入 m 個商品名稱,其中 1 <= name.length <= 12,先輸出商品資訊表格,再輸出購買結果,最後輸出總銷售數量。
NormalItem 並沒有Extra 欄位,而 DiscountItem 有 discount 為折扣後價格,LimitedItem 的 maxBuy 則為購買商品數量上限。
購買成功輸出:name SUCCESS。
若庫存不足,或 LimitedItem 已達 maxBuy 次數,輸出:name SOLDOUT。
最後輸出:TOTAL totalSold。
商品資訊表格格式如下:
|Name | Price| Extra| Stock|
|------------|------|------|------|
另外可先在父類別 Item 中使用格式化字串 printf 設計以下方法:
public void displayInfo() {
System.out.printf("|%-12s|%6d|%6s|%6d|%n", name, price, "-", stock);
}
/*
其中:
%-12s 字串靠左,寬度 12
%6d 整數靠右,寬度 6
%6s 字串靠右,寬度 6
%n 換行
*/
子類別則可透過 Override 改寫 displayInfo()。例如:
@Override
public void displayInfo() {
int discountPrice = (int)(getPrice() * discount);
System.out.printf("|%-12s|%6d|%6d|%6d|%n", getName(), getPrice(), discountPrice, getStock());
}
以下是程式碼框架提示:
class Item {
protected String name;
protected int price;
protected int stock;
/*
protected 的這三個屬性屬於父類別 Item,
但子類別 NormalItem、DiscountItem、LimitedItem
也可以直接使用。
*/
}
class NormalItem extends Item {
// NormalItem 沒有額外屬性
// 建構子只需要用 super(...) 呼叫父類別建構子
}
class DiscountItem extends Item {
private double discount;
// DiscountItem 比一般商品多一個 discount
// 建構子除了呼叫 super(...),還要設定 discount
// displayInfo() 需要 Override
// Extra 欄位要輸出折扣後價格
}
class LimitedItem extends Item {
private int maxBuy;
private int buyCount = 0;
// maxBuy 表示最多成功購買次數
// buyCount 用來記錄目前已成功購買幾次
// buy() 需要 Override
// 條件:stock > 0 且 buyCount < maxBuy 才能購買成功
}
Sample Input 1
3
NormalItem Water 20 10
DiscountItem Snack 50 5 0.8
LimitedItem Toy 100 2 5
3
Water Snack Toy
Sample Output 1
|Name | Price| Extra| Stock|
|------------|------|------|------|
|Water | 20| -| 10|
|Snack | 50| 40| 5|
|Toy | 100| 5| 2|
Water SUCCESS
Snack SUCCESS
Toy SUCCESS
TOTAL 3
Sample Input 2
4
NormalItem Tea 25 1
DiscountItem Cookie 60 0 0.7
LimitedItem Card 150 0 8
NormalItem Juice 40 2
4
Tea Cookie Card Tea
Sample Output 2
|Name | Price| Extra| Stock|
|------------|------|------|------|
|Tea | 25| -| 1|
|Cookie | 60| 42| 0|
|Card | 150| 8| 0|
|Juice | 40| -| 2|
Tea SUCCESS
Cookie SOLDOUT
Card SOLDOUT
Tea SOLDOUT
TOTAL 1
Sample Input 3
1
LimitedItem Toy 100 5 2
3
Toy Toy Toy
Sample Output 3
|Name | Price| Extra| Stock|
|------------|------|------|------|
|Toy | 100| 2| 5|
Toy SUCCESS
Toy SUCCESS
Toy SOLDOUT
TOTAL 2
Comments