博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
选课系统
阅读量:4361 次
发布时间:2019-06-07

本文共 13382 字,大约阅读时间需要 44 分钟。

角色:学校、学员、课程、讲师

要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程 
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校, 
6. 提供两个角色接口
7. 学员视图, 可以注册, 交学费, 选择班级,
8. 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩 
9. 管理视图,创建讲师, 创建班级,创建课程

10. 上面的操作产生的数据都通过pickle序列化保存到文件里

 

import pickle,osBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#数据地址__db_main = BASE_DIR + r"\database\main_dict"__db_teacher = BASE_DIR + r"\database\teacher_dict" class School(object):   #创建学校    def __init__(self,name,addr):        self.name = name        self.addr = addr     def cat_school(self):        print("学校名:【%s】\t地址:【%s】"%(self.name,self.addr))     def hire_teacher(self,dict,course,teacher,file):        #数据库添加讲师信息        dict[self][course] = {"teacher":teacher}        file_oper(file,"wb", dict)     def create_course(self,dict,course,file):        # 数据库添加课程资料        dict[self][course]={}        file_oper(file,"wb", dict)     def create_grade(self,dict,teacher_dict,course,grade,teacher,file1,file2):        #数据库添加班级信息        dict[self][course]["grade"] = grade        file_oper(file1, "wb", dict)        teacher_dict[teacher] = {"grade":grade}        file_oper(file2, "wb", teacher_dict) class Course():    #创建课程    def __init__(self,name,price,time):        self.name = name        self.price = price        self.time = time     def cat_course(self):        #查看课程信息        print("课程:【%s】\t价格:【¥%s】\t周期:【%s个月】"              %(self.name,self.price,self.time)) class Grade():    # 创建班级    def __init__(self,name,course,teacher):        student = set([])        self.name = name        self.course = course        self.teacher = teacher        self.student = student     def cat_grade(self):        #查看班级信息        print("班级:【%s】\t课程:【%s】\t讲师:【%s】"              %(self.name, self.course, self.teacher))     def add_student(self,student_name,dict,teacher,file):        self.student.add(student_name)        dict[teacher]={"grade":self}        file_oper(file, "wb", dict) class People():    def __init__(self,name,age):        self.name = name        self.age = age class Teacher(People):    # 创建讲师    def __init__(self,name,age,school,course,role="讲师"):        super(Teacher,self).__init__(name,age)        self.role = role        self.school = school        self.course = course     def cat_teacher(self):        #查看老师资料和课程        print('课程【%s】\t讲师【%s】'%(self.course,self.name))  def file_oper(file,mode,*args):    #数据库写入、读取操作    if mode == "wb":        with open(file, mode) as f:            dict = args[0]            f.write(pickle.dumps(dict))     if mode == "rb":        with open(file, mode) as f:            dict = pickle.loads(f.read())            return dict def information(dict,mode,*args):    '''通过匹配mode模式,打印相应的输出信息'''    if args:        dict_info, set_info = {}, args[0]    else:        dict_info,set_info = {},set([])    if dict:        for key in dict:            if mode == "course":                key.cat_course()            if mode == "main":                key.cat_school()            if mode == "teacher" and key == "teacher":                dict[key].cat_teacher()                # dict_info[key] = dict[key]                set_info.add(dict[key].name)            if mode == "grade" and key == "grade":                dict[key].cat_grade()                set_info.add(dict[key].name)            if mode == "teacher_center":                pass            if type(key) != str:        #key值不是字符串                dict_info[key.name] = key    return dict_info,set_info def school_center():    #学校管理中心    Flag = True    while Flag:        dict_main = file_oper(__db_main,"rb")       #主字典        res_dict = information(dict_main,"main")[0]    #打印学校信息        school_name = input("\33[34;0m输入要选择的学校名\33[0m:").strip()        if school_name in res_dict:            school = res_dict[school_name]          #匹配选择的学校            while Flag:                print("\33[32;1m欢迎进入【%s】学校\33[0m".center(50, "*")%school.name)                choice = options(list_school)       #打印当前选项                if choice == "1":                    while True:                        print("\33[32;0m学校【%s】目前已经有的班级信息\33[0m".center(40, "-")%school.name)                        teacher_dict = file_oper(__db_teacher,"rb")                        res_course = information(dict_main[school], "None")[0]                        set_info = set([])                        if res_course:  # 打印课程与讲师对应关系                            for i in res_course:                                k = res_course[i]                                res_grade = information(dict_main[school][k], "grade",set_info)[1]                        if_cont = input("\n\33[34;0m是否要创建班级 【y】创建 【b】退出\33[0m:")                        if if_cont == "y":                            grade_name = input("\33[34;0m输入要创建班级的名称\33[0m:").strip()                            course_name = input("\33[34;0m输入要班级要上的课程\33[0m:").strip()                            if course_name in res_course:                                course = res_course[course_name]                                if dict_main[school][course]:                                    teacher = dict_main[school][course]["teacher"]                                    if grade_name not in res_grade:                                        grade = Grade(grade_name, course_name, teacher.name)                                        school.create_grade(dict_main, teacher_dict, course, grade, teacher, __db_main,                                                        __db_teacher)                                    else:                                        print("\33[31;0m错误:当前班级已经存在\33[0m")                                else:                                    print("\33[31;0m错误:当前课程还没有讲师\33[0m")                            else:                                print("\33[31;0m错误:课程【%s】不存在,请先创建课程\33[0m" % course_name)                        if if_cont == "b":                            break                 if choice == "2":                    #招聘讲师                    while True:                        print("\33[32;0m学校【%s】目前已经有的课程与讲师\33[0m".center(40, "-")%school.name)                        res_course = information(dict_main[school],"None")[0]                        set_info = set([])                        if res_course:                  #打印课程与讲师对应关系                            for i in res_course:                                k = res_course[i]                                res_teacher = information(dict_main[school][k], "teacher",set_info)[1]                                if not res_teacher:                                    print("课程【%s】\t讲师【None】" %(i))                        if_cont = input("\n\33[34;0m是否要招聘讲师 【y】招聘 【b】退出\33[0m:")                        if if_cont == "y":                            teacher_name = input("\33[34;0m输入要招聘讲师的名字\33[0m:").strip()                            teacher_age = input("\33[34;0m输入要招聘讲师的年龄\33[0m:").strip()                            course_name = input("\33[34;0m输入讲师【%s】要授课的课程\33[0m:"%teacher_name).strip()                            if course_name in res_course:                                    course = res_course[course_name]        #创建讲师并写入数据库                                    if teacher_name not in res_teacher:                                        teacher = Teacher(teacher_name,teacher_age,school.name,course_name)                                        school.hire_teacher(dict_main, course, teacher, __db_main)                                    else:                                        print("\33[31;0m错误:教师【%s】已经被聘用\33[0m" %teacher_name)                            else:                                print("\33[31;0m错误:课程【%s】不存在,请先创建课程\33[0m" %course_name)                        if if_cont == "b":                            break                 if choice == "3":                    #创建课程                    while True:                        print("\33[32;0m学校【%s】目前已经有的课程\33[0m".center(40,"-")%school.name)                        res_dict = information(dict_main[school],"course")[0]     #打印课程信息赋值给字典course_dict                        if_cont = input("\n\33[34;0m是否要创建课程 【y】创建 【b】退出\33[0m:")                        if if_cont == "y":                            course_name = input("\33[34;0m输入要创建的课程\33[0m:").strip()                            if course_name not in res_dict:     #课程不存在,创建                                price = input("\33[34;0m输入课程 【%s】 的价格\33[0m:" % (course_name))                                time = input("\33[34;0m输入课程 【%s】 的周期(月)\33[0m:" % (course_name))                                course = Course(course_name, price, time)   #创建课程course                                school.create_course(dict_main,course, __db_main)   #关联学校和课程                            else:                                   #课程存在                                print("\33[31;0m错误:当前课程 【%s】 已经存在\33[0m" % (course_name))                        if if_cont == "b":                            break                 if choice == "4":                    Flag = False        if Flag:            print("\33[31;0m错误:输入的学校 【%s】 不存在\33[0m"%(school_name))  def teacher_center():    #讲师中心        print("\33[32;1m欢迎进入讲师中心\33[0m".center(50, "*"))        teacher_dict = file_oper(__db_teacher, "rb")        dict_info = information(teacher_dict,"teacher_center")[0]   #验证登录        teacher_name = input("\n\33[34;0m输入要登录讲师的名字\33[0m:").strip()        if teacher_name in dict_info:            while True:                print("\33[32;1m欢迎进入讲师【%s】的管理中心\33[0m".center(40, "*")%teacher_name)                choice = options(list_teacher)                teacher = dict_info[teacher_name]                grade = teacher_dict[teacher]["grade"]                if choice == "1":                    print("\33[32;0m讲师【%s】的班级信息\33[0m".center(40,"-")%teacher.name)                    print("学校【%s】\t课程【%s】\t班级【%s】\t"%(teacher.school,teacher.course,grade.name))                    any = input("\n\33[34;0m输入任意键退出当前\33[0m:")                if choice == "2":                    print("\33[32;0m讲师【%s】的班级学员列表\33[0m".center(40, "-") % teacher.name)                    print("班级【%s】\n学员【%s】"%(grade.name,grade.student))                    any = input("\n\33[34;0m输入任意键退出当前\33[0m:")                if choice == "3":                    break        else:            print("\33[31;0m错误:讲师【%s】 不存在\33[0m"%(teacher_name)) def student_center():    #学员中心    print("\33[32;1m欢迎进入学员中心中心\33[0m".center(50, "*"))    while True:        choice = options(list_student)          #打印学生中心选项        if choice == "1":            student_name = input("\33[34;0m输入学员的名字\33[0m:")            dict = file_oper(__db_main, "rb")            teacher_dict = file_oper(__db_teacher,"rb")            school_dict = information(dict,"main")[0]   #打印当前可选的学校            school_name = input("\33[34;0m输入要选择的学校名\33[0m:").strip()            if school_name in school_dict:                school = school_dict[school_name]                if dict[school]:                    course_dict = information(dict[school],"course")[0]  # 打印当前学校下的课程                    course_name = input("\33[34;0m输入要选择的课程\33[0m:").strip()                    if course_name in course_dict:                        course = course_dict[course_name]                        if dict[school][course].get("grade"):                            for i in teacher_dict:                                if course.name == i.course:                                    teacher = i                                    grade = teacher_dict[teacher]["grade"]                            print("课程【%s】的费用为【%s】"%(course.name,course.price))                            if_pay = input("\33[34;0m是否支付当前费用 支付【y】\33[0m:")                            if if_pay == "y":           #上面全部匹配成功,选课成功                                grade.add_student(student_name,teacher_dict,teacher,__db_teacher)                                print("\33[31;0m选课成功\33[0m")                                any = input("\n\33[34;0m输入任意键退出当前\33[0m:")                        else:                            print("\33[31;0m错误:课程没有班级\33[0m")                    else:                        print("\33[31;0m错误:课程不存在\33[0m")                else:                    print("\33[31;0m错误:当前学校没有课程\33[0m")        if choice == "2":            break def options(list):    #打印可选择的操作模式,并返回选择值    for i, v in enumerate(list):        print(i+1, v)    choice = input("\33[34;0m选择要进入模式\33[0m:")    return choice def start():    '''程序开始'''    while True:        print("\33[35;1m欢迎进入选课系统\33[0m".center(50, "#"))        choice = options(list_main)      #打印选项        if choice == "1":            student_center()        #学生中心        if choice == "2":            teacher_center()        #教师中心        if choice == "3":            school_center()         #学校中心        if choice == "4":            break def init_database():    '''数据库初始化,不存在则创建,存在跳过'''    bj = School("北京","北京市")    sh = School("上海","上海市")    if not os.path.exists(__db_teacher):        dict = {bj:{},sh:{}}        file_oper(__db_main,"wb",dict)    if not os.path.exists(__db_teacher):        dict = {}        file_oper(__db_teacher,"wb",dict)  if __name__ == '__main__':    init_database()        #初始化数据库    list_main = ["学生中心", "讲师中心", "学校中心","退出"]    list_school = ["创建班级", "招聘讲师", "创建课程","返回"]    list_teacher = ["查看班级", "查看班级学员列表","返回" ]    list_student = ["学员注册","返回"]    start()

  

转载于:https://www.cnblogs.com/guixin/p/8600373.html

你可能感兴趣的文章
07-使用循环进行遍历数组(运算符)
查看>>
控件布局通用解决方案
查看>>
scala流程控制语句以及方法和函数
查看>>
MySQL的sql_mode模式
查看>>
windows命令——explorer
查看>>
<转载>Bootstrap 入门教程 http://www.cnblogs.com/ventlam/archive/2012/05/28/2520703.html 系列...
查看>>
jquery和js cookie的使用解析
查看>>
类的内置方法
查看>>
世界是数字的 读后感
查看>>
算法项目步骤流程
查看>>
POJ 2942 Knights of the Round Table ★(点双连通分量+二分图判定)
查看>>
10.scheam.xml的配置
查看>>
通过命令给Linux(CentOS)分区
查看>>
python接口自动化3-自动发帖(session)
查看>>
复杂问题的简单抽象:魔兽世界中的兔子们
查看>>
那些美到极致的语言!
查看>>
Xamarin的不归路-ios模拟器没有键盘
查看>>
【云笔记】群晖DS218+ NoteStation 折腾
查看>>
jdk安装配置
查看>>
四、RocketMq简单的消费者和生产者(示例代码)
查看>>