13. 加载班级信息功能的实现
实现方法
- 学校相关模块:
school.py
import csv
from class_room import ClassRoom
import tools
class_rooms = [] # 用于存放班级对象
...
def load_from_csv_file(path_name='students.csv'):
'''加载班级信息'''
# 1. 清空之前班级的数据
class_rooms.clear()
# 2. 创建空集合,用来保存已经加载的班级名称,避免重复创建班级
class_room_set = set()
# 3. 打开文件并创建csv reader
file = open(path_name)
reader = csv.reader(file)
# 4. 读取每一行数据并创建班级对象和学生对象
first_line_flag = True # 记录是否是第一行的标记
for a_item in reader:
if first_line_flag:
first_line_flag = False
continue
if len(a_item) != 4:
print('文件', path_name, '不是此程序保存的合法的csv文件,加载失败')
break
class_name = a_item[0]
student_name = a_item[1]
chinese_score = int(a_item[2])
math_score = int(a_item[3])
if class_name not in class_room_set:
cur_class_room = ClassRoom(class_name)
class_room_set.add(class_name)
class_rooms.append(cur_class_room)
cur_class_room.add_student_by_info(
student_name, chinese_score, math_score)
# 5. 关闭文件
file.close()
...
def class_manager():
'''此函数用来管理班级数据'''
while True:
show_school_menu()
sel = input('请选择:')
match sel:
case '1': # 1) 添加班级
add_class_room()
case '2': # 2) 删除班级
del_class_room()
case '3': # 3) 进入管理班级
enter_class_manager()
case '4': # 4) 列出所用班级
list_all_class_room()
case '5': # 5) 列出班级排名(平均成绩高 - 低)
list_class_room_order_by_average_score()
case '6': # 6) 保存班级信息
save_to_csv_file('students.csv')
case '7': # 7) 加载班级信息
load_from_csv_file('students.csv')
case '0': # 0) 退出程序
...
- 班级相关模块:
class_room.py
import student
from student import Student
import tools
class ClassRoom:
'''班级类型'''
def __init__(self, class_name):
self.class_name = class_name # 班级名称
self.student = [] # 保存学生信息
...
def add_student_by_info(self, student_name, chinese_score, math_score):
a_stu = Student(student_name, chinese_score, math_score)
self.student.append(a_stu)
...
if __name__ == '__main__':
cr1 = ClassRoom('一年1班')
cr1.student.append(Student('张三', 100, 61))
cr1.student.append(Student('李四', 70, 81))
cr1.student.append(Student('王五', 90, 71))
cr1.student.append(Student('赵六', 80, 91))
print('平均分:', cr1.get_average_score())
cr1.student_manager()