注意事項

題目

讀取檔案進行登入與新增資料表的測驗(main.py) 100%

        

提示

  1. 讀取文字檔 pass.txt進 dict ,用來進行登入使用者的帳密判斷
    		{"姓名":"張大同","密碼":"123456"}
    		
  2. 使用者成功登入後,隨即進行讀取文字檔 member.txt並使用字串的 split()方法,將之逐筆存入mydb.db的 sqlite3 資料庫
    		蔡英文,F,0937123456
    		韓國瑜,M,0936123456
    		柯文哲,M,0921123456
    		
  3. 建立資料表的語法
        create table if not exists member
        (
            mname   char(20)  not null,
            msex    char(1)   not null,
            mtel    char(15)  not null
        );
  4. 使用字串的strip()方法可去除其尾部的空白與換行符號
  5. 於資料庫語法之處請使用 try ... except 語法進行例外處理

請在完成上述題目後,於 24:00 以前將檔案存放在以學號命名的目錄內 ,壓縮學號目錄並上傳至 Dropbox 雲端

解答

main.py

import sqlite3
import ast

try:
  conn = sqlite3.connect('mydb.db')
  conn.execute('''
      create table if not exists member
      (
          mname   char(20)  not null,
          msex    char(1)   not null,
          mtel    char(15)  not null
      );
  ''')
except:
  print('=>資料庫連接或資料表建立失敗')

with open('pass.txt','r', encoding='UTF-8') as f:
    for line in f:
        passDict = ast.literal_eval(line.strip())

while True:
  username = input('請輸入姓名(直接Enter離開)):')
  if username=="": break
  password = input('請輸入密碼:')

  if not (username == passDict.get("姓名") and password == passDict.get("密碼")):
    print("=>帳密錯誤")
    continue

  with open('member.txt','r', encoding='UTF-8') as f:
      for line in f:
          recL = line.strip().split(',')
          try:
            conn.execute("insert into member(mname, msex, mtel) values \
              ('{}', '{}', '{}');".format(recL[0],recL[1],recL[2]))
          except:
            print('=>新增失敗')
          else:
            print('=>新增成功')

conn.commit()
conn.close()