学生成绩管理系统
目录
一、 代码结构优点
二、代码块分析
1. 类定义和初始化
2. 添加学生功能 (add_student)
3. 删除学生功能 (remove_student)
4. 修改成绩功能 (modify_scores)
5. 计算平均分功能 (calculate_average)
6. 查询单个学生信息 (show_student)
7. 显示所有学生信息 (show_all)
8. 课程统计功能 (course_statistics)
9. 主运行循环 (run)
10. 程序入口
总结
三、完整代码
一、 代码结构优点
- 类封装合理:将学生成绩管理系统封装在
StudentGradeSystem
类中,符合面向对象设计原则 - 数据结构选择恰当:使用字典存储学生信息(学号作为键),列表存储成绩
- 功能模块完整:实现了添加、删除、修改、查询、统计等核心功能
- 错误处理机制:对成绩输入进行了异常捕获,防止无效输入
- 用户界面友好:提供了清晰的菜单导航系统
二、代码块分析
1. 类定义和初始化
class StudentGradeSystem:def __init__(self):self.students = {}
-
StudentGradeSystem
是主类,代表整个成绩管理系统 -
__init__
是构造函数,在创建对象时自动调用 -
self.students = {}
创建一个空字典,用于存储学生信息-
键(key): 学号 (student_id)
-
值(value): 包含学生信息的字典 (name和scores)
-
2. 添加学生功能 (add_student
)
def add_student(self):student_id = input("请输入学号:")if student_id in self.students:print("该学号已经存在!")returnname = input("请输入名字:")score_input = input("请输入各科成绩(用空格分隔):")try:scores = list(map(float, score_input.split()))self.students[student_id] = {"name": name, "scores": scores}print(f"学生{name}添加成功!")except ValueError:print("成绩输入无效,请确保输入的是数字!")
功能流程:
-
输入学号,检查是否已存在
-
输入学生姓名
-
输入各科成绩(用空格分隔)
-
尝试将输入的成绩转换为浮点数列表
-
如果成功,将学生信息添加到字典
-
如果转换失败,提示输入错误
3. 删除学生功能 (remove_student
)
def remove_student(self):student_id = input("请输入要删除学生的学号: ")if student_id in self.students:name = self.students[student_id]['name']del self.students[student_id]print(f"学生 {name} 已删除!")else:print("未找到该学号对应的学生!")
功能流程:
-
输入要删除的学生学号
-
检查该学号是否存在
-
如果存在,获取学生姓名并删除该学生记录
-
如果不存在,提示未找到
4. 修改成绩功能 (modify_scores
)
def modify_scores(self):student_id = input("请输入要修改成绩的学号: ")if student_id not in self.students:print("未找到该学生!")returnprint("当前成绩:", self.students[student_id]['scores'])new_scores = input("请输入新的成绩(用空格分隔): ")try:scores = list(map(float, new_scores.split()))self.students[student_id]['scores'] = scoresprint("成绩修改成功!")except ValueError:print("成绩输入无效,修改失败!")
功能流程:
-
输入要修改成绩的学生学号
-
检查该学号是否存在
-
显示当前成绩
-
输入新的成绩
-
尝试将新成绩转换为浮点数列表
-
如果成功,更新学生成绩
-
如果转换失败,提示输入错误
5. 计算平均分功能 (calculate_average
)
def calculate_average(self, scores):if len(scores) == 0:return 0.0return sum(scores) / len(scores)
这是一个辅助函数:
-
接收一个成绩列表
-
如果列表为空,返回0.0
-
否则计算并返回平均分
-
在其他函数中被调用
6. 查询单个学生信息 (show_student
)
def show_student(self):student_id = input("请输入要查询学生的学号: ")if student_id in self.students:student = self.students[student_id]avg = self.calculate_average(student['scores'])print(f"\n学号: {student_id}")print(f"姓名: {student['name']}")print(f"成绩: {student['scores']}")print(f"平均分: {avg:.2f}")else:print("未找到该学生!")
功能流程:
-
输入要查询的学生学号
-
检查该学号是否存在
-
如果存在,获取学生信息并计算平均分
-
打印学生详细信息(学号、姓名、成绩、平均分)
-
如果不存在,提示未找到
7. 显示所有学生信息 (show_all
)
def show_all(self):if not self.students:print("没有学生记录!")returnprint("\n===== 所有学生信息 =====")for sid, info in self.students.items():avg = self.calculate_average(info['scores'])print(f"学号: {sid} | 姓名: {info['name']} | 成绩: {info['scores']} | 平均分: {avg:.2f}")print("=======================")
功能流程:
-
检查是否有学生记录
-
如果没有,提示没有记录
-
如果有,遍历所有学生
-
对每个学生计算平均分
-
打印所有学生信息
8. 课程统计功能 (course_statistics
)
def course_statistics(self):if not self.students:print("没有学生记录!")return# 确定课程数量(取最大成绩列表长度)num_courses = max(len(info['scores']) for info in self.students.values())print("\n===== 课程成绩统计 =====")for course_idx in range(num_courses):course_scores = []for info in self.students.values():if course_idx < len(info['scores']):course_scores.append(info['scores'][course_idx])if course_scores:avg = sum(course_scores) / len(course_scores)print(f"课程{course_idx+1}: 平均分={avg:.2f} | 最高分={max(course_scores)} | 最低分={min(course_scores)}")print("=======================")
功能流程:
-
检查是否有学生记录
-
确定课程数量(取所有学生中成绩数量最多的)
-
对每门课程:
-
收集所有学生在该课程上的成绩
-
计算该课程的平均分
-
找出该课程的最高分和最低分
-
打印课程统计信息
-
9. 主运行循环 (run
)
def run(self):"""运行系统"""while True:print("\n===== 学生成绩管理系统 =====")print("1. 添加学生")print("2. 删除学生")print("3. 修改成绩")print("4. 查询学生")print("5. 显示所有")print("6. 课程统计")print("0. 退出系统")choice = input("请选择操作: ")if choice == '1':self.add_student()elif choice == '2':self.remove_student()elif choice == '3':self.modify_scores()elif choice == '4':self.show_student()elif choice == '5':self.show_all()elif choice == '6':self.course_statistics()elif choice == '0':print("感谢使用,再见!")breakelse:print("无效选择,请重新输入!")
这是程序的主循环:
-
显示菜单选项
-
等待用户输入选择
-
根据用户选择调用相应的功能函数
-
如果选择0,退出程序
10. 程序入口
if __name__ == "__main__":system = StudentGradeSystem()system.run()
-
这是程序的启动点
-
当直接运行这个Python文件时,会创建StudentGradeSystem对象
-
然后调用run()方法启动程序
总结
这个学生成绩管理系统实现了以下核心功能:
添加学生信息(学号、姓名、各科成绩)
删除学生记录
修改学生成绩
查询单个学生信息
显示所有学生信息
统计各科成绩(平均分、最高分、最低分)
程序使用字典来存储学生信息,以学号为键,学生信息(姓名和成绩列表)为值。所有操作都是通过命令行界面进行的,用户可以通过菜单选择不同的功能。
三、完整代码
#学生成绩管理系统
class StudentGradeSystem: # 修正类名拼写错误def __init__(self):self.students = {}#添加学生信息def add_student(self):student_id = input("请输入学号:")if student_id in self.students:print("该学号已经存在!")return # 添加返回避免继续执行name = input("请输入名字:")score_input = input("请输入各科成绩(用空格分隔):")try:scores = list(map(float, score_input.split()))self.students[student_id] = {"name": name, "scores": scores} # 修正键名print(f"学生{name}添加成功!") # 修正格式化字符串except ValueError:print("成绩输入无效,请确保输入的是数字!")#删除学生信息def remove_student(self):student_id = input("请输入要删除学生的学号: ")if student_id in self.students:name = self.students[student_id]['name']del self.students[student_id]print(f"学生 {name} 已删除!")else:print("未找到该学号对应的学生!")# 添加缺失的修改成绩方法def modify_scores(self):student_id = input("请输入要修改成绩的学号: ")if student_id not in self.students:print("未找到该学生!")returnprint("当前成绩:", self.students[student_id]['scores'])new_scores = input("请输入新的成绩(用空格分隔): ")try:scores = list(map(float, new_scores.split()))self.students[student_id]['scores'] = scoresprint("成绩修改成功!")except ValueError:print("成绩输入无效,修改失败!")#计算平均分def calculate_average(self, scores):if len(scores) == 0: # 修正判断条件return 0.0return sum(scores) / len(scores)#显示单个学生信息def show_student(self):student_id = input("请输入要查询学生的学号: ")if student_id in self.students:student = self.students[student_id]avg = self.calculate_average(student['scores'])print(f"\n学号: {student_id}")print(f"姓名: {student['name']}")print(f"成绩: {student['scores']}")print(f"平均分: {avg:.2f}") # 格式化输出else:print("未找到该学生!")#显示所有学生信息def show_all(self):if not self.students:print("没有学生记录!")returnprint("\n===== 所有学生信息 =====")for sid, info in self.students.items():avg = self.calculate_average(info['scores'])print(f"学号: {sid} | 姓名: {info['name']} | 成绩: {info['scores']} | 平均分: {avg:.2f}")print("=======================")#统计各科成绩def course_statistics(self):if not self.students:print("没有学生记录!")return# 确定课程数量(取最大成绩列表长度)num_courses = max(len(info['scores']) for info in self.students.values())print("\n===== 课程成绩统计 =====")for course_idx in range(num_courses):course_scores = [] # 修正变量名拼写for info in self.students.values():if course_idx < len(info['scores']):course_scores.append(info['scores'][course_idx])if course_scores:avg = sum(course_scores) / len(course_scores)print(f"课程{course_idx+1}: 平均分={avg:.2f} | 最高分={max(course_scores)} | 最低分={min(course_scores)}")print("=======================")def run(self):"""运行系统"""while True:print("\n===== 学生成绩管理系统 =====")print("1. 添加学生")print("2. 删除学生")print("3. 修改成绩")print("4. 查询学生")print("5. 显示所有")print("6. 课程统计")print("0. 退出系统")choice = input("请选择操作: ")if choice == '1':self.add_student()elif choice == '2':self.remove_student()elif choice == '3':self.modify_scores() # 添加的方法elif choice == '4':self.show_student()elif choice == '5':self.show_all()elif choice == '6':self.course_statistics()elif choice == '0':print("感谢使用,再见!")breakelse:print("无效选择,请重新输入!")# 运行系统
if __name__ == "__main__":system = StudentGradeSystem() # 修正类名system.run()