圖書管理系統
網頁樣本:圖書管理系統
*所有功能皆開放使用,但資料皆為測試用,不會儲存到實際資料庫。
*由於功能全部開放,故不提供登入功能。
一、使用工具
使用語言:Ruby
前端:Stimulus
資料庫:PostgreSQL
後端:Ruby on Rails
二、專案進度
第一階段(2026.01.16-2026.05.15)
2026.01.16-2026.01.23:確認用戶需求,建立 Rails 專案
用戶需求(最終版)
一、書
- 數量:每屆約 200 本
- 選項(Tag)
- 外部:圖書館的書、捐贈的書、老師的書
- 內部:班級的書
- 上下冊(同個 ISBN):掃完 ISBN 後,若對應到超過 1 本,需開放勾選正確書本
- 每年的變動
- 書可以被新增、淘汰、年級轉換
- 存放年級:0–6
- 掃描 ISBN
- 手機:相機掃描
- 電腦:手動輸入
- 盤點表
- 可選擇用什麼標籤分類
- 欄位包含:書名、目前狀態、ISBN 等
- 歷史紀錄:每一本書有自己的歷史(借閱)紀錄
二、人(儲存年級)
- 管理者
- 可以新增、刪除書本、人
- 管理書的標籤
- 也會借書、還書(無限制)
- 設定書的狀態、幫他人還書
- 印盤點表
- 學生(使用者)
- 借書、還書
- ID:班級+座號
- 借閱限制:一次一本書
- 每個人都有自己的借閱紀錄
三、屆數
- 每學年定期更改
- 學生:學年自動加一
- 老師:自己選擇改到哪個年級
- 書
- 老師的:跟管理者移動年級(在上一屆的歷史紀錄也要顯示)
- 圖書館的:歸還圖書館(資料刪除)
- 要可以按一個按鈕把圖書館的書刪掉
- 班級的:自動加一屆
- 捐贈的:詢問使用者如何處理
- 歷史紀錄:不隨著變動而刪除
- 儲存空間:按照屆數區分
- 進入頁面後最重要的操作:先選擇屆數,才能顯示正確的檔案資料
2026.01.24-2026.03.02:完成基本功能——四大頁面
- 書籍列表(主頁面)
- 書籍編輯
- 書籍檢視
- 書籍匯入
- 人員列表(主頁面)
- 人員編輯
- 人員檢視
- 人員匯入
- 屆數列表(主頁面)
- 屆數編輯
- 屆數檢視
- 借還書(主頁面)
- 借閱紀錄
2026.03.02-2026.03.19:第一次修正
整體
- 修正 406 Error(瀏覽器版本限制):從後端取消限制
借還書
借閱紀錄頁面
- 借閱紀錄由表格改為卡片顯示
- 修正重複書籍借閱失敗
- 重複書籍顯示資訊調整:移除狀態,改為屆數、來源(包含老師姓名)、登錄號(圖書館)
書籍管理
- 圖書館書籍新增登錄號欄位
表格/卡片頁面
- 卡片右上角新增:編輯按鈕、刪除按鈕
- 移除「檢視」書籍功能,改為直接進入編輯
- 篩選器分兩排(各兩個)
- 匯入按鈕改成白色
編輯頁面
- 顯示刪除按鈕
匯入頁面
- 總數、冊數、備註改為選填
- 手機顯示匯入結果改成卡片
- 勾選保留重複書籍後:總數加一,而非建立新檔案
- 總數預設為 1(原本是 0)
- 只有一筆不符合時:其他筆仍然可以新增
人員管理
表格/卡片頁面
- 卡片右上角新增:編輯按鈕、刪除按鈕
- 移除「檢視」人員功能,改為直接進入編輯
- 修正匯入按鈕消失問題
編輯頁面
- 修正:先選屆數後再勾管理員,選單會被清掉
屆數管理
- 建立所有屆數按鈕改白色
待製作
- 歸還圖書館書籍
- 屆數切換
- 登入
- 學生:使用學號登入
- 教師:使用學校 Google 帳號(若不行則改為個人)
- 盤點表
2026.03.20-2026.04.09:第二次修正
屆數管理
- 歸還圖書館書籍
- 屆數切換
登入
- 學生:直接用學號借書,借閱紀錄用搜尋學號的方式(未來可連結 Google Account)
- 教師:用 Google Account 登入(建立 branch 處理;參考
https://github.com/zquestz/omniauth-google-oauth2)
書籍管理
- 盤點表
- 匯出資料
- 總數 > 1 的書可同時有 > 1 個借閱人
- iPad 資料若溢出頁面則直接轉卡片顯示
- 調整左側欄位過大問題
- 狀態改為底色顯示
- 滑鼠移到標題時顯示 ISBN
人員管理
- 人員排序方式(依照學號座號、姓名等)
- 修正:人員匯入的重複資料消失
匯入頁面
- 修正解析檔案錯誤:
invalid byte sequence in UTF-8 - 匯入時不符合欄位顯示紅底,並可匯出
.csv(不符合的格子寫「請填寫」)
2026.04.10-2026.04.23:第三次修正
匯入頁面
- 開放匯入
.xlsx格式 - 匯入格式=匯出格式(包含:是否管理員、屆數)
借還書
- 登記借閱提示 3 秒後清除
- 借閱者姓名不可帶到老師的書裡;老師的書一定要有老師名字,匯入若無對應則顯示不符合
整體
- 已經套用的排序不要隨意清除
書籍管理
- 班級的書分成:留班不動、隨班移動
屆數管理
- 增加:屆數切換、歸還圖書館書籍按鈕
三、反思
這次是第一次和非家人的客戶合作,我學到了很多與人溝通的技巧,以及如何紀錄討論中所出現的各種問題,也認識並學習了 Ruby 這個語言。另外,也學到不要過度依賴 AI 產生的結果,要自己檢查無誤後,才可以保留內容並繼續做下一步,而不是全部都留下,導致最後很難維護。並且在遇到問題時,先自己檢查,不要一直請 AI 處理,否則容易會愈修問題愈多。