python--学校管理系统(只做了学校管理的接口)
1、老师的要求是做学校管理、学生、老师的接口,本文档,只做了学校管理的接口
2、具体要求:
角色:学校、学员、课程、讲师
要求: 1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
创建讲师角色时要关联学校,
6. 提供两个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
6.3 管理视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过pickle序列化保存到文件里
3、用到的知识点
类:分别定义学校、老师、学生,学校下有课程、班级、老师列表作为属性,有获取课程列表、班级列表和老师列表的方法
用户界面:根据用户身份选择不同的管理接口
pickle:用户通过程序进行的修改,通过pickle dump到文件中,学校的信息进schooldump文件,老师的进teacherdump文件,学生的进studentdump文件。用load能读出dump进去的对象,然后通过类的方法实现一些功能。
4、代码
类定义classdefine.py:
#学校类 #属性:地点,课程,班级,老师 #方法:开设课程,建立班级,招募老师 class School(object): def __init__(self,location): self.location=location self.courselist=[] self.grouplist=[] self.teacherlist=[] print("%s 学校成立。"%self.location) def creatcouse(self): coname = input("请输入课程名字:") coprice = input("请输入课程价格:") coperiod = input("请输入课程周期:") coobj = Course(coname, coprice, coperiod) self.courselist.append(coobj) return def creatteacher(self): tname = input("请输入老师姓名:") tage = input("请输入老师年龄:") tgender = input("请输入老师性别:") tobj = Teacher(tname, tgender, tage) self.teacherlist.append(tobj) return def creatgroup(self): cname=input("请输入课程名字:") gname=input("请输入班级名字:") gteacher=input("请输入带班老师名字:") gobj=Group(cname,gname,gteacher) self.grouplist.append(gobj) def getcourses(self): lenth=len(self.courselist) if lenth==0: print("%s学校不开设课程:"%self.location) else: print("%s 学校开设以下课程:" % (self.location)) i=0 while i<lenth: print(self.courselist[i].name) i+=1 return def getteacher(self): lenth=len(self.teacherlist) if lenth==0: print("%s学校没有老师:"%self.location) else: print("%s 学校有以下老师:" % (self.location)) i=0 while i<lenth: print(self.teacherlist[i].name) i+=1 return def getgroup(self): lenth=len(self.grouplist) if lenth==0: print("%s学校没有班级:"%self.location) else: print("%s 学校有以下班级:" % (self.location)) i=0 while i<lenth: print(self.grouplist[i].name) i+=1 return #课程类 #属性:课程名字、价格、课程时长 class Course(object): def __init__(self,name,price,period): self.name=name self.price=price self.period=period #班级类 #属性:课程名字,班级名字、带班老师名字 class Group(object): def __init__(self,cname,gname,gteacher): self.cname=cname self.gname=gname self.teacher=gteacher #人类,作为老师和学生类的基类 #属性:姓名、性别、年龄 class People(object): def __init__(self,name,gender,age): self.name=name self.gender=gender self.age=age #老师类 #属性:人的基础上增加 所属学校,可以教授的课程列表,管理的班级列表 class Teacher(People): def __init__(self,name,gender,age): super(Teacher,self).__init__(name,gender,age) self.courselist=[] #学生类 #属性:人的基础上增加 所属学校,班级列表 class Student(People): def __init__(self,name,gender,age): super(Student,self).__init__(name,gender,age) self.grouplist=[]
学校管理接口schoolmanage.py:
from selectsystem.classdefine.classdefine import * import pickle # 创建两个学校SH和BJ,分别代表上海和北京分校 SH= School("上海") BJ = School("北京") def schoolmanage(): #学校管理视图 print("学校管理视图") chooseshool=input("请选择您要管理的学校。\n1、上海\n2、北京\n3、退出\n") while True: if chooseshool=="1": schoolobj=SH break elif chooseshool=="2": schoolobj=BJ break elif chooseshool=="3": exit() else: chooseshool=input("请选择您要管理的学校。\n1、上海\n2、北京\n3、退出\n") while True: choice1 = input("请选择您要做的操作。\n1、创建课程\n2、招聘教师\n3、为课程创建班级\n4、保存\n5、目前学校信息\n6、退出\n") if choice1=="1": schoolobj.creatcouse() continue elif choice1=="2": schoolobj.creatteacher() continue elif choice1=="3": schoolobj.creatgroup() elif choice1=="4": with open(r"C:\Users\chinalife\workspace\selectsystem\doc\schooldump", 'wb') as fd: pickle.dump(schoolobj, fd, 0) continue elif choice1=='5': with open(r"C:\Users\chinalife\workspace\selectsystem\doc\schooldump", 'rb') as fd: schoolobj=pickle.load(fd) schoolobj.getcourses() schoolobj.getteacher() schoolobj.getgroup() elif choice1=='6': break else: choice1 = input("请选择您要做的操作。\n1、招聘教师\n2、创建课程\n3、为课程创建班级\n4、退出\n")
主程序入口main.py:
from selectsystem.classdefine.classdefine import * from selectsystem.code.schoolmanage import * from selectsystem.code.teachermanage import * from selectsystem.code.studentmanage import * role=input("Who are you?Administor, teacher or student?") if role=="Administor": schoolmanage() elif role=="teacher": teachermanage() elif role=="student": studentmanage()
目前老师的管理接口和学生的管理接口还没有细化,但是学校的管理接口已经做好,类似的写逻辑就可以了。
5、后续可以改进的地方
首先,主程序入口仅靠用户输入自己的身份,实属简单做法,可以将之前做的用户登录验证的功能加进来。
第二,在学校管理接口中,增加班级、关联老师,全凭输入,可以加入验证功能,保证只能在已设课程下新建班级,选择已聘用的老师,即范围限定在学校对象中的课程列表和老师列表中。即数据校验功能,防止输入不合理的数据