选课系统分层讲解

管理员视图

管理员注册功能

             "第一层"
 注册功能:
    获取用户名密码
    确认密码
    判断两次密码是否一致
    调用 接口层  并传参 用户名与密码
===================================================================================    
             "第二层"
注册接口:
     调用 models查询对象功能 获取对象  # 先去定义产生管理员对象的类
    判断对象是否存在
    密码加密  # 定义加密公共功能
    生成对象并保存  # 生成对象时自动保存

管理员登录功能

             "第一层"
登录功能:
    获取用户名密码
    调用接口层 
    获取接口层返回值判断是否为True
    True 则记录用户登录信息
    打印返回值
===================================================================================
             "第二层"
登录接口:
    调用 models查询对象功能 
    判断对象是否不存在
    对比加密后密码是否一致
    返回 信息

管理员创建学校功能

             "第一层"
创建学校功能:
	获取学校名与地址
    调用管理员创建学校接口
===================================================================================
             "第二层"
创建获取所有学校名接口:
	用学校对象调用查询对象名功能获取对象列表
    判断是否有值
    返回 对象列表
                                  '配合使用'
创建学校接口:
    调用 models查询对象功能 
    判断是否已存在
    获取管理员对象
    管理员对象调用管理员创建学校功能
===================================================================================

管理员创建课程功能

             "第一层"
创建课程功能:
    调用获取所有学校名接口,获取所有学校列表
    判断是否有值
    循环打印
    for循环枚举学校名列表
    获取用户输入学校编号
    判断是否是数字
    转 整型
    判断是否超出范围 range
    按编号获取学校名
   获取创建的课程名,课程价格,课程周期
	调用创建课程接口 并传参 学校名,课程名,课程价格,课程周期,管理员名
===================================================================================
             "第二层"
创建课程接口:
	获取学校对象
    判断学校关联的课程表里有没有此课程
    获取管理员对象
    使用管理员创建课程功能
    学校对象课程列表 添加课程名
    保存学校对象 更新资料

管理员创建讲师功能

           "第一层"
创建讲师功能:
	获取老师名
    调用创建讲师接口
===================================================================================
             "第二层"
创建讲师接口:
	获取讲师对象
    判断是否存在
    获取管理对象
    调用管理员创建讲师功能

学生视图

学生注册功能

           "第一层"
1.注册功能
	获取学生名密码
    确认密码
    判断密码是否一致
    调用 学生注册接口 
===================================================================================
           "第二层"
.注册接口:
	获取学生对象判断是否已存在
   	密码加密
    调用学生类产生对象保存
  

学生登录功能

           "第一层"
 登录功能
	获取学生名密码
    调用登录接口
    返回 True 记录 学生登录信息
===================================================================================
           "第二层"
2.登录接口:
	获取学生对象判断是否不存在
    判断加密后密码是否一致    

学生选择学校功能

           "第一层"
学生选择学校:
	调用查询对象名接口获取学校列表  
	判断 是否有值
    返回 False 打印返回值 
    循环打印学校名
    获取学校编号
   	判断是否是数字
    转数字
   	判断是否超出范围
    根据编号获取学校名
    调用选择学校接口保存学校
===================================================================================
           "第二层"
查询学校对象接口:
	使用学校类 .查询所有名字功能 获取学校名列表
    判断是否没值
    返回学校名列表
选择学校接口:
	获取学生对象
    判断学生是否已有学校
   	修改学生对象的学校
    保存学生对象 使用学生对象.保存功能

学生选择课程功能

           "第一层"
学生选择课程:
	获取当前登录学生学校的课程表 调用查看学生对象接口
    判断没值打印返回值
    定义一个空的课程列表
    循环
    打印枚举学生的课程表
    获取学生课程编号
    	# 	退出时判断 临时课程列表是否为空
       #  退出选课 将临时列表与学生名传入第二层选择课程接口
    判断是否是数字,转整型,判断是否超出范围
    根据编号获取课程名称
    判断是否已存在临时列表内,不存在则新增
===================================================================================
           "第二层"
查询学校对象接口:
	获取学生对象
    判断学生对象的学校是否没有值
    获取学生对象绑定的学校对象
    返回学校对象的课程表
                                 
选择课程接口:
	获取学生对象
    获取学生对象的课程表(转集合去重)
    使用视图层传过来的新课程表(转集合去重)
    两表相加去重 |  并转列表
    学生成绩初始化 使用{课程名:成绩}的方式
    # 循环获取课程表内的课程名,给课程名添加 成绩
    保存 学生对象
    课程绑定学生
    循环获取课程表内的课程名
    	获取课程对象
        给课程对象的学生列表增加学生名
        保存 课程对象

学生查看分数功能

           "第一层"
学生查看分数:
	调用第二层查看分数接口
===================================================================================
           "第二层"
查看分数接口:
 	 获取学生对象
    判断学生对象的分数表是否没数据
    返回学生分数列表
    

讲师视图

讲师登录功能

           "第一层"
登录功能
	获取讲师名与密码
    调用第二层登录接口判断返回值是否为 True
    	True 则记录登录信息
     打印返回值
===================================================================================
           "第二层"
登录接口:
	获取老师对象
    判断是否不存在
    对比密码是否正确
    返回结果

讲师查看课程功能

           "第一层"
