# 选课系统 **Repository Path**: song-wenfeng/course-selection-system ## Basic Information - **Project Name**: 选课系统 - **Description**: 用面向对象方法写的一个选课系统 1.0 版本,仍有很多bug待调教! - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-05-09 - **Last Updated**: 2024-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 选课系统项目工程 ## 【一】项目需求 ``` - 角色: - 学校 - 学员 - 课程 - 讲师 - 功能需求 - 创建学校地点 ----> 北京/上海 - 管理员功能创建学校 - 创建班级 ----> 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文件夹 - 该文件夹下存储每个管理员的信息 - 根据类对象中的名字参数取得对应对象的名字 - 也就是每个人的姓名 - 打开文件并写入数据 ### 【10】数据处理层之查看数据 #### (1)默认参数 - 实例后的类 - 用户名 #### (2)方法 - 根据传入的类取得类的名字 - 拼接文件路径 - 比如管理员文件夹 Admin 文件夹路径 - 拼接用户指定路径 - 在上面的基础上拼上需要查询的指定的文件的数据 - 比如管理员下的某个管理员的数据文件 - 如果文件存在则打开指定路径 - 读取到对象数据并返回对象数据 - 如果文件不存在则返回空供上一层判断 ## 【三】逻辑分析 > 作者懒得搞了,自己捋! ## 【四】功能演示 ### 【1】管理员功能演示 #### (1)主功能展示 ![1](imgs/选课系统项目工程.assets/1.png) #### (2)注册 ![2](imgs/选课系统项目工程.assets/2.png) #### (3)登录 ![3](imgs/选课系统项目工程.assets/3.png) #### (4)创建学校 ![5](imgs/选课系统项目工程.assets/5.png) ![6](imgs/选课系统项目工程.assets/6.png) #### (5)创建课程 ![7](imgs/选课系统项目工程.assets/7.png) ![8](imgs/选课系统项目工程.assets/8.png) #### (6)创建讲师 ![9](imgs/选课系统项目工程.assets/9.png) ### 【2】学生功能展示 #### (1)主功能展示 ![10](imgs/选课系统项目工程.assets/10.png) #### (2)注册 ![11](imgs/选课系统项目工程.assets/11.png) ![12](imgs/选课系统项目工程.assets/12.png) #### (3)登陆 ![13](imgs/选课系统项目工程.assets/13.png) #### (4)选择校区 ![14](imgs/选课系统项目工程.assets/14.png) ![15](imgs/选课系统项目工程.assets/15.png) #### (5)选择课程 ![16](imgs/选课系统项目工程.assets/16.png) ![17](imgs/选课系统项目工程.assets/17.png) #### (6)付费课程 ![18](imgs/选课系统项目工程.assets/18.png) ![19](imgs/选课系统项目工程.assets/19.png) ![20](imgs/选课系统项目工程.assets/20.png) #### (7)查看分数 ![21](imgs/选课系统项目工程.assets/21.png) #### (8)查看全部信息 ![22](imgs/选课系统项目工程.assets/22.png) ### 【3】讲师功能展示 #### (1)主功能展示 ![23](imgs/选课系统项目工程.assets/23.png) #### (2)登陆 ![24](imgs/选课系统项目工程.assets/24.png) #### (3)选择教授课程 ![25](imgs/选课系统项目工程.assets/25.png) ![26](imgs/选课系统项目工程.assets/26.png) #### (4)查看教授课程 ![27](imgs/选课系统项目工程.assets/27.png) #### (5)查看课程学生 ![28](imgs/选课系统项目工程.assets/28.png) ![29](imgs/选课系统项目工程.assets/29.png) #### (6)修改学生分数 ![30](imgs/选课系统项目工程.assets/30.png) ![31](imgs/选课系统项目工程.assets/31.png)