选课系统
一、选课系统需求分析
角色:
学校、学员、课程、讲师
要求:
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模块定义一个群体字典函数,
键对应的是装饰器的参数:值对应的是相应的群体展示层模块名
根据装饰器参数的不同,分别获取相应模块下全局字典的用户登录状态