--- 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)  ### 使用者故事卡片 #### 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) - 登入註冊:尚未登入的使用者點擊主畫面右上角的登入按鈕後所看到的畫面,使用者可在此頁面透過輸入帳號以及密碼並按下「登入」。若沒有帳號按註冊來註冊帳號。若帳號與密碼輸入錯誤,系統會顯示錯誤訊息並要求重新輸入。若使用者忘記密碼需要修改密碼時,可以點選「忘記密碼」按鈕來更改密碼。  ### 學生端視角 - 主要畫面:注意事項以及使用說明。  - 搜尋教室:使用者在此搜尋想租借的教室。  - 檢視教室:使用者選擇教室後以課表的方式呈現該教室目前可租借的時間。  - 歷史紀錄:使用者可以檢視自己以前借用的教室和時間。  - 個人資料:使用者可以檢視自己的個人資料並且更改名稱和密碼。  ### 系統管理員視角 - 確認申請:管理員可以確認使用者發出的租借申請。  - 管理教室:管理員可以新增和刪除教室,並管理教室的可容納人數和擁有的設備。  - 管理黑名單:管理員可以將使用者加入黑名單,或是將在黑名單的使用者移回一般使用者。  --- ## 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 個人使用而不卡頓。 | ---
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up