13. 加载班级信息功能的实现

实现方法

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) 退出程序
...

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()