选课系统项目工程
【一】项目需求
- 角色:
- 学校
- 学员
- 课程
- 讲师
- 功能需求
- 创建学校地点 ----> 北京/上海
- 管理员功能创建学校
- 创建班级 ----> Linux/Python/Go
- Linux/Python在北京校区
- Go在上海校区
- 课程内容
- 周期
- 价格
- ----> 通过学校创建课程
- 创建学员时
- 选择学校、付费后关联班级
- 创建讲师
- 关联学校
- 提供两个角色接口
- 学员视图
1.注册
2.登陆
3.选择校区
4.选择课程
5.付费课程
6.查看分数
7.查看全部信息
- 讲师视图
1.登陆
2.查看教授课程
3.选择教授课程
4.查看课程学生
5.修改学生分数
- 管理员视图
1.注册
2.登陆
3.创建学校
4.创建课程(先选择学校)
5.创建讲师
- 使用 pickle 序列化将数据保存到文件
【二】功能分析
【1】管理员功能
(1)注册
- 管理员可以进行管理员身份注册
- 注册时对密码进行加密(md5加盐)
- 用户名
- 盐
- 盐 + 原始密码(二次验证) ----> 加密后的密码
(2)登陆
- 管理员可以根据注册的账号密码进行登陆
- 登陆时使用的也是加密后的密码进行验证登陆
- 用户名
- 原始密码 + 盐(注册时) ----> 加密后的密码
- 随机四位登陆验证码
- 比对密码是否一致
(3)创建学校
- 管理员可以创建学校
- 学校名称
- 学校地点
(4)创建课程(先选择学校)
- 管理员可以创建课程,前提是已经绑定好校区
- 先选择想要添加课程的校区
- 再向校区内添加课程
- 课程名称
- 课程周期
- 课程价格
(5)创建讲师
-
讲师不让自己注册,默认由管理员分配和创建
-
讲师姓名
-
讲师密码(设置默认密码)
-
【2】学生功能
(1)注册
- 学生可以自行注册
- 注册时对密码进行加密(md5加盐)
- 用户名
- 盐
- 盐 + 原始密码(二次验证) ----> 加密后的密码
(2)登陆
- 学生可以根据注册的用户名和密码进行登陆
- 登陆时使用的也是加密后的密码进行验证登陆
- 用户名
- 原始密码 + 盐(注册时) ----> 加密后的密码
- 随机四位登陆验证码
- 比对密码是否一致
(3)选择校区
- 学生可以选择入学的校区(且只能入学一个校区)
- 打印所有学校列表让学生选择学校
- 入学
(4)选择课程
- 学生可以自主选择课程
- 打印指定学校内的所有课程列表
- 学生选择课程
- 添加课程
(5)付费课程
- 学生需要付费课程才能到指定班级上课
- 打印学生已选课程列表
- 打印学生选择的课程的详细信息
- 学生选择需要付费的课程
- 付费成功,激活课程
- 添加学生到指定班级
(6)查看分数
- 学生已选择课程并成功入学
- 默认课程分数为0
- 打印学生付费的课程
- 打印学生付费课程的分数
(7)查看全部信息
- 允许学生查看所有信息
- 学生已入学学校
- 学生已选择课程
- 学生付费课程分数
【3】讲师功能
(1)登陆
- 讲师可以根据管理员创建的账号密码进行登陆
- 登陆时使用的也是加密后的密码进行验证登陆
- 用户名
- 默认密码 + 盐(注册时) ----> 加密后的密码
- 随机四位登陆验证码
- 比对密码是否一致
(2)选择教授课程
- 允许讲师选择自己教授的课程
- 讲师先选择教学的校区
- 打印校区下的所有课程
- 选择相应课程加入自己的教授列表
(3)查看教授课程
- 允许讲师查看自己教授的课程
(4)查看课程学生
- 允许讲师查看自己班级下的学生名单
- 选择对应的课程
- 打印对应课程下的学生名单
(5)修改学生分数
- 允许讲师修改学生分数
- 先打印课程列表下的所有学生名字
- 根据学生名字修改对应的课程分数
【4】基类(父类)
- 父类为查询数据类
- 查询数据返回对象
- 保存对象数据
(1)查询类
- 静态方法(传入的参数为类和用户名)
- 根据传入的类和用户名调用数据查询方法查询到指定类
- 返回查询到的指定类
(2)保存类
- 传入类对象数据
- 调用数据处理层进行类的保存更新
【5】管理员类(继承父类)
(1)默认参数
- 管理员姓名
- 管理员密码
- 管理员密码加密的盐
(2)创建学校功能
- 参数
- 调用功能的类对象本身
- 学校的名称
- 学校的地点
- 方法
- 根据学校名称和学校地点实例化学校类对象
- 将学校类传给学校类中的保存方法进行保存
(3)创建课程功能
-
参数
- 调用功能的类对象本身
- 学校对象
- 课程名称
- 课程周期
- 课程价格
-
方法
- 根据课程名称、课程周期、课程价格实例化课程类对象
- 调用课程类中的保存方法,对课程类进行保存
- 将课程名字添加到指定学校中的课程列表中
- 对学校类对象进行保存
(4)创建讲师功能
- 参数
- 调用功能的类对象本身
- 讲师姓名
- 讲师密码
- 讲师加密的盐
- 方法
- 根据讲师姓名、讲师密码、讲师加密用到的盐实例化讲师类对象
- 调用讲师类中的保存方法进行类对象数据的保存
【6】学员类(继承父类)
(1)默认参数
- 学生姓名
- 学生密码
- 学生密码加密用到的盐
- 学生所在校区(默认为空)
- 学生已选择的课程列表
- 学生已付费的课程的分数字典
- 学生是否已付费的课程字典
(2)学生选择学校功能
- 参数
- 调用类功能的类对象本身
- 学校名称
- 方法
- 更改自己的默认所在校区参数
- 对学生类对象进行保存
(3)学生选择课程功能
- 参数
- 调用类功能的类对象本身
- 课程名称
- 方法
- 更改自己的默认课程列表
- 在付费字典中记录默认状态
- 未付费
- 对学生类对象进行保存
(4)学生付费功能
-
参数
-
调用类功能的类对象本身
-
课程名称
-
-
方法
- 根据课程名称实例化得到课程对象本身
- 向课程列表中添加学生
- 修改自己的分数字典中的默认课程
- 默认分数为0
- 修改是否付费字典中的课程状态
- 已付费
- 对学生类对象进行保存
- 对课程类进行保存
【7】课程类(继承父类)
(1)默认参数
- 课程名称
- 课程周期
- 课程价格
- 默认课程学生列表
【8】讲师类(继承父类)
(1)默认参数
- 讲师姓名
- 讲师密码
- 讲师密码加密的盐
- 讲师教授的课程列表
(2)讲师查看全部课程功能
- 直接返回对象本身的讲授的课程列表
(3)添加课程功能
-
参数
-
调用功能的类对象本身
-
课程名称
-
-
方法
- 调用自身的课程列表,将课程名称添加到课程列表内
- 对讲师类进行保存
(4)获取对应课程的学生列表
- 参数
- 调用功能的类对象本身
- 课程名称
- 方法
- 根据课程名称实例化得到对应的课程列表
- 返回对应课程列表内的学生列表
(5)更爱学生分数功能
- 参数
- 调用类功能的类对象本身
- 课程名称
- 学生名字
- 修改的目标学生分数
- 方法
- 根据学生名字实例化得到学生对象
- 根据课程名称拿到对应分数字典中的课程,将默认0修改为指定分数
- 调用学生对象保存功能保存更改后的学生对象
【9】数据处理层之保存数据
(1)默认参数
- 类对象
(2)方法
- 根据类对象取得类对象的名字
- 根据类对象名字拼接指定文件夹路径
- 比如管理员类传进来就要建立Admin文件夹
- 该文件夹下存储每个管理员的信息
- 比如管理员类传进来就要建立Admin文件夹
- 根据类对象中的名字参数取得对应对象的名字
- 也就是每个人的姓名
- 打开文件并写入数据
【10】数据处理层之查看数据
(1)默认参数
- 实例后的类
- 用户名
(2)方法
- 根据传入的类取得类的名字
- 拼接文件路径
- 比如管理员文件夹 Admin 文件夹路径
- 拼接用户指定路径
- 在上面的基础上拼上需要查询的指定的文件的数据
- 比如管理员下的某个管理员的数据文件
- 在上面的基础上拼上需要查询的指定的文件的数据
- 如果文件存在则打开指定路径
- 读取到对象数据并返回对象数据
- 如果文件不存在则返回空供上一层判断
【三】逻辑分析
作者懒得搞了,自己捋!