注意事項

題目

請根據 CSV 檔案,建立一個資料庫的 GUI 程式,讓符合帳密的登入者使用各項功能,具體要求請根據下列提示。

提示

  1. 建立一個 學號.db 的 sqlite 資料庫與 admin、log 資料表
  2. 請使用 create table if not exists 資料表名稱; 語法,避免重複建立資料表而產生錯誤,錯誤發生時的訊息為: =>資料庫連接或資料表建立失敗
  3. 讀取 accounts.csv 文字檔(滑鼠右鍵另存新檔),新增 admin 資料表紀錄,文字檔的第一筆紀錄為資料表的欄位名稱(role, acc, pwd),不可進資料表
  4. 請使用 insert into admin(role, acc, pwd) select 'admin', 'peter', '111' where not exists(select 1 from admin where role='admin' and acc='peter'); 範例新增紀錄,避免反覆執行程式時發生重複新增的情形,錯誤發生時的訊息為: =>新增帳號 {} 失敗
  5. 以下請以 tkinter 內建模組進行 UI 處理
  6. 視窗標題為"個人健康資訊工具",使用者登入畫面需有帳號、密碼二欄位輸入,確定與清除二按鈕,後端檢查帳密部分請建立 login(acc, pwd) 函數
  7. 合法登入後,根據不同角色顯示的 Menu控制項也要不同
    • 一般使用者 user 登入後的選單項目有 1BMI計算 2.最佳體重計算 3.離開
    • 管理者 admin 登入後的選單項目有 1.BMI計算 2.最佳體重計算 3.觀看log 4.離開
  8. 以下計算的輸入與輸出都要使用 GUI 方式處理,每個功能都要有 "計算" 與 "清除" 按鈕,計算的結果請放在畫面下方的訊息區
    • 標題:BMI計算
      公式 = weight(公斤) / height(公尺)2 (身高以公尺為單位)
    • 標題:最佳體重計算
      公式 = 22 * height(公尺)2 (身高以公尺為單位)
  9. 使用者登入、登出、選擇選單功能時,請將帳號"username"、時間"datetime"與動作"action"紀錄儲存於 log 資料表
  10. 觀看 log 功能建議使用 Treeview 控制項,後端使用 select 語法至少顯示 log 資料表的最後20筆紀錄
  11. 讀取檔案與進行資料庫操作時皆請進行例外處理,例如檔案找不到時顯示對話窗 "讀取失敗"
  12. 文字檔的讀取會利用到字串的 split 與 strip 方法
  13. 程式中會重複使用到的程式碼請定義為函數,例如:帳密登入、寫入log、BMI計算、最佳體重計算...等

請在完成下列題目後,於11/10 24:00 以前將檔案以學號命名並上傳至 Dropbox 雲端

解答