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

Python Tkinter 学生信息管理系统:MySQL 数据库连接和操作

原文地址: https://www.cveoy.top/t/topic/oo1T 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录