GUI
import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3
===================== 1. 数据库初始化 =====================
def init_db():
conn = sqlite3.connect("class_info.db")
cur = conn.cursor()
# 创建学生信息表
cur.execute('''
CREATE TABLE IF NOT EXISTS student(
student_id TEXT PRIMARY KEY,
class TEXT NOT NULL,
name TEXT NOT NULL
)
''')
conn.commit()
conn.close()
插入学生信息
def insert_student(sid, cls, name):
try:
conn = sqlite3.connect("class_info.db")
cur = conn.cursor()
cur.execute("INSERT INTO student(student_id, class, name) VALUES (?,?,?)", (sid, cls, name))
conn.commit()
return True, "注册成功!"
except sqlite3.IntegrityError:
return False, "学号已存在,无法重复注册!"
finally:
conn.close()
根据班级查询全部学生
def query_by_class(target_class):
conn = sqlite3.connect("class_info.db")
cur = conn.cursor()
cur.execute("SELECT student_id, name FROM student WHERE class = ?", (target_class,))
res = cur.fetchall()
conn.close()
return res
===================== 2. GUI主程序 =====================
class ClassInfoGUI:
def init(self, root):
self.root = root
self.root.title("班级信息收集系统")
self.root.geometry("600x420")
输入区域框架
frame_input = ttk.LabelFrame(root, text="学生注册录入")
frame_input.pack(pady=10, padx=10, fill="x")
学号
ttk.Label(frame_input, text="学号:").grid(row=0, column=0, padx=5, pady=5, sticky="w")
self.var_sid = tk.StringVar()
ttk.Entry(frame_input, textvariable=self.var_sid, width=20).grid(row=0, column=1, padx=5)
班级
ttk.Label(frame_input, text="班级:").grid(row=0, column=2, padx=5, pady=5, sticky="w")
self.var_cls = tk.StringVar()
ttk.Entry(frame_input, textvariable=self.var_cls, width=20).grid(row=0, column=3, padx=5)
姓名
ttk.Label(frame_input, text="姓名:").grid(row=1, column=0, padx=5, pady=5, sticky="w")
self.var_name = tk.StringVar()
ttk.Entry(frame_input, textvariable=self.var_name, width=20).grid(row=1, column=1, padx=5)
注册按钮
ttk.Button(frame_input, text="提交注册", command=self.register).grid(row=1, column=2, padx=10, pady=8)
查询区域框架
frame_query = ttk.LabelFrame(root, text="班级学生查询")
frame_query.pack(pady=5, padx=10, fill="x")
ttk.Label(frame_query, text="输入待查班级:").grid(row=0, column=0, padx=5, pady=5)
self.var_qcls = tk.StringVar()
ttk.Entry(frame_query, textvariable=self.var_qcls, width=25).grid(row=0, column=1, padx=5)
ttk.Button(frame_query, text="查询", command=self.search).grid(row=0, column=2, padx=10)
结果展示框
frame_res = ttk.LabelFrame(root, text="查询结果(学号 | 姓名)")
frame_res.pack(pady=10, padx=10, fill="both", expand=True)
self.text_res = tk.Text(frame_res, height=10)
self.text_res.pack(fill="both", expand=True, padx=5, pady=5)
注册按钮回调
def register(self):
sid = self.var_sid.get().strip()
cls = self.var_cls.get().strip()
name = self.var_name.get().strip()
if not sid or not cls or not name:
messagebox.showwarning("提示", "学号、班级、姓名不能为空!")
return
flag, msg = insert_student(sid, cls, name)
if flag:
messagebox.showinfo("成功", msg)
# 清空输入框
self.var_sid.set("")
self.var_cls.set("")
self.var_name.set("")
else:
messagebox.showerror("失败", msg)
查询按钮回调
def search(self):
qcls = self.var_qcls.get().strip()
if not qcls:
messagebox.showwarning("提示", "请输入要查询的班级!")
return
data = query_by_class(qcls)
self.text_res.delete(1.0, tk.END)
if len(data) == 0:
self.text_res.insert(tk.END, f"【{qcls}】暂无学生数据\n")
return
self.text_res.insert(tk.END, f"===== {qcls} 学生名单 =====\n")
for sid, name in data:
self.text_res.insert(tk.END, f"{sid} {name}\n")
if name == "main":
init_db() # 初始化数据库表
main_win = tk.Tk()
app = ClassInfoGUI(main_win)
main_win.mainloop()

浙公网安备 33010602011771号