Python Tkinter 学生信息管理系统:MySQL 数据库连接和操作
import tkinter as tk import mysql.connector from tkinter import messagebox
class Database: def init(self): self.conn = mysql.connector.connect( host='localhost', user='root', password='844133', database='oyy', auth_plugin='mysql_native_password' ) self.cursor = self.conn.cursor()
def __enter__(self):
return self.cursor
def __exit__(self, exc_type, exc_val, exc_tb):
self.cursor.close()
self.conn.close()
class LoginWindow: def init(self, master): self.master = master master.title('Login') master.geometry('300x150')
self.create_widgets()
def create_widgets(self):
self.label_username = tk.Label(self.master, text='Username:')
self.label_username.pack()
self.entry_username = tk.Entry(self.master)
self.entry_username.pack()
self.label_password = tk.Label(self.master, text='Password:')
self.label_password.pack()
self.entry_password = tk.Entry(self.master, show='*')
self.entry_password.pack()
self.button_login = tk.Button(self.master, text='Login', command=self.login)
self.button_login.pack()
def login(self):
username = self.entry_username.get()
password = self.entry_password.get()
# 连接MySQL数据库
try:
with Database() as cursor:
self.master.destroy()
MainWindow(cursor)
except:
tk.messagebox.showerror('Error', 'Invalid username or password')
class MainWindow: def init(self, cursor): self.cursor = cursor
self.master = tk.Tk()
self.master.title('查询界面')
self.master.geometry('400x300')
self.create_widgets()
def create_widgets(self):
self.label_name = tk.Label(self.master, text='Enter student name:')
self.label_name.pack()
self.entry_name = tk.Entry(self.master)
self.entry_name.pack()
self.button_search = tk.Button(self.master, text='Search', command=self.search)
self.button_search.pack()
self.label_result = tk.Label(self.master, text='')
self.label_result.pack()
self.menu_bar = tk.Menu(self.master)
self.file_menu = tk.Menu(self.menu_bar, tearoff=0)
self.file_menu.add_command(label='录入信息', command=self.add_window)
self.file_menu.add_command(label='删除信息', command=self.delete_window)
self.file_menu.add_command(label='修改信息', command=self.modify_window)
self.menu_bar.add_cascade(label='菜单', menu=self.file_menu)
self.master.config(menu=self.menu_bar)
def search(self):
name = self.entry_name.get()
# 查询学生信息
query = 'SELECT * FROM student WHERE name=%s'
self.cursor.execute(query, (name,))
result = self.cursor.fetchone()
if result:
id, name, age, gender, score = result
self.label_result.config(text=f'Name: {name}
Age: {age} Gender: {gender} Score: {score}') else: self.label_result.config(text='No result found')
def add_window(self):
AddWindow(self.cursor)
def delete_window(self):
DeleteWindow(self.cursor)
def modify_window(self):
ModifyWindow(self.cursor)
class AddWindow: def init(self, cursor): self.cursor = cursor
self.master = tk.Tk()
self.master.title('添加界面')
self.master.geometry('400x300')
self.create_widgets()
def create_widgets(self):
self.label_name = tk.Label(self.master, text='姓名:')
self.label_name.pack()
self.entry_name = tk.Entry(self.master)
self.entry_name.pack()
self.label_age = tk.Label(self.master, text='年龄:')
self.label_age.pack()
self.entry_age = tk.Entry(self.master)
self.entry_age.pack()
self.label_gender = tk.Label(self.master, text='性别:')
self.label_gender.pack()
self.entry_gender = tk.Entry(self.master)
self.entry_gender.pack()
self.label_score = tk.Label(self.master, text='成绩:')
self.label_score.pack()
self.entry_score = tk.Entry(self.master)
self.entry_score.pack()
self.button_add = tk.Button(self.master, text='添加', command=self.add_student)
self.button_add.pack()
def add_student(self):
name = self.entry_name.get()
age = self.entry_age.get()
gender = self.entry_gender.get()
score = self.entry_score.get()
# 插入学生信息到数据库
add_student = ('INSERT INTO student '
'(name, age, gender, score) '
'VALUES (%s, %s, %s, %s)')
data_student = (name, age, gender, score)
try:
with Database() as cursor:
cursor.execute(add_student, data_student)
except:
tk.messagebox.showerror('Error', '添加失败')
tk.messagebox.showinfo('Success', '添加成功')
# 清空用户输入的数据
self.entry_name.delete(0, tk.END)
self.entry_age.delete(0, tk.END)
self.entry_gender.delete(0, tk.END)
self.entry_score.delete(0, tk.END)
class DeleteWindow: def init(self, cursor): self.cursor = cursor
self.master = tk.Tk()
self.master.title('删除界面')
self.master.geometry('400x300')
self.create_widgets()
def create_widgets(self):
self.label_name = tk.Label(self.master, text='请输入要删除的学生姓名:')
self.label_name.pack()
self.entry_name = tk.Entry(self.master)
self.entry_name.pack()
self.button_delete = tk.Button(self.master, text='删除', command=self.delete_student)
self.button_delete.pack()
def delete_student(self):
name = self.entry_name.get()
# 删除学生信息
delete_student = 'DELETE FROM student WHERE name=%s'
try:
with Database() as cursor:
cursor.execute(delete_student, (name,))
except:
tk.messagebox.showerror('Error', '删除失败')
# 显示删除结果
if self.cursor.rowcount == 0:
tk.messagebox.showerror('Error', '删除失败,该学生不存在')
else:
tk.messagebox.showinfo('Success', '删除成功')
class ModifyWindow: def init(self, cursor): self.cursor = cursor
self.master = tk.Tk()
self.master.title('修改界面')
self.master.geometry('400x300')
self.create_widgets()
def create_widgets(self):
self.label_name = tk.Label(self.master, text='请输入要修改的学生姓名:')
self.label_name.pack()
self.entry_name = tk.Entry(self.master)
self.entry_name.pack()
self.label_age = tk.Label(self.master, text='年龄:')
self.label_age.pack()
self.entry_age = tk.Entry(self.master)
self.entry_age.pack()
self.label_gender = tk.Label(self.master, text='性别:')
self.label_gender.pack()
self.entry_gender = tk.Entry(self.master)
self.entry_gender.pack()
self.label_score = tk.Label(self.master, text='成绩:')
self.label_score.pack()
self.entry_score = tk.Entry(self.master)
self.entry_score.pack()
self.button_modify = tk.Button(self.master, text='修改', command=self.modify_student)
self.button_modify.pack()
def modify_student(self):
name = self.entry_name.get()
age = self.entry_age.get()
gender = self.entry_gender.get()
score = self.entry_score.get()
# 更新学生信息
update_student = ('UPDATE student SET age=%s, gender=%s, score=%s WHERE name=%s')
data_student = (age, gender, score, name)
try:
with Database() as cursor:
cursor.execute(update_student, data_student)
except:
tk.messagebox.showerror('Error', '更新失败')
# 显示更新结果
if self.cursor.rowcount == 0:
tk.messagebox.showerror('Error', '更新失败,该学生不存在')
else:
tk.messagebox.showinfo('Success', '更新成功')
if name == 'main': root = tk.Tk() login_window = LoginWindow(root) root.mainloop()
原文地址: https://www.cveoy.top/t/topic/oo1T 著作权归作者所有。请勿转载和采集!