Day32. 选课系统总结


角色:学校、学员、课程、讲师、管理员
要求:
1. 创建北京、上海 2 所学校                                                          ----->  管理员创建学校
2. 创建Linux,python,go 3个课程,Linux\py 在北京开,go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 创建讲师
5. 创建学员时,选择学校,关联班级
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.py
                - student_interface.py
                - teacher_interface.py

        - 数据处理层
            - 做数据的处理,比如数据的 增、删、查、改
            - db
                - models.py
                    - 用于存放所有的类,管理所有的类
                    - Base:
                        # 保存数据
                        - save(self):
                            db_handler.save_data()
                         
                          @classmethod
                        - select(cls, username):
                            obj = db_handler.select_data(cls, username)
                            return obj

                    - Admin(Base)
                        - __init__(self, admin_name, pwd):
                            self.user = admin_name
                            self.pwd = pwd

                        # 管理员的创建学校方法
                        - create_school():
                            school_obj = School()
                            school_obj.save()

                        # 管理员的创建课程方法, 先选择学校对象,在创建课程
                        - create_course(school_obj, course_name):
                            course_obj = Course()
                            course_obj.save()
                            school_obj.course_listh.append(course_name)
                       
                        # 管理员的创建老师方法
                        - create_teacher(self, teacher_name, teacher_pwd):
                            teacher_obj = Teacher(teacher_name, teacher_pwd)
                            teacher_obj.save()
                   
                    - School(Base):
                        __init__(self, school_name, school_addr):
                            self.user = school_name
                            self.addr = school_addr
                            self.course_list = []
                   
                    - Course(Base):
                        __init__(self, course_name):
                            self.user = course_name
                            self.student_list = []

                    - 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_date(cls, username):     查找对象
                        - 拼接文件夹,以类名当作文件夹管理文件
                        class_name = cls.__name__
                        - 再拼接文件,然后把对象通过pickle反序列化得到pickle文件中的对象

                    - 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. 接口层调用数据层中的models.select进行校验
            3. 若不存在则创建,并将注册成功返回给视图层
       
        - 登录
            1. 用户在视图层输入用户名与密码,交给接口层
            2. 接口层调用数据层中的models.select进行校验
            3. 若存在则校验密码,并将登录成功返回给视图层
       
        - 选择学校
            1. 获取所有学校,让学生选择,将选择的学校传给接口层
            2. 接口层判断当前学生是否选择学校
            3. 若没有选择,则调用学生对象中的添加学校方法
            4. 将添加后的消息返回给视图层

        - 选择课程
            1. 先获取当前学生所在学校的所有课程,并选择
            2. 接口层将选择后课程,调用数据层的添加课程方法保存
            3. 学生对象中课程列表添加该课程,设置课程分数默认为0
            4. 最终将结果返回给视图层

        - 查看成绩
            1. 直接调用接口层
            2. 接口层调用数据层中的查看成绩方法
            3. 返回成绩给视图层并打印

    - 老师
        - 注册
            1. 用户在视图层输入用户名与密码,交给接口层
            2. 接口层调用数据层中的models.select进行校验
            3. 若不存在则创建,并将注册成功返回给视图层
       
        - 登录
            1. 用户在视图层输入用户名与密码,交给接口层
            2. 接口层调用数据层中的models.select进行校验
            3. 若存在则校验密码,并将登录成功返回给视图层

        - 查看教授课程
            1. 直接调用接口层,获取老师对象下课程列表数据
            2. 若有则打印,没有则退出

        - 选择教授课程
            1. 调用接口层中的选择教授课程接口,调用数据层中该课程下所有的学生返回给视图层
            2. 打印所有的课程,让老师选择,若老师课程中有该课程则不让添加
            3. 没有,则调用 老师对象中的 添加课程方法进行添加。

        - 查看课程下学生
            1. 直接获取老师对象下所有的课程,选择课程
            2. 从老师对象中,调用查看课程下学生方法,获取 课程对象下 所有的学生,返回给视图层
            3. 视图层打印 该课程下所有的学生。

        - 修改学生分数
            1. 直接获取老师对象下所有的课程,选择课程
            2. 从老师对象中,调用查看课程下学生方法,获取 课程对象下 所有的学生,返回给视图层
            3. 视图层打印 该课程下所有的学生,并让用户选择需要修改分数的学生。
            4. 调用老师修改分数接口,获取老师对象,调用对象中的修改分数方法
            5. 获取对象中的  score_dict 分数字典,进行修改。

选课系统总结:
- 管理员 - 注册 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. 接口层调用数据层中的models.select进行校验 3. 若不存在则创建,并将注册成功返回给视图层 - 登录 1. 用户在视图层输入用户名与密码,交给接口层 2. 接口层调用数据层中的models.select进行校验 3. 若存在则校验密码,并将登录成功返回给视图层 - 选择学校 1. 获取所有学校,让学生选择,将选择的学校传给接口层 2. 接口层判断当前学生是否选择学校 3. 若没有选择,则调用学生对象中的添加学校方法 4. 将添加后的消息返回给视图层 - 选择课程 1. 先获取当前学生所在学校的所有课程,并选择 2. 接口层将选择后课程,调用数据层的添加课程方法保存 3. 学生对象中课程列表添加该课程,设置课程分数默认为0 4. 最终将结果返回给视图层 - 查看成绩 1. 直接调用接口层 2. 接口层调用数据层中的查看成绩方法 3. 返回成绩给视图层并打印 - 老师 - 注册 1. 用户在视图层输入用户名与密码,交给接口层 2. 接口层调用数据层中的models.select进行校验 3. 若不存在则创建,并将注册成功返回给视图层 - 登录 1. 用户在视图层输入用户名与密码,交给接口层 2. 接口层调用数据层中的models.select进行校验 3. 若存在则校验密码,并将登录成功返回给视图层 - 查看教授课程 1. 直接调用接口层,获取老师对象下课程列表数据 2. 若有则打印,没有则退出 - 选择教授课程 1. 调用接口层中的选择教授课程接口,调用数据层中该课程下所有的学生返回给视图层 2. 打印所有的课程,让老师选择,若老师课程中有该课程则不让添加 3. 没有,则调用 老师对象中的 添加课程方法进行添加。 - 查看课程下学生 1. 直接获取老师对象下所有的课程,选择课程 2. 从老师对象中,调用查看课程下学生方法,获取 课程对象下 所有的学生,返回给视图层 3. 视图层打印 该课程下所有的学生。 - 修改学生分数 1. 直接获取老师对象下所有的课程,选择课程 2. 从老师对象中,调用查看课程下学生方法,获取 课程对象下 所有的学生,返回给视图层 3. 视图层打印 该课程下所有的学生,并让用户选择需要修改分数的学生。 4. 调用老师修改分数接口,获取老师对象,调用对象中的修改分数方法 5. 获取对象中的 score_dict 分数字典,进行修改。

posted on 2024-07-11 14:50  与太阳肩并肩  阅读(1)  评论(0编辑  收藏  举报

导航