GUI程序设计--班级信息收集

import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3

class ClassInfoSystem:
def init(self, root):
self.root = root
self.root.title("班级信息收集系统")
self.root.geometry("800x600")

    # 背景色
    self.bg_color = "#f0f0f0"
    self.root.configure(bg=self.bg_color)
    
    # 创建数据库和表
    self.conn = sqlite3.connect('class_info.db')
    self.cursor = self.conn.cursor()
    self.cursor.execute('''
        CREATE TABLE IF NOT EXISTS students (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            student_id TEXT NOT NULL UNIQUE,
            class_name TEXT NOT NULL,
            name TEXT NOT NULL
        )
    ''')
    self.conn.commit()
    
    # 创建界面
    self.create_widgets()
    
    # 加载初始数据
    self.display_students()

def create_widgets(self):
    # 主框架
    main_frame = tk.Frame(self.root, bg=self.bg_color)
    main_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)
    
    # 标题
    tk.Label(main_frame, text="班级信息收集系统", 
            font=('微软雅黑', 20, 'bold'), bg=self.bg_color).pack(pady=10)
    
    # 注册表单
    form_frame = tk.LabelFrame(main_frame, text="学生注册", 
                             font=('微软雅黑', 12), bg=self.bg_color)
    form_frame.pack(fill=tk.X, pady=10)
    
    # 学号输入
    tk.Label(form_frame, text="学号:", bg=self.bg_color).grid(row=0, column=0, padx=5, pady=5)
    self.student_id_entry = tk.Entry(form_frame, width=30)
    self.student_id_entry.grid(row=0, column=1, padx=5, pady=5)
    
    # 班级选择
    tk.Label(form_frame, text="班级:", bg=self.bg_color).grid(row=1, column=0, padx=5, pady=5)
    self.class_entry = ttk.Combobox(form_frame, values=["信计1班", "信计2班"], width=27)
    self.class_entry.grid(row=1, column=1, padx=5, pady=5)
    
    # 姓名输入
    tk.Label(form_frame, text="姓名:", bg=self.bg_color).grid(row=2, column=0, padx=5, pady=5)
    self.name_entry = tk.Entry(form_frame, width=30)
    self.name_entry.grid(row=2, column=1, padx=5, pady=5)
    
    # 注册按钮
    tk.Button(form_frame, text="注册", command=self.register_student, 
             width=15).grid(row=3, column=1, pady=10, sticky=tk.E)
    
    # 查询区域
    search_frame = tk.LabelFrame(main_frame, text="查询同学", 
                               font=('微软雅黑', 12), bg=self.bg_color)
    search_frame.pack(fill=tk.X, pady=10)
    
    tk.Label(search_frame, text="选择班级:", bg=self.bg_color).grid(row=0, column=0, padx=5, pady=5)
    self.search_class = ttk.Combobox(search_frame, values=["所有班级", "信计1班", "信计2班"], width=27)
    self.search_class.grid(row=0, column=1, padx=5, pady=5)
    self.search_class.current(0)
    
    tk.Button(search_frame, text="查询", command=self.search_students, 
             width=15).grid(row=0, column=2, padx=10)
    
    # 结果显示表格
    self.tree = ttk.Treeview(main_frame, columns=('ID', 'Class', 'Name'), 
                            show='headings', height=10)
    self.tree.heading('ID', text='学号')
    self.tree.heading('Class', text='班级')
    self.tree.heading('Name', text='姓名')
    self.tree.column('ID', width=200, anchor='center')
    self.tree.column('Class', width=150, anchor='center')
    self.tree.column('Name', width=150, anchor='center')
    self.tree.pack(fill=tk.BOTH, expand=True, pady=10)
    
    # 滚动条
    scrollbar = ttk.Scrollbar(self.tree, orient="vertical", command=self.tree.yview)
    scrollbar.pack(side="right", fill="y")
    self.tree.configure(yscrollcommand=scrollbar.set)

def register_student(self):
    student_id = self.student_id_entry.get()
    class_name = self.class_entry.get()
    name = self.name_entry.get()
    
    if not all([student_id, class_name, name]):
        messagebox.showerror("错误", "请填写完整信息!")
        return
    
    try:
        self.cursor.execute("INSERT INTO students VALUES (NULL, ?, ?, ?)", 
                          (student_id, class_name, name))
        self.conn.commit()
        messagebox.showinfo("成功", "注册成功!")
        self.display_students()
        self.clear_form()
    except sqlite3.IntegrityError:
        messagebox.showerror("错误", "该学号已存在!")

def clear_form(self):
    self.student_id_entry.delete(0, tk.END)
    self.class_entry.set('')
    self.name_entry.delete(0, tk.END)

def search_students(self):
    class_name = self.search_class.get()
    if class_name == "所有班级":
        self.cursor.execute("SELECT student_id, class_name, name FROM students")
    else:
        self.cursor.execute("SELECT student_id, class_name, name FROM students WHERE class_name=?", 
                          (class_name,))
    self.display_students()

def display_students(self):
    for item in self.tree.get_children():
        self.tree.delete(item)
    
    students = self.cursor.fetchall()
    for student in students:
        self.tree.insert('', tk.END, values=student)

def __del__(self):
    self.conn.close()

if name == "main":
root = tk.Tk()
app = ClassInfoSystem(root)
root.mainloop()

posted @ 2025-06-19 11:12  cchb  阅读(22)  评论(0)    收藏  举报