# Final Report ## 組別一 ## 組員名單 40747024S 于子緯 40847011S 高子翔 40847015S 紀軒宇 40847024S 連庭萱 ## 系統名稱 考古題 Hub ## 系統內容簡介 「考古題 Hub」為一個開放考古題管理平台,提供國立臺灣師範大學在校生(以下簡稱學生)在此平台分享、交流各門課的歷屆考題、作業及解答。 學生可以透過學號認證註冊此系統,在平台上瀏覽、上傳和下載考古題。 除了考古題之外,希望能為平台增加互動功能,如留言、評分考古題。另外平台也會計算使用者的貢獻,並建立排行榜以鼓勵同學使用。 我們規劃的系統分為以下四種使用者: 1. 平台開發者 (admin) 在平台內擁有最高的權限,並且可以設定特定帳號為管理員。 2. 管理員 (editor) 擁有管理平台公布欄、考古題內容的權限。 3. 一般使用者 (user) 一般使用者,註冊帳號後可上傳及評論考古題。 4. 訪客 (visitor) 未登入、無帳號之使用者,僅可瀏覽考古題內容,無法留言、上傳、評分考古題等。 ## 系統需求分析 ### 系統架構圖    ### 功能性需求 + 登入頁面 + 無論權限身份統一由登入頁面進行登入及註冊。 + 綁定 Google 帳號(gapps)進行註冊登入。 + 首頁 + 公布欄:放置系統公告。 + 可直接在公布欄頁面進行新增及編輯。 + 排行榜:顯示貢獻值排名。 + 考古題介面 + 瀏覽所有的考古題。 + 新增考古題。 + 在考古題下留言、評分。 + 管理使用者介面 + 僅平台開發者可使用。 + 列出所有使用者,並可以在此調整某個使用者的角色權限,以達到新增管理員的功能。 {%hackmd @examhub/function_permission_table %} <!-- 功能權限表 --> ## 資料主體分析 {%hackmd @examhub/data_analysis %} <!-- 資料主體分析 --> ## 系統功能實作規劃 {%hackmd @examhub/flow_chart %} <!-- 流程圖 --> {%hackmd @examhub/user_interface %} <!-- 介面設計 --> ### 連接資料庫部分之技術 平台系統透過 Node.js 開發(express),並連接 mysql 資料庫。 <!-- 連接資料庫部分之技術 --> ## 系統介面使用說明 {%hackmd @examhub/manual_report %} ## 系統內容功能詳細敘述 1. 登入註冊採第三方(Google OAuth)登入,並限制僅 G Suite for NTNU 帳號可使用。 2. 留言回覆功能依實用性最終決定設置回覆層數限制。 3. 考古題分類為方便管理限制為僅 Editor 和 Admin 可使用。 4. 公告之發布修改刪除所有 Editor 和 Admin 皆可使用,不限制需為原發布者 5. 考古題的發布所有使用者(登入)皆可使用,管理身分可修改刪除。 6. 所有登入使用者皆可使用評分功能 ## 系統功能評估 ### 完成度 於當前網頁介面上出現之所有功能皆可正常使用。 ### 可擴展改進部份 1. 在前端驗證使用者輸入的資料,以增進使用者體驗 2. 新增考古題檔案上傳功能,增加便利性 3. 將考古題的權限修改為原發布者可修改刪除,管理身分可刪除但不可修改他人上傳之考古題。較符合使用上的合理性 4. 貢獻值增加扣分機制,避免有人大量上傳無用檔案 ## 實際工作分配及工作份量比重 | 組員 | 工作內容 | | ---------------------- | ------------------------ | | 于子緯 | 網頁介面開發 | | 紀軒宇、連庭萱、高子翔 | 伺服器端程式開發 | | 所有人 | 資料庫設計與連接、規格書撰寫 | ## 個人心得 ### 于子緯 以前建置系統都使用 ORM,這次嘗試不使用 ORM,在對資料庫做查詢時可以清楚地了解下了什麼 SQL 語句,以及 escaping 的處理。 缺點是 schema 跟後端的 model 是分離的,管理上比較麻煩。 這次的專題算是蠻順利的把大部分功能實現了,有些功能是寫了之後才發現可以讓資料庫去 handle 的,例如 createTime 這個欄位可以由資料庫生成,也有一些功能是後來沒有用資料庫做的,例如權限控管。 還有一點就是在開發中有時會需要調整 schema,但可能會跟原始的資料庫資料不相容,查了一下發現開發實戰中會用一些叫做 migration 的工具來處理,我想這是我接下來可以研究的東西。 ### 高子翔 第一次做這種專案,整個過程都比我想像的順暢許多,可能是因為有大佬在幫忙。也因為這次的專案,熟悉了一些對於 GitHub 的操作,也會用 VScode 的 LiveShare ,還有運用 draw.io 來繪製許多圖表等等。 其實這次專案跟 SQL 查詢語句其實沒有太大關連,更多的是怎麼寫出前後端的連接。製作的過程也發現了 schema 設定對於整個專案的製作有相當大的影響,無論是初始值還是 not null 跟 check 的設定。相信這次的經驗在之後修軟工時,會有莫大的幫助。 ### 紀軒宇 這一次的期末專案算是第一次跟同學一起完成一份專案,從整份 專案開始構思要做甚麼主題的東西,到大家分工完成各自負責的部分,最後完成這份專案的過程中,除了將上課所用的知識應用在專案中外,還學習到許多在多人要一起開發時經常使用的平台--GitHub 的許多操作,像是開 branch、發布 pull request 等,相信在未來也需要多人一同開發軟體的課程中會有非常大的幫助,最後,謝謝教授及助教這一學期的帶領。 ### 連庭萱 不是第一次協作專案,但確實是第一個完成度這麼高的專案。雖然是資料庫的專題,但同時也學到了不少開發相關的東西。原本以為一些複雜的 SQL 語法在實作上的實用性沒有那麼高,但實際寫起來發現雖然簡單的語法也可以作到,但確實多了一些工具可以用會讓事情簡單很多,像是如果用 transaction 的方式去處理貢獻值的加減會滿麻煩的,但用 trigger 可以在一個地方一次搞定。最後,希望考古題 Hub 能夠被我們再修到真的可以用。
×
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