讲师查看课程:
	获取所有学校名调用第二层接口
 	判断
    循环打印学校名
    获取学校编号
    判断 数字 转整型 超出范围
    按编号获取学校名称
    调用第二层接口查询当前学校下所有课程名
    判断是否为 False
    循环打印课程名
===================================================================================
           "第二层"
查询所有学校名接口:
	获取学校列表 调用第三层查看 目录下 所有对象名功能
    判断是否为空
    返回结果
 
查看课程接口:
	获取学校对象
    判断是否为空
    返回学校对象的课程表

讲师选择课程功能

           "第一层"
讲师选择课程:
	获取所有课程名调用第二层接口
    判断是否没值
    定义临时课程列表
    循环打印课程名
    获取课程编号
    	退出时判断临时课程表是否为空
         将列表与讲师传第二层查看分数接口
    判断 数字 转整型 超出范围
    根据编号获取课程名
    判断该课程是否已存在
    添加到临时课程表里
===================================================================================
           "第二层"
4.查看所有课程接口:
	获取课程列表 调用第三层查看 目录下 所有对象名功能
    判断
    返回列表
    
5.选择课程接口:
	获取老师对象
    获取老师对象的课程表(转集合去重)
   使用视图层传过来的新课程表(转集合去重)
   两表相加去重 |  并转列表
   保存老师课程列表
	# 课程绑定讲师
    for循环课程表
    获取课程对象
    课程对象的讲师表增加讲师
    保存课程对象

讲师查看分数功能

           "第一层"
讲师查看分数:
	获取当前讲师的课程表列表
    判断
    循环打印课程名
    获取课程编号
    	退出时return
    判断 数字 转整型 超出范围
    根据编号获取课程名
    调用第二层查看分数接口
=================================================================================== 
           "第二层"
查看讲师课程表接口:
	获取讲师对象
    判断
    返回讲师对象的课程表
    
查看课程下绑定学生分数接口:
	获取课程对象
    获取课程绑定的学生列表
    判断
    循环获取学生列表里的学生名 并按名字获取学生绑定的分数字典get当前课程名的分数

讲师修改分数功能

           "第一层"
讲师修改分数:
	获取当前讲师课程表 调用二层
    判断
    循环打印课程名
    获取课程编号
    	退出时return
    判断 数字 转整型 超出范围
    根据编号获取课程名
    调用查询当前课程下学生接口 获取学生列表
    判断
    循环打印学生名
    获取学生编号
     判断 数字 转整型 超出范围
    根据编号获取学生名
    获取讲师输入该学生的分数
    调用第二层修改分数接口 传 学生名,课程名,分数,讲师名
    
=================================================================================== 
           "第二层"
获取课程下绑定学生列表接口:
	获取课程对象
    获取课程绑定的学生列表
    判断
    返回学生列表
 
修改分数接口:
	获取学生对象
   修改学生对象绑定的分数列表里的分数
	保存学生对象
    

models 层

父类:
	1.定义保存对象的方法
   2.绑定给类的方式 定义查询对象的方法


定义管理员类:
    定义管理员属性
    定义管理员创建学校对象的功能(绑定给类的方法)
    生成对象时自动保存对象
    
    定义管理员创建学校功能
    	产生学校对象
    定义管理员创建课程功能
    	产生课程对象
	 定义管理员创建老师功能
    	产生老师对象
定义学校类:
	定义学校属性  # 关联课程 
   生成对象时自动保存对象

定义课程类:
	定义课程属性
    课程关联学生
    课程关联老师
    生成对象自动保存
 
定义老师类:
	定义老师属性
    老师关联课程
    生成对象自动保存
    
定义学生类:
	定义学生属性
    学生关联学校 = None
    学生关联课程
    学生关联分数字典
    生成对象自动保存

common公共功能层

创建加密函数
def get_hash(msg):
    md5 = hashlib.md5()
    md5.update(msg.encode('utf8'))
    return md5.hexdigest()



创建验证登录装饰器
# 验证登录装饰器
def login_auth(user_type):
    def outer(func_name):
        def inner(*args, **kwarg):
            # 调入模块
            from conf import settings
            # 判断 有参参数 是不是在视图功能字典里
            if user_type not in settings.MODULE_DICT:
                return False, '不存在的视图'
            # 拿到该视图的名字
            module_name = settings.MODULE_DICT.get(user_type)
            # 判断该视图的is_login 是否有值
            if module_name.is_login.get('username'):
                res = func_name(*args, **kwarg)
                return res
            esle:
                print('请先登录')
            	  module_name.login()

        return inner

	return outer

配置文件settings

1. 创建db目录
    动态获取根目录路径
    拼接db文件路径
    判断是否存在
    不存在则创建
    
2.定义全局变量字典
	存放各个视图层

db_handler

定义保存对象功能
  以类名拼接用户目录 对象名.__class__.__name__
  判断是否存在
  拼接用户文件名
  打开文件使用pickle模块写入对象

定义查询对象功能
  以类名拼接目录路径
   判断是否存在
   拼接用户文件
   打开文件 并 返回对象

定义查询所有对象名功能
 拼接类名对应的目录路径
  os.listdir 获取所有名字并返回
posted @ 2022-11-11 15:12  李阿鸡  阅读(41)  评论(0编辑  收藏  举报
Title