• 项目二:选课系统


    源码 https://gitee.com/FenYiYuan/python-scs.git

    项目需求和思路

    角色: 学校、学员、课程、讲师、管理员
    要求:
    1. 创建北京、上海 2 所学校  ---> 管理员创建学校
    2. 创建linux , python , go 3个课程 , linuxpy 在北京开, 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、程序的架构设计
        - 三层架构
            - 用户视图层
                - 用于与用户进行交互的
                - 小的逻辑判断,比如注册功能中两次密码是否一致的校验
                - 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_list.append(course_name)
    
                            # 管理员的创建老师方法
                            - create_teacher(self, teacher_name, teacher_pwd):
                                tea_obj = Teacher(teacher_name, teacher_pwd)
                                tea_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_data(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.接口层判断当前学生是否选择学校
                3.若没有选择,则调用学生对象中的添加学校方法。
                4.将添加后消息返回给视图层。
    
            - 选择课程
                1.先获取当前学生所在学校的所有课程,并选择
                2.接口层将选择后课程,调用数据层的添加课程方法保存。
                3.学生对象中课程列表添加该课程,设置课程分数默认为0。
                4.最终将结果返回给视图层
    
            - 查看成绩
                1.直接调用接口层
                2.接口层调用数据层中的查看成绩方法
                3.返回成绩给视图层并打印。
    
        - 老师
            - 登录
                - 同上
    
            - 查看教授课程
                1.直接调用接口层,获取老师对象下课程列表数据
                2.若有则打印,没有则退出
    
            - 选择教授课程
                1.调用接口层中的选择教授课程接口,调用数据层中该课程下所有的学生返回给视图层
                2.打印所有的课程,让老师选择,若老师课程中有该课程则不让添加。
                3.没有,则调用 老师对象中的 添加课程方法进行添加。
    
            - 查看课程下学生
                1.直接获取老师对象下所有的课程,选择课程
                2.从老师对象中,调用查看课程下学生方法,获取 课程对象下 所有的学生,返回给视图层
                3.视图层打印 该课程下所有的学生。
    
            - 修改学生分数
                1.直接获取老师对象下所有的课程,选择课程
                2.从老师对象中,调用查看课程下学生方法,获取 课程对象下 所有的学生,返回给视图层
                3.视图层打印 该课程下所有的学生,并让用户选择需要修改分数的学生。
                4.调用老师修改分数接口,获取老师对象,调用对象中的修改分数方法
                5.获取学生对象中的  score_dict 分数字典,进行修改。
    
    
  • 相关阅读:
    一些遇到的错误的总结:
    ThinkPHP add save delete的返回说明
    一些实用函数 :去除html标签//去除空白//截取汉字
    group_concat
    linux环境下使用mkdir()函数无法创建目录的问题
    报错:Namespace declaration statement has to be the very first statement in the script的解决方法
    ThinkPHP中,字段更新加1的几种写法
    小狼毫输入法安装与简单配置(windows系统)
    对win10和win11的吐嘈
    看死亡诗社时有的一点新想法
  • 原文地址:https://www.cnblogs.com/chenwenyin/p/12700197.html
Copyright © 2020-2023  润新知