import tkinter as tk from tkinter import messagebox from tkinter import ttk class Student: def __init__(self, id, name, age): self.id = id self.name = name self.age = age class StudentManagementSystem: def __init__(self, root): self.root = root self.root.title("学生信息管理系统") self.students = [] self.frame = ttk.Frame(self.root, padding="10") self.frame.grid(row=0, column=0, sticky=tk.W + tk.E + tk.N + tk.S) self.id_var = tk.StringVar() self.name_var = tk.StringVar() self.age_var = tk.StringVar() self.create_widgets() def create_widgets(self): ttk.Label(self.frame, text="学号:").grid(row=0, column=0, padx=5, pady=5) ttk.Entry(self.frame, textvariable=self.id_var).grid(row=0, column=1, padx=5, pady=5) ttk.Label(self.frame, text="姓名:").grid(row=1, column=0, padx=5, pady=5) ttk.Entry(self.frame, textvariable=self.name_var).grid(row=1, column=1, padx=5, pady=5) ttk.Label(self.frame, text="年龄:").grid(row=2, column=0, padx=5, pady=5) ttk.Entry(self.frame, textvariable=self.age_var).grid(row=2, column=1, padx=5, pady=5) ttk.Button(self.frame, text="添加学生", command=self.add_student).grid(row=3, column=0, columnspan=2, padx=5,pady=10) ttk.Button(self.frame, text="查看所有学生", command=self.view_students).grid(row=4, column=0, columnspan=2,padx=5, pady=10) ttk.Button(self.frame, text="搜索学生", command=self.search_student).grid(row=5, column=0, columnspan=2, padx=5,pady=10) def add_student(self): student_id = self.id_var.get() student_name = self.name_var.get() student_age = self.age_var.get() if not all([student_id, student_name, student_age]): messagebox.showerror("错误", "所有字段都必须填写!") return new_student = Student(student_id, student_name, student_age) self.students.append(new_student) messagebox.showinfo("成功", f"学生 {student_name} 添加成功!") self.clear_entries() def view_students(self): if not self.students: messagebox.showinfo("信息", "当前无学生信息。") return student_info = "\n".join([f"{s.id} - {s.name} - {s.age}" for s in self.students]) messagebox.showinfo("所有学生信息", student_info) def search_student(self): search_id = self.id_var.get() found_students = [s for s in self.students if s.id == search_id] if not found_students: messagebox.showinfo("搜索结果", f"未找到学号为 {search_id} 的学生。") else: student_info = "\n".join([f"{s.name} - {s.age}" for s in found_students]) messagebox.showinfo("搜索结果", f"学号 {search_id} 的学生信息:\n{student_info}") def clear_entries(self): self.id_var.set("") self.name_var.set("") self.age_var.set("") if __name__ == "__main__": root = tk.Tk() app = StudentManagementSystem(root) root.mainloop()c
程序分析:
类定义
-
Student: 定义了一个学生类,包含学号(id)、姓名(name)和年龄(age)三个属性。这是系统中学生信息的基本数据结构。
-
StudentManagementSystem: 系统的核心类,包含Tkinter GUI的搭建、学生数据的管理逻辑。
初始化
- 在
StudentManagementSystem
类的构造函数__init__
中,初始化了Tkinter的根窗口(root),设置了窗口标题,并创建了一个容器frame用于放置各种控件。此外,还定义了三个StringVar变量来绑定输入框的内容,用于获取和设置学号、姓名和年龄的值。
界面构建
create_widgets
方法构建了系统的用户界面,包括学号、姓名、年龄的输入框(Label+Entry组合),以及“添加学生”、“查看所有学生”和“搜索学生”三个按钮。每个按钮都绑定了相应的处理函数。
功能实现
-
添加学生 (
add_student
): 当用户点击“添加学生”按钮时,收集输入框中的学号、姓名和年龄信息,验证是否全部填写,然后创建一个新的Student
对象并添加到self.students
列表中。完成后,通过消息框提示用户添加成功,并清空输入框。 -
查看所有学生 (
view_students
): 若学生列表不为空,则以消息框形式展示所有学生的学号、姓名、年龄信息。否则,提示无学生信息。 -
搜索学生 (
search_student
): 根据输入的学号在学生列表中查找匹配项。如果有匹配的学生,则显示其姓名和年龄信息;如果没有找到,则告知用户。 -
清空输入框 (
clear_entries
): 清空学号、姓名和年龄的输入框,便于用户输入新的信息。
主函数
- 最后,在
if __name__ == "__main__":
块中,创建Tkinter的根窗口,并实例化StudentManagementSystem
类,启动Tkinter的事件循环,使得窗口得以显示并响应用户操作。