python选课系统项目详解
选课系统项目详解
- 选课系统简介及分析
- 选课系统架构设计分析
- 选课系统目录设计
- 管理员视图
- 注册
- 登录
- 创建学校
- 创建课程
- 创建讲师
- 学生视图
- 注册
- 登录
- 选择学校
- 选择课程
- 查看分数
- 教师视图
- 登录
- 选择课程
- 查看课程
- 查看学生分数
- 修改学生分数
选课系统简介及分析
在学习完面向对象的内容后
我们可以通过选课系统来结合一下我们学习面向对象的内容
'''项目介绍
选课系统
角色:学校 学员 课程 讲师
要求:
1.创建北京、上海两所学校
2.创建linux、python、go 3个课程,linux\py在北京开,go在上海开
3.课程包括 周期、价格,通过学校创建课程
4.通过学校创建班级,班级关联课程、讲师5,创建学员时,选择学校,关联班级
5.创建讲师角色时要关联学校
6.提供三个接口
6.1学员视图,可以注册、交学费、选择班级
6.2讲师视图,讲师可以管理自己的班级,上课时选择班级,查看学员列表,修改所管理的学员成绩
6.3管理视图,创建讲师,创建班级,创建课程
7.上面的操作产生的数据都通过pickle序列化保存到文件里
'''
我们通过上述描述即可提炼出一下几点内容:
1.管理员功能
注册功能
登录功能
创建学校
创建课程
创建老师
2.讲师功能
登录功能
选择课程
查看课程
查看学生分数
修改学生分数
3.学生功能
注册功能
登录功能
选择学校
选择课程
查看课程分数
我们通过上述介绍可以得知这个项目具体的功能
所以接下来我们利用所学知识来分析一下架构方面
架构设计
目录搭建
我们需要再次基础之上对架构的目录进行搭建
bin
start.py
core
src.py
admin_view.py
teacher_view.py
student_view.py
conf
settings.py
lib
common.py
log
log.log
db
db_handler.py
models.py
interface
admin_interface.py
student_interface.py
teacher_interface.py
readme.txt
requirements.txt
目录如图
由于我们的日志目录可以通过logging模块的日志配置字典自动创建,所以我们可以写也可以不写
展示层部分搭建功能字典
我们搭建好了目录,那么首先我们应该先把框架的架子搭起来,然后再进入内部去完善补齐缺失的功能即可
-
bin目录下的start启动文件
-
src文件中的run函数补充
-
admin_view 视图里面 run函数补充
管理员功能之注册
展示层代码编写
md5加密算法
我们先开始编写管理员部分的注册功能
我们可以通过md5算法将传递进入的用户密码进行一个加密处理
由于我们可以其他地方也会使用到加密算法,所以我们就将获取加密处理后的函数定义在common文件中
来康康
models文件创建Admin类
在Admin 类中可以看到我除了定义属性以外还写了一个 save()方法,这是为了保存对象
可以看到我直接在__init__中调用save()方法,这样我们创建好一个对象之后直接就可以通过这个对象去调用save()方法保存自己了,这样就不需要再通过对象名字去点save()方法~
db_handeler中的save()方法
管理员注册接口 完成注册保存
我们需要在注册页面功能完善一下,因为我们需要判断这个用户名是否已经注册了,所以我们需要在db_handler里面编写一个select方法,这样的话我们不仅可以拿到对应的对象,也可以通过这个返回值进行逻辑判断,对象到底创建与否
数据处理层
注册接口层
管理员功能之登录
展示层
登录接口层
我们在写完这两个功能之后需要考虑一个问题,那就是用户登录的校验,我们如果选择了管理员视图,但是如果用户不等了我们不能直接让他去使用除了注册与登录以外的功能,这个时候我们就需要编写一个装饰器,并且我们需要考虑其他视图,因为我们一共是三个视图
管理员功能之创建学校
展示层
我们用语法糖@common.login_auth('admin') 这样就代表了有参装饰器的mode为admin
创建学校接口层
models文件
我们需要注意,因为创建学校这个功能是管理员独有的,所以在创建它的时候就应该是管理员对象去创建,所以创建课程的函数应该写在Admin类中
管理员功能之创建课程
创建课程我们可以理清一下思路,因为课程是与学校绑定的,每个学校下有不同的课程,并且我们在创建学校的时候也编写了一个默认属性course_name_list 所以我们需要先获取学校,让管理员去选择,选择了学校之后,通过学校名字获取学校对象,并拿到学校对象属性中的course_name_list
然后用获取到的用户输入创建课程对象即可
展示层
接口层
db_handler
管理员之创建老师
这个功能就等同于管理员的登录
展示层
接口层
学生注册功能
其实学生的注册功能与管理员的注册都是相同的,就不过多赘述了
直接上代码,ps:我也是cv管理员的 就是改了一下变量名而已
展示层
接口层
学生登录功能
登录也是一样的,cv就完事了,把管理员功能写完之后就简简单单
展示层
接口层
学生选择学校功能
在此需要说一下思路,我们应该获取学校的名单,让学生去选择学校,选择学校后才可以去选择该学校内的课程,由于我的思路是将学生与学校进行了绑定,所以学生只能先选择学校然后再选择该学校下面的课程
展示层
接口层
学生选择课程功能
前面我们也说了,课程是学校内的 而学生也绑定了学校,所以我们就可以通过学生所在的学校中的课程列表获取它想选择的课程
展示层
我这次直接将具体过程全部写入接口层
接口层
学生查看分数
展示层
接口层
我们直接获取学生的课程名称列表,循环里面的课程,并将其中的分数字典展示即可
讲师登录功能
讲师登录功能是与学生以及管理员的登录一致的
所以我们直接上代码
展示层
接口层
讲师选择课程功能
讲师选择课程功能的思路就是,获取学校列表,并循环打印,获取学校名字
然后通过学校对象去找学校对象下面的课程列表,进行选择即可
展示层
接口层
讲师查看课程功能
循环学校列表,获取学校名字,并通过学校对象去获取学校下的课程列表,并进行循环打印即可
展示层
接口层
讲师查看学生分数
循环打印讲师对象下面的课程列表,然后通过课程名字去找到课程对象下面的学生列表,循环学生列表获取学生名字即可
展示层
接口层
讲师设置学生分数
与查看学生分数同理,只需要增加修改分数的代码即可
展示层
接口层
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)