本周作业
角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linuxpy 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校,
6. 提供两个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
6.3 管理视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过pickle序列化保存到文件里

import pickle class School(object): def __init__(self, addr): self.addr = addr def hire_teacher(self): ''' 保存老师信息 :return: ''' teacher_dict = pickle.load(open('teacher', 'rb')) T = 0 while T>=0: name = input('请输入老师名') for key in teacher_dict: if key == name: print('此老师已存在,请重新输入') T+=1 T-=1 age = input('请输入年龄') print('创建成功') teacher = Teacher(name, age, self.addr) teacher_dict[name] = teacher pickle.dump(teacher_dict, open('teacher', 'wb')) def create_course(self): ''' 保存课程信息 :return: ''' course_dict = pickle.load(open('course', 'rb')) name = input('请输入课程名') money = input('请输入课程价钱') cycle = input('请输入课程周期') course_dict[name] = Course(name, money, cycle) pickle.dump(course_dict, open('course', 'wb')) def create_class(self): ''' 创造班级,关联老师和课程 :return: ''' teacher_dict = pickle.load(open('teacher', 'rb')) course_dict = pickle.load(open('course', 'rb')) class_dict = pickle.load(open('class', 'rb')) name = input('请输入班级名:') for key in teacher_dict: print(key) teacher = input('请选择上课老师') for key in course_dict: print(key) course = input('请输入对应课程') if teacher in class_dict: class_dict [teacher].append(Classroom(name, course_dict[course], teacher_dict[teacher])) else: class_dict [teacher] = [Classroom(name, course_dict[course], teacher_dict[teacher])] print('创建成功') pickle.dump(class_dict, open('class', 'wb')) class Course (object): def __init__(self, course, money, cycle): self.course = course self.money = money self.cycle = cycle def show_course(self): print('课程名:%s; 价钱: %s; 上课周期:%s' % (self.course, self.money, self.cycle)) class Classroom(object): def __init__(self, name, course, teacher): self.name = name self.course = course self.student = [] self.teacher = teacher def show_classroom(self): self.teacher.show_teacher() print ('班级名: %s' % self.name) self.course.show_course() class Student(object): def __init__(self, name): self.name = name self.account = 0 self.sorce = 0 self.course = [] class Teacher(object): def __init__(self, name, age, addr): self.name = name self.age = age self.addr = addr def show_teacher(self): print('''老师姓名:%s 老师年龄: %s 老师所在学校:%s''' % (self.name, self.age,self.addr)) def set_student(): ''' 学生登陆或注册,选课 :return: ''' class_dict = pickle.load(open('class', 'rb')) student_dict = pickle.load(open('student', 'rb')) name = input('请输入学生姓名').capitalize() obj = Student(name) if name in student_dict: print ('欢迎 %s' % name) else: print('注册成功') while True: for key in class_dict: a = class_dict[key] a[-1].show_classroom() print('*' *30) while True: b = input('请选择课程对应的老师').capitalize() if b in class_dict: c = class_dict[b][-1] break else: print('没有该老师,请重新选择') k = input('请确认付费,y = yes, 其他键 = 返回, q = 退出').lower() if k == 'y': while True: if obj.account >= int(c.course.money): obj.account -= int(c.course.money) print('扣费成功') obj.course.append(c) c.student.append(Student(name)) y = input('请选择:1 继续选课, 其他键 = 退出') if y == '1': break else: obj.course.append(c) student_dict[name] = obj pickle.dump(class_dict, open('class', 'wb')) pickle.dump(student_dict, open('student', 'wb')) exit() else: charge = input('余额不足,y = 充值,q = 退出, 其他键返回').lower() if charge == 'y': mk = input('请输入充值金额') obj.account += int(mk) elif charge == 'q': exit() else: break elif k == 'q': exit() else: continue def check_student(name): ''' 老师上课,查看学生,或修改成绩 :param name: :return: ''' class_dict = pickle.load(open('class', 'rb')) a = class_dict[name] for k, i in enumerate(a,1): print(k) print('班级名:%s 课程:%s'% (i.name, i.course.course)) print ("*" * 60) c = input('请选择班级对应的数字') while True: if int(c)>0 and int(c)<=len(a): e = input('请选择:1 上课; 2 查看班级成员,3 修改学员成绩,其他键 = 退出') if e == '1': print ('开始上课...') elif e == '2': d = a[int(c)-1].student for o in d: print ('学生姓名 %s' % o.name) elif e == '3': d = a[int(c)-1].student for n, j in enumerate(d, 1): print ('%s. 学生姓名 %s, 分数 %s' % (n, j.name, j.sorce)) f = input('请选择学生的对应数字') if int(f)>0 and int(f)<=len(d): sorce = input('修改的分数为') d[int(f)-1].sorce = sorce pickle.dump(class_dict,open('class', 'wb')) else: print ('输入有误') def manage(): ''' 管理员菜单 :return: ''' while True: b = input('输入学校地址: 北京; 上海') if b == '北京' or b =='上海': obj = School(b) break else: print('没有这地址') continue while True: a = input('请选择: 1 创建老师, 2 创建课程, 3 创建班级, 4 返回') if a == '1': obj.hire_teacher() elif a == '2': obj.create_course() elif a == '3': obj.create_class() elif a=='4': break else: print ('输入有误') def main(): ''' 主菜单 :return: ''' while True: a = input('请选择: 1 学生; 2 老师, 3 管理员, 其他键 退出') if a == '1': set_student() elif a == '2': name = input('请输入老师姓名').capitalize() teacher_dict = pickle.load(open('teacher', 'rb')) if name in teacher_dict: check_student(name) else: print ('不是我们学校的老师,请重新输入') elif a == '3': manage() else: exit() main()