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(
sid TEXT PRIMARY KEY,
class TEXT NOT NULL,
name TEXT NOT NULL
)
''')
conn.commit()
conn.close()

2. 新增学生信息

def add_student():
sid = entry_sid.get().strip()
cls = entry_class.get().strip()
name = entry_name.get().strip()
if not (sid and cls and name):
messagebox.showwarning("提示", "学号、班级、姓名不能为空!")
return
try:
conn = sqlite3.connect("class_info.db")
cur = conn.cursor()
cur.execute("INSERT INTO student(sid, class, name) VALUES (?,?,?)", (sid, cls, name))
conn.commit()
conn.close()
messagebox.showinfo("成功", "信息录入完成!")
# 清空输入框
entry_sid.delete(0, tk.END)
entry_class.delete(0, tk.END)
entry_name.delete(0, tk.END)
except sqlite3.IntegrityError:
messagebox.showerror("错误", "该学号已存在,不能重复录入!")

3. 根据班级查询所有学生

def query_class():
cls = entry_query_class.get().strip()
if not cls:
messagebox.showwarning("提示", "请输入要查询的班级!")
return
conn = sqlite3.connect("class_info.db")
cur = conn.cursor()
cur.execute("SELECT sid, name FROM student WHERE class=?", (cls,))
res = cur.fetchall()
conn.close()
# 清空表格原有数据
for item in tree.get_children():
tree.delete(item)
if len(res) == 0:
messagebox.showinfo("查询结果", "该班级暂无学生信息")
return
# 插入查询结果
for row in res:
tree.insert("", tk.END, values=row)

主窗口构建

if name == "main":
init_db()
root = tk.Tk()
root.title("班级信息收集系统")
root.geometry("520x420")

========== 录入区域 ==========

frame_input = ttk.LabelFrame(root, text="学生信息录入(注册)")
frame_input.pack(pady=8, padx=10, fill="x")

ttk.Label(frame_input, text="学号:").grid(row=0, column=0, padx=5, pady=5, sticky="e")
entry_sid = ttk.Entry(frame_input, width=18)
entry_sid.grid(row=0, column=1, padx=5, pady=5)

ttk.Label(frame_input, text="班级:").grid(row=0, column=2, padx=5, pady=5, sticky="e")
entry_class = ttk.Entry(frame_input, width=18)
entry_class.grid(row=0, column=3, padx=5, pady=5)

ttk.Label(frame_input, text="姓名:").grid(row=1, column=0, padx=5, pady=5, sticky="e")
entry_name = ttk.Entry(frame_input, width=18)
entry_name.grid(row=1, column=1, padx=5, pady=5)

btn_add = ttk.Button(frame_input, text="提交录入", command=add_student)
btn_add.grid(row=1, column=2, columnspan=2, pady=5)

========== 查询区域 ==========

frame_query = ttk.LabelFrame(root, text="按班级查询本班同学")
frame_query.pack(pady=8, padx=10, fill="x")

ttk.Label(frame_query, text="输入班级:").grid(row=0, column=0, padx=5, pady=5)
entry_query_class = ttk.Entry(frame_query, width=25)
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)

========== 结果表格 ==========

frame_table = ttk.LabelFrame(root, text="查询结果列表")
frame_table.pack(pady=8, padx=10, fill="both", expand=True)

columns = ("sid", "name")
tree = ttk.Treeview(frame_table, columns=columns, show="headings")
tree.heading("sid", text="学号")
tree.heading("name", text="姓名")
tree.column("sid", width=200)
tree.column("name", width=250)
tree.pack(fill="both", expand=True)

root.mainloop()

posted @ 2026-07-03 14:36  Lin03  阅读(1)  评论(0)    收藏  举报