本周作业

本周作业

角色:学校、学员、课程、讲师
要求:
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()
作业
原文地址:https://www.cnblogs.com/datatool/p/13620738.html