---
# System prepended metadata

title: 軟體需求文件（SRD）

---

---

title: 軟體需求文件（SRD）

---

# 軟體需求文件（SRD）

## 專案資訊

- **專案名稱**：海大教室租借系統
- **撰寫日期**：2025/10/12
- **發展者**：吳致緯、黃星智、陳宥嘉、薛翔安、高翊誠

---

## 版次變更記錄

| 版次 |      變更項目       | 變更日期   |
| :----: |:-------------------:| :----------: |
| 0.1  |        初版         | 2025/10/12 |
| 0.2  | Iteration_1 後的修改 | 2025/11/23 |
| 0.3  | Iteration_2 後的修改 | 2025/11/29 |
| 0.4  | Iteration_3 前的修改 | 2025/12/19 |
| 0.5  |                     |            |
| 1.0  |                     |            |

---

## 目錄

1. [接受準則 (Acceptance Criteria)](#1.-接受準則（Acceptance-Criteria）)
2. [系統概述 (System Description)](#2.-系統概述（System-Description）)
3. [操作概念 (Operational Concepts)](#3.-操作概念（Operational-Concepts）)
4. [使用者故事地圖 (User Story Map)](#4.-使用者故事地圖（UserStroy-Map）)
5. [使用者介面分析 (User Interface Analysis)](#5.-使用者介面分析（User-Interface-Analysis）)
6. [功能需求 (Functional Requirements)](#6.-功能需求（Functional-Requirements）)
7. [非功能需求 (Non-Functional Requirements)](#7.-非功能需求（Non-Functional-Requirements）)

---

## 1. 接受準則（Acceptance Criteria）

- Clearly and properly stated（需求需清楚且適當的陳述）
- Complete（需求需完整）
- Consistent with each other（需求之間需維持一致性）
- Uniquely identified（每項需求有明確之識別）
- Appropriate to implement（需求需可被實作）
- Verifiable（需求需可被驗證）

---

## 2. 系統概述（System Description）

過去的教室租借方式往往需要填寫紙本表單，交到行政單位後再逐一比對是否與其他課程或活動衝堂。遇到人多或熱門教室，常常需要來回確認，甚至造成場地管理效率低落。除此之外，紙本資料保存不易，長期下來也會導致空間浪費與管理困難。

若能將這些流程電子化，讓教室租借申請、審核、公告都集中在同一個系統中，不但能快速比對使用時段，避免衝突，還能即時更新教室狀態，大幅減少行政人力與紙張成本，同時也達到環保與資訊透明化的效果。

本系統前端語言/框架是以React（Vite + Tailwind CSS）進行畫面呈現、租借表單、租借查詢。

後端語言/框架則是以 Python + Django 進行帳號登入、租借邏輯、資料處理與寄信通知，Redis 用來發送驗證碼，Aiven 遠端資料庫儲存資料，並部署在 Zeabur。

---

## 3. 操作概念（Operational Concepts）

#### 故事一：臨時開會的糾結倫

- 期末報告將近，糾結倫和同學臨時要討論專題，卻發現系辦借不到教室。
- 他打開「海大教室租借系統」，登入後點選「教室租借」。
- 選擇日期、時段、人數和器材後，系統立刻列出清單：「A205 教室，可容納 20 人，附投影機」。
- 糾結倫在申請用途欄位填「專題會議討論」後，點下「租借」按鈕，幾秒後收到通知：「申請已送出，待審核」。
- 隔天一早，他再登入就看到狀態變成「已核准」，專題會議順利展開。
- 下次進到系統裡，他到系統裡的歷史紀錄中，看到當初的借用歷史。

#### 故事二：管理員老川的早晨

- 每天早上，老川從從容容游刃有餘的打開系統後台，首頁就顯示「待審核申請 3 件」。
- 他點開其中一筆，看到糾結倫申請的 A205 教室，確認時段沒衝突後，點選「核准」。
- 系統立即更新教室狀態為「已租借」，並自動寄出通知信給申請人。
- 此外，他還將之前使用教室完沒把教室整理乾淨的使用者加入到黑名單。
- 接著，老川切到「教室管理」頁面，發現 B301 投影機壞了。
- 他在系統裡將該教室器材中的投影機取消勾選，讓學生知道該教室暫時沒有投影機使用，回頭就去社群發文做空股票。

#### 故事三：取消租借的喇叭詹

- 喇叭詹原本預約了週五下午的練舞室，但突然想到自己還沒退休，還在打 NBA。
- 他匆匆忙忙連滾帶爬的登入系統打開「我的租借」頁面，找到那筆申請後，直接按下「取消租借」按鈕。
- 系統馬上釋放該時段的教室，並更新狀態為「可租借」。
- 此外，他想改個名子和密碼，便到個人資料管理中更改。

---

## 4. 使用者故事地圖（UserStroy Map）

![使用者故事地圖](https://hackmd.io/_uploads/SJy6MsMQ-x.png)

### 使用者故事卡片

#### MS-US-01 管理教室資訊

- **故事**：作為一個管理員，我希望系統能讓使用者新增及刪除租借。
- **角色**：管理員
- **註記**：
    - 管理員可租借/取消教室
    - 當管理員執行操作時，系統跳出確認提醒（例如：「確定要刪除此教室嗎？」）
- **測試方法**：
    - 確保管理員可以正確新增與刪除教室
    - 確保資訊更改後管理員顯示的資訊有變化
    - 確認系統會在操作前跳出提示視窗

#### MS-US-02 以多種需求查詢教室

- **故事**：作為一個租借者，我希望可以設定各種需求去查詢我要的教室
- **角色**：未登入使用者
- **註記**：
    - 可依教室系館名、容納人數和器材進行搜尋
    - 提供下拉式選單顯示人數區間（例如：1–20人、21人以上）
    - 以名稱搜尋時搜尋框支援模糊比對（輸入「資工」可顯示資工館教室）
    - 找不到匹配教室時顯示「未搜尋到相關結果」
- **測試方法**：
    - 檢查下拉式選單是否正常顯示與運作
    - 搜尋結果是否正確反映人數條件
    - 輸入完整與部分系館名稱測試結果
    - 無結果時顯示提示訊息

#### MS-US-03 以學校信箱帳號登入/註冊

- **故事**：作為一個海大學生的租借者，我希望可以使用學校信箱註冊與登入平台
- **角色**：未登入使用者
- **註記**：
    - 僅接受校內信箱（例如：`@email.ntou.edu.tw`）
    - 註冊成功後寄出驗證信
    - 登入時支援「忘記密碼」功能
- **測試方法**：
    - 嘗試使用學校信箱與非學校信箱註冊
    - 驗證信是否成功寄出
    - 登入與忘記密碼流程是否可順利完成

#### MS-US-04 瀏覽選取教室詳細資訊

- **故事**：作為一個租借者，我希望可以清楚地了解每間教室的設備情形
- **角色**：未登入使用者
- **註記**：
    - 顯示教室硬體設備（投影機、電腦、冷氣等）
    - 顯示可容納人數與位置資訊
- **測試方法**：
    - 點擊教室後能正確顯示詳細資訊頁面
    - 檢查設備與平面圖是否完整載入

#### MS-US-05 查詢歷史借用紀錄

- **故事**：作為一個租借者，我希望可以查看自己過去借用過的教室
- **角色**：已登入使用者
- **註記**：
    - 顯示借用日期、教室名稱和租借用途
    - 可篩選時間區間或狀態
- **測試方法**：
    - 檢查歷史紀錄是否正確顯示
    - 篩選條件是否正常作用


#### MS-US-06 確認租借按鈕

- **故事**：作為一個租借者，我希望有個「確認租借」按鈕在填寫完租借資訊後確定預約
- **角色**：已登入使用者
- **註記**：
    - 按鈕需在填寫完整資訊後才可點擊
    - 點擊後跳出確認提示「是否確定租借此教室？」
- **測試方法**：
    - 確認表單未填完整時按鈕為灰色或不可用
    - 檢查確認提示與後續流程是否正確

#### MS-US-07 當預約變動時將通知寄送至註冊信箱

- **故事**：作為一個租借者，我希望更改預約後可以收到信箱通知
- **角色**：已登入使用者
- **註記**：
    - 成功/取消租借後自動寄送通知信
    - 成功租借通知內容包含租借教室、時間與歸還規範
    - 取消租借通知包含取消的日期以及教室
- **測試方法**：
    - 模擬租借流程確認郵件是否正確寄送
    - 檢查郵件內容資訊是否正確

#### MS-US-08 取消租借按鈕

- **故事**：作為一個租借者，我希望有個按鈕讓我取消已預約的租借
- **角色**：已登入使用者
- **註記**：
    - 按下後顯示確認訊息「確定要取消租借嗎？」
    - 系統更新租借狀態為「已取消」
- **測試方法**：
    - 按鈕是否僅顯示於尚未開始的租借
    - 取消後確認紀錄是否更新

#### MS-US-09 使用者更改名稱與密碼

- **故事**：作為一個已登入的使用者，我希望能夠修改我的使用者名稱與密碼，以維護帳號安全並更新個人資料
- **角色**：已登入使用者
- **註記**：
    - 使用者可於個人資料頁面修改使用者名稱
    - 修改密碼時需輸入原密碼進行驗證
    - 修改成功後顯示提示訊息「個人資料更新成功」
- **測試方法**：
    - 確認僅登入狀態下可進行修改
    - 輸入錯誤原密碼時系統應拒絕修改
    - 修改後重新登入可使用新密碼
    - 確認資料庫中使用者名稱與密碼已正確更新

#### MS-US-10 使用者更改名稱與密碼

- **故事**：作為一個管理員，我希望能夠將使用者加入或移出黑名單，以防止違規使用者繼續使用租借系統
- **角色**：管理員
- **註記**：
    - 管理員可在後台檢視所有使用者清單
    - 管理員可將使用者加入黑名單或解除黑名單
    - 被加入黑名單的使用者無法進行租借或預約操作
- **測試方法**：
    - 確認僅管理員角色可存取黑名單管理功能
    - 使用者加入黑名單後無法建立新租借
    - 解除黑名單後功能恢復正常
    - 確認黑名單狀態於資料庫中正確更新

---

## 5. 使用者介面分析（User Interface Analysis）

- 登入註冊：尚未登入的使用者點擊主畫面右上角的登入按鈕後所看到的畫面，使用者可在此頁面透過輸入帳號以及密碼並按下「登入」。若沒有帳號按註冊來註冊帳號。若帳號與密碼輸入錯誤，系統會顯示錯誤訊息並要求重新輸入。若使用者忘記密碼需要修改密碼時，可以點選「忘記密碼」按鈕來更改密碼。

![登入頁面](https://hackmd.io/_uploads/BkblyQdZ-g.jpg)

### 學生端視角

- 主要畫面：注意事項以及使用說明。

![主畫面](https://hackmd.io/_uploads/H1a-17d--x.jpg)

- 搜尋教室：使用者在此搜尋想租借的教室。

![進階搜尋](https://hackmd.io/_uploads/S1QX1QO--x.jpg)

- 檢視教室：使用者選擇教室後以課表的方式呈現該教室目前可租借的時間。

![租借教室](https://hackmd.io/_uploads/H1m8J7OZbl.jpg)

- 歷史紀錄：使用者可以檢視自己以前借用的教室和時間。

![歷史紀錄](https://hackmd.io/_uploads/BynPy7O--g.jpg)

- 個人資料：使用者可以檢視自己的個人資料並且更改名稱和密碼。

![個人資料](https://hackmd.io/_uploads/BJ1g9cfXWg.jpg)

### 系統管理員視角

- 確認申請：管理員可以確認使用者發出的租借申請。

![租借申請](https://hackmd.io/_uploads/SJYabQuZbx.jpg)

- 管理教室：管理員可以新增和刪除教室，並管理教室的可容納人數和擁有的設備。

![管理教室](https://hackmd.io/_uploads/rk2XM7OWWe.jpg)

- 管理黑名單：管理員可以將使用者加入黑名單，或是將在黑名單的使用者移回一般使用者。

![黑名單](https://hackmd.io/_uploads/HkHRt5Mm-l.jpg)

---

## 6. 功能需求（Functional Requirements）

### 登入介面

| 功能編號 | 功能名稱     |                         功能說明                            |
| :-------: | :--------:  | :--------------------------------------: |
| FR-LG-01 | 註冊 | 使用者可以用學校信箱來註冊帳號密碼以登入系統。  |
| FR-LG-02 | 登入 | 使用者可以根據註冊的帳號密碼登入系統。 |
| FR-LG-03 | 忘記密碼 | 系統會發送驗證碼至註冊時的電子郵件，使用者驗證碼輸入無誤後即可修改密碼。 |

### 主畫面

| 功能編號  |   功能名稱   | 功能說明 |
| :--------: | :--------: | :--------: |
| FR-MP-01 |    搜尋     | 使用者可以搜尋教室。 |
| FR-MP-02 |系統注意事項以及使用說明 | 教室借用規則以及步驟。 |

### 借用教室頁面

| 功能編號 | 功能名稱 | 功能說明 |
| :--------: | :--------: | :--------: |
| FR-CR-01 |  教室資訊  | 瀏覽選取教室詳細資訊。 |
| FR-CR-02 |    租借    | 使用者可以租借教室。|
| FR-CR-03 |    編輯    | 使用者可以取消租借教室。 |
| FR-CR-04 |    通知    | 使用者成功租借後會寄信通知，並在租借時間前提醒使用者。 |
| FR-CR-05 | 檢視歷史紀錄 | 使用者可以看到過往的租借紀錄。 |
| FR-CR-06 | 申請審核 | 使用者透過申請審核來讓管理者核准或是駁回此次借用。 |

### 管理

| 功能編號 | 功能名稱 | 功能說明 |
| :---: | :--------: | :--------: |
| FR-MG-01 |  管理教室  | 管理員新增/刪除可租借教室。  |
| FR-MG-02 | 更新教室資訊 | 更新教室器材和容納人數。    |
| FR-MG-03 | 黑名單系統 | 禁止未按時歸還者租借。    |
| FR-MG-04 | 核准/駁回申請 | 可以核准或是駁回使用者的借用申請。 |
| FR-MG-05 | 修改個人資料 | 使用者可以修改使用者名稱和密碼。 |

---

## 7. 非功能需求（Non-Functional Requirements）

| 功能編號  |                          功能說明                           |
| :------: |  :----------------------------------------------------:   |
| NFR-01   |  系統平台網頁須以 RWD 概念設計，並且能在手機和電腦平台上正常使用。   |
| NFR-02   |         教室搜尋需於7秒內回傳結果，並呈現完整搜尋頁面。           |
| NFR-03   |          系統應能承受同時 50 個人使用而不卡頓。                 |

---
