学生成绩管理系统

发布于:2025-06-18 ⋅ 阅读:(22) ⋅ 点赞:(0)

目录

一、 代码结构优点

二、代码块分析

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("该学号已经存在!")
        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("成绩输入无效,请确保输入的是数字!")

功能流程:

  1. 输入学号,检查是否已存在

  2. 输入学生姓名

  3. 输入各科成绩(用空格分隔)

  4. 尝试将输入的成绩转换为浮点数列表

  5. 如果成功,将学生信息添加到字典

  6. 如果转换失败,提示输入错误

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("未找到该学号对应的学生!")

功能流程:

  1. 输入要删除的学生学号

  2. 检查该学号是否存在

  3. 如果存在,获取学生姓名并删除该学生记录

  4. 如果不存在,提示未找到

4. 修改成绩功能 (modify_scores)

def modify_scores(self):
    student_id = input("请输入要修改成绩的学号: ")
    if student_id not in self.students:
        print("未找到该学生!")
        return
    
    print("当前成绩:", self.students[student_id]['scores'])
    new_scores = input("请输入新的成绩(用空格分隔): ")
    try:
        scores = list(map(float, new_scores.split()))
        self.students[student_id]['scores'] = scores
        print("成绩修改成功!")
    except ValueError:
        print("成绩输入无效,修改失败!")

功能流程:

  1. 输入要修改成绩的学生学号

  2. 检查该学号是否存在

  3. 显示当前成绩

  4. 输入新的成绩

  5. 尝试将新成绩转换为浮点数列表

  6. 如果成功,更新学生成绩

  7. 如果转换失败,提示输入错误

5. 计算平均分功能 (calculate_average)

def calculate_average(self, scores):
    if len(scores) == 0:
        return 0.0
    return 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("未找到该学生!")

功能流程:

  1. 输入要查询的学生学号

  2. 检查该学号是否存在

  3. 如果存在,获取学生信息并计算平均分

  4. 打印学生详细信息(学号、姓名、成绩、平均分)

  5. 如果不存在,提示未找到

7. 显示所有学生信息 (show_all)

def show_all(self):
    if not self.students:
        print("没有学生记录!")
        return
    
    print("\n===== 所有学生信息 =====")
    for sid, info in self.students.items():
        avg = self.calculate_average(info['scores'])
        print(f"学号: {sid} | 姓名: {info['name']} | 成绩: {info['scores']} | 平均分: {avg:.2f}")
    print("=======================")

功能流程:

  1. 检查是否有学生记录

  2. 如果没有,提示没有记录

  3. 如果有,遍历所有学生

  4. 对每个学生计算平均分

  5. 打印所有学生信息

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("=======================")

功能流程:

  1. 检查是否有学生记录

  2. 确定课程数量(取所有学生中成绩数量最多的)

  3. 对每门课程:

    • 收集所有学生在该课程上的成绩

    • 计算该课程的平均分

    • 找出该课程的最高分和最低分

    • 打印课程统计信息

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("感谢使用,再见!")
            break
        else:
            print("无效选择,请重新输入!")

这是程序的主循环:

  1. 显示菜单选项

  2. 等待用户输入选择

  3. 根据用户选择调用相应的功能函数

  4. 如果选择0,退出程序

10. 程序入口

if __name__ == "__main__":
    system = StudentGradeSystem()
    system.run()
  • 这是程序的启动点

  • 当直接运行这个Python文件时,会创建StudentGradeSystem对象

  • 然后调用run()方法启动程序

总结

这个学生成绩管理系统实现了以下核心功能:

  1. 添加学生信息(学号、姓名、各科成绩)

  2. 删除学生记录

  3. 修改学生成绩

  4. 查询单个学生信息

  5. 显示所有学生信息

  6. 统计各科成绩(平均分、最高分、最低分)

程序使用字典来存储学生信息,以学号为键,学生信息(姓名和成绩列表)为值。所有操作都是通过命令行界面进行的,用户可以通过菜单选择不同的功能。


三、完整代码

#学生成绩管理系统
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("未找到该学生!")
            return
            
        print("当前成绩:", self.students[student_id]['scores'])
        new_scores = input("请输入新的成绩(用空格分隔): ")
        try:
            scores = list(map(float, new_scores.split()))
            self.students[student_id]['scores'] = scores
            print("成绩修改成功!")
        except ValueError:
            print("成绩输入无效,修改失败!")

    #计算平均分
    def calculate_average(self, scores):
        if len(scores) == 0:  # 修正判断条件
            return 0.0
        return 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("没有学生记录!")
            return
            
        print("\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("感谢使用,再见!")
                break
            else:
                print("无效选择,请重新输入!")

# 运行系统
if __name__ == "__main__":
    system = StudentGradeSystem()  # 修正类名
    system.run()


网站公告

今日签到

点亮在社区的每一天
去签到