Day32.老师修改学生分数
1.老师修改学生分数_程序代码及执行流程
2.老师修改学生分数_老师视层修改学生分数change_score_from_student
'''老师视图''' from lib import common from lib import common_interface from interface import teacher_interface # todo 全局记录用户登陆状态 teacher_info = {'user': None} # todo 修改学生分数 @common.auth('teacher') def change_score_from_student(): # todo 1. 先获取老师下所有的课程,并选择 # todo 2. 获取选择的课程下所有的学生,并选择修改的学生 while True: # 1. 调用获取当前老师下所有的课程接口 flag, course_list = teacher_interface.check_course_interface( teacher_info.get('user') ) # todo 如果没有则程序终止 if not flag: print(course_list) break else: # todo 2. 打印所有课程,并让老师选择 for index2, course_name in enumerate(course_list): print('编号:{} 课程名:{}'.format(index2, course_name)) choice = input('请输入选择的课程编号:').strip() if not choice.isdigit(): print('输入有误') continue choice = int(choice) if choice not in range(len(course_list)): print('输入编号有误!') continue # todo 3. 获取选择的学校名称 course_name = course_list[choice] # todo 4. 利用当前课程名称获取所有学生 flag2, student_list = teacher_interface.get_student_interface( course_name, teacher_info.get('user') ) # todo 如果没有课程,break掉 if not flag2: print(student_list) break else: # todo 5. 打印所有学生让老师选择 for index2, student_name in enumerate(student_list): print('编号 {} 学生名:{}'.format(index2, student_name)) choice2 = input('请输入学生编号:').strip() choice2 = int(choice2) if choice2 not in range(len(course_list)): print('输入编号有误!') continue # todo 获取选择的课程名称 student_name = student_list[choice2] # todo 老师输入需要修改的分数 score = input('请输入需要修改的成绩:').strip() if not score.isdigit(): continue else: score = int(score) # todo 6. 调用修改学生分数接口修改分数 flag3, msg = teacher_interface.change_score_interface( course_name, student_name, score, teacher_info.get('user') ) if flag3: print(msg) break
3.老师修改学生分数_老师接口层_老师查看课程接口_老师获取课程下学生接口_老师修改学生分数接口
'''老师接口层''' from db import models # todo 老师查看课程接口 def check_course_interface(teacher_name): # todo 1. 获取当前老师对象 teacher_obj = models.Teacher.select( teacher_name ) # todo 2. 判断老师对象中课程列表是否有值 # todo 让老师对象,调用查看教授课程方法,返回课程 # course_list = teacher_obj.course_list_from_tea course_list = teacher_obj.show_course() # todo 3. 若有则返回True,无则返回False if not course_list: return False, '老师没有选择课程' else: return True, course_list # todo 老师获取课程下学生接口 def get_student_interface(course_name, teacher_name): # todo 1. 获取当前老师对象 teacher_obj = models.Teacher.select(teacher_name) # todo 2. 让当前老师对象,调用获取课程下所有学生功能 student_list = teacher_obj.get_student(course_name) # todo 3. 判断课程下是否有学生 if not student_list: return False, '学生没有选择该课程' else: return True, student_list # todo 老师修改学生分数接口 def change_score_interface(course_name, student_name, score, teacher_name): # todo 1. 获取老师对象 teacher_obj = models.Teacher.select(teacher_name) # todo 2. 让老师对象调用修改分数方法 teacher_obj.change_score( course_name, student_name, score) return True, '修改分数成功'
4.老师修改学生分数_功能类中的老师类和父类models.py
'''用于存放类的 学校类、学员类、课程类、讲师类、管理员类 ''' from db import db_handler # todo 提供select和save方法写入父类, 让所有子类都继承 class Base: # todo 定义一个数据查找方法 ----> 登录、查看数据 @classmethod def select(cls, username): # 接收到类Admin和username # todo obj: 对象 OR None obj = db_handler.select_data( cls, username) return obj # todo 定义一个数据保存方法 ----> 注册、保存、更新数据 def save(self): # todo 调用db_handler中的save方法,并且需要对其中的方法做传值,即添加self # todo 让db_handler中的save_data进行保存对象数据 db_handler.save_data(self) # todo 老师类 class Teacher(Base): def __init__(self, teacher_name, teacher_pwd): self.user = teacher_name # todo self.pwd 需要统一 self.pwd = teacher_pwd self.course_list_from_tea = [] # todo 老师查看教授课程方法 def show_course(self): return self.course_list_from_tea # todo 老师添加课程方法 def add_course(self, course_name): self.course_list_from_tea.append( course_name) self.save() # todo 老师获取课程下的学生 def get_student(self, course_name): course_obj = Course.select(course_name) return course_obj.student_list # todo 老师修改学生分数方法 def change_score(self, course_name, student_name, score): # todo 1. 获取学生对象 student_obj = Student.select(student_name) # todo 2. 再给学生对象中的课程修改分数 student_obj.score_dict[course_name] = score student_obj.save()
5.老师修改学生分数_用于保存对象和获取对象的方法db_handler.py
''' 用于保存对象与获取对象 ''' import os from conf import settings import pickle # todo 保存数据 def save_data(obj): # todo 1. 获取对象的保存文件夹路径 # todo 以类名 当作 文件夹的名字 # todo obj.__class__:获取当前对象的类,即models.py中调用该方法的类 # todo obj.__class__.__name__:获取当前类的名字,即models.py中调用该方法的类名 class_name = obj.__class__.__name__ user_dir_path = os.path.join( settings.DB_PATH, class_name ) # todo 2.判断文件夹是否存在,不存在则创建文件夹 if not os.path.exists(user_dir_path): os.mkdir(user_dir_path) # todo 3.拼接当前用户的pickle文件路径,以用户作为文件名 user_path = os.path.join( user_dir_path, obj.user # 当前用户名字 ) # todo 4.打开文件,保存对象,通过pickle with open(user_path, 'wb') as f: pickle.dump(obj, f) # todo 查看数据 def select_data(cls, username): # 拿到models.py中刚传过来的类名(即文件夹名称)和username, # todo 有cls获取类名 class_name = cls.__name__ user_dir_path = os.path.join( settings.DB_PATH, class_name ) # todo 2.判断文件夹是否存在,不存在则创建文件夹 if not os.path.exists(user_dir_path): os.mkdir(user_dir_path) # todo 3.拼接当前用户的pickle文件路径,以用户作为文件名 user_path = os.path.join( user_dir_path, username # 当前用户名字 ) # todo 4.判断文件如果存在,再打开,并返回,若不存在,则代表用户不存在 if os.path.exists(user_path): # todo 5.打开文件,获取对象 with open(user_path, 'rb') as f: obj = pickle.load(f) return obj else: return None
6.老师修改学生分数_程序运行结果