select 项目<选课系统>
"""1. 创建北京、上海 2 所学校 学校类对象 属性:名字,地址 行为: 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. 课程包含,周期,价格,通过学校创建课程 课程类对象 属性:名字,价格,周期 行为:4. 通过学校创建班级, 班级关联课程、讲师(初始没有设置为空) 班级对象 属性:名字, 课程名称 讲师对象 属性:名字,密码,校区名称,课程名称 5. 创建学员时,选择学校,关联班级 学生对象: 属性:名字,密码 ,学校名称,班级名称,成绩6. 创建讲师角色时要关联学校 7. 提供三个角色接口 6.1 学员视图, 可以注册,登陆, 交学费, 选择班级,查看成绩 6.2 讲师视图,登陆,(注册没有 由管理员来分配账号), 查看班级学员列表 , 修改所管理的学员的成绩 ,修改密码 6.3 管理视图,登陆,创建学校,创建讲师, 创建班级,创建课程,给老师指定班级 8. 上面的操作产生的数据都通过pickle序列化保存到文件里 实现的顺序管理员 老师 学员 """1.模块的界面
2.管理员代码层
# 管理员代码输入层 # 管理员视图层 from lib import common from interface import admin_inerface current_info = None def register(): name = input('输入管理员姓名:').strip() password = input('输入密码:').strip() if name and password: flag, msg = admin_inerface.register_interface(name, password) if flag: print(msg) else: print(msg) def login(): global current_info name = input('输入管理员姓名:').strip() password = input('输入密码:').strip() if name and password: flag, msg = admin_inerface.login_interface(name, password) if flag: print(msg) current_info = name else: print(msg) def create_school(): """ 1.输入创建学校所需要的属性 名字和地址 2.调用接口层判断 接口层拿到数据 到数据处理层处理 3.返回的到接口层 有则返回F 没有则创建 4,返回到界面 打印输出 :return: """ school_name= input('输入学校的名字').strip() school_addr = input('输入学校的地址:').strip() if school_name and school_addr : flag, msg = admin_inerface.create_school_interface(current_info, school_name, school_addr) if flag: print(msg) else: print(msg) def create_teacher(): """ 1.先选择学校(老师是在学校下面的) 可以封装获取所有学校学校 2.输入老师的名字和默认密码 创建老师管理员调用接口层实列化 :return: """ sc_names_list = admin_inerface.get_schools_interface() # print(sc_names_list,'3333') # ['bj_old', 'sh_old'] 3333 # 把字在通过索引的形式展现给界面层 >>>封装抽取一个独立函数 sc_name = common.get_name(sc_names_list, '校区名') # 拿到学校的名字 判断 是否存在 在下一步 输入老师的信息 if not sc_name: return # 有该学习 te_name = input('输入老师的名字:').strip() pwd = input('输入默认密码:').strip() if te_name and pwd: # 调用接口层 flag, msg = admin_inerface.create_teacher_interface(te_name, sc_name,pwd) if flag: print(msg) else: print(msg) def create_classes(): # 先创建课程 课程下添加班级 """ 1.选择校区 2.选择课程 3.输入班级名称 4.调用接口 5.展示结果 :return: """ sc_names = admin_inerface.get_schools_interface() # 拿到学校名字 sc_name = common.get_name(sc_names,'校区名字') if not sc_names: return False, '学校未创建' # 获取课程列表 c_course_list = admin_inerface.get_course_interface(sc_name) # print(c_course_list,'c_course_list') c_name = common.get_name(c_course_list,'课程名字') if not c_name: return False, '课程还没有创建' # 有的话 在选择班级 cl_name = input('输入要创建的班级:').strip() flag, msg = admin_inerface.create_classes_interface(sc_name,c_name,cl_name) if flag: print(msg) else: print(msg) def create_course(): """ 选择校区就可以 你的现获取所有学校 选好学校 在改学校下创建课程 :return: """ sc_names = admin_inerface.get_schools_interface() # 设计列表 面向对象思想 存的都是对象 sc_name = common.get_name(sc_names, '校区名字') # 封装 # 判断返回的校区名是否存在 if not sc_name: return # 有则添加课程信息 course_name = input('输入课程名字:').strip() price = input('输入课程价格:').strip() cycle = input('输入课程周期:').strip() # 调用接口层 传值要设计好是位置参数 flag, msg = admin_inerface.create_course_interface(sc_name, course_name, price, cycle) if flag: print(msg) else: print(msg) # 给老师添加课程 是给老师的所在班级添加课程呢 最后式老师班级 def add_course_to_teacher(): """ 明确输入层要干嘛 给老师加课程 1、选择学校 2、选择一个老师 3、选择一个课程 4、选择一个班级 5、将校区名字 老师名字 课程名字 班级名字 传给接口称 :return: """ # 获取学校名字 sc_names = admin_inerface.get_schools_interface() sc_name = common.get_name(sc_names,'学校名字') if not sc_name: return # 获取一会老师的 老师选择课程 课程之后才有班级 te_names = admin_inerface.get_teacher_interface(sc_name) # 取所有老师的名字 不需要传参 te_name = common.get_name(te_names, '老师的名字') # te_name = list[choice] 取值 if not te_name: return # # 获取课程名字 班级也创建好了 c_names = admin_inerface.get_course_interface(sc_name) c_name = common.get_name(c_names,'课程名字') if not c_name: return # 获取班级名字 # 1.去接口层 cl_names = admin_inerface.get_classes_interface(sc_name) # 取所有 # 调用公共方法报道名字 cl_name = common.get_name(cl_names, '班级名字') # 判断 if not cl_name: return # 调用接口层 发送数数据 >>>> 接收结果 flag, msg = admin_inerface.add_course_to_teacher_interface(sc_name,c_name,te_name,cl_name) if flag: print(msg) else: print(msg) func_dic = { ":register, ":login, ":create_school, ":create_teacher, ":create_classes, ":create_course, ":add_course_to_teacher, } def admin_views(): msg = (""" -----欢迎 登录管理员功能层----- 0.注册 1、登录 2、创建学校 3、创建老师 4、创建班级 5、创建课程 6、选择老师课程及班级 q、退出 """) common.select_func(func_dic, msg)
管理员接口层代码
# 管理员注册接口层层 # from db.models import * from db import models,db_handels def register_interface(name, password): """ :param name: 管理员名字 :param password: 管理员密码 :return: 返回是bool 和字符串提示信息 思路: 1. 直接用类名 通过models select()方法 返回是一个对象 再判断 在返回False 2.先判断名字是否存在 3.不在直接创建利用Admin 直接创建 """ admin_obj = models.Admin.select(name) print(admin_obj) if admin_obj: return False, "用户已存在" res = models.Admin(name, password) res.save() return True, '注册成功' # 用户登录接口 def login_interface(name,pwd): """ :param name: :param pwd: :return: bool + str 1.用类调取名对象 2.判断对象是否存在 3.不在则返回return 4.在判断密码 输入的和存的一样则返回正确 """ admin_obj = models.Admin.select(name) print(admin_obj,'admin_obj') if not admin_obj: return False, '用户不存在' if pwd == admin_obj.pwd: return True, '登录成功' # 创建学校 def create_school_interface(current_info, school_name, school_addr): """ :param current_info: 当前登录的名字: :param school_name: 学校可名 :param school_addr: 学校地址 :return: T /F 思路: 1。调用接口层 """ school_obj = models.School.select(school_name) if school_obj: return False, '学校已存在' # 实列化学校 models.School(school_name, school_addr) return True, '学校创建成功' # 创建学校 def create_teacher_interface(te_name,sc_name, pwd ): """ :param te_name: 老师的名字 :param pwd: 老师的密码 :return: 返回值 1、调用接口层将数据传输到数据处理层 2、存在则直接返回 不存在者直接实列化 3、将处理的结果都返回给用层界面 """ te_obj = models.Teacher.select(sc_name+te_name) ') if te_obj: return False, "老师已存在" models.Teacher(sc_name+te_name, sc_name, pwd) return True, "创建老师成功" # 获取所有学校 def get_schools_interface(): """ # 获取的所有学校称 1.通过学校这个类获取所有学校对象 2.拿到一个返回值 是一个列表对象 3.for循环拿出每一个对象 4.通过点语法获取名字 5.产生一个新列表 (学校名字) :return: """ sc_list_obj = models.School.get_all() # 可以将这个当一个类方法使用 可吧帮我们获取对象文件的列表 res = [] for i in sc_list_obj: res.append(i.name) return res # 接口层创建学校 def create_course_interface(sc_name, course_name, price, cycle): course_name_obj = models.Course.select(sc_name+course_name) # 存储式拼接的格式 if course_name_obj: return False, '课程已存在' models.Course(sc_name+course_name, price, cycle,sc_name) # 位置参数必须一一对应 return True, '课程创建成功' # 获取课程列表 def get_course_interface(sc_name): c_course_list = models.Course.get_all() print('c_course_list',c_course_list) # 拿到课程名字 res = [] for a in c_course_list: if a.sc_name == sc_name: res.append(a.name[len(sc_name):]) return res # 管理员创建班级 def create_classes_interface(sc_name,c_name,cl_name): """ :param sc_name: 学校名 :param c_name: 课程名 :param cl_name: 班级名 :return: 返回结果 1.调接口层 班级 moles 2.判断是否存在 3、创建 4、返回界面 """ cl_obj = models.Classes.select(sc_name+cl_name) if cl_obj: return False, '班级已经创建' # =无则创建 models.Classes(sc_name+cl_name, c_name, sc_name) return True, '班级创建成功' # 获取老师的所有名字 def get_teacher_interface(sc_name): """ 老师已经创建好了 te_names = models.Teacher.get_all() # 拿到 返回的一个老帅 对象列表 # 循环取值 获取老师 >>> 获取老师名字 :return:返回一个对象列表 """ res = [] # 123kk names te_names = models.Teacher.get_all() for a in te_names: if a.sc_name == sc_name: res.append(a.name[len(sc_name):]) return res # 接口层获取班级列表 get_all 方法 def get_classes_interface(sc_name): # cl_names = models.Classes.get_all() # 在接口层给他遍历 res = [] for a in cl_names: if a.sc_name == sc_name: res.append(a.name[len(sc_name):]) return res # 加课程接口层逻辑处理 >>>> 将接收的数据调用数据处理层 >>>返回结果 def add_course_to_teacher_interface(sc_name, c_name, te_name, cl_name): # 用models 获取数据 # c_obj = models.Classes.select(sc_name+c_name) # if not c_obj: # return False, '课程已存在' # # # 创建 # models.Classes(sc_name+c_name, te_name, cl_name) # models # return True, '创建成功' """ :param sc_name: 学校名称 :param c_name: 课程名称 :param te_name: 老师名称 :param cl_name: 班级名称 :return: 1.找到老师设置他的课程 2.找到对应的班级 设置老师 """ te_obj = models.Teacher.select(sc_name+te_name) # 将当前课程绑定给当前老师 te_obj.c_name = c_name te_obj.save() # 保存课程 # 将老师关联班级 cls_obj = models.Classes.select(sc_name+cl_name) # 判断班级是否已经选择 老师绑班级 if cls_obj.te_name == te_name: return False, '班级已经绑定过老师了' # 如果没有则将老师绑定给班级 cls_obj.te_name = te_name cls_obj.save() return True, '老师绑定班级成功'
管理员modles 层
# 类的封装(属性和方法) # 类的抽取 from db import db_handels class BaseClass(object): # 方法可以将查询方法封装到类中 可以通过类来调用 # def save() def save(self): db_handels.db_save(self) @classmethod # 为什么绑定给雷用 因为自动就将类当做第一对象传入 后面拼接路径 def select(cls, name): res = db_handels.db_select(cls, name) return res # 发封装一个类方法 直接将类作为第一参数传过来 @classmethod def get_all(cls): # 获取需要返回到接口层 list_obj = db_handels.get_all(cls) return list_obj class Admin(BaseClass): # 属性 及方法 def __init__(self, name, pwd): self.name = name self.pwd = pwd self.save() class School(BaseClass): def __init__(self,school_name,school_addr): self.name = school_name # 自己的名称空间 优先实列化初始值 self.addr = school_addr self.save() class Course(BaseClass): def __init__(self,name,price,cycle,school_name): self.name = name self.price = price self.cycle = cycle self.sc_name = school_name self.save() class Classes(BaseClass): def __init__(self,name,course_name, school_name): self.name = name self.te_name = None # 暂时还没有老师 self.sc_name = school_name # 创建班级需要传学校 self.c_name = course_name # 创建班级需要传课程 self.save() class Teacher(BaseClass): '): self.name = te_name self.pwd = pwd self.sc_name = school_name self.c_name = None # 课程名字哦 self.save() class Student(BaseClass): def __init__(self, name, pwd, school_name): self.name = name self.pwd = pwd self.sc_name = school_name # 学校是泥在创建学生要先选的 初始化阶段要进行 实列化传值 self.class_name = None # 班级 self.score = None self.is_pay = False # 是否付费属性 self.save()
管理员handles 层代码
# 存数据 (对象) import os import pickle from conf import settings def db_save(obj): # obj 是save()自动将对象传过来 # 拼接路径 判断路径保存 PATH = os.path.join(settings.DB_PATH, obj.__class__.__name__.lower()) if not os.path.exists(PATH): os.makedirs(PATH) path = os.path.join(PATH, obj.name) # 将对象写入文件 with open(path, 'wb')as f: pickle.dump(obj, f) f.flush() # 数据处理层 # select() 查询获取 def db_select(cls, name): # print(cls,'111') 类 # 拼接路径主要判断有没有当前路径 PATH = os.path.join(settings.DB_PATH, cls.__name__.lower()) # print(PATH, 'path') # print(PATH,'4444') if not os.path.exists(PATH): os.makedirs(PATH) # 再判断文件路径 user_path = os.path.join(PATH, name) if not os.path.exists(user_path): return # print(user_path, 'user_path') with open(user_path, 'rb')as f: res_obj = pickle.load(f) # print(res_obj, 'res_obj') return res_obj # 获取所有对象的类方法 def get_all(cls): # 拼接路径 path = os.path.join(settings.DB_PATH, cls.__name__.lower()) if not os.path.exists(path): return # # 拼接文件路径 # user_path = os.path.join(path, name) # with open(user_path, 'rd') #拿到当前文件夹下的所有文件 res = [] for a in os.listdir(path): # 这里的a 是 当前path 下的所有文件对象 # print(names,'names') # # 直接点用select() 拿到返回对象 obj = db_select(cls, a) # 调用 数据获取对象 # print('obj', obj) # <db.models.School object at 0x000002549D045438> 学校对象 res.append(obj) # 将对象添加到列表中 # print(res,'get_all 111') return res # 返回到models 层
2.老师用户接口层 :表示层代码
# 教师的功能代码层 from lib import common from interface import teacher_interface,admin_inerface current_info = None current_school = None def login(): global current_info, current_school # 升为全局变量一会记得保存当前用户的登录状态 while True: # 先选择学校 # 在选择登录 sc_names = admin_inerface.get_schools_interface() sc_name = common.get_name(sc_names, '选择的校区') if not sc_name: return name = input('输入老师名字:').strip() pwd = input('输入老师密码:').strip() if name and pwd: flag, msg = teacher_interface.login_interface(name, pwd,sc_name) if flag: print(msg) current_info = name current_school = sc_name break else: print(msg) # 暂时 def show_class(): # 全部 """获取这个老师下的班级 思路:根据当前的学校 和 用户名 1.先拿到所有的班级 在比对这个老师的是否是这个学校 和这个老师返回一个列表 2.返回到界循环打印 或者枚举 :return: """ # 调用接口层 class_list = teacher_interface.get_classes_list(current_info, current_school) if not class_list: return '暂无班级列表' # 打印 当前的班级列表 for a in class_list: print(class_list.index(a), a) # 查看当前老师下的学生 def check_student(): """ # 拿到所有 的班级 在 在获取 班级下所有的学生 # :return: """ class_list = teacher_interface.get_classes_list(current_info,current_school) # 获取班级名字 cls_name = common.get_name(class_list, '班级名字') if not class_list: # 有班级列表 return # 有则 老师获取所有学生 stu_dic_list = teacher_interface.get_stu_list_interface(current_school,cls_name) if not list: # 暂时还没有学员 print('暂时没有学生列表') return # 在打印字符串拼接 显示个人信息 [{'name':'jason}] print('%-8s %-8s %-8s %-8s %-8s'%('name','sc_name','class_name','score','is_pay')) for stu_dic in stu_dic_list: print('%-8s %-8s %-8s %-8s %-8s ' %(stu_dic['name'], stu_dic['sc_name'],stu_dic['class_name'],stu_dic['score'], stu_dic['is_pay'])) # 修改老师密码 def change_pwd(): """ 对新密码新进限制 :return: """ new_pwd = input('输入要修改的密码:').strip() if len(new_pwd) >=6 and new_pwd.isalnum(): flag = teacher_interface.change_pwd_interface(current_info,current_school, new_pwd) if flag: print('密码修改成功') else: print('修改未成功') # 修改学生成绩 def change_score(): """ 需求:修改学生成绩必须获取所有学生 <<< 遍历所有学生 判断 是否当前 学校下的学生和 1.老师登陆有自己的学校 2. :return: """ # 1.获取班级 当前老师的班级 cl_list = teacher_interface.get_classes_interface(current_info,current_school) cl_name = common.get_name(cl_list, '老师班级') if not cl_name: return # 获取班级下的学生 students = teacher_interface.get_stu_list_interface(current_school, cl_name) if not students: # 列表套字典 return '班级下没有学生' # 2.获取学生 stu_name = common.get_name([stu['name'] for stu in students], '学生信息') if not stu_name: return while True: score = input('输入修该的分数:').strip() if not common.is_number(score): print('请输入浮点数') continue # 调用接口也层修改 解压赋值 一一对应 flag, msg = teacher_interface.change_score_interface(current_school, stu_name, float(score)) if flag: print(msg) break else: print(msg) func_dic= { ":login, ":show_class, ":check_student, ":change_pwd, ":change_score, } def teacher_views(): msg = (""" 1.登陆 2.查看班级 3.查看学员 4.修改密码 5.修改成绩 q.退出 """) common.select_func(func_dic,msg)
老师接口层代码:业务逻辑代码处理层代码
# 教师的功能代码 from db import models # 老师接口层 def login_interface(name, pwd, sc_name): # 直接调用接口层 te_obj = models.Teacher.select(sc_name+name) if not te_obj: return False, '用户不存在' if pwd == te_obj.pwd: return True, '登录成功' # 获取老师的所有列表 def get_classes_list(te_name, school_name): """ :param te_name: :param school_name: :return: 1.先获取这学小的所有列表 2.循环没有一个班级对象 3,拿到班级对象点语法可以判断是否等于当前的班级下的学校名字 和当前的班级下的老师名 4.是直接切分将班级名字返回 返回一个列表 """ # 获取所有班级 cl_lists = models.Classes.get_all() # 循环打印 res = [] for a in cl_lists: if a.sc_name == school_name and a.te_name == te_name: res.append(a.name[len(school_name):]) # 存的时候是有学校的 return res # h获取所有的老师 def get_stu_list_interface(current_school,cls_name): # 返回 """ :param current_school: :param cls_name: :return: 一个列表存储的是字典 """ stu_all_list = models.Student.get_all() # print(stu_all_list,'stu_all_list') # 拿到所有的学生列表对象 # for 循环 res = [] for stu in stu_all_list: if stu.sc_name == current_school and stu.class_name == cls_name: # 获取学生字典 stu_dic = stu.__dict__ stu_dic.pop('pwd') # 获取学生的名字 stu_dic['name'] = stu_dic['name'][len(current_school):] res.append(stu_dic) return res # 老师修改密码 def change_pwd_interface(current_info,current_school, new_pwd): # 不需要判断了 注意查询老师的时候 拼接查询 te_obj = models.Teacher.select(current_school+current_info) te_obj.pwd = new_pwd te_obj.save() return True, '修改成功' # 获取当前老师 的班级 def get_classes_interface(te_name, sc_name): # 获取所有 clas = models.Classes.get_all() # 循环 res = [] for cl in clas: if cl.te_name == te_name and cl.sc_name == sc_name: res.append(cl.name[len(sc_name):]) return res # 修改学生成绩 def change_score_interface(current_school, stu_name, score): # 获取所有学生 stus = models.Student.get_all() ') for stu in stus: if stu.sc_name == current_school and stu.name == current_school+stu_name: stu.score = score print(stu.__dict__) ') stu.save() return True, '修改成绩成功' # # if __name__ == '__main__': # 测试代码 # # stu = models.Student('rose','123','sh_old') # stu.class_name = 'python10' # print(stu.__dict__) # stu.save()
3.学生用户层:表示层代码
# 学生函数功能层 from lib import common from interface import admin_inerface,student_inerface current_school = None current_info = None def register(): # 选择一个校区 在进行注册 sc_names = admin_inerface.get_schools_interface() sc_name = common.get_name(sc_names, '选择校区') if not sc_name: return while True: name = input('输入学生名字:').strip() pwd = input('输入学生密码:').strip() if name and pwd: flag, msg = student_inerface.register_interface(sc_name,name,pwd) if flag: print(msg) break else: print(msg) def login(): # 还得选择校区 global current_school, current_info sc_names = admin_inerface.get_schools_interface() sc_name = common.get_name(sc_names, '选择校区') if not sc_name: return while True: name = input('输入学生名字:').strip() pwd = input('输入学生密码:').strip() if name and pwd: flag, msg = student_inerface.login_interface(sc_name, name, pwd) if flag: print(msg) current_info = name current_school = sc_name break else: print(msg) # 学生缴费 def pay_money(): """ 1.首先我们要获取这个学生 当前的学生名字 返回一个学生字典 __dict__ stu = 2. 判段是否有班级 3.判断是否缴费 4。获取当前学生的 :return: """ while True: stu = student_inerface.get_student_interface(current_info, current_school) print(stu,'stu') if not stu['class_name']: # 名称字典空间 # 暂时没有该学生班级 print('未选择班级') return if stu['is_pay']: print('你已经交过费用了') return # 获取当前学生的要交的钱是多少 money = student_inerface.get_money_info(current_info,current_school) print('需要缴费金额:[%s]¥' % money) cmd = input('输入%s确认缴费<y/n>:').strip() if cmd == 'n': break elif cmd == 'y': flag,msg = student_inerface.pay_money_interface(current_info,current_school) if flag: print(msg) else: print(msg) # 学生选择班级 def choose_classes(): """ 1.当前由学校名称 2.获取班级的名字 3.通过班级赋值 :return: """ ls_names = student_inerface.get_cls_interface(current_info, current_school) ls_name = common.get_name(ls_names,'班级名字') ') if not ls_name: return # 有的话则继续 flag, msg = student_inerface.choose_cls_interface(current_school,current_info,ls_name) if flag: print(msg) else: print(msg) def check_score(): # 修改分数 """ 获取学生字典对象 :return: """ stu_dic = student_inerface.get_student_interface(current_info, current_school) if not stu_dic: return '暂无学生字典对象' print('学生成绩%s' % stu_dic['score']) func_dic = { ":register, ":login, ":pay_money, ":choose_classes, ":check_score, } def student_views(): msg = ("""-----欢迎等录学生功能层------ 1、注册 2、登录 3、交学费 4、选择班级 5、查看成绩 q、退出 """) common.select_func(func_dic, msg)
学生层业务逻辑处理层:
# 学生接口层 from db import models def register_interface(sc_name,name,pwd): # 记得拼接 stu_obj = models.Student.select(sc_name+name) if stu_obj: return False, '学生已经存在' models.Student(sc_name+name, pwd, sc_name) print(stu_obj,'stu_obj') # stu_obj.save() return True, '注册成功' # 用户登陆 def login_interface(sc_name, name, pwd): # 先判断用户名 存在 再判断密码 stu_obj = models.Student.select(sc_name+name) if not stu_obj: # 直接返回 return False, "用户不存在" if stu_obj.pwd == pwd: return True, '用户登陆成功' # 获取当前学生信息 def get_student_interface(current_info, current_school): stus = models.Student.select(current_school+current_info) if stus: stu_dic = stus.__dict__ stu_dic.pop('pwd') return stu_dic return False # 获取当前学生要交的学费 def get_money_info(stu_name,sc_name): """ 1.获取学生的 2.获取该学的班级 3。获取班级取课程对象 """ stu = models.Student.select(sc_name+stu_name) # 班级对象 cls = models.Classes.select(sc_name+stu.class_name) # 获取班级 # 拿到班级下的课程 c_course = models.Course.select(sc_name+cls.c_name) return c_course.price # 学生缴费 def pay_money_interface(stu_name,sc_name): # 获取学生的缴费信息 改为T stu_obj = models.Student.select(sc_name+stu_name) stu_obj.is_pay = True stu_obj.save() return True, '缴费成功' # 获取班级列表 def get_cls_interface(current_info, current_school): cl_list = models.Classes.get_all() res = [] for i in cl_list: if i.name.startswith(current_school): res.append(i.name[len(current_school):]) return res # 给学生添加班级 def choose_cls_interface(current_school,current_info,ls_name): stu_obj = models.Student.select(current_school+current_info) if not stu_obj: return False, '该学生不存在' if stu_obj.class_name: # 一个学生只能选一个班级 # print('stu_obj',stu_obj.__dict__) return False, '已经选则班级' # 这里是有点问题呀 stu_obj.class_name = ls_name # print(stu_obj.__dict,'2222') stu_obj.save() return True, '创建班级成功'
4. common 共用功能
# 先封装选择项 from functools import wraps def select_func(func_dic, msg): while True: print(msg) choice = input('输入功能选项:').strip() if choice == 'q': break elif choice in func_dic: func_dic.get(choice)() else: print('输入有误') # 获取校区名字 def get_name(names_list, title): """ :param names_list: 管理功能层传过的学校列表 :param title: 展示给用户的标题 校区 课程 老师 班级 :return: """ while True: if not names_list: print('暂时还没有%s'% title) return # for循环 可以用枚举 这里我们尝试一个新的 for c_name in names_list: print(names_list.index(c_name), c_name) choice = input("输入%s编号:"% title).strip() if not choice.isdigit(): continue choice = int(choice) if choice not in range(len(names_list)): print('输入的编号不存在') continue return names_list[choice] def is_number(score): while True: try: float(score) return True except BaseException('输入不是浮点数') as e: print(e) break # 装饰器 def login_auth(type): def outer(func): from views import admin, student, teacher @wraps(func) def inner(*args,**kwargs): if type == 'admin': module = admin elif type == 'student': module = student elif type == 'teacher': module = teacher else: raise Exception('没有这个模块') if module.current_info : res = func(*args, **kwargs) return res else: return module.login() return inner return outer
select 项目<选课系统>的更多相关文章
- 一个简单的python选课系统
下面介绍一下自己写的python程序,主要是的知识点为sys.os.json.pickle的模块应用,python程序包的的使用,以及关于类的使用. 下面是我的程序目录: bin是存放一些执行文件co ...
- python 入门基础23 选课系统 项目
选课系统 代码地址:github_code # 选课系统 # 角色:学校.学员.课程.讲师 # 要求: # 1. 创建北京.上海 2 所学校 # 2. 创建linux , python , go 3个 ...
- day27、28 二十八、项目:选课系统
选课系统 作业要求 角色:学校.学生.课程.讲师 要求: 1. 创建北京.上海 2 所学校 ----> 创建学校 2. 创建linux , python , go 3个课程 , linux\py ...
- Python开发【项目】:选课系统-改良版
程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...
- python【项目】:选课系统【简易版】
功能要求 角色:学校.学员.课程.讲师要求:1. 创建学校2. 创建课程3. 课程包含,周期,价格,通过学校创建课程4. 通过学校创建班级, 班级关联课程.讲师5. 创建学员时,选择学校,关联班级5. ...
- python开发项目:学生选课系统
程序要求:1.创建北京.上海两所学校(分析:通过学校类实例化两个学校实例) 2.创建Linux.python.go三个课程,Linux\go在北京开,Linux在上海开(创建Linux.python. ...
- 学生选课系统 c语言
/********************************* *主题:学生选修课程系统设计 * *设计要求: *1.添加功能:程序能够任意添加课程和学生记录,可提供选择界面供用户选择所需要添加 ...
- JAVA分级测试——选课系统(补发)
博客园似乎上传图片多了之后会出现各种问题,所以只能直接上代码了 <!DOCTYPE HTML> <html lang="zh"> <head> ...
- Javaweb实现简单的选课系统(主要技术包括jsp、Servlet、Javabean)
一.背景信息: 首先,这个选课系统是上周一老师在课堂上让我们做的测试,考试时长三个小时,我只做了一半,也没有实现选课流程. 由于上周忙于写实验报告没有时间继续完成这个测试.这周用前天和昨天一共七个小时 ...
随机推荐
- 浙大PAT CCCC L3-014 周游世界 ( 最短路变形 )
题目链接 题意 : 中文题请点链接,挺复杂的... 分析 : 乍一看是个最短路,实际就真的是个最短路.如果没有 “ 在有多条最短路径的时候输出换乘次数最少的” 这一条件的约束,那么这题就是直接建图然后 ...
- Java——super
在Java类中使用super来引用基类的成分. [代码]
- struct files_struct
内核利用文件描述符(file descriptor)来访问文件.文件描述符是非负整数.它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表.当程序打开一个现有文件或者创建一个新文件时,内 ...
- SQLSTATE[HY000] [2002] No such file or directory
正常的解决办法.. 只需将laravel配置文件中的host 127.0.0.1改成localhost就可以: 'mysql' => array( 'driver' ...
- Hypermesh中弹簧单元设置
1D >> springs 单元类型 CBUSH1D 单元属性 PBUSH1D
- JS备忘--子父页面获取元素属性、显示时间,iframe之间互相调用函数
//页面加载完成后执行 $(function () { getHW();}); //当用户改变浏览器大小改变时触发 $(window).resize(function () { setHW(); }) ...
- spring自动注入的三种方式
所谓spring自动注入,是指容器中的一个组件中需要用到另一个组件(例如聚合关系)时,依靠spring容器创建对象,而不是手动创建,主要有三种方式: 1. @Autowired注解——由spring提 ...
- 类Random
/* * Random:产生随机数的类 * * 构造方法 * public Random();没有给种子,用的是默认种子,是当前时间的毫秒值 * public Random(long seed);使用 ...
- Linux(Ubuntu)常用命令(三)
查看时间 cal :显示当前日期. cal :显示全年日历./ cal -y 显示当年日历. date :显示当前时间. 这几个一般不会用到了解即可. 查看进程信息 ps :显示当前进程. - ...
- SpringBoot内嵌数据库的使用(H2)
配置数据源(DataSource) Java的javax.sql.DataSource接口提供了一个标准的使用数据库连接的方法. 传统做法是, 一个DataSource使用一个URL以及相应的证书去构 ...