- 功能要求
角色:学校、学员、课程、讲师 要求: 1. 创建学校 2. 创建课程 3. 课程包含,周期,价格,通过学校创建课程 4. 通过学校创建班级, 班级关联课程、讲师 5. 创建学员时,选择学校,关联班级 5. 创建讲师角色时要关联学校, 6. 提供两个角色接口 6.1 学员视图, 可以注册, 交学费, 选择班级, 6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 创建学员的成绩 6.3 管理视图,创建讲师, 创建班级,创建课程 7. 上面的操作产生的数据都通过pickle序列化保存到文件里 8. 增加日志文件,能同时输出到控制台 9. 用户认证采用装饰 10.增加try捕捉错误信息
- 开发环境
- python 3.6.1
- PyCharm 2016.2.3
- 数据流图与业务功能图
- 主程序数据流图
2.业务功能图
- 目录结构
- 程序设计
1 #!/usr/bin/env python 2 #coding=utf-8 3 __author__ = 'yinjia' 4 5 6 import os 7 8 BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 9 10 BASE_ADMIN_DIR = os.path.join(BASE_DIR, "db", "admin")11 12 BASE_STUDENTS_DIR = os.path.join(BASE_DIR, "db", "students")13 14 BASE_TEACHER_DIR = os.path.join(BASE_DIR,"db","teacher")15 16 TEACHER_DB_DIR = os.path.join(BASE_DIR, "db", "teacher_list")17 18 COURSE_DB_DIR = os.path.join(BASE_DIR, "db", "course_list")19 20 SHOOL_DB_DIR = os.path.join(BASE_DIR,"db", "shool_list")21 22 STUDENTS_DB_DIR = os.path.join(BASE_DIR,"db", "students_list")23 24 SCHOOLCLASS_DB_DIR = os.path.join(BASE_DIR,'db','schoolclass_list')25 26 SCORE_DB_DIR = os.path.join(BASE_DIR,'db','score_list')27 28 BASE_LOG_DIR = os.path.join(BASE_DIR,'log','AAP_')
1 #!/usr/bin/env python 2 #coding=utf-8 3 __author__ = 'yinjia' 4 5 import os,sys,time,logging,pickle 6 sys.path.append(os.path.dirname(os.path.dirname(__file__))) 7 from lib import models 8 from config import settings 9 from lib.models import * 10 from bin import students 11 from bin import admin 12 from bin import teacher 13 14 15 def Auth(type): 16 """ 17 统一入口用户注册、认证 18 :param type: 判断属于哪认证类型:students、admin、teacher 19 :return: 返回认证结果 20 """ 21 def inner(func): 22 def wrapper(): 23 logger = Logger('auth').getlog() 24 auth_msg = ["注册", "登录"] 25 if type == "students_auth": 26 func() 27 for x, y in enumerate(auth_msg, 1): 28 print("%s%s%s" % (x, ".", y)) 29 while True: 30 inp = str(input("\33[35;0m请按序号选择[输入q|Q退出]:\33[0m")).strip().lower() 31 if inp == "1": 32 use = str(input("\33[36;0m请输入用户名:\33[0m")).strip() 33 pwd = str(input("\33[36;0m请输入密码:\33[0m")).strip() 34 obj = models.Students() 35 if obj.register(use,pwd): 36 logger.error("[用户名]" + use + ":不能注册,当前已存在账户!") 37 else: 38 logger.info("[用户名]" + use + ":注册成功") 39 elif inp == "2": 40 use = str(input("\33[36;0m请输入用户名:\33[0m")).strip() 41 pwd = str(input("\33[36;0m请输入密码:\33[0m")).strip() 42 if os.path.exists(os.path.join(settings.BASE_STUDENTS_DIR, use)): 43 try: 44 students_obj = pickle.load(open(os.path.join(settings.BASE_STUDENTS_DIR,use),'rb')) 45 except IOError as e: 46 logger.error(e) 47 if students_obj.login(use,pwd): 48 logger.info("[用户名]" + use + ":登录成功!") 49 students.main(students_obj) 50 else: 51 logger.error("[用户]" + use + ":密码错误!") 52 else: 53 logger.error("[用户名]" + use + "不存在!") 54 elif inp == "q": 55 print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*")) 56 sys.exit() 57 else: 58 logger.error("无效选择!") 59 60 elif type == "admin_auth": 61 func() 62 for x, y in enumerate(auth_msg, 1): 63 print("%s%s%s" % (x, ".", y)) 64 while True: 65 inp = str(input("\33[35;0m请按序号选择[输入q|Q退出]:\33[0m")).strip().lower() 66 if inp == "1": 67 use = str(input("\33[36;0m请输入用户名:\33[0m")).strip() 68 pwd = str(input("\33[36;0m请输入密码:\33[0m")).strip() 69 obj = models.Admin() 70 if obj.register(use,pwd): 71 logger.error("[用户名]" + use + ":不能注册,当前已存在账户!") 72 else: 73 logger.info("[用户名]" + use + ":注册成功") 74 elif inp == "2": 75 use = str(input("\33[36;0m请输入用户名:\33[0m")).strip() 76 pwd = str(input("\33[36;0m请输入密码:\33[0m")).strip() 77 if os.path.exists(os.path.join(settings.BASE_ADMIN_DIR, use)): 78 try: 79 admin_obj = pickle.load(open(os.path.join(settings.BASE_ADMIN_DIR,use),'rb')) 80 except IOError as e: 81 logger.error(e) 82 if admin_obj.login(use,pwd): 83 logger.info("[用户名]" + use + ":登录成功") 84 admin.main(admin_obj) 85 else: 86 logger.error("[用户名]" + use + ":密码错误!") 87 else: 88 logger.error("[用户]" + use + "不存在!") 89 90 elif inp == "q": 91 print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*")) 92 sys.exit() 93 else: 94 logger.error("无效选择!") 95 96 elif type == "teacher_auth": 97 func() 98 for x, y in enumerate(auth_msg, 1): 99 print("%s%s%s" % (x, ".", y))100 while True:101 inp = str(input("\33[35;0m请按序号选择[输入q|Q退出]:\33[0m")).strip().lower()102 if inp == "1":103 use = str(input("\33[36;0m请输入用户名:\33[0m")).strip()104 pwd = str(input("\33[36;0m请输入密码:\33[0m")).strip()105 obj = models.TeacherAuth()106 if obj.register(use,pwd):107 logger.error("[用户名]" + use + ":不能注册,当前已存在账户!")108 else:109 logger.info("[用户名]" + use + ":注册成功")110 elif inp == "2":111 use = str(input("\33[36;0m请输入用户名:\33[0m")).strip()112 pwd = str(input("\33[36;0m请输入密码:\33[0m")).strip()113 if os.path.exists(os.path.join(settings.BASE_TEACHER_DIR, use)):114 try:115 teacher_obj = pickle.load(open(os.path.join(settings.BASE_TEACHER_DIR,use),'rb'))116 except IOError as e:117 logger.error(e)118 if teacher_obj.login(use,pwd):119 logger.info("[用户名]" + use + ":登录成功")120 teacher.main(teacher_obj)121 else:122 logger.error("[用户名]" + use + ":密码错误!")123 else:124 logger.error("[用户名]" + use + "不存在!")125 126 elif inp == "q":127 print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*"))128 sys.exit()129 else:130 logger.error("无效选择!")131 else:132 pass133 return wrapper134 return inner135 136 137 @Auth(type="students_auth")138 def students_auth():139 print("\33[32;0m学生登录认证\33[0m".center(40,"*"))140 return True141 142 @Auth(type="admin_auth")143 def admin_auth():144 print("\33[32;0m管理员登录认证\33[0m".center(40,"*"))145 return True146 147 @Auth(type="teacher_auth")148 def teacher_auth():149 print("\33[32;0m讲师登录认证\33[0m".center(40,"*"))150 return True151 152 def main():153 main_msg = ["学生视图", "讲师视图", "管理视图","退出"]154 print("\33[32;0m学员选课系统\33[0m".center(40, "*"))155 for i, j in enumerate(main_msg, 1):156 print("%s%s%s" % (i, ".", j))157 while True:158 inp = str(input("\33[35;0m请按序号选择:\33[0m")).strip()159 if inp == "1":160 students_auth()161 elif inp == "2":162 teacher_auth()163 elif inp == "3":164 admin_auth()165 elif inp == "4":166 print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*"))167 sys.exit()168 else:169 print("无效选择!")
1 #!/usr/bin/env python 2 #coding=utf-8 3 __author__ = 'yinjia' 4 5 import os,sys,time,logging,pickle 6 sys.path.append(os.path.dirname(os.path.dirname(__file__))) 7 from lib import models 8 from config import settings 9 from lib.models import * 10 from bin import auth 11 12 logger = Logger('admin').getlog() 13 14 def create_shools(admin_obj): 15 """ 16 创建学校 17 :param admin_obj: 18 :return: 19 """ 20 school_list = [] 21 while True: 22 school_name = str(input("\33[36;0m请输入校区名[输入q退出]:\33[0m")).strip().lower() 23 if school_name == "q": 24 break 25 school_addr = str(input("\33[36;0m请输入校区地址:\33[0m")).strip() 26 obj = models.School(school_name,school_addr,admin_obj) 27 school_list.append(obj) 28 if os.path.exists(settings.SHOOL_DB_DIR): 29 try: 30 exists_list = pickle.load(open(settings.SHOOL_DB_DIR,'rb')) 31 school_list.extend(exists_list) 32 except IOError as e: 33 logger.error(e) 34 try: 35 pickle.dump(school_list,open(settings.SHOOL_DB_DIR,'wb')) 36 except IOError as e: 37 logger.error(e) 38 39 def create_schoolclass(admin_obj): 40 """ 41 创建班级 42 :param admin_obj: 43 :return: 44 """ 45 schoolclass_list = [] 46 print(' 序号 校区 校址 创建时间 管理员') 47 print('------------------------------------------------------') 48 school_list = pickle.load(open(settings.SHOOL_DB_DIR, 'rb')) 49 for num, item in enumerate(school_list, 1): 50 print("%3s%5s%5s%25s%10s" % (num, item.school_name, item.school_addr, 51 item.create_time, item.create_admin.username)) 52 while True: 53 schoolclass_name = str(input("\33[36;0m请输入班级名[输入q退出]:\33[0m")).strip().lower() 54 if schoolclass_name == "q": 55 break 56 school_num = str(input("\33[36;0m请序号选择校区:\33[0m")).strip() 57 obj = models.SchoolClass(school_list[int(school_num) - 1],schoolclass_name,admin_obj) 58 schoolclass_list.append(obj) 59 if os.path.exists(settings.SCHOOLCLASS_DB_DIR): 60 try: 61 exists_list = pickle.load(open(settings.SCHOOLCLASS_DB_DIR,'rb')) 62 schoolclass_list.extend(exists_list) 63 except IOError as e: 64 logger.error(e) 65 try: 66 pickle.dump(schoolclass_list,open(settings.SCHOOLCLASS_DB_DIR,'wb')) 67 except IOError as e: 68 logger.error(e) 69 70 def create_teacher(admin_obj): 71 """ 72 创建讲师 73 :param admin_obj: 74 :return: 75 """ 76 teacher_list = [] 77 print(' 序号 校区 班级 创建时间 管理员') 78 print('------------------------------------------------------') 79 school_list = pickle.load(open(settings.SCHOOLCLASS_DB_DIR, 'rb')) 80 for num, item in enumerate(school_list, 1): 81 print("%3s%5s%8s%25s%10s" % (num, item.schoolBJ.school_name, item.schoolclass_name, 82 item.create_time, item.create_admin.username)) 83 while True: 84 teacher_name = str(input("\33[36;0m请输入讲师姓名[输入q退出]:\33[0m")).strip().lower() 85 if teacher_name == "q": 86 break 87 age = str(input("\33[36;0m请输入讲师年龄:\33[0m")).strip() 88 salary = str(input("\33[36;0m请输入讲师工资:\33[0m")).strip() 89 num = str(input("\33[36;0m请序号选择班级:\33[0m")).strip() 90 obj = models.Teacher(school_list[int(num) - 1],school_list[int(num) - 1],teacher_name,age,salary,admin_obj) 91 teacher_list.append(obj) 92 if os.path.exists(settings.TEACHER_DB_DIR): 93 try: 94 exists_list = pickle.load(open(settings.TEACHER_DB_DIR,'rb')) 95 teacher_list.extend(exists_list) 96 except IOError as e: 97 logger.error(e) 98 try: 99 pickle.dump(teacher_list,open(settings.TEACHER_DB_DIR,'wb'))100 except IOError as e:101 logger.error(e)102 def create_course(admin_obj):103 """104 创建课程105 :param admin_obj:106 :return:107 """108 course_list = []109 print(' 序号 校区 班级 讲师 年龄 工资 创建时间 管理员')110 print('---------------------------------------------------------------------------')111 teacher_list = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))112 for num, item in enumerate(teacher_list, 1):113 print("%3s%5s%8s%5s%4s%11s%23s%10s" % (114 num, item.schoolname.schoolBJ.school_name, item.schoolclass.schoolclass_name,115 item.teacher_name, item.age, item.salary,116 item.create_time, item.create_admin.username))117 while True:118 course_name = str(input("\33[36;0m请输入课程名[输入q退出]:\33[0m")).strip().lower()119 if course_name == "q":120 break121 course_cost = str(input("\33[36;0m请输入课时费:\33[0m")).strip()122 course_cycle = str(input("\33[36;0m请输入课程周期:\33[0m")).strip()123 num = str(input("\33[36;0m请序号选择校区:\33[0m")).strip()124 obj = models.Course(teacher_list[int(num) - 1], teacher_list[int(num) - 1],125 teacher_list[int(num) - 1],course_name,course_cost,course_cycle, admin_obj)126 course_list.append(obj)127 if os.path.exists(settings.COURSE_DB_DIR):128 try:129 exists_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))130 course_list.extend(exists_list)131 except IOError as e:132 logger.error(e)133 try:134 pickle.dump(course_list, open(settings.COURSE_DB_DIR, 'wb'))135 except IOError as e:136 logger.error(e)137 138 def main(admin_obj):139 logger = Logger('auth').getlog()140 while True:141 print("\33[32;0m综合管理中心\33[0m".center(40, "*"))142 msg = ["创建校区", "查看校区详情","创建班级", "查看班级详情","创建讲师", '查看讲师详情',"创建课程","查看课程详情"]143 for x, y in enumerate(msg, 1):144 print("%s%s%s" % (x, ".", y))145 inp = str(input("\33[35;0m请按序号选择[输入q|Q退出]:\33[0m")).strip().lower()146 if inp == '1':147 create_shools(admin_obj)148 elif inp == '2':149 print(' 序号 校区 校址 创建时间 管理员')150 print('------------------------------------------------------')151 info_list = pickle.load(open(settings.SHOOL_DB_DIR, 'rb'))152 for num, item in enumerate(info_list, 1):153 print("%3s%5s%5s%25s%10s" % (num, item.school_name, item.school_addr,154 item.create_time, item.create_admin.username))155 input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m")156 elif inp == '3':157 create_schoolclass(admin_obj)158 elif inp == '4':159 print(' 序号 校区 班级 创建时间 管理员')160 print('------------------------------------------------------')161 school_list = pickle.load(open(settings.SCHOOLCLASS_DB_DIR, 'rb'))162 for num, item in enumerate(school_list, 1):163 print("%3s%5s%8s%25s%10s" % (num, item.schoolBJ.school_name, item.schoolclass_name,164 item.create_time, item.create_admin.username))165 input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m")166 elif inp == '5':167 create_teacher(admin_obj)168 elif inp == '6':169 print(' 序号 校区 班级 讲师 年龄 工资 创建时间 管理员')170 print('---------------------------------------------------------------------------')171 teacher_list = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))172 for num, item in enumerate(teacher_list, 1):173 print("%3s%5s%8s%5s%4s%11s%23s%10s" % (num, item.schoolname.schoolBJ.school_name, item.schoolclass.schoolclass_name,174 item.teacher_name, item.age, item.salary,175 item.create_time, item.create_admin.username))176 input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m")177 elif inp == '7':178 create_course(admin_obj)179 elif inp == '8':180 print(' 序号 校区 班级 讲师 课程名 课时费 周期 创建时间 管理员')181 print('--------------------------------------------------------------------------------------')182 teacher_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))183 for num, item in enumerate(teacher_list, 1):184 print("%3s%5s%8s%5s%8s%8s%9s%23s%10s" % (185 num, item.course_schoolname.schoolname.schoolBJ.school_name, item.course_schoolclass.schoolclass.schoolclass_name,186 item.course_teacher_name.teacher_name,187 item.course_name,item.cost,item.cycle,item.create_time, item.create_admin.username))188 input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m")189 elif inp == 'q':190 print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*"))191 sys.exit()192 else:193 logger.error("无效选择!")194 195 def register():196 auth.main()
1 #!/usr/bin/env python 2 #coding=utf-8 3 __author__ = 'yinjia' 4 5 import os,sys,time,logging,pickle 6 sys.path.append(os.path.dirname(os.path.dirname(__file__))) 7 from lib import models 8 from config import settings 9 from lib.models import * 10 from bin import auth,teacher 11 logger = Logger('admin').getlog() 12 13 def select_course(students_obj): 14 """ 15 选择课程 16 :param students_obj: 17 :return: 18 """ 19 print(' 序号 校区 班级 讲师 课程名 课时费 周期 ') 20 print('-------------------------------------------------------') 21 try: 22 course_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb')) 23 except IOError as e: 24 logger.error(e) 25 else: 26 for num, item in enumerate(course_list, 1): 27 print("%3s%5s%8s%5s%8s%8s%9s" % ( 28 num, item.course_schoolname.schoolname.schoolBJ.school_name, 29 item.course_schoolclass.schoolclass.schoolclass_name, 30 item.course_teacher_name.teacher_name, 31 item.course_name, item.cost, item.cycle)) 32 while True: 33 num = str(input("\33[36;0m请序号选择课程名[输入q退出]:\33[0m")).strip().lower() 34 if num == "q": 35 break 36 select_course_obj = course_list[int(num) - 1] 37 students_obj.course_list.append(select_course_obj) 38 try: 39 pickle.dump(students_obj, open(os.path.join(settings.BASE_STUDENTS_DIR,students_obj.username),'wb')) 40 except IOError as e: 41 logger.error(e) 42 43 def course_info(students_obj): 44 """ 45 查看选课信息 46 :param students_obj: 47 :return: 48 """ 49 print(' 序号 校区 班级 讲师 课程名 课时费 周期 ') 50 print('-------------------------------------------------------') 51 for num, item in enumerate(students_obj.course_list, 1): 52 print("%3s%5s%8s%5s%8s%8s%9s" % ( 53 num, item.course_schoolname.schoolname.schoolBJ.school_name, 54 item.course_schoolclass.schoolclass.schoolclass_name, 55 item.course_teacher_name.teacher_name, 56 item.course_name, item.cost, item.cycle)) 57 input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m") 58 59 def result_info(students_obj): 60 """ 61 查看学习详情 62 :param students_obj: 63 :return: 64 """ 65 print(' 学员 校区 班级 课程 成绩') 66 print('---------------------------------') 67 try: 68 students_dic = pickle.load(open(settings.SCORE_DB_DIR, 'rb')) 69 except IOError as e: 70 logger.error(e) 71 else: 72 for i, item in students_dic.items(): 73 for x, y in item.score_schoolname.items(): 74 print("%3s%6s%9s%5s%5s" % (x.username, y.course_schoolname.schoolname.schoolBJ.school_name, 75 y.course_schoolclass.schoolclass.schoolclass_name, y.course_name, item.score)) 76 input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m") 77 78 def study(students_obj): 79 """ 80 学员上课 81 :param students_obj: 82 :return: 83 """ 84 print(' 序号 校区 班级 讲师 课程名 课时费 周期 ') 85 print('-------------------------------------------------------') 86 for num, item in enumerate(students_obj.course_list, 1): 87 print("%3s%5s%8s%5s%8s%8s%9s" % ( 88 num, item.course_schoolname.schoolname.schoolBJ.school_name, 89 item.course_schoolclass.schoolclass.schoolclass_name, 90 item.course_teacher_name.teacher_name, 91 item.course_name, item.cost, item.cycle)) 92 while True: 93 num = str(input("\33[36;0m请按序号选择课程上课[输入q退出]:\33[0m")).strip().lower() 94 if num == "q": 95 break 96 obj = students_obj.course_list[int(num) - 1] 97 if students_obj in students_obj.study_dict.keys(): 98 students_obj.study_dict[students_obj].append(obj) 99 else:100 students_obj.study_dict[students_obj] = obj101 try:102 pickle.dump(students_obj.study_dict, open(settings.STUDENTS_DB_DIR, 'wb'))103 except IOError as e:104 logger.error(e)105 106 def main(students_obj):107 while True:108 print("\33[32;0m学员学习中心\33[0m".center(40, "*"))109 msg = ['选课','上课','查看选课信息','查看学习成绩']110 for x, y in enumerate(msg, 1):111 print("%s%s%s" % (x, ".", y))112 inp = str(input("\33[35;0m请按序号选择[输入q|Q退出]:\33[0m")).strip().lower()113 if inp == '1':114 select_course(students_obj)115 elif inp == '2':116 study(students_obj)117 elif inp == '3':118 course_info(students_obj)119 elif inp == '4':120 result_info(students_obj)121 elif inp == 'q':122 print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*"))123 sys.exit()124 else:125 logger.error("无效选择!")126 127 def register():128 auth.main()
1 #!/usr/bin/env python 2 #coding=utf-8 3 __author__ = 'yinjia' 4 5 6 import os,sys,time,logging,pickle 7 sys.path.append(os.path.dirname(os.path.dirname(__file__))) 8 from lib import models 9 from config import settings10 from lib.models import *11 from bin import auth12 logger = Logger('admin').getlog()13 14 def Create_Score(teacher_obj):15 score_dic = {}16 print(' 学员 校区 班级 课程 ')17 print('------------------------------')18 try:19 students_dic = pickle.load(open(settings.STUDENTS_DB_DIR, 'rb'))20 except IOError as e:21 logger.error(e)22 else:23 for i, item in students_dic.items():24 print(i.username,item.course_schoolname.schoolname.schoolBJ.school_name,25 item.course_schoolclass.schoolclass.schoolclass_name,26 item.course_name)27 while True:28 students_name = str(input("\33[36;0m请输入学员[输入q退出]:\33[0m")).strip()29 if students_name == "q":30 break31 score = str(input("\33[36;0m请输入学员成绩:\33[0m")).strip()32 obj = models.Score(students_name,students_dic,students_dic,students_dic,score)33 34 if teacher_obj in score_dic.keys():35 score_dic[teacher_obj].append(obj)36 else:37 score_dic[teacher_obj] = obj38 if os.path.exists(settings.SCORE_DB_DIR):39 try:40 exists_dic = pickle.load(open(settings.SCORE_DB_DIR, 'rb'))41 except IOError as e:42 logger.error(e)43 else:44 if teacher_obj in exists_dic.keys():45 score_dic[teacher_obj].append(exists_dic)46 try:47 pickle.dump(score_dic, open(settings.SCORE_DB_DIR, 'wb'))48 except IOError as e:49 logger.error(e)50 51 52 def show_info(teacher_obj):53 print(' 学员 校区 班级 课程 成绩')54 print('---------------------------------')55 try:56 students_dic = pickle.load(open(settings.SCORE_DB_DIR, 'rb'))57 except IOError as e:58 logger.error(e)59 else:60 for i, item in students_dic.items():61 for x,y in item.score_schoolname.items():62 print("%3s%6s%9s%5s%5s" % (x.username,y.course_schoolname.schoolname.schoolBJ.school_name,63 y.course_schoolclass.schoolclass.schoolclass_name,y.course_name,item.score))64 input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m")65 66 def main(teacher_obj):67 while True:68 print("\33[32;0m学员学习中心\33[0m".center(40, "*"))69 msg = ['创建学员成绩','查看学员信息']70 for x, y in enumerate(msg, 1):71 print("%s%s%s" % (x, ".", y))72 inp = str(input("\33[35;0m请按序号选择[输入q|Q退出]:\33[0m")).strip().lower()73 if inp == '1':74 Create_Score(teacher_obj)75 elif inp == '2':76 show_info(teacher_obj)77 elif inp == 'q':78 print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*"))79 sys.exit()80 else:81 logger.error("无效选择!")82 83 def register():84 auth.main()
- 类模板定义
- 效果演示