数据库实验五:数据库编程

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()