作业需求
- 创建北京、上海 2 所学校
- 创建linux , python , go 3个课程,linuxpy在北京开, go 在上海开
- 课程包含,周期,价格,通过学校创建课程
- 通过学校创建班级,班级关联课程、讲师
- 创建学员时,选择学校,关联班级
- 创建讲师角色时要关联学校,
- 提供两个角色接口
7.1. 学员视图,可以注册,交学费,选择班级,
7.2. 讲师视图,讲师可管理自己的班级,上课时选择班级,查看班级学员列表,修改所管理的学员的成绩
7.3. 管理视图,创建讲师,创建班级,创建课程 - 上面的操作产生的数据都通过pickle序列化保存到文件里
需求模型
通过对如上需求的解读,我整理出如下需求模型。
用例名
选课系统
场景
- when:任意时间
- where:老男孩
- who:学生、讲师、管理员
用例描述
- 管理员可以创建学校。学校包含:名字、城市、地址。如:上海、北京、等(管理员自己创建其他地方的学校)
- 管理员创建的课程。课程包含:名称、周期、价格、大纲。如:python,go,linux(课程与学校关联)
- 管理员创建班级。班级包含:名称、上课方式(脱产、周末、线上)、课程、讲师、开课日期、学员列表。如:python周末18期,python脱产7期,linux架构35期(班级与课程、讲师关联)
- 管理员创建讲师。讲师包含:名字、性别、年龄、学校。如:alex,egon,wupeiqi,yuanhao(讲师关联学校)
- 管理员创建学员。
- 讲师查看学员列表。(学员列表与班级关联)
- 讲师修改管理的学员的成绩。
- 学员注册。包含:名字、性别、年龄、等
- 学员查询可上课程
- 学员选课,选择学校、课程,并付款。
- 学员查询自己学习记录。学习记录包含:成绩
用户价值
完成一套可运行的选课管理系统,解决人工管理上下课的难度。
约束
暂无
建模设计
将需求模型继续进行整理。整理出如下建模设计的内容。
关键字
学校、课程、班级、讲师、上课记录、学员、学习记录、作业、成绩、管理员、
关键字分析
人类:属性有名字、性别、年龄
学生类:继承人类。属性有课程、班级、成绩
老师类:继承人类。属性有课程、班级
学校类:属性有学校名、城市、地点、
课程类:属性有课程名称、价格、周期
班级类:属性有班级名、教师、开课日期、上课方式
账号类:属性有账号名、密码、状态、角色。
学习记录类:属性有成绩
管理员类:继承与站账号类
视图类:处理管理员、老师、学员的所有视图上的操作
UML流程图
目录结构
│ README.md
├─bin # 执行文件目录
│ │ scs.py # 执行文件
│ └─ __init__.py
│
├─conf # 配置文件目录
│ │ settings.py # 配置文件
│ └─ __init__.py
│
├─core # 核心执行文件目录
│ │ main.py # 主程序文件
| | logger.py # 日志程序文件
│ └─ __init__.py
├─db # 数据库目录
│ ├─accounts # 账号数据所在目录
│ └─base # 学校等基础数据所在目录
├─lib # 库文件目录
│ │ accounts.py # 账号类
│ │ classes.py # 班级类
│ │ courses.py # 课程类
│ │ db.py # 数据库类文件
│ │ persion.py # 人类文件
│ │ schools.py # 学校类文件
│ │ study_record.py # 学习记录类嗡
│ │ views.py # 视图类文件
│ │ __init__.py
└─log # 日志文件目录
程序主体
具体代码可以从github中下载:
SCS
单元测试
由于作业时间有限,没有编写单元测试使用的程序脚本。故直接通过模拟用户使用的方式来进行测试。
一、管理员功能测试
执行scs.py文件后进入主页面:输入3进入管理员界面。
===============欢迎进入老男孩学校===============
1. 学生登录通道
2. 教师登录通道
3. 管理员登录通道
4. 退出
================================================
>>:3
进入管理员视图:管理员可以进行学校管理,学员管理。也可以修改自己的密码。
当进入这些视图前,如果管理员没有登录会进行一次登录认证。如已经登录就不会再次认证。
===============欢迎进入管理视图===============
1. 学校管理
2. 学员管理
3. 修改密码
4. 注销
==============================================
>>:
学校管理视图:可以进行学校的创建、课程的创建、讲师的创建、和班级的创建。
我们这里直接就根据需求:
- 创建beijing和shanghai两所学校。
-
创建linux , python , go 3个课程,linuxpy在北京开, go 在上海开。
- linux课程价格8000,周期35
- python课程价格8000,周期18
- go课程价格10000,周期20
- 创建讲师alex、egon属于北京校区,yuanhao属于上海校区。
- 创建分别为3个课程创建班级 alex为python班级的讲师、egon为linux班级的讲师、yuanhao为go班级的讲师
>>:1
Please input username:admin
Please input password:admin
2018-04-09 14:18:51,475 - access - INFO - [admin] Login Success!
[admin] Login Success!
===============欢迎进入管理视图===============
1. 创建学校
2. 创建课程
3. 创建讲师
4. 创建班级
5. 返回
==============================================
>>:1
================创建学校=================
Please input name of school:beijing
Please input city of school:beijing
Please input address of school:beijing
Create school success!
===============欢迎进入管理视图===============
1. 创建学校
2. 创建课程
3. 创建讲师
4. 创建班级
5. 返回
==============================================
>>:1
================创建学校=================
Please input name of school:shanghai
Please input city of school:shanghai
Please input address of school:shanghai
Create school success!
===============欢迎进入管理视图===============
1. 创建学校
2. 创建课程
3. 创建讲师
4. 创建班级
5. 返回
==============================================
>>:2
================创建课程=================
Please input course name:python
Please input price:8000
Please input term:18
Please input associated school:beijing
Create course success!
===============欢迎进入管理视图===============
1. 创建学校
2. 创建课程
3. 创建讲师
4. 创建班级
5. 返回
==============================================
>>:2
================创建课程=================
Please input course name:linux
Please input price:8000
Please input term:35
Please input associated school:beijing
Create course success!
===============欢迎进入管理视图===============
1. 创建学校
2. 创建课程
3. 创建讲师
4. 创建班级
5. 返回
==============================================
>>:2
================创建课程=================
Please input course name:go
Please input price:10000
Please input term:20
Please input associated school:shanghai
Create course success!
===============欢迎进入管理视图===============
1. 创建学校
2. 创建课程
3. 创建讲师
4. 创建班级
5. 返回
==============================================
>>:3
================创建老师=================
Please input username:alex
Please input password:alex123
Please input password confirmation:alex123
Please input associated school:beijing
Registry Success!
===============欢迎进入管理视图===============
1. 创建学校
2. 创建课程
3. 创建讲师
4. 创建班级
5. 返回
==============================================
>>:3
================创建老师=================
Please input username:egon
Please input password:egon123
Please input password confirmation:egon123
Please input associated school:beijing
Registry Success!
===============欢迎进入管理视图===============
1. 创建学校
2. 创建课程
3. 创建讲师
4. 创建班级
5. 返回
==============================================
>>:3
================创建老师=================
Please input username:yuanhao
Please input password:yuanhao123
Please input password confirmation:yuanhao123
Please input associated school:shanghai
Registry Success!
===============欢迎进入管理视图===============
1. 创建学校
2. 创建课程
3. 创建讲师
4. 创建班级
5. 返回
==============================================
>>:4
================创建班级=================
Please input class name:python18
Please input associated school:beijing
Please input associated course:python
Please input associated teacher:alex
Create class success!
===============欢迎进入管理视图===============
1. 创建学校
2. 创建课程
3. 创建讲师
4. 创建班级
5. 返回
==============================================
>>:4
================创建班级=================
Please input class name:linux35
Please input associated school:beijing
Please input associated course:linux
Please input associated teacher:egon
Create class success!
===============欢迎进入管理视图===============
1. 创建学校
2. 创建课程
3. 创建讲师
4. 创建班级
5. 返回
==============================================
>>:4
================创建班级=================
Please input class name:go20
Please input associated school:shanghai
Please input associated course:go
Please input associated teacher:yuanhao
Create class success!
===============欢迎进入管理视图===============
1. 创建学校
2. 创建课程
3. 创建讲师
4. 创建班级
5. 返回
==============================================
>>:5
学员管理视图:可以查看学校的学员情况,并可以分配已经报名课程的学员到具体的班级中。我们已经注册了一个henry的学生,这个学生报名了python的课程,所以管理员需要将他分配到python18这个班级中。
===============欢迎进入管理视图===============
1. 学员信息
2. 分配班级
3. 返回
==============================================
>>:1
Please input school:beijing
==================学生信息==================
ID: 027e4180beedb29744413a7ea6b84a42
Account: henry
Type: 3
Status: 0
School: beijing
Course: python
Class: 未分配班级
Teacher: 未分配导师
============================================
===============欢迎进入管理视图===============
1. 学员信息
2. 分配班级
3. 返回
==============================================
>>:2
================分配班级=================
Please input name of school:beijing
Please input account of student:henry
Please input name of course:python
Please input name of class:python18
Students have bound courses!
二、学员功能测试
学员视图界面
===============欢迎进入学员视图===============
1. 注册账号
2. 填写账户信息
3. 查看账户信息
4. 选择课程并付费
5. 查看学习记录
6. 修改密码
7. 注销
==============================================
学员可以注册账号,也可以补全自己的个人信息。这些基本功能,这里就不进行详细的测试了。主要看一下选课和查看学习记录。我还是使用henry学员,henry再报名一个linux课程。来实现报名,由于henry的成绩老师还没有下发分数,所以暂时还看不到成绩。
===============欢迎进入学员视图===============
1. 注册账号
2. 填写账户信息
3. 查看账户信息
4. 选择课程并付费
5. 查看学习记录
6. 修改密码
7. 注销
==============================================
>>:4
Please input username:henry
Please input password:henry123
2018-04-09 15:15:01,863 - access - INFO - [henry] Login Success!
[henry] Login Success!
================购买课程=================
Please choise school:beijing
Please choise course:linux
Please pay tuition [8000 RMB]:8000
The success of the course purchase!
===============欢迎进入学员视图===============
1. 注册账号
2. 填写账户信息
3. 查看账户信息
4. 选择课程并付费
5. 查看学习记录
6. 修改密码
7. 注销
==============================================
>>:5
================学习记录=================
Score: 成绩未公布
=========================================
三、教师功能测试
教师视图
===============欢迎进入教师视图===============
1. 填写账户信息
2. 查看账户信息
3. 班级管理
4. 修改密码
5. 注销
==============================================
我们主要来看一下班级管理功能。班级管理功能可以查看自己班级的学生、并未学生下发成绩
===============欢迎进入教师视图===============
1. 填写账户信息
2. 查看账户信息
3. 班级管理
4. 修改密码
5. 注销
==============================================
>>:3
Please input username:alex
Please input password:alex123
2018-04-09 15:17:51,271 - access - INFO - [alex] Login Success!
[alex] Login Success!
===============欢迎进入管理视图===============
1. 选择班级
2. 学生列表
3. 批改作业
4. 返回
==============================================
>>:1
Please input name of class:python18
Choice class success!
===============欢迎进入管理视图===============
1. 选择班级
2. 学生列表
3. 批改作业
4. 返回
==============================================
>>:2
================班级学生列表=================
Class: python18
Students:
henry
=============================================
===============欢迎进入管理视图===============
1. 选择班级
2. 学生列表
3. 批改作业
4. 返回
==============================================
>>:3
================作业批改=================
Please input name of student:henry
Please input score of student:95
Confirm input "yes". Back off input "b":yes
[henry] homework to be corrected