import tkinter as tk from tkinter import messagebox import mysql.connector

创建登录窗口

def show_login_window(): login_window = tk.Tk() login_window.title('登录') login_window.geometry('250x140')

label_username = tk.Label(login_window, text='用户名:')
label_username.grid(row=0, column=0, padx=6, pady=12)
entry_username = tk.Entry(login_window)
entry_username.grid(row=0, column=1, padx=6, pady=12)

label_password = tk.Label(login_window, text='密码:')
label_password.grid(row=1, column=0, padx=6, pady=12)
entry_password = tk.Entry(login_window, show='*')
entry_password.grid(row=1, column=1, padx=6, pady=12)

def login():
    '验证登录信息,并关闭登录窗口'
    username = entry_username.get()
    password = entry_password.get()

    if username == 'admin' and password == 'admin':
        login_window.destroy()
        show_main_window()
    else:
        messagebox.showerror('错误', '用户名或密码错误')

button_login = tk.Button(login_window, text='登录', command=login)
button_login.grid(row=2, columnspan=2, pady=12)

login_window.mainloop()

def show_main_window(): main_window = tk.Tk() main_window.title('学生信息管理系统') main_window.geometry('550x460')

cnx = mysql.connector.connect(user='root', password='cry33120217', host='localhost',
                               port='3306', database='abc')
cursor = cnx.cursor()

# 菜单栏
menubar = tk.Menu(main_window)
main_window.config(menu=menubar)

def show_operation_window():
    operation_window = tk.Tk()
    operation_window.title('学生信息管理系统 - 操作')
    operation_window.geometry('400x300')

    # 添加、修改、删除学生信息
    add_frame = tk.Frame(operation_window)
    add_frame.pack(pady=12)

    label_id_add = tk.Label(add_frame, text='学号:')
    label_id_add.grid(row=0, column=0, padx=4)
    entry_id = tk.Entry(add_frame)
    entry_id.grid(row=0, column=1, padx=4)

    label_name_add = tk.Label(add_frame, text='姓名:')
    label_name_add.grid(row=1, column=0, padx=4)
    entry_name = tk.Entry(add_frame)
    entry_name.grid(row=1, column=1, padx=4)

    label_gender_add = tk.Label(add_frame, text='性别:')
    label_gender_add.grid(row=2, column=0, padx=4)
    entry_gender = tk.Entry(add_frame)
    entry_gender.grid(row=2, column=1, padx=4)

    label_age_add = tk.Label(add_frame, text='年龄:')
    label_age_add.grid(row=3, column=0, padx=4)
    entry_age = tk.Entry(add_frame)
    entry_age.grid(row=3, column=1, padx=4)



    def update_student_info():
        '更新学生信息'
        selected_item = listbox.curselection()
        if not selected_item:
            messagebox.showerror('错误', '请选择要更新的学生信息')
            return
        student_info = listbox.get(selected_item)

        id = student_info.split()[0]
        name = entry_name.get()
        gender = entry_gender.get()
        age = entry_age.get()

        try:
            cursor.execute('UPDATE students SET name=%s, gender=%s, age=%s WHERE id=%s',
                           (name, gender, age, id))
            cnx.commit()
            query_students()
            clear_entries()
            messagebox.showinfo('提示', '学生信息更新成功')
        except Exception as e:
            messagebox.showerror('错误', f'更新失败:{e}')

    def delete_student_info():
        '删除学生信息'
        selected_item = listbox.curselection()
        if not selected_item:
            messagebox.showerror('错误', '请选择要删除的学生信息')
            return
        student_info = listbox.get(selected_item)

        id = student_info.split()[0]
        confirm = messagebox.askyesno('确认', '确定要删除该学生信息吗?')
        if confirm:
            try:
                cursor.execute('DELETE FROM students WHERE id=%s', (id,))
                cnx.commit()
                query_students()
                clear_entries()
                messagebox.showinfo('提示', '学生信息删除成功')
            except Exception as e:
                messagebox.showerror('错误', f'删除失败:{e}')

    def insert_student_info():
        '添加学生信息'
        id = entry_id.get().strip()
        name = entry_name.get().strip()
        gender = entry_gender.get().strip()
        age = entry_age.get().strip()

        if not id or not name or not gender or not age:
            messagebox.showerror('错误', '学生信息不能为空')
            return

        try:
            cursor.execute('INSERT INTO students values(%s, %s, %s, %s)', (id, name, gender, age))
            cnx.commit()
            query_students()
            clear_entries()
            messagebox.showinfo('提示', '学生信息添加成功')
        except Exception as e:
            messagebox.showerror('错误', f'添加失败:{e}')

    def clear_entries():
        '清空文本框'
        entry_id.delete(0, tk.END)
        entry_name.delete(0, tk.END)
        entry_gender.delete(0, tk.END)
        entry_age.delete(0, tk.END)

    button_add = tk.Button(add_frame, text='添加', command=insert_student_info)
    button_add.grid(row=4, columnspan=2, pady=12)

    button_update = tk.Button(add_frame, text='更新', command=update_student_info)
    button_update.grid(row=5, columnspan=2, pady=12)

    button_delete = tk.Button(add_frame, text='删除', command=delete_student_info)
    button_delete.grid(row=6, columnspan=2, pady=12)

    button_clear = tk.Button(add_frame, text='清空', command=clear_entries)
    button_clear.grid(row=7, columnspan=2, pady=12)

    query_students()

    operation_window.mainloop()

