选课系统项目详解

  • 选课系统简介及分析
  • 选课系统架构设计分析
  • 选课系统目录设计
  • 管理员视图
    • 注册
    • 登录
    • 创建学校
    • 创建课程
    • 创建讲师
  • 学生视图
    • 注册
    • 登录
    • 选择学校
    • 选择课程
    • 查看分数
  • 教师视图
    • 登录
    • 选择课程
    • 查看课程
    • 查看学生分数
    • 修改学生分数

选课系统简介及分析

在学习完面向对象的内容后
我们可以通过选课系统来结合一下我们学习面向对象的内容
'''项目介绍
选课系统
角色:学校 学员 课程 讲师
要求:
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选课系统项目详解的更多相关文章

  1. python爬虫scrapy项目详解(关注、持续更新)

    python爬虫scrapy项目(一) 爬取目标:腾讯招聘网站(起始url:https://hr.tencent.com/position.php?keywords=&tid=0&st ...

  2. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  3. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

  4. Redis 配置文件 redis.conf 项目详解

    Redis.conf 配置文件详解 # [Redis](http://yijiebuyi.com/category/redis.html) 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, ...

  5. WeChatAPI 开源系统架构详解

    WeChatAPI 开源系统架构详解 如果使用WeChatAPI,它扮演着什么样的角色? 从图中我们可以看到主要分为3个部分: 1.业务系统 2.WeChatAPI: WeChatWebAPI,主要是 ...

  6. Python中time模块详解

    Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...

  7. Python模块调用方式详解

    Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...

  8. Python对Excel操作详解

      Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl   ...

  9. [转帖](整理)GNU Hurd项目详解

    (整理)GNU Hurd项目详解 http://www.ha97.com/3188.html 发表于: 开源世界 | 作者: 博客教主 标签: GNU,Hurd,详解,项目 Hurd原本是要成为GNU ...

  10. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

随机推荐

  1. 使用nginx反向代理RabbitMQ的web界面

    直接贴nginx的conf配置: server { listen 80; server_name www.xxxxx.com; location / { client_body_buffer_size ...

  2. Java 基础三、接口与内部类

    1.   在Java程序语言中,接口是对类的一种描述.例如Arrays类中sort方法声明可以对对象进行排序,但前提是对象所属的类必须实现Comparable接口. public interface ...

  3. PAT (Basic Level) Practice 1009 说反话 分数 20

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小 ...

  4. display:block 和display:inline-block的区别和用法

    1).块状元素:(div,p,form,ul,ol,li) ,独占一行,默认情况width为100% 2).行内块状元素:(span,img,a),不会独占一行,相邻的元素一直排在同一行,排满了才会换 ...

  5. HDU1561 The more, The Better(树形背包)

    通过这道题对树形背包理解更深一步...... 有几个地方需要注意: 1.本题数据结构为森林,需增加一个超根作为根节点,M+=1(后面解释). 2.本题有拓扑序的限制,通过vector建成的一棵树中,必 ...

  6. 带你读AI论文丨ACGAN-动漫头像生成

    摘要:ACGAN-动漫头像生成是一个十分优秀的开源项目. 本文分享自华为云社区<[云驻共创]AI论文精读会:ACGAN-动漫头像生成>,作者:SpiderMan. 1.论文及算法介绍 1. ...

  7. 配置DNS域名解析服务

    概:   DNS技术作为互联网基础设施中的重要一环,为用户提供不间断.稳定且快速的域名查询服务,保证互联网正常运转.在互联网中,用户基本上都是基于DNS服务,使用域名访问网络上的计算机,DNS服务是我 ...

  8. 驱动开发:内核遍历进程VAD结构体

    在上一篇文章<驱动开发:内核中实现Dump进程转储>中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍VAD结构,该结构的全程是Virtual Address Descrip ...

  9. 个人音乐博客 h5、css和js等

    浅说一下吧 这个小项目由h5和css还有js和jq写的 主题内容为个人音乐 博客等 首页一级导航栏 以及侧边栏 整合部分图标(侧边栏未添加收起操作 时间原因 会的朋友们可以自行添加一个动画就可以 在m ...

  10. JavaScript基本语法(JavaScript代码嵌入方式与声明和使用变量)

    .JavaScript代码嵌入方式 #①HTML文档内 JavaScript代码要写在script标签内 script标签可以写在文档内的任意位置 为了能够方便查询或操作HTML标签(元素)scrip ...