面向对象作业——校园管理系统
角色:
管理员、老师、学生
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 ,linuxpy 在北京开,go 在上海开
3. 课程包含,周期,价格,学校
4. 班级关联课程、讲师
5. 创建学员时,关联课程和班级
6. 创建讲师角色时要关联课程
7. 提供三个角色视图
6.1 学员视图:查看自己的课程、班级
6.2 讲师视图:讲师可查看自己教学的班级、课程。
进阶需求:可管理自己的班级(查看班级学员列表,修改所管理的学员的成绩)
6.3 管理视图:创建讲师,创建班级,创建课程,创建学生,创建学校
8. 上面的操作产生的数据都通过pickle序列化保存到文件里
9. 按照软件开发规范来写代码
10. 登录成功失败、管理员的创建操作,老师的修改操作,都要记录日志
下面开始具体分析题意:
先明确,要创建哪些类?每个类有哪些属性
我定义的类和属性如下:
CheckFiles # 检测配置文件中的文本文件是否存在,不存在时,自动创建
Classes # 班级
Course # 课程
Login # 登录
Main # 主程序
Manager # 管理员
Personal # 人类
Prompt # 专门用来显示提示信息,带7种颜色,颜色任选
School # 学校
Student # 学生
Teacher # 老师
主要的类的属性如下:
老师的属性分别为: 姓名,性别,年龄,课程。字典为:
{'name': name, 'sex': sex, 'age': age, 'course': course}
学生的属性分别为: 姓名,性别,年龄,课程,成绩,班级。字典为:
{'name': name, 'sex': sex, 'age': age, 'course': course, 'score': 0, 'classes': classes}
班级的属性分别为: 名字,课程,老师。字典为:
{'name': classes, 'course': course, 'teacher': teacher}
课程的属性分别为: 名字,周期,价格,城市。字典为:
{'name': course, 'cycle': cycle, 'price': price, 'city': city}
学校的属性分别为: 名字。字典为:
{'name': name}
字典对应的value,需要自己去填充
1.首先必须有北京和上海2所学校
2.linux,python在北京,go在上海(强制规定)。
3.课程包含,周期,价格,学校
既然有强制规定,那么就应该在程序运行时,就创建好3门课程,同时保证课程对应学校,字典如下:
course_default = [
{'name': 'linux', 'cycle': 3, 'price': 7000, 'city': '北京'},
{'name': 'python', 'cycle': 5, 'price': 20000, 'city': '北京'},
{'name': 'go', 'cycle': 7, 'price': 22000, 'city': '上海'},
]
字典的key分别表示名字,周期,价格,城市
4.班级关联课程、讲师
创建班级时要关联课程,由于默认就有3个课程,可以任选一个。
关联讲师,默认没有讲师,那么就需要先讲师。
在创建班级时,如果对应的课程没有老师,直接提示要先创建老师,并返回程序开始的地方。
5.创建学员时,关联课程和班级
课程默认是有的,任选一个。
如果对应的课程没有班级,提示创建班级,并返回程序开始的地方。
6.创建讲师角色时要关联课程
课程默认是有的,任选一个。
7. 提供三个角色视图
6.1 学员视图:查看自己的课程、班级
6.2 讲师视图:讲师可查看自己教学的班级、课程。
进阶需求:可管理自己的班级(查看班级学员列表,修改所管理的学员的成绩)
6.3 管理视图:创建讲师,创建班级,创建课程,创建学生,创建学校。以及查看前面创建的项。
这里有2个做法:
1. 先选择角色,再登录,登录成功之后,跳转到后台页面
2 直接登录,根据角色的不同,跳转到后台页面
第一种方法,有点low。我选用的是第2种方案。
那么就需要一个用户认证文件,只要3个字段: 用户名,密码,角色。字典如下:
{'username': 'xiao','password':'123', 'role': 'Manager'}
密码不能明文存在,必须得加密一下。而且这个字典,需要使用pickle序列化保存到文件里
角色名和类名是对应的,那么登录的时候,直接反射角色名,就可以跳转到对应的类里面。
8. 上面的操作产生的数据都通过pickle序列化保存到文件里
需要有6个txt文件,分别是登录认证,老师,学生,班级,课程,学校
还要有1个log文件,用来记录日志
9. 按照软件开发规范来写代码
我创建的目录和文件结构如下:
school_management
├── bin
│ └── start.py
├── conf
│ └── settings.py
├── core
│ ├── CheckFiles.py
│ ├── Classes.py
│ ├── Course.py
│ ├── Login.py
│ ├── Main.py
│ ├── Manager.py
│ ├── Personal.py
│ ├── Prompt.py
│ ├── School.py
│ ├── Student.py
│ └── Teacher.py
├── db
│ ├── classes_info.txt
│ ├── course_info.txt
│ ├── school_info.txt
│ ├── student_info.txt
│ ├── teacher_info.txt
│ └── user_info.txt
├── lib
│ ├── mylogger.py
│ └── mypickle.py
├── log
│ └── test.log
├── 关联关系.png
├── 项目流程.png
└── readme
10. 登录成功失败、管理员的创建操作,老师的修改操作,都要记录日志
记录的日志都在test.log文件中
流程图如下:
关联关系如下:
完整代码我上传到github.com中
地址为:
https://github.com/py3study/school_management
登录成功之后,菜单列表展示为隔行换色
已经创建好了老师,班级,学生。效果如下:
- 挑战数据结构与算法面试题——统计上排数在下排出现的次数
- Go语言的 10 个实用技术--转
- MySQL反连接的优化总结(r10笔记第51天)
- python基础知识——内置数据结构(列表)
- 【Go 语言社区】Go语言Slice去重
- 【Go 语言社区】Golang 语言再谈接口
- 【Go 语言社区】Golang 语言再谈常量
- 【Go 语言社区】HTML5 Canvas+JS控制电脑或手机上的摄像头实例
- MySQL Profile在5.7的简单测试(r10笔记第50天)
- 【Go 语言社区】Golang中interface判断nil问题
- 有趣的rownum测试(r10笔记第49天)
- 【Go 语言社区】关于Golang 数据缓存到redis内存数据库遇到的问题
- go中的读写锁RWMutex
- Centos7.4 版本环境下安装Mysql5.7操作记录
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 哈哈哈哈哈哈镜~
- 【对二寸照片的摧残】一:人脸马赛克
- 二寸照片识别/切边/矫正
- 给彦女王生成一副蒙太奇画像
- 设计模式~单例模式
- [Bazel]自定义工具链
- async和await的使用总结 ~ 竟然一直用错了c#中的async和await的使用。。
- 全网首发:12306抢票算法大曝光?(十张图搞定)
- 全网首发:12306抢票算法大曝光?(勘误)
- 新一代垃圾回收器ZGC的探索与实践
- Python GUI项目实战(一)登录窗体的设计与实现
- Python GUI项目实战(二)主窗体的界面设计与实现
- Python GUI项目实战(三)实现信息查询功能
- 在 Kubernetes 上使用 Argo 实现 CI/CD
- 微信小程序:授权登录 + 基于token的身份验证详解