班级信息

import tkinter as tk
from tkinter import 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_name TEXT NOT NULL,
name TEXT NOT NULL
)
''')
conn.commit()
conn.close()

2. 录入学生信息函数

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, name) VALUES (?,?,?)", (sid, cls, name))
conn.commit()
conn.close()
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("重复", "该学号已存在,无法重复录入!")

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

def query_class():
cls = entry_query_class.get().strip()
if not cls:
messagebox.showwarning("提示", "请输入要查询的班级!")
return
# 清空列表框
list_result.delete(0, tk.END)
conn = sqlite3.connect("class_info.db")
cur = conn.cursor()
cur.execute("SELECT student_id, name FROM student WHERE class_name=?", (cls,))
res = cur.fetchall()
conn.close()
if len(res) == 0:
list_result.insert(tk.END, "该班级暂无学生信息")
else:
list_result.insert(tk.END, f"===== {cls} 学生名单(学号 | 姓名) =====")
for sid, name in res:
list_result.insert(tk.END, f"{sid} | {name}")

主程序GUI窗口

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

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

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

tk.Label(frame_input, text="学号:").grid(row=0, column=0, sticky="w")
entry_id = tk.Entry(frame_input, width=22)
entry_id.grid(row=0, column=1, padx=8)

tk.Label(frame_input, text="班级:").grid(row=1, column=0, sticky="w", pady=6)
entry_class = tk.Entry(frame_input, width=22)
entry_class.grid(row=1, column=1, padx=8)

tk.Label(frame_input, text="姓名:").grid(row=2, column=0, sticky="w")
entry_name = tk.Entry(frame_input, width=22)
entry_name.grid(row=2, column=1, padx=8)

btn_add = tk.Button(frame_input, text="提交录入", command=add_student, bg="#4285F4", fg="white")
btn_add.grid(row=3, column=0, columnspan=2, pady=8)

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

frame_query = tk.LabelFrame(root, text="按班级查询学生", padx=10, pady=10)
frame_query.pack(fill="both", expand=True, padx=15, pady=8)

tk.Label(frame_query, text="输入查询班级:").grid(row=0, column=0, sticky="w")
entry_query_class = tk.Entry(frame_query, width=26)
entry_query_class.grid(row=0, column=1, padx=8)
btn_query = tk.Button(frame_query, text="查询", command=query_class, bg="#34A853", fg="white")
btn_query.grid(row=0, column=2, padx=5)

tk.Label(frame_query, text="查询结果:").grid(row=1, column=0, sticky="w", pady=6)
list_result = tk.Listbox(frame_query, width=60, height=10)
list_result.grid(row=2, column=0, columnspan=3)

root.mainloop()

posted @ 2026-06-17 21:49  何裕双  阅读(1)  评论(0)    收藏  举报