---
# System prepended metadata

title: hw03 report

---

# hw03 report
## 組員名單 : 紀軒宇、王芷鈴、楊昊翰、張凱博

## How to run it
- 環境
    - Python 3.11.3
- 步驟
    - 在程式所在處(hw3/Code)打開 cmd(Windows)/terminal(macOS)
    - 輸入 ```python hw3.py```
- 如果想要有隨機的輸出結果，可以在 `hw3.py` 中 line 5 將 random.seed() 中的數字設為 None
    - ![](https://hackmd.io/_uploads/H1HwIIzSh.png)


## Design & UML
我們的程式主要在模擬一個 VideoStore 的運作，主要的 class 及之間的關係如下
### 主要類別
- VideoStoreSimulator
    - 這個 class 主要負責模擬 VideoStore 的運作，可以設定指定數量的隨機 Customer 及 Video，模擬指定天數的營業狀況，並產生模擬報告，VideoStoreSimulator使用 CustomerFactory 及 VideoFactory 創造隨機的 Customer 及 Video 作為 VideoStore 的內部屬性
- VideoFactory
    - 這個 class 負責依據傳入的參數內容產生不同類型的 Video 物件，各 Video 物件會在下方說明
- Video
    - 這個類別負責一個影片的相關行為，如計價及回傳分類的功能
    - 這個類別有一些 abstract method 並強制繼承此類別的 subclass 實做這些 method
    - 在系統中繼承此類別的子類別如下：
    「NewReleaseVideo」, 「DramaVideo」, 「ComedyVideo」, 「RomanceVideo」, 「HorrorVideo」
        - 這些子類別繼承自 Video 並 override 其中的一些 method，讓這些子類別可以用多型的方式做呼叫，並產生不同的行為
- CustomerFactory
    - 這個 class 負責依據傳入的參數內容產生不同類型的 Video 物件，各 Video 物件會在下方說明
- Customer
    - 這個類別負責一個顧客在 VideoStore 的行為，比如租/還影片、選擇租借影片及天數等
    - 這個類別有一些 abstract method 並強制繼承此類別的 subclass 實做這些 method
    - 在系統中繼承此類別的子類別如下：
    「BreezyCustomer」, 「HoarderCustomer」, 「RegularCustomer」
        - 這些子類別繼承自 Customer 並 override 其中的一些 method，讓這些子類別可以用多型的方式做呼叫，並產生不同的行為
- Rental
    - 這個 class 負責記錄各筆租借紀錄相關行為，比如判斷是否租借已到期，每晚將剩餘天數減少等
- VideoStore
    - 這個 class 主要負責管理店的營業相關行為，比如加入新影片/顧客、店的租/還片等操作
### 關係
如 UML 所示，可見 hw3\hw3_uml.drawio.png

### UML 
![](https://hackmd.io/_uploads/rJ3k38MSh.png)