主要实验 学生的添加删除和修改,并将每次添加删除或修改的数据保存到数据库中,并通过遍历数据库将信息显示出来
源码在这里
import tkinter as tk
from tkinter import scrolledtext
import pymysql
import tkinter.messagebox
from tkinter import END
conn = pymysql.connect(host='127.0.0.1', user='root', password='123456', database='mysql', charset='UTF8MB4')
cur = conn.cursor()
# 定义执行函数
def doSQL(sql):
cur.execute(sql)
conn.commit()
sql2 = 'create database if not exists student;'
doSQL(sql2)
sql3 = 'use student;'
doSQL(sql3)
# 创建表
sql1 = ''' create table if not exists student(
id char(100) primary key,
name char(20) not null,
sex char(2) not null,
tel char(100) not null,
address char(100))engine=innodb default charset=UTF8MB4;'''
doSQL(sql1)
# 定义添加函数
def insert_105():
# 定义一个弹窗
a = tk.messagebox.askquestion(title='提示窗', message='你确定要添加么?')
if a == 'yes':
try:
sql2 = 'insert into student(id,name,sex,tel,address) values(%s,%s,%s,%s,%s)'
cur.execute(sql2, (id.get(), name.get(), sex.get(), tel.get(), address.get()))
conn.commit()
tk.messagebox.showinfo(title='提示窗', message='添加成功')
print('添加成功')
'''t.insert('end', ' ' + id.get() + '')
t.insert('end', ' ' + name.get() + ' ')
t.insert('end', ' ' + sex.get() + ' ')
t.insert('end', ' ' + tel.get() + ' ')
t.insert('end', ' ' + address.get())
t.insert('end', '\n')
t.insert('end', '_' * 76)'''
except Exception as e:
# 回滚
conn.rollback()
print('添加失败,已经有该学生存在')
tk.messagebox.showinfo(title='提示窗', message='添加失败,已经有该学生存在')
clear_105()
show_105()
# 定义删除函数
def delete_105():
a = tk.messagebox.askquestion(title='提示窗', message='你确定要删除么?')
if a == 'yes':
sql1 = 'delete from student where id=%s'
# 判断学生是否存在
sql2 = 'select id from student'
cur.execute(sql2)
select_id = cur.fetchall()
for i in select_id:
if int(id.get()) == int(i[0]):
cur.execute(sql1, (id.get(),))
conn.commit()
tk.messagebox.showinfo(title='提示窗', message='删除成功')
break
else:
conn.rollback()
tk.messagebox.showinfo(title='提示窗', message='删除的学生不存在')
clear_105()
show_105()
# 定义修改函数
def update_105():
a = tk.messagebox.askquestion(title='提示窗', message='你确定要修改么?')
if a == 'yes':
sql1 = 'update student set name=%s where id=%s'
sql3 = 'update student set sex=%s where id=%s'
sql4 = 'update student set tel=%s where id=%s'
sql5 = 'update student set address=%s where id=%s'
sql2 = 'select id from student'
# 判断学生是否存在
cur.execute(sql2)
select_id = cur.fetchall()
for i in select_id:
if int(id.get()) == int(i[0]):
cur.execute(sql1, (name.get(), id.get()))
conn.commit()
cur.execute(sql3, (sex.get(), id.get()))
conn.commit()
cur.execute(sql4, (tel.get(), id.get()))
conn.commit()
cur.execute(sql5, (address.get(), id.get()))
conn.commit()
# print('修改成功')
tk.messagebox.showinfo(title='提示窗', message='修改成功')
break
else:
conn.rollback()
print('修改的学生不存在')
tk.messagebox.showinfo(title='提示窗', message='修改的学生不存在')
clear_105()
show_105()
# 定义清空text的函数
def clear_105():
t.delete(1.0, END)
# 定义显示函数
def show_105():
t.insert('end', '\n')
t.insert('end', ' 学号 |')
t.insert('end', ' 姓名 |')
t.insert('end', ' 性别 |')
t.insert('end', ' 电话 |')
t.insert('end', ' 地址 ')
t.insert('end', '\n')
t.insert('end', '_' * 76)
sql = 'select * from student'
cur.execute(sql)
for all in cur.fetchall():
# print(all[0],all[1],all[2],all[3],all[4])
a = str(all[0])
b = str(all[1])
c = str(all[2])
d = str(all[3])
e = str(all[4])
t.insert('end', ' ' + a + '')
t.insert('end', ' ' + b + ' ')
t.insert('end', ' ' + c + ' ')
t.insert('end', ' ' + d + ' ')
t.insert('end', ' ' + e)
t.insert('end', '\n')
t.insert('end', '_' * 76)
# 定义退出函数
def exit_105():
a = tk.messagebox.askquestion(title='提示窗', message='你真的要退出么?')
if a == 'yes':
window.quit()
# 定义关于弹窗
def about_105():
tk.messagebox.showinfo(title='关于', message='姓名:刘文超,学号:20080902105,班级:软工三班')
# 创建窗口
window = tk.Tk()
window.title('学生管理系统 V2.0')
window.geometry('600x380+480+135')
# 菜单栏
menubar = tk.Menu(window)
# 第一列
filemenu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='文件', menu=filemenu)
filemenu.add_command(label='打开', )
filemenu.add_command(label='保存', )
filemenu.add_command(label='退出', command=exit_105)
# 第二列
filemenu2 = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='功能', menu=filemenu2)
filemenu2.add_command(label='添加', command=insert_105)
# 三级菜单
filemenu3 = tk.Menu(filemenu2, tearoff=0)
filemenu2.add_cascade(label='修改', menu=filemenu3)
filemenu3.add_command(label='修改一个学生', command=update_105)
filemenu3.add_command(label='批量修改学生', )
filemenu2.add_command(label='删除', command=delete_105)
# 第三列
menubar.add_cascade(label='关于', command=about_105)
window.config(menu=menubar)
# 主界面
# 学号
tk.Label(window, text='学号:', font=("微软雅黑", 10, "bold", "italic")).place(x=25, y=25)
id = tk.Entry(window, width=20, borderwidth=3)
id.place(x=75, y=25)
# 姓名
tk.Label(window, text='姓名:', font=("微软雅黑", 10, "bold", "italic")).place(x=230, y=25)
name = tk.Entry(window, width=20, borderwidth=3)
name.place(x=280, y=25)
# 性别
tk.Label(window, text='性别:', font=("微软雅黑", 10, "bold", "italic")).place(x=435, y=25)
sex = tk.Entry(window, width=10, borderwidth=3)
sex.place(x=485, y=25)
# 电话
tk.Label(window, text='电话:', font=("微软雅黑", 10, "bold", "italic")).place(x=25, y=75)
tel = tk.Entry(window, width=20, borderwidth=3)
tel.place(x=75, y=75)
# 地址
tk.Label(window, text='地址:', font=("微软雅黑", 10, "bold", "italic")).place(x=230, y=75)
address = tk.Entry(window, width=39, borderwidth=3)
address.place(x=280, y=75)
# 添加按钮
tk.Button(window, text='添加', bd=5, width=5, height=1, command=insert_105).place(x=50, y=130)
tk.Button(window, text='删除', bd=5, width=5, height=1, command=delete_105).place(x=200, y=130)
tk.Button(window, text='修改', bd=5, width=5, height=1, command=update_105).place(x=350, y=130)
tk.Button(window, text='退出', bd=5, width=5, height=1, command=exit_105).place(x=500, y=130)
# 添加滚动多行文本框
t = scrolledtext.ScrolledText(window, width=76, height=10)
t.place(x=25, y=200)
show_105()
tk.mainloop()
cur.close()
conn.close()