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

There are no comments at the moment.