python+mysql+tkinter课程表管理系统

import tkinter as tk
import tkinter.ttk as ttk
import pymysql
from tkinter import messagebox

# 连接数据库
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='zxq120zxq@',
    database='column')

# 创建游标
cursor = conn.cursor()
cursor.execute("DROP TABLE IF EXISTS courses")
sql_create_table = """
CREATE TABLE courses (
    course_id INT PRIMARY KEY AUTO_INCREMENT,
    course_name VARCHAR(255),
    time DATETIME,
    location VARCHAR(255)
)
"""
cursor.execute(sql_create_table)
# 添加数据
data = [
    ('Python 课程', '2024-06-25 09:00:00', '弘毅-103'),
    ('Java 课程', '2024-06-26 10:00:00', '明德-236'),
    ('C++ 课程', '2024-06-27 11:00:00', '明德-206')
]

sql_insert = "INSERT INTO courses (course_name, time, location) VALUES (%s, %s, %s)"
cursor.executemany(sql_insert, data)

conn.commit()
#test
def login():
    username = entry_username.get()
    password = entry_password.get()
    # 假设用户名和密码都为'test'进行验证
    if username == 'test' and password == 'test':
        login_frame.pack_forget()
        main_frame.pack()
    else:
        messagebox.showwarning("错误", "用户名或密码错误")

def insert_course():
    insert_window = tk.Toplevel(root)
    insert_window.title("插入课程")

    label_insert_course_name = ttk.Label(insert_window, text="课程名称:")
    entry_insert_course_name = ttk.Entry(insert_window)
    label_insert_time = ttk.Label(insert_window, text="时间:")
    entry_insert_time = ttk.Entry(insert_window)
    label_insert_location = ttk.Label(insert_window, text="地点:")
    entry_insert_location = ttk.Entry(insert_window)
    button_insert = ttk.Button(insert_window, text="插入", command=lambda: perform_insert(entry_insert_course_name.get(), entry_insert_time.get(), entry_insert_location.get()))

    label_insert_course_name.pack()
    entry_insert_course_name.pack()
    label_insert_time.pack()
    entry_insert_time.pack()
    label_insert_location.pack()
    entry_insert_location.pack()
    button_insert.pack()

def perform_insert(course_name, time, location):
    sql = "INSERT INTO courses (course_name, time, location) VALUES (%s, %s, %s)"
    try:
        cursor.execute(sql, (course_name, time, location))
        conn.commit()
        messagebox.showinfo("成功", "课程插入成功")
        show_courses()
        insert_window.destroy()
    except pymysql.Error as e:
        messagebox.showerror("错误", f"插入课程时出错: {e}")

def delete_course():
    delete_window = tk.Toplevel(root)
    delete_window.title("删除课程")

    label_delete_course_id = ttk.Label(delete_window, text="课程 ID:")
    entry_delete_course_id = ttk.Entry(delete_window)
    button_delete = ttk.Button(delete_window, text="删除", command=lambda: perform_delete(entry_delete_course_id.get()))

    label_delete_course_id.pack()
    entry_delete_course_id.pack()
    button_delete.pack()

def perform_delete(course_id):
    sql = "DELETE FROM courses WHERE course_id = %s"
    try:
        cursor.execute(sql, (course_id))
        conn.commit()
        messagebox.showinfo("成功", "课程删除成功")
        show_courses()
        delete_window.destroy()
    except pymysql.Error as e:
        messagebox.showerror("错误", f"删除课程时出错: {e}")

