班级管理系统
运行结果截图

源代码
``import tkinter as tk
from tkinter import messagebox, ttk
import sqlite3
================= 数据库操作部分 =================
class DatabaseManager:
def init(self, db_name="class_info.db"):
self.conn = sqlite3.connect(db_name)
self.cursor = self.conn.cursor()
self.create_table()
def create_table(self):
"""创建班级信息表"""
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()
def add_student(self, student_id, class_name, name):
"""注册学生信息"""
try:
self.cursor.execute(
"INSERT INTO students (student_id, class_name, name) VALUES (?, ?, ?)",
(student_id, class_name, name)
)
self.conn.commit()
return True, "注册成功!"
except sqlite3.IntegrityError:
return False, "错误:该学号已存在,请勿重复注册。"
except Exception as e:
return False, f"发生未知错误: {e}"
def query_students(self, class_name):
"""查询某班级的所有学生"""
self.cursor.execute("SELECT student_id, name FROM students WHERE class_name = ?", (class_name,))
rows = self.cursor.fetchall()
return rows
def close(self):
self.conn.close()
================= GUI 界面部分 =================
class ClassInfoApp:
def init(self, root):
self.root = root
self.root.title("班级信息收集系统")
self.root.geometry("500x400")
初始化数据库管理器
self.db = DatabaseManager()
--- 注册区域 ---
reg_frame = tk.LabelFrame(root, text="学生注册", padx=10, pady=10)
reg_frame.pack(fill="x", padx=20, pady=10)
输入框布局
tk.Label(reg_frame, text="学号:").grid(row=0, column=0, sticky="w")
self.entry_id = tk.Entry(reg_frame)
self.entry_id.grid(row=0, column=1, padx=5, pady=5)
tk.Label(reg_frame, text="班级:").grid(row=0, column=2, sticky="w")
self.entry_class = tk.Entry(reg_frame)
self.entry_class.grid(row=0, column=3, padx=5, pady=5)
tk.Label(reg_frame, text="姓名:").grid(row=1, column=0, sticky="w")
self.entry_name = tk.Entry(reg_frame)
self.entry_name.grid(row=1, column=1, padx=5, pady=5)
btn_reg = tk.Button(reg_frame, text="注 册", command=self.register_student, bg="#4CAF50", fg="white")
btn_reg.grid(row=1, column=3, padx=5, pady=5)
--- 查询区域 ---
query_frame = tk.LabelFrame(root, text="信息查询", padx=10, pady=10)
query_frame.pack(fill="both", expand=True, padx=20, pady=10)
top_frame = tk.Frame(query_frame)
top_frame.pack(fill="x")
tk.Label(top_frame, text="输入班级名称:").pack(side="left")
self.entry_query_class = tk.Entry(top_frame)
self.entry_query_class.pack(side="left", padx=5, fill="x", expand=True)
btn_query = tk.Button(top_frame, text="查 询", command=self.query_class, bg="#2196F3", fg="white")
btn_query.pack(side="left", padx=5)
结果显示表格
columns = ("student_id", "name")
self.tree = ttk.Treeview(query_frame, columns=columns, show="headings")
self.tree.heading("student_id", text="学号")
self.tree.heading("name", text="姓名")
self.tree.pack(fill="both", expand=True, pady=(10, 0))
def register_student(self):
sid = self.entry_id.get().strip()
cname = self.entry_class.get().strip()
name = self.entry_name.get().strip()
if not sid or not cname or not name:
messagebox.showwarning("提示", "请填写所有信息!")
return
success, msg = self.db.add_student(sid, cname, name)
if success:
messagebox.showinfo("成功", msg)
# 清空输入框
self.entry_id.delete(0, tk.END)
self.entry_name.delete(0, tk.END)
else:
messagebox.showerror("失败", msg)
def query_class(self):
cname = self.entry_query_class.get().strip()
if not cname:
messagebox.showwarning("提示", "请输入要查询的班级名称!")
return
清空旧数据
for item in self.tree.get_children():
self.tree.delete(item)
results = self.db.query_students(cname)
if results:
for row in results:
self.tree.insert("", tk.END, values=row)
else:
messagebox.showinfo("结果", f"未找到班级 [{cname}] 的信息。")
def on_closing(self):
self.db.close()
self.root.destroy()
if name == "main":
root = tk.Tk()
app = ClassInfoApp(root)
# 确保关闭窗口时断开数据库连接
root.protocol("WM_DELETE_WINDOW", app.on_closing)
root.mainloop()``

浙公网安备 33010602011771号