👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
【python】python基于tkinter的学生成绩管理系统(源码+数据文件)【独一无二】
一、设计要求
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文件并重新加载数据。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
9. 查询学生信息
def query_by_name(self):
query_name = self.query_name_entry.get()
if query_name:
with open(self.filename, "r") as file:
reader = csv.reader(file)
next(reader)
for row in reader:
if row[0] == query_name:
self.tree.delete(*self.tree.get_children())
self.tree.insert("", tk.END, values=row)
return
messagebox.showinfo("信息", "未找到学生")
else:
messagebox.showwarning("警告", "请输入姓名")
按姓名或学号查询学生信息,若找到匹配的记录,则在表格中显示该记录。
10. 统计分数段
def stats_score_range(self):
course = self.course_entry.get()
score_range = self.score_range_entry.get()
if course and score_range:
try:
min_score, max_score = map(int, score_range.split('-'))
except ValueError:
messagebox.showwarning("警告", "请输入正确的分数段格式 (例如 60-70)")
return
course_index = {"语文": 2, "数学": 3, "英语": 4}.get(course)
if course_index is None:
messagebox.showwarning("警告", "请输入正确的课程名 (语文, 数学, 英语)")
return
with open(self.filename, "r") as file: # > 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
reader = csv.reader(file)
next(reader)
filtered_students = [row for row in reader if min_score <= int(row[course_index]) <= max_score]
self.tree.delete(*self.tree.get_children())
for row in filtered_students:
self.tree.insert("", tk.END, values=row)
else:
messagebox.showwarning("警告", "请输入课程名和分数段")
按指定课程和分数段统计学生信息,并在表格中显示符合条件的学生记录。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
11. 按成绩排序
def sort_by_score(self, order="asc"):
course = self.sort_course_entry.get()
if course:
course_index = {"语文": 2, "数学": 3, "英语": 4}.get(course)
if course_index is None:
messagebox.showwarning("警告", "请输入正确的课程名 (语文, 数学, 英语)")
return
with open(self.filename, "r") as file:
# 略。。。。
# 略。。。。
# 略。。。。> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
# 略。。。。
# 略。。。。
else:
messagebox.showwarning("警告", "请输入课程名")
按指定课程的成绩对学生信息进行排序,并在表格中显示排序后的结果。
该代码通过定义一个StudentInfoSystem
类,使用Tkinter创建图形用户界面,提供了学生信息的添加、删除、修改、查询、统计和排序功能。数据通过CSV文件存储和管理,每个功能模块都对应具体的操作,实现了一个功能完善的学生信息管理系统。
三、可视化分析
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
主界面展示
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
添加学生
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
查询学生
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
统计分数段
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈
成绩排序
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