4. 学生成绩管理
任务说明
实现一个学生成绩管理系统,核心是一个Student类(包含姓名和成绩),以及一个StudentManager管理类,支持添加、删除、修改、查询学生信息,并能计算全班平均分和最高分。所有操作通过命令行交互完成。
核心实现
class Student:
"""学生类,包含姓名和成绩"""
def __init__(self, name, score):
self.name = name
self.score = score
def __str__(self):
return f"{self.name}: {self.score}分"
class StudentManager:
"""学生成绩管理器"""
def __init__(self):
self.students = [] # 存储Student对象列表
def add_student(self, name, score):
"""添加学生"""
# 检查姓名是否已存在
if self.find_student(name):
return False, f"学生 {name} 已存在"
self.students.append(Student(name, score))
return True, f"已添加学生 {name},成绩 {score}分"
def delete_student(self, name):
"""删除学生"""
student = self.find_student(name)
if student:
self.students.remove(student)
return True, f"已删除学生 {name}"
return False, f"未找到学生 {name}"
def update_student(self, name, new_score):
"""修改学生成绩"""
student = self.find_student(name)
if student:
student.score = new_score
return True, f"已更新 {name} 的成绩为 {new_score}分"
return False, f"未找到学生 {name}"
def find_student(self, name):
"""按姓名查找学生,返回Student对象或None"""
for s in self.students:
if s.name == name:
return s
return None
def query_student(self, name):
"""查询学生信息"""
student = self.find_student(name)
if student:
return True, str(student)
return False, f"未找到学生 {name}"
def average_score(self):
"""计算全班平均分"""
if not self.students:
return 0.0
total = sum(s.score for s in self.students)
return round(total / len(self.students), 2)
def max_score(self):
"""获取最高分学生"""
if not self.students:
return None
return max(self.students, key=lambda s: s.score)
def list_all(self):
"""列出所有学生"""
if not self.students:
return "暂无学生数据"
return "\n".join(str(s) for s in self.students)
def main():
manager = StudentManager()
print("=== 学生成绩管理系统 ===")
print("命令: add 姓名 成绩 | del 姓名 | update 姓名 新成绩 | query 姓名 | avg | max | list | exit")
while True:
cmd = input("\n> ").strip().split()
if not cmd:
continue
action = cmd[0].lower()
if action == "exit":
print("系统已退出")
break
elif action == "add" and len(cmd) == 3:
name, score = cmd[1], float(cmd[2])
ok, msg = manager.add_student(name, score)
print(msg)
elif action == "del" and len(cmd) == 2:
ok, msg = manager.delete_student(cmd[1])
print(msg)
elif action == "update" and len(cmd) == 3:
name, new_score = cmd[1], float(cmd[2])
ok, msg = manager.update_student(name, new_score)
print(msg)
elif action == "query" and len(cmd) == 2:
ok, msg = manager.query_student(cmd[1])
print(msg)
elif action == "avg":
print(f"全班平均分: {manager.average_score()}")
elif action == "max":
top = manager.max_score()
if top:
print(f"最高分: {top}")
else:
print("暂无学生数据")
elif action == "list":
print(manager.list_all())
else:
print("无效命令,请重试")
if __name__ == "__main__":
main()
运行与验证
将上述代码保存为student_manager.py,在终端执行python student_manager.py即可启动系统。按提示输入命令进行测试,建议按以下顺序验证:
- 添加:输入
add 张三 85,再输入add 李四 92,add 王五 78,观察返回成功提示。 - 查询:输入
query 李四,应显示李四: 92分。 - 修改:输入
update 王五 88,再query 王五确认成绩已变为88分。 - 统计:输入
avg,预期输出全班平均分: 88.33((85+92+88)/3=88.33);输入max,预期输出最高分: 李四: 92分。 - 删除:输入
del 张三,再输入list确认张三已不在列表中。 - 异常处理:输入
query 赵六,应提示未找到;重复添加add 李四 90,应提示已存在。
判定标准:以上操作返回的信息与预期一致,且avg和max的计算结果与当前列表中的学生数据吻合,即判定功能正确。