1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
| from typing import List, Dict, Optional from datetime import datetime
class Student: """学生类""" def __init__(self, student_id: str, name: str, age: int): self.student_id = student_id self.name = name self.age = age self.courses: List['Course'] = [] self.scores: Dict[str, float] = {} def enroll(self, course: 'Course'): """选课""" if course not in self.courses: self.courses.append(course) course.add_student(self) def add_score(self, course_name: str, score: float): """添加成绩""" self.scores[course_name] = score def get_average(self) -> float: """获取平均分""" if not self.scores: return 0 return sum(self.scores.values()) / len(self.scores) def get_info(self) -> str: """获取学生信息""" return f"{self.name}({self.student_id}), 年龄: {self.age}, 平均分: {self.get_average():.1f}" def __str__(self): return self.get_info() def __repr__(self): return f"Student({self.student_id}, {self.name})"
class Course: """课程类""" def __init__(self, course_id: str, name: str, credit: int = 3): self.course_id = course_id self.name = name self.credit = credit self.students: List[Student] = [] self.teacher: Optional[str] = None def add_student(self, student: Student): """添加学生""" if student not in self.students: self.students.append(student) def set_teacher(self, teacher_name: str): """设置教师""" self.teacher = teacher_name def get_student_count(self) -> int: """获取学生数量""" return len(self.students) def get_average_score(self) -> float: """获取课程平均分""" scores = [s.scores.get(self.name, 0) for s in self.students if self.name in s.scores] return sum(scores) / len(scores) if scores else 0 def __str__(self): return f"{self.name}({self.course_id}), 学分: {self.credit}, 学生: {self.get_student_count()}人"
class GradeBook: """成绩管理类""" def __init__(self): self.students: Dict[str, Student] = {} self.courses: Dict[str, Course] = {} def add_student(self, student_id: str, name: str, age: int): """添加学生""" student = Student(student_id, name, age) self.students[student_id] = student return student def add_course(self, course_id: str, name: str, credit: int = 3): """添加课程""" course = Course(course_id, name, credit) self.courses[course_id] = course return course def enroll_student(self, student_id: str, course_id: str): """学生选课""" student = self.students.get(student_id) course = self.courses.get(course_id) if student and course: student.enroll(course) def record_score(self, student_id: str, course_name: str, score: float): """记录成绩""" student = self.students.get(student_id) if student: student.add_score(course_name, score) def get_student_ranking(self) -> List[Student]: """获取学生排名(按平均分)""" return sorted(self.students.values(), key=lambda s: s.get_average(), reverse=True) def get_course_report(self, course_id: str) -> Dict: """获取课程报告""" course = self.courses.get(course_id) if not course: return {} return { 'course_name': course.name, 'student_count': course.get_student_count(), 'average_score': course.get_average_score(), 'teacher': course.teacher } def export_report(self) -> str: """导出报告""" lines = ["=== 学生成绩管理系统报告 ===", ""] lines.append("【课程统计】") for course in self.courses.values(): lines.append(f" {course}") lines.append("") lines.append("【学生排名】") for i, student in enumerate(self.get_student_ranking(), 1): lines.append(f" 第{i}名: {student.get_info()}") return "\n".join(lines)
grade_book = GradeBook()
grade_book.add_student("S001", "张三", 20) grade_book.add_student("S002", "李四", 19) grade_book.add_student("S003", "王五", 21)
math = grade_book.add_course("MATH101", "高等数学", 4) english = grade_book.add_course("ENG101", "大学英语", 3)
grade_book.enroll_student("S001", "MATH101") grade_book.enroll_student("S001", "ENG101") grade_book.enroll_student("S002", "MATH101") grade_book.enroll_student("S003", "MATH101")
grade_book.record_score("S001", "高等数学", 95) grade_book.record_score("S001", "大学英语", 88) grade_book.record_score("S002", "高等数学", 82) grade_book.record_score("S003", "高等数学", 90)
print(grade_book.export_report())
|