def update_course():
    update_window = tk.Toplevel(root)
    update_window.title("更新课程")

    label_update_course_id = ttk.Label(update_window, text="课程 ID:")
    entry_update_course_id = ttk.Entry(update_window)
    label_update_course_name = ttk.Label(update_window, text="课程名称:")
    entry_update_course_name = ttk.Entry(update_window)
    label_update_time = ttk.Label(update_window, text="时间:")
    entry_update_time = ttk.Entry(update_window)
    label_update_location = ttk.Label(update_window, text="地点:")
    entry_update_location = ttk.Entry(update_window)
    button_update = ttk.Button(update_window, text="更新", command=lambda: perform_update(entry_update_course_id.get(), entry_update_course_name.get(), entry_update_time.get(), entry_update_location.get()))

    label_update_course_id.pack()
    entry_update_course_id.pack()
    label_update_course_name.pack()
    entry_update_course_name.pack()
    label_update_time.pack()
    entry_update_time.pack()
    label_update_location.pack()
    entry_update_location.pack()
    button_update.pack()

def perform_update(course_id, course_name, time, location):
    sql = "UPDATE courses SET course_name = %s, time = %s, location = %s WHERE course_id = %s"
    try:
        cursor.execute(sql, (course_name, time, location, course_id))
        conn.commit()
        messagebox.showinfo("成功", "课程更新成功")
        show_courses()
        update_window.destroy()
    except pymysql.Error as e:
        messagebox.showerror("错误", f"更新课程时出错: {e}")

def show_courses():
    sql = "SELECT * FROM courses"
    try:
        cursor.execute(sql)
        results = cursor.fetchall()
        treeview.delete(*treeview.get_children())
        for row in results:
            treeview.insert('', 'end', values=(row[0], row[1], row[2], row[3]))
    except pymysql.Error as e:
        messagebox.showerror("错误", f"获取课程列表时出错: {e}")

root = tk.Tk()
root.title("课程管理系统")
root.geometry("800x600")  # 设置窗口大小

# 登录页面
login_frame = ttk.Frame(root, padding="20")
login_frame.pack(side=tk.TOP, fill=tk.BOTH)

label_username = ttk.Label(login_frame, text="用户名:")
entry_username = ttk.Entry(login_frame)
label_password = ttk.Label(login_frame, text="密码:")
entry_password = ttk.Entry(login_frame, show="*")
button_login = ttk.Button(login_frame, text="登录", command=login)

label_username.grid(row=0, column=0, sticky=tk.W, padx=10, pady=10)
entry_username.grid(row=0, column=1, sticky=tk.EW, padx=10, pady=10)
label_password.grid(row=1, column=0, sticky=tk.W, padx=10, pady=10)
entry_password.grid(row=1, column=1, sticky=tk.EW, padx=10, pady=10)
button_login.grid(row=2, column=1, sticky=tk.E, padx=10, pady=10)

# 主页面
main_frame = ttk.Frame(root, padding="20")

button_insert = ttk.Button(main_frame, text="插入课程", command=insert_course)
button_delete = ttk.Button(main_frame, text="删除课程", command=delete_course)
button_update = ttk.Button(main_frame, text="更新课程", command=update_course)
button_show = ttk.Button(main_frame, text="显示课程", command=show_courses)

button_insert.pack()
button_delete.pack()
button_update.pack()
button_show.pack()

# 课程列表
treeview = ttk.Treeview(main_frame)
treeview["columns"] = ("courses_id", "course_name", "time", "location")
treeview.column("#0", width=0, stretch=tk.NO)
treeview.column("courses_id", anchor=tk.CENTER, width=80)
treeview.column("course_name", anchor=tk.CENTER, width=150)
treeview.column("time", anchor=tk.CENTER, width=150)
treeview.column("location", anchor=tk.CENTER, width=100)

treeview.heading("#0", text="", anchor=tk.CENTER)
treeview.heading("courses_id", text="课程 ID", anchor=tk.CENTER)
treeview.heading("course_name", text="课程名称", anchor=tk.CENTER)
treeview.heading("time", text="时间", anchor=tk.CENTER)
treeview.heading("location", text="地点", anchor=tk.CENTER)

treeview.pack(fill=tk.BOTH, expand=True)

root.mainloop()

cursor.close()
conn.close()

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值