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

cnblogs 2024-06-17 08:09:02 阅读 74

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


上一篇: protobuf

下一篇: 【CICID】GitHub-Actions语法

本文标签

cursor    tk    row   


声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。