一、设计要求
1. 数据文件初始化模块
负责检查是否存在用于存储学生信息的文件。如果文件不存在,则创建一个新的CSV文件并写入标题行,确保数据文件的初始状态正确。
2. 界面创建模块
负责创建图形用户界面,包括输入框、按钮和表格控件等。为用户提供输入和操作学生信息的界面布局,并定义控件的摆放位置和交互行为。
3. 数据加载模块
负责从CSV文件中读取学生数据,并将数据加载到表格控件中显示。确保每次操作后,表格显示的内容与CSV文件中的数据保持一致。
4. 添加学生信息模块
负责从用户输入框获取学生信息,验证所有字段是否填写完整。如果填写完整,将学生信息追加写入CSV文件,并更新表格显示。
5. 删除学生信息模块
负责从表格中获取用户选择的学生记录,通过学号识别要删除的学生,并从CSV文件中删除相应记录,然后更新表格显示。
6. 修改学生信息模块
负责从表格中获取用户选择的学生记录,通过学号识别要修改的学生。根据用户输入的新信息更新文件中的相应记录,并刷新表格显示。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
7. 按姓名查询学生信息模块
负责根据用户输入的姓名,在文件中查找匹配的学生记录。如果找到匹配记录,将结果显示在表格中;否则,提示用户未找到学生。
8. 按学号查询学生信息模块
负责根据用户输入的学号,在CSV文件中查找匹配的学生记录。如果找到匹配记录,将结果显示在表格中;否则,提示用户未找到学生。
9. 统计分数段模块
负责根据用户输入的课程名和分数段,在文件中查找符合条件的学生记录,并将这些记录显示在表格中。帮助用户统计某课程在指定分数段内的学生情况。
10. 按成绩排序模块
负责根据用户输入的课程名,对学生的该课程成绩进行排序。可以选择升序或降序排序,并将排序结果显示在表格中,帮助用户了解学生成绩的分布情况。
二、设计思路
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
1. 总体设计
该代码设计了一个学生信息管理系统,基于Tkinter实现图形用户界面(GUI),通过CSV文件来存储和管理学生信息。系统支持添加、删除、修改、查询学生信息,以及对学生成绩进行统计和排序。
2. 类的定义与初始化
class StudentInfoSystem: def __init__(self, root): self.root = root # 略
定义了StudentInfoSystem
类,其中包含初始化方法__init__
,初始化根窗口、数据文件和界面控件。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
3. 数据文件初始化
def init_data_file(self): if not os.path.exists(self.filename): with open(self.filename, "w", newline="") as file: writer = csv.writer(file) writer.writerow(["姓名", "学号", "语文", "数学", "英语"])
检查数据文件是否存在,如果不存在则创建一个包含标题行的CSV文件。
4. 界面控件创建
def create_widgets(self): frame = tk.Frame(self.root) frame.pack(padx=10, pady=10) # 添加学生信息的控件 tk.Label(frame, text="姓名:").grid(row=0, column=0, padx=5, pady=5) # 略。。。。 # 略。。。。 # 略。。。。 # 略。。。。 # 略。。。。 self.name_entry.grid(row=0, column=1, padx=5, pady=5) # 其他控件略 # 显示表格 # 略。。。。 # > 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈 self.tree.heading("英语", text="英语") self.tree.pack(fill=tk.BOTH, expand=True) self.load_data()
创建用于输入学生信息、查询、统计和排序的各种控件,并将控件排列在窗口中。创建一个表格控件用于显示学生信息,并加载现有数据。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
5. 数据加载
def load_data(self): for row in self.tree.get_children(): self.tree.delete(row) with open(self.filename, "r") as file: # 略。。。。 # 略。。。。 # 略。。。。 # 略。。。。 # 略。。。。> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈 # 略。。。。 # 略。。。。 self.tree.insert("", tk.END, values=row)
读取CSV文件中的数据并显示在表格中,先清空表格中的旧数据,然后插入新数据。
6. 添加学生信息
def add_student(self): name = self.name_entry.get() student_id = self.id_entry.get() # 略。。。。 # 略。。。。 # 略。。。。> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈 # 略。。。。 # 略。。。。 # 略。。。。 # 略。。。。 writer.writerow([name, student_id, chinese, math, english]) self.load_data() else: messagebox.showwarning("警告", "请填写所有字段")
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
获取输入框中的信息,检查所有字段是否已填写,若已填写则将新学生信息写入CSV文件,并重新加载数据以更新表格。
7. 删除学生信息
def delete_student(self): selected_item = self.tree.selection() if selected_item: # 略。。。。 # 略。。。。 # 略。。。。> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈 # 略。。。。 # 略。。。。 # 略。。。。 if row[1] != student[1]: # Identify student by student ID writer.writerow(row) self.load_data() else: messagebox.showwarning("警告", "请选择要删除的学生")
通过学号识别并删除选中的学生信息,然后更新CSV文件并重新加载数据。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
8. 修改学生信息
def modify_student(self): selected_item = self.tree.selection() if selected_item: student = self.tree.item(selected_item)["values"] name = self.name_entry.get() student_id = self.id_entry.get() chinese = self.chinese_entry.get() # 略。。。。 # 略。。。。 # 略。。。。 # 略。。。。> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈 # 略。。。。 else: students.append(row) with open(self.filename, "w", newline="") as file: writer = csv.writer(file) writer.writerows(students) self.load_data() else: messagebox.showwarning("警告", "请填写所有字段") else: messagebox.showwarning("警告", "请选择要修改的学生")
通过学号识别并修改选中的学生信息,然后更新CSV文件并重新加载数据。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
【python】python基于tkinter的学生成绩管理系统(源码+数据文件)【独一无二】(二):