網頁樣本:圖書管理系統

*所有功能皆開放使用,但資料皆為測試用,不會儲存到實際資料庫。

*由於功能全部開放,故不提供登入功能。

一、使用工具

使用語言: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:第一次修正

整體

  1. 修正 406 Error(瀏覽器版本限制):從後端取消限制

借還書

借閱紀錄頁面

  1. 借閱紀錄由表格改為卡片顯示
  2. 修正重複書籍借閱失敗
  3. 重複書籍顯示資訊調整:移除狀態,改為屆數、來源(包含老師姓名)、登錄號(圖書館)

書籍管理

  1. 圖書館書籍新增登錄號欄位

表格/卡片頁面

  1. 卡片右上角新增:編輯按鈕、刪除按鈕
  2. 移除「檢視」書籍功能,改為直接進入編輯
  3. 篩選器分兩排(各兩個)
  4. 匯入按鈕改成白色

編輯頁面

  1. 顯示刪除按鈕

匯入頁面

  1. 總數、冊數、備註改為選填
  2. 手機顯示匯入結果改成卡片
  3. 勾選保留重複書籍後:總數加一,而非建立新檔案
  4. 總數預設為 1(原本是 0)
  5. 只有一筆不符合時:其他筆仍然可以新增

人員管理

表格/卡片頁面

  1. 卡片右上角新增:編輯按鈕、刪除按鈕
  2. 移除「檢視」人員功能,改為直接進入編輯
  3. 修正匯入按鈕消失問題

編輯頁面

  1. 修正:先選屆數後再勾管理員,選單會被清掉

屆數管理

  1. 建立所有屆數按鈕改白色

待製作

  1. 歸還圖書館書籍
  2. 屆數切換
  3. 登入
    1. 學生:使用學號登入
    2. 教師:使用學校 Google 帳號(若不行則改為個人)
  4. 盤點表

2026.03.20-2026.04.09:第二次修正

屆數管理

  1. 歸還圖書館書籍
  2. 屆數切換

登入

  1. 學生:直接用學號借書,借閱紀錄用搜尋學號的方式(未來可連結 Google Account)
  2. 教師:用 Google Account 登入(建立 branch 處理;參考 https://github.com/zquestz/omniauth-google-oauth2

書籍管理

  1. 盤點表
  2. 匯出資料
  3. 總數 > 1 的書可同時有 > 1 個借閱人
  4. iPad 資料若溢出頁面則直接轉卡片顯示
  5. 調整左側欄位過大問題
  6. 狀態改為底色顯示
  7. 滑鼠移到標題時顯示 ISBN

人員管理

  1. 人員排序方式(依照學號座號、姓名等)
  2. 修正:人員匯入的重複資料消失

匯入頁面

  1. 修正解析檔案錯誤:invalid byte sequence in UTF-8
  2. 匯入時不符合欄位顯示紅底,並可匯出 .csv(不符合的格子寫「請填寫」)

2026.04.10-2026.04.23:第三次修正

匯入頁面

  1. 開放匯入 .xlsx 格式
  2. 匯入格式=匯出格式(包含:是否管理員、屆數)

借還書

  1. 登記借閱提示 3 秒後清除
  2. 借閱者姓名不可帶到老師的書裡;老師的書一定要有老師名字,匯入若無對應則顯示不符合

整體

  1. 已經套用的排序不要隨意清除

書籍管理

  1. 班級的書分成:留班不動、隨班移動

屆數管理

  1. 增加:屆數切換、歸還圖書館書籍按鈕

三、反思

這次是第一次和非家人的客戶合作,我學到了很多與人溝通的技巧,以及如何紀錄討論中所出現的各種問題,也認識並學習了 Ruby 這個語言。另外,也學到不要過度依賴 AI 產生的結果,要自己檢查無誤後,才可以保留內容並繼續做下一步,而不是全部都留下,導致最後很難維護。並且在遇到問題時,先自己檢查,不要一直請 AI 處理,否則容易會愈修問題愈多。

回首頁  回上頁:程式