4. 学生成绩管理

任务说明

实现一个学生成绩管理程序,核心是一个 Student 类(包含姓名和成绩),以及一个管理容器类,支持添加、删除、修改、查询学生信息,并能计算全班平均分和最高分。程序通过命令行交互方式运行,输入指令后立即输出对应结果。

核心实现

class Student:
    """学生类:包含姓名和成绩"""
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def __repr__(self):
        return f"{self.name}: {self.score}分"

class GradeManager:
    """成绩管理类:支持增删改查、平均分、最高分"""
    def __init__(self):
        self.students = []  # 存储Student对象列表

    def add(self, name, score):
        """添加学生,若姓名已存在则拒绝"""
        if self.find(name):
            return f"添加失败:学生 {name} 已存在"
        self.students.append(Student(name, score))
        return f"已添加学生 {name},成绩 {score} 分"

    def remove(self, name):
        """按姓名删除学生"""
        stu = self.find(name)
        if stu:
            self.students.remove(stu)
            return f"已删除学生 {name}"
        return f"删除失败:未找到学生 {name}"

    def update(self, name, new_score):
        """按姓名修改成绩"""
        stu = self.find(name)
        if stu:
            stu.score = new_score
            return f"已修改 {name} 的成绩为 {new_score} 分"
        return f"修改失败:未找到学生 {name}"

    def find(self, name):
        """按姓名查询,返回Student对象或None"""
        for stu in self.students:
            if stu.name == name:
                return stu
        return None

    def query(self, name):
        """查询并返回格式化字符串"""
        stu = self.find(name)
        return f"{stu.name}: {stu.score}分" if stu else f"未找到学生 {name}"

    def average(self):
        """计算全班平均分(无学生时返回0)"""
        if not self.students:
            return 0
        total = sum(s.score for s in self.students)
        return round(total / len(self.students), 1)

    def max_score(self):
        """返回最高分学生信息,无学生时返回None"""
        if not self.students:
            return None
        top = max(self.students, key=lambda s: s.score)
        return f"{top.name}: {top.score}分"

    def list_all(self):
        """列出所有学生"""
        if not self.students:
            return "当前无学生记录"
        return "\n".join(str(s) for s in self.students)

def main():
    mgr = GradeManager()
    print("学生成绩管理(指令:add/remove/update/query/average/max/list/exit)")
    while True:
        cmd = input("> ").strip().split()
        if not cmd:
            continue
        op = cmd[0].lower()
        if op == "exit":
            print("已退出")
            break
        elif op == "add" and len(cmd) == 3:
            print(mgr.add(cmd[1], float(cmd[2])))
        elif op == "remove" and len(cmd) == 2:
            print(mgr.remove(cmd[1]))
        elif op == "update" and len(cmd) == 3:
            print(mgr.update(cmd[1], float(cmd[2])))
        elif op == "query" and len(cmd) == 2:
            print(mgr.query(cmd[1]))
        elif op == "average":
            print(f"全班平均分:{mgr.average()}")
        elif op == "max":
            result = mgr.max_score()
            print(f"最高分:{result}" if result else "当前无学生记录")
        elif op == "list":
            print(mgr.list_all())
        else:
            print("无效指令,请检查格式")

if __name__ == "__main__":
    main()

运行与验证

将上述代码保存为 grade_manager.py,在终端执行 python grade_manager.py 启动程序。按以下顺序输入指令验证功能:

> add 张三 85
> add 李四 92
> add 王五 78
> list
> average
> max
> update 李四 95
> query 李四
> remove 王五
> query 王五
> exit

预期输出对照(与代码逻辑严格一致):

  • add 张三 85 → 已添加学生 张三,成绩 85.0 分
  • add 李四 92 → 已添加学生 李四,成绩 92.0 分
  • add 王五 78 → 已添加学生 王五,成绩 78.0 分
  • list → 三行学生信息
  • average → 全班平均分:85.0
  • max → 最高分:李四: 92.0分
  • update 李四 95 → 已修改 李四 的成绩为 95.0 分
  • query 李四 → 李四: 95.0分
  • remove 王五 → 已删除学生 王五
  • query 王五 → 未找到学生 王五

判定标准:程序能完整执行上述指令序列,输出与预期一致;重复添加同名学生会提示失败;对不存在的学生执行删除/修改/查询会返回对应错误提示;average 和 max 在无学生时分别返回 0 和“当前无学生记录”,即判定通过。

学生成绩管理 — 指令处理时序 用户 GradeManager students 列表 add(张三, 85) append(Student) 已添加 query(李四) 线性查找 返回对象 李四: 95分 average() sum/len 返回数值 平均分:85.0 请求 响应