班级信息收集

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

class ClassInfoApp:
def init(self, root):
self.root = root
self.root.title("班级信息收集系统")
self.root.geometry("600x450")
self.root.resizable(False, False)

    # 创建数据库连接
    self.conn = sqlite3.connect("class_info.db")
    self.create_table()
    
    # 创建主框架
    self.main_frame = ttk.Frame(root, padding="20")
    self.main_frame.pack(fill=tk.BOTH, expand=True)
    
    # 创建标签页
    self.tab_control = ttk.Notebook(self.main_frame)
    
    # 注册页面
    self.register_tab = ttk.Frame(self.tab_control)
    self.tab_control.add(self.register_tab, text="注册信息")
    self.create_register_tab()
    
    # 查询页面
    self.query_tab = ttk.Frame(self.tab_control)
    self.tab_control.add(self.query_tab, text="查询信息")
    self.create_query_tab()
    
    self.tab_control.pack(expand=1, fill="both")
    
    # 底部状态栏
    self.status_var = tk.StringVar()
    self.status_var.set("就绪")
    self.status_bar = ttk.Label(root, textvariable=self.status_var, relief=tk.SUNKEN, anchor=tk.W)
    self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)
    
def create_table(self):
    """创建数据库表"""
    with self.conn:
        cursor = self.conn.cursor()
        cursor.execute('''
            CREATE TABLE IF NOT EXISTS class_info (
                student_id TEXT PRIMARY KEY,
                class_name TEXT NOT NULL,
                name TEXT NOT NULL
            )
        ''')

def create_register_tab(self):
    """创建注册页面"""
    # 标题
    ttk.Label(self.register_tab, text="学生信息注册", font=("Arial", 14, "bold")).grid(row=0, column=0, columnspan=2, pady=10)
    
    # 学号
    ttk.Label(self.register_tab, text="学号:").grid(row=1, column=0, sticky=tk.W, pady=5)
    self.student_id_var = tk.StringVar()
    ttk.Entry(self.register_tab, textvariable=self.student_id_var, width=30).grid(row=1, column=1, pady=5)
    
    # 班级
    ttk.Label(self.register_tab, text="班级:").grid(row=2, column=0, sticky=tk.W, pady=5)
    self.class_name_var = tk.StringVar()
    ttk.Entry(self.register_tab, textvariable=self.class_name_var, width=30).grid(row=2, column=1, pady=5)
    
    # 姓名
    ttk.Label(self.register_tab, text="姓名:").grid(row=3, column=0, sticky=tk.W, pady=5)
    self.name_var = tk.StringVar()
    ttk.Entry(self.register_tab, textvariable=self.name_var, width=30).grid(row=3, column=1, pady=5)
    
    # 注册按钮
    register_btn = ttk.Button(self.register_tab, text="注册", command=self.register_student)
    register_btn.grid(row=4, column=0, columnspan=2, pady=20)
    
    # 状态标签
    self.register_status_var = tk.StringVar()
    ttk.Label(self.register_tab, textvariable=self.register_status_var, foreground="green").grid(row=5, column=0, columnspan=2)

def create_query_tab(self):
    """创建查询页面"""
    # 标题
    ttk.Label(self.query_tab, text="班级同学信息查询", font=("Arial", 14, "bold")).grid(row=0, column=0, columnspan=3, pady=10)
    
    # 查询条件
    ttk.Label(self.query_tab, text="按班级查询:").grid(row=1, column=0, sticky=tk.W, pady=5)
    self.query_class_var = tk.StringVar()
    ttk.Entry(self.query_tab, textvariable=self.query_class_var, width=20).grid(row=1, column=1, pady=5)
    
    # 查询按钮
    query_btn = ttk.Button(self.query_tab, text="查询", command=self.query_students)
    query_btn.grid(row=1, column=2, padx=10)
    
    # 结果表格
    columns = ("学号", "班级", "姓名")
    self.tree = ttk.Treeview(self.query_tab, columns=columns, show="headings")
    
    for col in columns:
        self.tree.heading(col, text=col)
        self.tree.column(col, width=150, anchor=tk.CENTER)
    
    self.tree.grid(row=2, column=0, columnspan=3, pady=10, sticky=(tk.N, tk.S, tk.W, tk.E))
    
    # 滚动条
    scrollbar = ttk.Scrollbar(self.query_tab, orient=tk.VERTICAL, command=self.tree.yview)
    self.tree.configure(yscroll=scrollbar.set)
    scrollbar.grid(row=2, column=3, sticky=(tk.N, tk.S))
    
    # 设置列宽和行高
    self.query_tab.grid_columnconfigure(0, weight=1)
    self.query_tab.grid_columnconfigure(1, weight=1)
    self.query_tab.grid_columnconfigure(2, weight=1)
    self.query_tab.grid_rowconfigure(2, weight=1)

def register_student(self):
    """注册学生信息"""
    student_id = self.student_id_var.get().strip()
    class_name = self.class_name_var.get().strip()
    name = self.name_var.get().strip()
    
    if not student_id or not class_name or not name:
        messagebox.showerror("错误", "请填写完整的学生信息!")
        return
    
    try:
        with self.conn:
            cursor = self.conn.cursor()
            cursor.execute(
                "INSERT INTO class_info (student_id, class_name, name) VALUES (?, ?, ?)",
                (student_id, class_name, name)
            )
        self.register_status_var.set(f"学生 {name} (学号: {student_id}) 注册成功!")
        self.status_var.set(f"注册成功: {name} ({student_id})")
        
        # 清空输入框
        self.student_id_var.set("")
        self.class_name_var.set("")
        self.name_var.set("")
        
    except sqlite3.IntegrityError:
        messagebox.showerror("错误", f"学号 {student_id} 已存在!")
        self.register_status_var.set("")

def query_students(self):
    """查询班级学生信息"""
    class_name = self.query_class_var.get().strip()
    
    if not class_name:
        messagebox.showerror("错误", "请输入要查询的班级!")
        return
    
    # 清空表格
    for item in self.tree.get_children():
        self.tree.delete(item)
    
    try:
        with self.conn:
            cursor = self.conn.cursor()
            cursor.execute(
                "SELECT student_id, class_name, name FROM class_info WHERE class_name = ? ORDER BY student_id",
                (class_name,)
            )
            students = cursor.fetchall()
        
        if not students:
            messagebox.showinfo("提示", f"未找到班级 {class_name} 的学生信息!")
            self.status_var.set(f"查询班级: {class_name} (未找到记录)")
            return
        
        # 填充表格
        for student in students:
            self.tree.insert("", tk.END, values=student)
        
        self.status_var.set(f"查询成功: {len(students)} 条记录")
        
    except Exception as e:
        messagebox.showerror("错误", f"查询失败: {str(e)}")
        self.status_var.set("查询失败")

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

posted @ 2025-06-21 18:32  ouyeye  阅读(28)  评论(0)    收藏  举报