GUI程序设计--班级信息收集系
import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3
---------------------- 数据库初始化函数 ----------------------
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 add_student():
sid = entry_id.get().strip()
cls = entry_class.get().strip()
name = entry_name.get().strip()
if not sid or not cls or not name:
messagebox.showerror("输入错误", "学号、班级、姓名不能为空!")
return
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()
messagebox.showinfo("成功", f"学生【{name}】注册完成!")
# 清空输入框
entry_id.delete(0, tk.END)
entry_class.delete(0, tk.END)
entry_name.delete(0, tk.END)
except sqlite3.IntegrityError:
messagebox.showerror("失败", "该学号已存在,无法重复注册!")
finally:
conn.close()
---------------------- 按班级查询全部学生 ----------------------
def query_class():
target_class = entry_query_class.get().strip()
if not target_class:
messagebox.showwarning("提示", "请输入要查询的班级!")
return
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()
# 清空输出文本框
text_output.delete(1.0, tk.END)
if len(res) == 0:
text_output.insert(tk.END, f"班级 {target_class} 暂无学生数据")
return
# 拼接查询结果
text_output.insert(tk.END, f"===== {target_class} 全部学生信息 =====\n")
text_output.insert(tk.END, "学号\t\t姓名\n")
text_output.insert(tk.END, "-"*30 + "\n")
for sid, name in res:
text_output.insert(tk.END, f"{sid}\t{name}\n")
---------------------- GUI主窗口搭建 ----------------------
if name == "main":
init_db() # 启动时初始化数据库
root = tk.Tk()
root.title("班级信息收集系统")
root.geometry("620x420")
1. 注册区域
frame_add = ttk.LabelFrame(root, text="学生注册录入")
frame_add.pack(fill="x", padx=10, pady=6)
ttk.Label(frame_add, text="学号:").grid(row=0, column=0, padx=5, pady=5)
entry_id = ttk.Entry(frame_add, width=18)
entry_id.grid(row=0, column=1, padx=5, pady=5)
ttk.Label(frame_add, text="班级:").grid(row=0, column=2, padx=5, pady=5)
entry_class = ttk.Entry(frame_add, width=18)
entry_class.grid(row=0, column=3, padx=5, pady=5)
ttk.Label(frame_add, text="姓名:").grid(row=1, column=0, padx=5, pady=5)
entry_name = ttk.Entry(frame_add, width=18)
entry_name.grid(row=1, column=1, padx=5, pady=5)
btn_add = ttk.Button(frame_add, text="提交注册", command=add_student)
btn_add.grid(row=1, column=3, padx=5, pady=5)
2. 查询区域
frame_query = ttk.LabelFrame(root, text="按班级查询学生")
frame_query.pack(fill="x", padx=10, pady=6)
ttk.Label(frame_query, text="输入班级:").grid(row=0, column=0, padx=5, pady=5)
entry_query_class = ttk.Entry(frame_query, width=30)
entry_query_class.grid(row=0, column=1, padx=5, pady=5)
btn_query = ttk.Button(frame_query, text="查询", command=query_class)
btn_query.grid(row=0, column=2, padx=5, pady=5)
3. 查询结果输出框
frame_out = ttk.LabelFrame(root, text="查询结果(包含本人姓名)")
frame_out.pack(fill="both", expand=True, padx=10, pady=6)
text_output = tk.Text(frame_out, height=10)
text_output.pack(fill="both", expand=True, padx=5, pady=5)
root.mainloop()

浙公网安备 33010602011771号