选课系统项目详解

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

选课系统简介及分析

在学习完面向对象的内容后
我们可以通过选课系统来结合一下我们学习面向对象的内容
'''项目介绍
选课系统
角色:学校 学员 课程 讲师
要求:
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. flex常用布局

    公共样式: <style> * { margin: 0; padding: 0; } .has-flex { display: flex; } </style> 垂直居中 子元 ...

  2. 跟羽夏学 Ghidra ——工具

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...

  3. C# 常见面试问题

    C# 常见面试问题 EntityFramework 数据持久化 C#中的委托是什么?事件是不是一种委托? C#中的委托是一种引用类型,表示具有相同方法签名的方法的引用.类似于函数指针,也就是说它们是指 ...

  4. Java SE Object类

    1.Object类 equals 方法 == 和 equals 的对比 == 是一个比较运算符 == 既可以判断基本类型,又可以判断引用类型 == 如果判断的是基本类型,判断的是值是否相等 == 如果 ...

  5. 【COS生态建设】开发者有奖调研,等你来参与!

    为了更好的赋能开发者,为大家提供更好的开源应用,我们诚挚的邀请您抽出几分钟参与"有奖问卷",告诉我们您对"COS生态建设"的意见和建议.希望通过这份调查问卷,能 ...

  6. 入门Python,看完这篇就行了!

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/3bbc3146.html 你好,我是测试蔡坨坨. 众所周知,Python语法简洁.功能强大,通过简单的代码就能实现很多实用. ...

  7. Linux日志切割方法[Logrotate、python、shell实现方式]

    Linux日志切割方法[Logrotate.python.shell实现方式] ​ 对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分 ...

  8. linux搭建内网邮件服务器

    一.配置发件服务器 1.1 根据现场IP,配置主机名 vi /etc/hosts 192.168.40.133 mail.test.com 将主机名更改为邮件服务器域名mail.test.com 1. ...

  9. 制造企业有可能自行开发ERP系统吗?

    当然可以啊! 生产企业对于ERP的需求是一直存在的,但市场上多为标准化的产品,与企业的个性化需求矛盾着. 有很多制造企业自行开发ERP系统啊!只是各个企业成效不同而已,毕竟不同企业的IT开发能力不同而 ...

  10. GitLab + Jenkins + Harbor 工具链快速落地指南

    目录 一.今天想干啥? 二.今天干点啥? 三.今天怎么干? 3.1.常规打法 3.2.不走寻常路 四.开干吧! 4.1.工具链部署 4.2.网络配置 4.3.验证工具链部署结果 4.3.1.GitLa ...