# CourseSystem **Repository Path**: qq274943639/course-system ## Basic Information - **Project Name**: CourseSystem - **Description**: 面向对象编程练习之选课系统 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-08 - **Last Updated**: 2023-11-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 项目需求 角色:学校、课程、讲师 1、创建北京、上海2所学校 ---->管理员创建学校 2、创建Linnux,Python,go 3个课程,linnux\py在北京开,go在上海开 3、课程包含,周期,价格,通过学校创建课程 4、创建讲师 5、创建学员时,选择学校,关联班机 6、提供两个角色接口 6.1 学院视图,可以注册,交学费,选择课程(等同于选择班级) 6.2 讲师视图,讲师可以管理自己的班级,上课时可选择班级,查看班级学员列表,修改所管理的学员信息 6.3 管理视图,创建讲师,创建班级,创建课程 7. 上面的操作产生的数据都通过pickle序列化保存到文件里 - pickle 可以帮我们保存对象 1、需求分析(课程与班级合为一体) - 管理视图 - 1.注册 - 2.登录 - 3.创建学校 - 4.创建课程(先选择学校) - 5.创建讲师 - 学员视图 - 1.注册 - 2.登录功能 - 3.选择校区 - 4.选择课程(先选择校区,再选择校区中的某一门课程) 学生选择课程,课程也选择学生 - 5.查看分数 - 讲师视图 - 1.登录 - 2.查看教授课程 - 3.选择教授课程 - 4.查看课程下学生 - 5.修改学生分数 2、程序的架构设计 - 三层架构(MVC) - 用户视图层 - 小的逻辑判断,比如注册功能中两次密码是否一致的校验 - core - src.py - 主视图 - admin.py admin_view - student.py student_view - teacher.py teacher_view - 逻辑接口层 - 核心业务逻辑的处理 - interface - admin_interface - student_interface - teacher_interface - 数据处理层 - 做数据的处理,比如数据的增、删、查、改 - db - model.py - 用于存放所有的类,管理所有的类 - Base: # 保存数据 - save(self): db_handler.save_data() @classmethod - select(cls, username): obj = db_handler.select_data(cls, username) - Admin(Base) - __init__(self, admin_name, pwd) self.user = admin_name self.pwd = pwd # 管理员的创建学校方法 - create_chool(): school_obj = School() school_obj.save # 管理员创建课程方法 - create_course(school_obj): course_obj = Course() course_obj.save() school_obj.course_list.a[[end() # 管理员创建老师方法 - create_teacher(self, teacher_name, teacher_pwd) tea_obj = Teacher(teacher_name, teacher_pwd) tea_obj.save() - School(Base): __init__(self. chool_name, school_addr) self.user = school_name self.addr = school_addr self.course_list = [] - Course(Base): __init__(self, course_name) self.user = course_name - Teacher(Base): __init__()self, teacher_name, teacher_pwd: self.user = teacher_name self_pwd = teacher_pwd self_course_list_from_teacher = [] - db_handler.py -save_data(obj) 保存对象 - 拼接文件夹,以类名当做文件夹管理文件 class_name = obj.__class__.__name - 再拼接文件,通过pickle序列化到pickle文件中 - select_data(cls, username): - 拼接文件夹,以类名当做文件夹管理文件 class_name = cls.__name - 再拼接文件,然后把通过pickle反序列化得到的puickle文件中的对象 - ATM + 购物车 - 存放 json格式的数据 - dict --> json - 选课系统 - pickle 保存对象 - object ---> pickle 3、分任务开发 4、测试 5、上线 选课系统总结: - 管理员 - 注册 1、用户在视视图层输入用户名与密码,交给接口层 2、接口层调用数据层中的models.select进行校验 3、若不存在则创建,并将注册成功返回给视图层 - 登录 1、用户在视图层输入用户名与密码,交给接口层 2、接口层调用数据层中的models.select进行校验 3、若存在则校验密码,并将登录成功返回给视图层 - 创建学校 1、让用户输入学校名与学校地址 2、调用管理员创建学校接口 3、判断学校是否存在,若存在不让创建 4、若不存在,则调用接口层创建学校,获取管理员对象的创建学校方法保存学校 5、将结果返回给视图层 - 创建课程 1、获取所有学校,并打印,让用户选择 2、获取用户选择的学校与创建的课程,交给接口层 3、接口层调用管理员对象中的创建课程方法,保存课程对象 4、课程需要绑定给学校对象,最终将创建成功的结果返回给视图层 - 创建老师 1、让用户输入老师的名称 2、调用接口层,接口层设置默认密码123,调用数据层 3、判断老师是否存在,不存在则调用管理员对象中的创建老师方法 4、保存老师对象,并将结果返回给视图层 - 学生 - 注册 - 同上 - 登录 - 同上 - 选择学校 1、获取所有的学校,让学生选择,将选择的学校传给接口层 2、接口层判断当前学生是否选择过学校 3、若没有选择,则调用学生对象中的添加学校方法 4、将添加后的消息返回给视图层 - 选择课程 1、先获取当前学生所在学校的所有课程,并选择 2、接口层将选择后课程,调用数据层的添加课程方法保存、 3、学生对象中的课程列表添加该课程,设置课程分数默认为0 4、最终将结果返回给视图层 - 查看成绩 1、直接调用接口层 2、接口层调用数据层中的查看成绩方法 3、返回成绩给视图层并打印 - 老师 - 注册 - 同上 - 登录 - 同上 -查看教授课程 1、直接调用接口层,获取老师对象下课程列表数据 2、若有则打印吗,没有则退出 - 选择教授课程 1、调用接口层中的选择教授课程接口,调用数据层中该课程下所有的学生返回给视图层 2、打印所有的课程,让老师选择,若老师课程中有该课程则不让添加 3、没有则调用老师对象中的添加课程方法进行添加 - 查看课程下学生 1、直接获取老师对象下所有的课程,选择课程 2、从老师对象中调用查看课程下学生方法,获取课程对象下所有的学生,返回给视图层 3、视图层打印该课程下所有的学生 - 修改学生分数 1、直接获取老师对象下所有的课程,选择课程 2、从老师对象中调用查看课程下学生方法,获取课程对象下所有的学生,返回给视图层 3、视图层打印该课程下所有的学生,并让用户选择需要修改分数的学生 4、调用老师修改分数接口,获取老师对象,调用对象中的修改分数方法 5、获取学生对象中的score_dic分数字典,进行修改