2、設計一個小型的資料庫應用程式
可利用現有的資料庫,也可重新設計資料庫。
要求實現資料的增加、刪除、修改、查詢的功能。
在報告中描述清楚使用的資料庫、資料表及實現的功能(要求截圖,並附
程式碼)
設計一個小型的資料庫應用程式 資料庫名:student 表名:infor 欄位: Sno:學號 Sname:姓名 Ssex:性別 Sage:年齡 Smaj:專業 Srew:獎項 功能實現 1. 新增學生資訊:向表中插入學生的學號、姓名、性別、年齡、專業、獎項。 2. 修改學生資訊:根據學號修改學生的姓名、性別、年齡、專業、獎項。 3. 刪除學生資訊:根據學號刪除學生的所有資訊。 4. 查詢學生資訊:根據學號查詢學生的所有資訊。 程式實現(Python連線MySQL) import pymysql # python連線mysql的驅動 import tkinter as tk # 圖形化介面的模組 import tkinter.ttk as ttk import tkinter.messagebox # 要使用messagebox先要匯入模組 table = "infor" # 建立連線,在每個按鈕的函式里建立遊標 db = pymysql.connect(host="192.168.163.241", user="root", passwd="123456", db="student", port=3306, charset='utf8') # 清空輸入框內容 def clearAll(): entryId.delete(0, 'end') entryName.delete(0, 'end') entryMaj.delete(0, 'end') entryRew.delete(0, 'end') spinboxSex.delete(0, 'end') spinboxAge.delete(0, 'end') # 根據學號進行查詢 def search(): cursor = db.cursor() student_id = entryId.get() if student_id != '': try: student_id = int(student_id) sql = "SELECT *, Srew FROM {} WHERE Sno = {}".format(table, student_id) cursor.execute(sql) result = cursor.fetchone() if result is not None: data = list(result) tk.messagebox.showinfo(title='Info', message=tuple(data)) else: tk.messagebox.showerror(title='錯誤!', message='查無此人!請重新輸入!') except: tk.messagebox.showerror(title='錯誤!', message='輸入錯誤!請重新輸入!') clearAll() cursor.close() # 修改 資訊 def alter(): cursor = db.cursor() id = entryId.get() name = entryName.get() sex = spinboxSex.get() age = spinboxAge.get() maj = entryMaj.get() rew = entryRew.get() if (id != ''): try: id = int(id) sql = "select * from {} where Sno = {}".format(table, id) cursor.execute(sql) if (cursor.fetchone() != None): sql1 = "update infor set Sname = '{}', Ssex = '{}', Sage = {}, Smaj = '{}', Srew = '{}' where Sno = {}".format( name, sex, age, maj, rew, id) cursor.execute(sql1) tk.messagebox.showinfo(title='Info', message='修改成功') else: tk.messagebox.showerror(title='錯誤!', message='查無此人!請重新輸入!') except: tk.messagebox.showerror(title='錯誤!', message='輸入錯誤!請重新輸入!') else: tk.messagebox.showerror(title='錯誤!', message='學號不能為空!請重新輸入!') db.commit() clearAll() cursor.close() # 根據學號 進行刪除 def delete(): cursor = db.cursor() id = entryId.get() if (id != ''): try: id = int(id) sql = "select * from {} where Sno = {}".format(table, id) cursor.execute(sql) if (cursor.fetchone() != None): sql1 = "delete from {} where Sno = {}".format(table, id) cursor.execute(sql1) sql2 = "delete from {} where Sno = {}".format(table, id) cursor.execute(sql2) tk.messagebox.showinfo(title='Info', message='刪除成功') else: tk.messagebox.showerror(title='錯誤!', message='查無此人!請重新輸入!') except: tk.messagebox.showerror(title='錯誤!', message='輸入錯誤!請重新輸入!') else: tk.messagebox.showerror(title='錯誤!', message='學號不能為空!請重新輸入!') db.commit() clearAll() cursor.close() # !!!python對MySQL進行資料的插入、更新和刪除之後需要commit,資料庫才會真的有資料操作。插入內容 def insert(): cursor = db.cursor() id = entryId.get() name = entryName.get() sex = spinboxSex.get() age = spinboxAge.get() maj = entryMaj.get() rew = entryRew.get() if (id != ''): id = int(id) sql = "select * from {} where Sno = {}".format(table, id) cursor.execute(sql) if (cursor.fetchone() != None): tk.messagebox.showerror(title='錯誤!', message='已有此人!請重新輸入!') else: sql1 = "insert into infor (Sno, Sname, Ssex, Sage, Smaj, Srew) values({}, \"{}\", \"{}\", {}, \"{}\", \"{}\")".format( id, name, sex, age, maj, rew) cursor.execute(sql1) tk.messagebox.showinfo(title='Info', message='新增成功!') else: tk.messagebox.showerror(title='錯誤!', message='學號不能為空!請重新輸入!') db.commit() clearAll() cursor.close() # 控制元件的佈局 windows = tk.Tk() windows.title('學生資訊管理') # 第1行控制元件 lblId = tk.Label(text='學號:') lblId.grid(row=0, column=0) entryId = tk.Entry() entryId.grid(row=0, column=1) lblName = tk.Label(text='姓名:') lblName.grid(row=0, column=2) entryName = tk.Entry() entryName.grid(row=0, column=3) # 第2行控制元件 lblSex = tk.Label(text='性別:') lblSex.grid(row=1, column=0) spinboxSex = tk.Spinbox(windows, value=('男', '女')) spinboxSex.grid(row=1, column=1) lblAge = tk.Label(text='年齡:') lblAge.grid(row=1, column=2) spinboxAge = tk.Spinbox(windows, from_=15, to=40) spinboxAge.grid(row=1, column=3) # 第3行控制元件 lblMaj = tk.Label(text='專業:') lblMaj.grid(row=2, column=0) entryMaj = tk.Entry() entryMaj.grid(row=2, column=1) lblRew = tk.Label(text='獎勵:') lblRew.grid(row=2, column=2) entryRew = tk.Entry() entryRew.grid(row=2, column=3) # 分割線 ttk.Separator(orient=tk.HORIZONTAL).grid(row=3, column=0, columnspan=6, pady=10, sticky=tk.W + tk.E) # 按鈕控制元件 btnSer = tk.Button(text='查詢', command=search) btnSer.grid(row=4, column=0) btnIdx = tk.Button(text='插入', command=insert) btnIdx.grid(row=4, column=1) btnRep = tk.Button(text='修改', command=alter) btnRep.grid(row=4, column=2) btnDel = tk.Button(text='刪除', command=delete) btnDel.grid(row=4, column=3) windows.mainloop()