综合练习题:学生成绩管理系统
题目描述:
请你设计一个简单的学生成绩管理系统,要求能够进行以下操作:
- 添加学生信息(包括姓名和学号)
- 添加学生的成绩(包括科目和成绩)
- 查询学生的平均成绩
- 打印所有学生的成绩单
解题思路:
-
定义类:
- 创建一个
Student
类,包含以下属性:name
: 学生姓名id
: 学生学号grades
: 存储学生成绩的字典,键为科目,值为成绩
- 创建一个
StudentManagementSystem
类,包含学生列表,并实现以下方法:add_student(name, id)
: 添加学生add_grade(student_id, subject, grade)
: 添加成绩get_average_grade(student_id)
: 计算并返回学生的平均成绩print_report()
: 打印所有学生的成绩单
- 创建一个
-
实现函数:
- 实现各个方法,确保它们能够正确操作和访问类的属性。
-
测试系统:
- 创建几个学生,添加他们的成绩,查询他们的平均成绩,最后打印所有学生的成绩单。
参考代码:
class Student:
def __init__(self, name, student_id):
self.name = name
self.student_id = student_id
self.grades = {}
def add_grade(self, subject, grade):
self.grades[subject] = grade
def get_average_grade(self):
if not self.grades:
return 0
return sum(self.grades.values()) / len(self.grades)
class StudentManagementSystem:
def __init__(self):
self.students = {}
def add_student(self, name, student_id):
if student_id in self.students:
print(f"学生ID {student_id} 已存在。")
else:
self.students[student_id] = Student(name, student_id)
print(f"添加学生:{name} (ID: {student_id})")
def add_grade(self, student_id, subject, grade):
if student_id not in self.students:
print(f"学生ID {student_id} 不存在。")
else:
self.students[student_id].add_grade(subject, grade)
print(f"为学生ID {student_id} 添加成绩:{subject} - {grade}")
def get_average_grade(self, student_id):
if student_id not in self.students:
print(f"学生ID {student_id} 不存在。")
return None
else:
average_grade = self.students[student_id].get_average_grade()
print(f"学生ID {student_id} 的平均成绩是: {average_grade:.2f}")
return average_grade
def print_report(self):
for student_id, student in self.students.items():
print(f"学生: {student.name} (ID: {student_id})")
for subject, grade in student.grades.items():
print(f" {subject}: {grade}")
print(f" 平均成绩: {student.get_average_grade():.2f}")
print("-" * 20)
# 测试代码
system = StudentManagementSystem()
system.add_student("Alice", 1)
system.add_student("Bob", 2)
system.add_grade(1, "Math", 90)
system.add_grade(1, "English", 85)
system.add_grade(2, "Math", 78)
system.add_grade(2, "English", 82)
system.get_average_grade(1)
system.get_average_grade(2)
system.print_report()
总结:
- 通过定义
Student
和StudentManagementSystem
类,封装了学生信息和管理系统的功能。 - 使用类的方法来添加学生和成绩、计算平均成绩以及打印成绩单。
- 通过测试代码验证系统的功能。