# 操作按钮
button_operation = tk.Button(main_window, text='操作', command=show_operation_window)
button_operation.pack(pady=12)

# 学生信息表格
data_frame = tk.Frame(main_window)
data_frame.pack(pady=12)

label_id = tk.Label(data_frame, text='学号')
label_id.grid(row=0, column=0, padx=4)

label_name = tk.Label(data_frame, text='姓名')
label_name.grid(row=0, column=1, padx=4)

label_gender = tk.Label(data_frame, text='性别')
label_gender.grid(row=0, column=2, padx=4)

label_age = tk.Label(data_frame, text='年龄')
label_age.grid(row=0, column=3, padx=4)

listbox = tk.Listbox(data_frame, width=40)
listbox.grid(row=1, columnspan=4)

scrollbar = tk.Scrollbar(data_frame)
scrollbar.grid(row=1, column=4, sticky='NS')

listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=listbox.yview)



def query_students():
    '查询所有学生信息'
    id = entry_id_filter.get().strip()
    name = entry_name_filter.get().strip()
    gender = var_gender.get()
    age_min = entry_age_min.get().strip()

    sql = 'SELECT * FROM students WHERE 1=1'
    if id:
        sql += f' AND id='{id}'
    if name:
        sql += f' AND name LIKE '%{name}%''
    if gender:
        sql += f' AND gender='{gender}'
    if age_min:
        sql += f' AND age>={age_min}'

    cursor.execute(sql)
    students = cursor.fetchall()

    listbox.delete(0, tk.END)

    for student in students:
        listbox.insert(tk.END, f'{student[0]} {student[1]} {student[2]} {student[3]}')

    # 添加筛选条件

filter_frame = tk.Frame(main_window)
filter_frame.pack(pady=12)

label_id_filter = tk.Label(filter_frame, text='学号:')
label_id_filter.grid(row=0, column=0, padx=4)
entry_id_filter = tk.Entry(filter_frame)
entry_id_filter.grid(row=0, column=1, padx=4)

label_name_filter = tk.Label(filter_frame, text='姓名:')
label_name_filter.grid(row=1, column=0, padx=4)
entry_name_filter = tk.Entry(filter_frame)
entry_name_filter.grid(row=1, column=1, padx=4)

label_gender_filter = tk.Label(filter_frame, text='性别:')
label_gender_filter.grid(row=2, column=0, padx=4)

var_gender = tk.StringVar()
var_gender.set('')
radio_male = tk.Radiobutton(filter_frame, text='男', variable=var_gender, value='男')
radio_male.grid(row=2, column=1)
radio_female = tk.Radiobutton(filter_frame, text='女', variable=var_gender, value='女')
radio_female.grid(row=2, column=2)

label_age_range = tk.Label(filter_frame, text='年龄范围:')
label_age_range.grid(row=3, column=0, padx=4)
entry_age_min = tk.Entry(filter_frame)
entry_age_min.grid(row=3, column=1, padx=4)
label_age_to = tk.Label(filter_frame, text='至')
label_age_to.grid(row=3, column=2, padx=4)
entry_age_max = tk.Entry(filter_frame)
entry_age_max.grid(row=3, column=3, padx=4)

button_filter = tk.Button(filter_frame, text='筛选', command=query_students)
button_filter.grid(row=4, columnspan=4, pady=12)

query_students()


main_window.mainloop()

cursor.close()
cnx.close()

if name == 'main': show_login_window() 可能添加失败内容:可能是因为以下原因导致添加失败:

  1. 数据库连接失败:请确保数据库连接信息正确,包括用户名、密码、主机名、端口号、数据库名等。

  2. 学号已存在:请检查要添加的学生学号是否已经存在于数据库中,学号应该是唯一的。

  3. 数据类型错误:请检查要添加的学生信息是否符合数据库定义的数据类型,比如年龄应该是整型。

  4. 其他原因:如果以上几点都没有问题,可能是其他未知原因导致添加失败,可以尝试查看数据库报错信息,或者调试代码查找问题。

Python Tkinter 学生信息管理系统

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

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