网上课程管理系统—大致框架(伪代码)
一、复习继承
继承:什么是什么的关系
单继承:
先抽象再继承,几个代码之间相同的代码抽象出来,成为父类
子类自己没有的名字,就可以使用父类的方法和属性
如果子类自己有,一定先用自己的
在类中使用self的时候,一定要看清楚self指向谁
多继承:
新式类和经典类:
多继承寻找名字的顺序:新式类广度优先,经典类深度优先
新式类中有一个类名.mro方法,查看广度优先的继承顺序
python3中有一个super方法,根据广度优先的继承顺序查找上一个类
二、网上课程管理系统
系统需求文字类描述:
1、开始登入,判断身份
2、身份确定后,每个身份对应的需求:
(1)讲师:查看课程信息;查看讲的班级信息;查看带的学生信息
(2)学生:选择班级;查看自己的信息
(3)管理员:创建讲师账号;创建学生账号;创建课程;创建班级;给讲师分配课程;给讲师分配班级
3、退出,结束
注意:应当使用软件规范去写(在前面的‘包的进阶’里面有提到一些大概)
根据软件规范的几个文件包,先大概了解一下整个系统大致流程,先用伪代码来阐述
(1)bin文件里面存有start.py文件,主要是大目录路径的导入,方便后续模块的导入
# 修改sys.path,把学校课程管理系统这个路径写到sys.path列表中 # 之后所有的模块导入,都是基于学校课程管理系统 # 比如调用core里面的main方法 from core import main if __name__ == '__main__': main.main # 调用main模块里面的main方法
(2)core文件,主函数,程序的入口,里面应当有登入函数以及main函数
# 主函数 程序入口 def login(): ''' 登入函数,应该先到conf.config文件中读取userinfo文件中的路径,读取userinfo文件中的信息, 对用户名和密码进行检验,登入成功后,查看这个人的身份,来确定进入哪一个试图 :return: ''' def main(): ''' 打印欢迎信息 login:什么三次登入之类的 得到返回值:用户的姓名和身份 打印用户身份对应的功能菜单(功能菜单写在管理员里面) 如果用户想要调用任何方法应该通过角色对象调用,跳转到对应的对象的方法里面,core比如管理员里面的方法都是通过管理员进行调用, :return: '''
除了main函数外,还有有关的几个身份类也放在core文件中
首先以管理员的身份登入,登入之后,就应该实例化一个对应身份的对象 manage_obj = Manager(name) 管理员对象可以调用所有方法
管理员类:根据前面的系统大概要求可以知道管理员类大致拥有的一些属性
class Manager: menu = {'创建讲师账号':'','学生账号':'','创建课程':'','创建班级':'','分配班级和课程':''} def __init__(self,name,): self.name = name def createrTeacher(self): pass def createrStudent(self): pass
具体的管理员类实现的调用方法,用中文先理解,如下:
class Manager: menu = {'创建讲师账号':'','学生账号':'','创建课程':'','创建班级':'','分配班级和课程':''} def __init__(self,name,): self.name = name def createrTeacher(self): # 输入讲师的姓名 # 输入讲师的密码 # 将讲师的信息写入userinfo文件 # 输入: # 讲师所在的学校 到这里讲师的信息有三个: 用户名,身份,学校 # 实例化一个讲师对象,存储在讲师对应的文件中 pass def createrCourse(self): # 输入学科名称 # 价格 # 周期 # 创建一个课程对象,dump进course文件 pass def createrClasses(self): # 创建班级 # 输入班级名称,学校 ---属性 # 绑定一个学科对象,要先调用查看学科方法获取学科对象,用户选择学科,再将对象绑定到班级 # 创建一个属于这个班级的文件用于存储学生信息,将文件的路径存储到班级对象中 # 创建一个班级对象(名称 学校 学科对象 讲师空列表 学生信息所在文件的路径) pass def showCourse(self): # 打开文件 # 将文件中的学科对象读出来,展示 pass def createrStudent(self): # 输入学生的姓名 # 输入学生的密码 # 将学生的信息写入user info文件中 # 创建一个学生对象(姓名 讲师空列表) pass def boundClass(self): # 管理员选择为老师还是学生指定班级 # 如果是为老师绑定班级: # 找到指定老师和对应的班级(都是通过show的方法查看后选择) # 给讲师对象的班级属性的列表中加入一个新项,值为班级的对象 # 给班级对象中的讲师属性列表中加入一个新的项,值为讲师的对象 # 如果为学生绑定: # 找到指定学生对应的班级 (都是通过show的方法查看后选择) # 给学生创建新的班级属性,将属性的值设置为班级对象 # 将学生对象的信息 根据班级对象中存储的学生信息存储路径 dump入对应文件 pass
老师类:大致拥有的属性如下,这里就涉及到了前面学过的组合的知识:一个对象的属性=另一个对象
class Classes: def __init__(self,school,name,kind): self.school = school # 学校 self.name = name # 班级名称 self.kind = kind # 班级科目 self.student = ['student_obj'] # 应该有学生的所有信息 class Course: def __init__(self,name,period,price): self.name = name self.period = period self.price = price c = Course('python','6 month',19800) class Teacher: def __init__(self,name): self.name = name self.classes = ['classes_obj'] # self.course = c # 组合 self.course相当于复制了course里面的所有属性, # 这里也可以先不要加course,可以放在后面先将老师实例化 再添加课程 t = Teacher('blue') t.course = c # 组合:对象的属性=对象 先给老师实例化后,再给老师创建一个属性
(3)db文件,只要一些重要的数据文件都可以放在db文件里面,比如用户名,用户密码,身份判断等
# 和文件相关的都放入db里面 用户名 用户密码 身份判断
(4)conf文件,conf里面存放了用户相关信息的路径,这样可以方便后续登入的时候直接调用路径就可以查看用户的相关信息,不用每次都导入一个信息表
# 在这里放入userinfo的文件路径 userinfo =r'C:\Users\sku1-1\PycharmProjects\untitled\学校课程管理系统\db\userinfo'