学生成绩管理系统

目录

[一、 代码结构优点](#一、 代码结构优点)

二、代码块分析

[1. 类定义和初始化](#1. 类定义和初始化)

[2. 添加学生功能 (add_student)](#2. 添加学生功能 (add_student))

[3. 删除学生功能 (remove_student)](#3. 删除学生功能 (remove_student))

[4. 修改成绩功能 (modify_scores)](#4. 修改成绩功能 (modify_scores))

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

[6. 查询单个学生信息 (show_student)](#6. 查询单个学生信息 (show_student))

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

[8. 课程统计功能 (course_statistics)](#8. 课程统计功能 (course_statistics))

[9. 主运行循环 (run)](#9. 主运行循环 (run))

[10. 程序入口](#10. 程序入口)

总结

三、完整代码


一、 代码结构优点

  • 类封装合理 :将学生成绩管理系统封装在StudentGradeSystem类中,符合面向对象设计原则
  • 数据结构选择恰当:使用字典存储学生信息(学号作为键),列表存储成绩
  • 功能模块完整:实现了添加、删除、修改、查询、统计等核心功能
  • 错误处理机制:对成绩输入进行了异常捕获,防止无效输入
  • 用户界面友好:提供了清晰的菜单导航系统

二、代码块分析

1. 类定义和初始化

python 复制代码
class StudentGradeSystem:
    def __init__(self):
        self.students = {}
  • StudentGradeSystem 是主类,代表整个成绩管理系统

  • __init__ 是构造函数,在创建对象时自动调用

  • self.students = {} 创建一个空字典,用于存储学生信息

    • 键(key): 学号 (student_id)

    • 值(value): 包含学生信息的字典 (name和scores)

2. 添加学生功能 (add_student)

python 复制代码
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)

python 复制代码
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)

python 复制代码
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)

python 复制代码
def calculate_average(self, scores):
    if len(scores) == 0:
        return 0.0
    return sum(scores) / len(scores)

这是一个辅助函数:

  • 接收一个成绩列表

  • 如果列表为空,返回0.0

  • 否则计算并返回平均分

  • 在其他函数中被调用

6. 查询单个学生信息 (show_student)

python 复制代码
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)

python 复制代码
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)

python 复制代码
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)

python 复制代码
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. 程序入口

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

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

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

总结

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

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

  2. 删除学生记录

  3. 修改学生成绩

  4. 查询单个学生信息

  5. 显示所有学生信息

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

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


三、完整代码

python 复制代码
#学生成绩管理系统
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()
相关推荐
深海潜水员1 小时前
【Python】 切割图集的小脚本
开发语言·python
27669582921 小时前
东方航空 m端 wasm req res分析
java·python·node·wasm·东方航空·东航·东方航空m端
Yolo566Q2 小时前
R语言与作物模型(以DSSAT模型为例)融合应用高级实战技术
开发语言·经验分享·r语言
Felven2 小时前
C. Challenging Cliffs
c语言·开发语言
星月昭铭2 小时前
Spring AI调用Embedding模型返回HTTP 400:Invalid HTTP request received分析处理
人工智能·spring boot·python·spring·ai·embedding
Dreamsi_zh2 小时前
Python爬虫02_Requests实战网页采集器
开发语言·爬虫·python
_君落羽_3 小时前
C语言 —— 指针(4)
c语言·开发语言
weixin_448617054 小时前
疏老师-python训练营-Day30模块和库的导入
开发语言·python
望星空听星语4 小时前
C语言自定义数据类型详解(四)——联合体
c语言·开发语言
壹立科技4 小时前
Java源码构建智能名片小程序
java·开发语言·小程序