选课系统

一、选课系统需求分析

角色: 

学校、学员、课程、讲师

要求:

1. 创建北京、上海 2 所学校

2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开

3. 课程包含,周期,价格,通过学校创建课程

4. 通过学校创建班级, 班级关联课程、讲师

5. 创建学员时,选择学校,关联班级

6. 创建讲师角色时要关联学校,
7. 提供三个角色接口
  7.1 学员视图, 可以注册, 交学费, 选择班级,
  7.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
  7.3 管理视图,创建讲师, 创建班级,创建课程

8. 上面的操作产生的数据都通过pickle序列化保存到文件里

 

二、功能提炼

1.管理员功能
     注册功能
     登录功能
     创建学校
     创建课程
     创建老师
2.讲师功能
     登录功能
     查看课程
     选择课程
     查看学生分数
     修改学生分数
3.学生功能
     注册功能
     登录功能
     选择学校
     选择课程
     查看课程分数

 

三、选课系统架构设计

三层架构

与ATM架构设计的差异

1.第一层做分层展示
2.第三层创建models.py存储所有的类 只有该py文件内的代码有资格调用db_handler

 

四、选课系统目录搭建

 

五、选课系统功能搭建

启动文件:start.py

 

 三层视图搭建:

第一层src.py

 

 第一层:三个视图文件(以管理员视图为例)

admin_view:

def register():
    pass

def login():
    pass

def creat_school():
    pass

def creat_course():
    pass

def creat_teacher():
    pass

func_dict = {
    '1': register,
    '2': login,
    '3': creat_school,
    '4': creat_course,
    '5': creat_teacher
}

def run():
    while True:
        print("""
        --------------------管理员视图------------------------
        1.管理员注册功能
        2.管理员登录功能
        3.管理员创建学校
        4.管理员创建课程
        5.管理员创建讲师
        ----------------------------------------------------
        """)

        choice_num = input('请输入您要执行的功能编号>>>:').strip()
        if choice_num == 'q':    # 注意添加结束标志,便于退回上一层循环
            return
        if choice_num in func_dict:
            func_dict.get(choice_num)()
        else:
            print('暂无该管理员功能编号')

讲师视图、学生视图与上述管理员视图类似,把相应的功能函数和功能名称改一下即可。

 

管理员注册、登录功能: 

db_handler数据处理层:

如果管理员数据、讲师数据、学生数据直接保存到db目录下,则文件会显得多而杂,所以我们在db目录下分别创建出各自的文件夹

 

 

 

__class__ 和 __name__获取类的字符串名重要

# 1.手中是对象的情况
'''
obj.__class__            获取产生对象的类名(可调用)
obj.__class__.__name__   获取产生对象的类的字符串名
'''
# 2.手中是类的情况
'''
class.__name__           获取当前类的字符串名
'''

 

db_models层:

因为很多模块都要进行数据的保存和查询工作,所以可以定义一个父类,直接将数据的保存和查询功能绑定给这个类,以后要用到的时候直接调用即可。

 

admin_view注册展示层:

 

 admin_interface注册接口层:

 

 admin_view登录展示层:

定义一个全局字典,记录登录状态(student_view与teacher_view都需要设定这个全局字典):

 

 登录成功之后直接修改键对应的用户名:

 

 admin_interface登录接口层:

 

记录用户登录状态的装饰器:

1. 利用if分支分别对管理员、讲师、学生登录状态进行判断

 

2. 创建一个功能字典 

如果登录用户群体比较多的时候,就要写很多个分支,比较麻烦,可以在settings模块定义一个群体字典函数,

键对应的是装饰器的参数:值对应的是相应的群体展示层模块名

根据装饰器参数的不同,分别获取相应模块下全局字典的用户登录状态

 

 

 

 

 

 

 

 

 
posted @ 2022-11-10 21:40  莫~慌  阅读(93)  评论(0编辑  收藏  举报