班级信息收集
`import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3
class ClassInfoApp:
def init(self, root):
self.root = root
self.root.title("班级信息收集系统")
self.root.geometry("600x450")
self.root.resizable(False, False)
# 创建数据库连接
self.conn = sqlite3.connect("class_info.db")
self.create_table()
# 创建主框架
self.main_frame = ttk.Frame(root, padding="20")
self.main_frame.pack(fill=tk.BOTH, expand=True)
# 创建标签页
self.tab_control = ttk.Notebook(self.main_frame)
# 注册页面
self.register_tab = ttk.Frame(self.tab_control)
self.tab_control.add(self.register_tab, text="注册信息")
self.create_register_tab()
# 查询页面
self.query_tab = ttk.Frame(self.tab_control)
self.tab_control.add(self.query_tab, text="查询信息")
self.create_query_tab()
self.tab_control.pack(expand=1, fill="both")
# 底部状态栏
self.status_var = tk.StringVar()
self.status_var.set("就绪")
self.status_bar = ttk.Label(root, textvariable=self.status_var, relief=tk.SUNKEN, anchor=tk.W)
self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)
def create_table(self):
"""创建数据库表"""
with self.conn:
cursor = self.conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS class_info (
student_id TEXT PRIMARY KEY,
class_name TEXT NOT NULL,
name TEXT NOT NULL
)
''')
def create_register_tab(self):
"""创建注册页面"""
# 标题
ttk.Label(self.register_tab, text="学生信息注册", font=("Arial", 14, "bold")).grid(row=0, column=0, columnspan=2, pady=10)
# 学号
ttk.Label(self.register_tab, text="学号:").grid(row=1, column=0, sticky=tk.W, pady=5)
self.student_id_var = tk.StringVar()
ttk.Entry(self.register_tab, textvariable=self.student_id_var, width=30).grid(row=1, column=1, pady=5)
# 班级
ttk.Label(self.register_tab, text="班级:").grid(row=2, column=0, sticky=tk.W, pady=5)
self.class_name_var = tk.StringVar()
ttk.Entry(self.register_tab, textvariable=self.class_name_var, width=30).grid(row=2, column=1, pady=5)
# 姓名
ttk.Label(self.register_tab, text="姓名:").grid(row=3, column=0, sticky=tk.W, pady=5)
self.name_var = tk.StringVar()
ttk.Entry(self.register_tab, textvariable=self.name_var, width=30).grid(row=3, column=1, pady=5)
# 注册按钮
register_btn = ttk.Button(self.register_tab, text="注册", command=self.register_student)
register_btn.grid(row=4, column=0, columnspan=2, pady=20)
# 状态标签
self.register_status_var = tk.StringVar()
ttk.Label(self.register_tab, textvariable=self.register_status_var, foreground="green").grid(row=5, column=0, columnspan=2)
def create_query_tab(self):
"""创建查询页面"""
# 标题
ttk.Label(self.query_tab, text="班级同学信息查询", font=("Arial", 14, "bold")).grid(row=0, column=0, columnspan=3, pady=10)
# 查询条件
ttk.Label(self.query_tab, text="按班级查询:").grid(row=1, column=0, sticky=tk.W, pady=5)
self.query_class_var = tk.StringVar()
ttk.Entry(self.query_tab, textvariable=self.query_class_var, width=20).grid(row=1, column=1, pady=5)
# 查询按钮
query_btn = ttk.Button(self.query_tab, text="查询", command=self.query_students)
query_btn.grid(row=1, column=2, padx=10)
# 结果表格
columns = ("学号", "班级", "姓名")
self.tree = ttk.Treeview(self.query_tab, columns=columns, show="headings")
for col in columns:
self.tree.heading(col, text=col)
self.tree.column(col, width=150, anchor=tk.CENTER)
self.tree.grid(row=2, column=0, columnspan=3, pady=10, sticky=(tk.N, tk.S, tk.W, tk.E))
# 滚动条
scrollbar = ttk.Scrollbar(self.query_tab, orient=tk.VERTICAL, command=self.tree.yview)
self.tree.configure(yscroll=scrollbar.set)
scrollbar.grid(row=2, column=3, sticky=(tk.N, tk.S))
# 设置列宽和行高
self.query_tab.grid_columnconfigure(0, weight=1)
self.query_tab.grid_columnconfigure(1, weight=1)
self.query_tab.grid_columnconfigure(2, weight=1)
self.query_tab.grid_rowconfigure(2, weight=1)
def register_student(self):
"""注册学生信息"""
student_id = self.student_id_var.get().strip()
class_name = self.class_name_var.get().strip()
name = self.name_var.get().strip()
if not student_id or not class_name or not name:
messagebox.showerror("错误", "请填写完整的学生信息!")
return
try:
with self.conn:
cursor = self.conn.cursor()
cursor.execute(
"INSERT INTO class_info (student_id, class_name, name) VALUES (?, ?, ?)",
(student_id, class_name, name)
)
self.register_status_var.set(f"学生 {name} (学号: {student_id}) 注册成功!")
self.status_var.set(f"注册成功: {name} ({student_id})")
# 清空输入框
self.student_id_var.set("")
self.class_name_var.set("")
self.name_var.set("")
except sqlite3.IntegrityError:
messagebox.showerror("错误", f"学号 {student_id} 已存在!")
self.register_status_var.set("")
def query_students(self):
"""查询班级学生信息"""
class_name = self.query_class_var.get().strip()
if not class_name:
messagebox.showerror("错误", "请输入要查询的班级!")
return
# 清空表格
for item in self.tree.get_children():
self.tree.delete(item)
try:
with self.conn:
cursor = self.conn.cursor()
cursor.execute(
"SELECT student_id, class_name, name FROM class_info WHERE class_name = ? ORDER BY student_id",
(class_name,)
)
students = cursor.fetchall()
if not students:
messagebox.showinfo("提示", f"未找到班级 {class_name} 的学生信息!")
self.status_var.set(f"查询班级: {class_name} (未找到记录)")
return
# 填充表格
for student in students:
self.tree.insert("", tk.END, values=student)
self.status_var.set(f"查询成功: {len(students)} 条记录")
except Exception as e:
messagebox.showerror("错误", f"查询失败: {str(e)}")
self.status_var.set("查询失败")
if name == "main":
root = tk.Tk()
app = ClassInfoApp(root)
root.mainloop() `

浙公网安备 33010602011771号