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就完事了,把管理员功能写完之后就简简单单
展示层
接口层
学生选择学校功能
在此需要说一下思路,我们应该获取学校的名单,让学生去选择学校,选择学校后才可以去选择该学校内的课程,由于我的思路是将学生与学校进行了绑定,所以学生只能先选择学校然后再选择该学校下面的课程
展示层
接口层
学生选择课程功能
前面我们也说了,课程是学校内的 而学生也绑定了学校,所以我们就可以通过学生所在的学校中的课程列表获取它想选择的课程
展示层
我这次直接将具体过程全部写入接口层
接口层
学生查看分数
展示层

接口层
我们直接获取学生的课程名称列表,循环里面的课程,并将其中的分数字典展示即可

讲师登录功能
讲师登录功能是与学生以及管理员的登录一致的
所以我们直接上代码
展示层
接口层
讲师选择课程功能
讲师选择课程功能的思路就是,获取学校列表,并循环打印,获取学校名字
然后通过学校对象去找学校对象下面的课程列表,进行选择即可
展示层
接口层
讲师查看课程功能
循环学校列表,获取学校名字,并通过学校对象去获取学校下的课程列表,并进行循环打印即可
展示层
接口层
讲师查看学生分数
循环打印讲师对象下面的课程列表,然后通过课程名字去找到课程对象下面的学生列表,循环学生列表获取学生名字即可
展示层
接口层
讲师设置学生分数
与查看学生分数同理,只需要增加修改分数的代码即可
展示层
接口层
类的创建


python选课系统项目详解的更多相关文章
- python爬虫scrapy项目详解(关注、持续更新)
python爬虫scrapy项目(一) 爬取目标:腾讯招聘网站(起始url:https://hr.tencent.com/position.php?keywords=&tid=0&st ...
- python之OS模块详解
python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...
- python之sys模块详解
python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...
- Redis 配置文件 redis.conf 项目详解
Redis.conf 配置文件详解 # [Redis](http://yijiebuyi.com/category/redis.html) 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, ...
- WeChatAPI 开源系统架构详解
WeChatAPI 开源系统架构详解 如果使用WeChatAPI,它扮演着什么样的角色? 从图中我们可以看到主要分为3个部分: 1.业务系统 2.WeChatAPI: WeChatWebAPI,主要是 ...
- Python中time模块详解
Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...
- Python模块调用方式详解
Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...
- Python对Excel操作详解
Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl ...
- [转帖](整理)GNU Hurd项目详解
(整理)GNU Hurd项目详解 http://www.ha97.com/3188.html 发表于: 开源世界 | 作者: 博客教主 标签: GNU,Hurd,详解,项目 Hurd原本是要成为GNU ...
- python基础之函数详解
Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...
随机推荐
- Go语言学习的坑爹历程
鄙人暑期实习,需要用Go语言进行编程 在go语言中,结构体的定义只支持变量的声明,成员函数是采用"接口方法"来实现的 留一个成员定义的模板在此 package main impor ...
- thinkphp5.1 cookie跨域、thinkphp5.1 session跨域、tp5.1cookie跨域
cookie跨域: //config/cookie.php return [ //... //仅7.3.0及以上适用 'samesite' => 'None', //是否加密cookie值,fa ...
- uniapp路由守卫
项目地址:https://hhyang.cn/v2/start/quickstart.html 按照他的方法安装,创建相应的js即可,有点基础的自己捣鼓一下就可以了.我的应用场景是:没有登录痕迹- ...
- 使用docker-compose方式安装redash
转载自:https://anjia0532.github.io/2019/07/08/redash/ ## 安装必要工具 apt install -y pwgen python-pip pip ins ...
- MySql的InnoDB的三层B+树可以存储两千万左右条数据的计算逻辑
总结/朱季谦 B+树是一种在非叶子节点存放排序好的索引而在叶子节点存放数据的数据结构,值得注意的是,在叶子节点中,存储的并非只是一行表数据,而是以页为单位存储,一个页可以包含多行表记录.非叶子节点存放 ...
- CSS-part1
一. CSS选择器 1.css引入方式 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- js对象结构赋值const {XXX } =this
样例1: const { xxx } = this.state; 上面的写法是es6的写法,其实就相当于: const xxx = this.state.xxx 样例2: const {comment ...
- MergeOption.NoTracking的使用
前两天项目维护出现一个bug,报错信息是提交出错:AcceptChanges 无法继续,因为该对象的键值与 ObjectStateManager 中的另一个对象冲突.请在调用 AcceptChange ...
- GTID主从
GTID主从 目录 GTID主从 GTID概念介绍 GTID工作原理 GTID主从配置 GTID概念介绍 GTID即全局事务ID (global transaction identifier), 其保 ...
- 『现学现忘』Git分支 — 41、分支基本操作(二)
目录 6.新建一个分支并且使分支指向指定的提交对象 7.思考: 8.项目分叉历史的形成 9.分支的总结 提示:接上篇 6.新建一个分支并且使分支指向指定的提交对象 使用命令:git branch br ...






























