資料庫實驗五:資料庫程式設計

财神给你送元宝發表於2024-06-16
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()

  

相關文章