简易的学生信息管理系统

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的事件循环,使得窗口得以显示并响应用户操作。
  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值