管理员注册登录完整逻辑、选课系统编写思路
启动文件把当前项目根目录添加到sys.path
写一个启动脚本
在第一层src.py文件写一个run方法
1,2,3,分别对应管理员视图文件,讲师视图文件,学生视图文件
进到第一层管理员视图文件搭建管理员功能框架
在注册功能先获取用户数据
校验两次密码是否一致
调第二层管理员注册功能接口
在第二层管理员注册功能文件建立注册功能函数
先校验用户名是否已存在(调用models.py文件读取用户数据)
完成用户注册(调用models.py文件保存用户数据)
调第三层models.py文件
建立一个创建管理员对象的类
类加括号实例化产生管理员对象
封装seve_obj方法专门调db_hanlder.py文件数据保存功能
封装给类的select_obj方法专门调db_hanlder.py文件数据读取功能
再到第三层db_hanlder.py文件建立数据保存功能
由于db目录下将来需要存各个角色的文件数据,为了便于管理,我们再创一级目录,类名叫什么文件夹的名字就叫什么
先在配置文件拼接db文件夹路径(可能很多地方都要用,所以放在配置文件)
建立保存数据的功能
然后在db_hanlder.py拼接存放管理员数据的文件路径
拼接对象文件路径,pickle模块写入
建立查询数据的功能
拼接存放管理员数据的文件路径
拼接对象文件路径,pickle模块读取
一、搭建框架
- 依旧是使用三层架构的框架来编写程序
- 编写的时候同样使用软件开发目录规范
二、编写思路
1、创建目录及各个文件
2、之后打开settings,设置一些配置信息(路径,添加环境变量创建目录等代码都放在这里)
3、编写start文件,没什么作用,导入settings文件,然后引入src中的启动函数
4、src文件中也不放功能代码,只需要创建一个功能字典,然后把别的几个视图模块导入进来。当我们选择功能的时候只需要根据功能引入对应模块的启动函数就可以实现引用功能代码。
5、在view文件中我们编写函数获取输入,然后输出结果,中间的逻辑代码放到interface的接口函数中执行。
6、接口文件跟第三层进行操作的时候,跟之前有所区别,第三层需要有两个文件,一个是之前用到过的db_handler,一个是models。我们把所有的类定义在models中,同时在内部编写方法调用db_hander中的针对数据库进行操作的方法。
三、部分编写细节
三个视图文件admin_view,student_view,teacher_view。整体速录依旧跟之前一样,通过编写功能字典和定义启动函数,达到通过选择实现功能的目的。
1.admin
- 管理员注册功能:就是简单的获取用户的名称和密码,之后进行简单的判断,然后导入接口函数进行判断和创建用户。创建的时候用到类名加括号的形式创建出对应的管理员对象并保存到pickle模块创建的文件中
- 管理员注册功能:还是获取输入的名称和密码进行相应的判断,然后导入接口函数判断信息是否正确,如果符合条件就在视图文件中的log_user中记录登陆账号的名称方便后续功能的调用和判断用户是否登陆。
- 创建学校功能:获取需要创建的学校的信息,调用接口函数判断这个学校是否已经存在,不存在就给他创建出来,但是这里要把功能整合到管理员类中,后续的操作也是一样的。
- 删除学校功能:获取需要删除的学校的名称,接着把这些学校的名称传给接口函数判断是否有这个学校,如果有就给他调用管理员类中整合的方法把学校文件删了,同时把学校名称下创建的课程也一并删了
- 创建课程功能:先把目前有的学校展示出来,如果没有创建学校就提示先创建学校。当我们选择了学校之后,就可以在这个学校名称下创建课程,获取需要创建的课程的名称后就可以把名称传给接口函数判断是否已经有这个课程,如果没有就创建出来,有的话就给提示
- 删除课程功能:把目前所有的课程格式化输出展示出来,然后让管理员选择,之后简单判断一下输入是否规范,然后把数据传给接口函数删除课程,同时在学生老师和学校的信息中删除课程名称等信息
- 创建老师功能:获取老师的名称,然后给他判断一下有没有这个老师,如没有就直接创建账号,同样是调用管理员类中的方法,然后密码设置成默认密码123
- 删除老师账号:获取需要删除的老师的名称,判断你有没有这个老师存在,有的话删除他,然后再课程中也删除老师的信息
- 删除学生账号:获取需要删除的学生的名称,然后导入接口判断是否存在,如果存在就删了他然后把课程中它的名字也删了
2.student
- 学生注册功能:获取输入接受名称和密码,然后送到接口函数中判断是否存在这个学生,然后不存在的话就创建出来,创建的时候金额、课程、分数等信息使用默认信息
- 学生登陆功能:跟管理员一样获取输入放到接口函数中判断,如果正确就用log_user的name属性记录登陆的用户名称
- 选择学校功能:把目前有的学校展示出来让学生选择,然后调用接口函数判断学生是否已经有学校了,如果没的话给他变成选择的这个,如果有的话返回提示
- 选择课程功能:根据学生的学校信息判断能不能选课,如果没选学校不能选课,如果选了,就把这个学校内有的课程返回出来格式化输出,让学生选择,选择的时候如果选到了重复的课程,返回提示,如果没重复就给他添加到临时的列表中保存,然后在他退出的时候给他保存到文件中(课程对象中的学生名称列表要加上名字,然后账单属性中要加上课程的价格)
- 删除课程功能:先展示学生当前已经选的课程,然后让学生选择要删除的课程名称,接着调用接口函数删除学生对象中的课程列表里该课程的名字
- 查看已选课程:直接调用接口文件,查看当前学生的课程列表信息
- 学生缴费功能:调用接口函数直接计算当前学生的余额能不能支付当前的账单,如果可以直接扣款,如果不行返回提示
- 查看缴费情况:直接调用接口函数,查看学生的账单信息(有多少学费要交)
- 查看学生余额:调用接口函数,查看学生的余额信息
- 学生充值功能:跟ATM一样,获取需要充值的输入,然后调用接口函数,判断格式是否正确,如果正确就给他充值进余额中
3.teacher
- 老师登陆功能:跟其他两个一样的,获取输入然后调用接口函数判断,但是在第一次登陆的时候会进行检测,让初始密码的用户修改密码,同时密码修改后不能跟初始密码一样。然后让他在视图文件里的log_user的name属性变成当前登陆的名称
- 老师选择课程:把所有的课程打印出来让老师选择,然后调用接口函数把课程添加到老师对象的信息中去,同时在课程中也加入老师的信息,接着保存。如果课程选重复了给出提示
- 老师删除课程:把所有当前选的课程打印,让老师选择,然后调用接口函数删除老师选课信息中该课程的名称,同时该课程中的老师名称也要删除,然后保存
- 老师查看已选课程:跟上面功能部分重复,打印出老师的所选课程,同样是调用接口函数来实现的
- 老师设置学生分数:这里是统一设置所有学生的分数。先打印老师当前选择的课程,然后根据课程信息让老师设置该课程名称下所有学生的课程分数
- 查看学生分数:这里就跟上面一样,先获取老师已经选的课程信息,然后把该课程下所有的学生的信息全部打印输出
- 修改学生分数:也跟上面一样,获取老师的选课信息,然后老师根据课程选学生,然后修改该学生的成绩
4.common功能介绍
- 哈希加密函数:用于加密用户的密码
- 转化数据成浮点型:用户金额的转换,如果格式不对会返回False,对的话就把转换后的值给出去
- 判断是否登陆的装饰器:用有参装饰器,获取在哪个视图,然后用一个小的视图字典获取视图名称,接着在内部写上判断是否有log_user的name属性,如果有就是登陆了,没有就是没有登陆,不能执行除注册和登陆外的功能
5.models功能介绍
- 这里就是存放所有的类,其中读取数据和保存数据等功能可以放到父类base中
- 然后一些独有功能就自己给他另外加上
- 其中管理员那,要创建很多接口,一个管理员功能一个接口,不能直接调用别的类
6.db_handler功能介绍
- 这里功能就跟之前一样,写保存数据到文件的函数,写读取数据的函数,只是用的是pickle模块了
- 接着还有判断文件是否存在的函数和删除文件的函数
- 还有一个获取文件夹下所有内容的函数