choicse_course_sys
.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import os,sys from core import src path = os.path.dirname(os.path.dirname(__file__)) # print(path) # D:/面试整理/重新开始/7.选课系统(25-26)/choicse_course_sys sys.path.append(path) if __name__ == '__main__': src.run()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
''' 环境配置 ''' import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) DB_PATH = os.path.join(BASE_DIR,'db')
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
"""""" ''' 管理员视图 ''' from interface import admin_interface,common_interface from lib import common admin_info = {"name":None} def register(): while True: user = input("please your use:>>>").strip() pwd = input("please your pwd").strip() re_pwd = input("re_pwd:>>>").strip() if pwd == re_pwd: # 加密 pwd = common.get_md5(pwd) flag,msg = admin_interface.admin_register(user,pwd) if flag: print(msg) break else: print(msg) def login(): while True: user = input("please your use:>>>").strip() pwd = input("please your pwd").strip() re_pwd = input("re_pwd:>>>").strip() if pwd == re_pwd: # 加密 pwd = common.get_md5(pwd) flag,msg = common_interface.login_interface(user,pwd,'admin') if flag: print(msg) admin_info["name"] = user break else: print(msg) @common.login_auth('admin') def create_school(): while True: school_name = input('请输入学校名称:>>>').strip() school_addr = input('请输入地址:>>>').strip() flag,msg = admin_interface.create_school_interface(admin_info["name"],school_name,school_addr) if flag: print(msg) break else: print(msg) pass @common.login_auth('admin') def create_teacher(): while True: teacher_name = input('请输入老师名字').strip() flag,msg = admin_interface.create_teacher_interface(admin_info['name'],teacher_name) if flag: print(msg) break else: print(msg) @common.login_auth('admin') def create_course(): while True: school_list = common_interface.check_all_course('school') for index,school in enumerate(school_list): print(index,school) choice = input("please your school:>>>").strip() if choice.isdigit(): choice = int(choice) if choice >= 0 and choice <= len(school_list): school_name = school_list[choice] course_name = input('please your course:>>>').strip() flag,msg = admin_interface.create_course_interface(admin_info['name'],school_name,course_name) if flag: print(msg) break else: print(msg) else: print("please input true choice") continue else: print('请输入数字') continue # 管理员视图 func_dic = { '1': register, '2': login, '3': create_school, '4': create_teacher, '5': create_course } # 主程序视图 def run(): while True: print(""" 1.注册 2.登录 3.创建学校 4.创建老师 5.创建课程 q.退出 """) choice = input("please user sys:>>>").strip() if choice == "q": break elif choice in func_dic: func_dic[choice]() else: print("not have this sys") continue
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
"""""" """ 用户功能 """ from core import admin,student,teacher func_dic = { "1":admin.run, "2":student.run, "3":teacher.run } # 主程序视图 def run(): while True: print("""1.管理员视图 2.学生视图 3.老师视图 q.退出 """) choice = input("please user sys:>>>").strip() if choice == "q":break elif choice in func_dic: func_dic[choice]() else: print("not have this sys") continue
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
''' 学生视图 ''' from interface import student_interface,common_interface from lib import common student_info = { 'name': None } def register(): while True: username = input('请输入您的名字').strip() password = input('请输入您的密码:').strip() re_password = input('请确认密码:').strip() if password == re_password: flag, msg = student_interface.student_register(username, password) if flag: print(msg) break else: print(msg) def login(): while True: username = input('请输入用户名').strip() password = input('请输入密码:').strip() flag,msg = common_interface.login_interface(username,password,'student') if flag: print(msg) student_info['name'] = username break else: print(msg) @common.login_auth('student') def choose_school(): while True: school_list = student_interface.get_all_school('school') if not school_list: print('没有学校可选') break for index,school in enumerate(school_list): print(index,school) choice = input('请选择学校:').strip() if choice.isdigit(): choice = int(choice) if choice >= 0 and choice < len(school_list): school_name = school_list[choice] flag,msg = student_interface.choose_school_interface(student_info['name'],school_name) if flag: print(msg) break else: print(msg) else: print('请选择正确编号') else: print('输入有误') @common.login_auth('student') def choose_course(): while True: school_name = student_interface.check_school(student_info['name']) if not school_name: print('没有选择学校') break course_list = student_interface.get_all_from_school(school_name) if not course_list: break for index,course in enumerate(course_list): print(index,course) choice = input('请输入课程编号:').strip() if choice.isdigit(): choice = int(choice) if choice >= 0 and choice < len(course_list): course_name = course_list[choice] flag,msg = student_interface.choose_course(student_info['name'],course_name) if flag: print(msg) break else: print(msg) else: print('请输入正确的数字') else: print('选择正确的') @common.login_auth('student') def check_grade(): while True: course_list= student_interface.get_all_course(student_info['name']) if not course_list: print('学生没有选择课程') for index, course in enumerate(course_list): print(index,course) choice = input('请选择课程编号:').strip() if choice.isdigit(): choice = int(choice) if choice >= 0 and choice < len(course_list): course_name = course_list[choice] coure_score = student_interface.check_score_interface(student_info['name'],course_name) print(coure_score) break else: print('请输入正确的编号') else: print('请输入数字') func_dic = { '1': register, '2': login, '3': choose_school, '4': choose_course, '5': check_grade } # 主程序视图 def run(): while True: print(""" 1.注册 2.登录 3.选择学校 4.选择课程 5.查看成绩 q.退出 """) choice = input("please user sys:>>>").strip() if choice == "q" \ :break elif choice in func_dic: func_dic[choice]() else: print("not have this sys") continue
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from lib import common from interface import teacher_interface, common_interface teacher_info = { 'name': None } def login(): while True: username = input('请输入用户名').strip() password = input('请输入密码:').strip() flag, msg = common_interface.login_interface(username, password, 'teacher') if flag: print(msg) teacher_info['name'] = username break else: print(msg) @common.login_auth('teacher') def check_course(): flag,msg = teacher_interface.check_course_teacher_interface(teacher_info['name']) if flag: print(msg) else: print(msg) @common.login_auth('teacher') def choose_course(): while True: all_course_list = teacher_interface.get_all_course('course') if not all_course_list: print('没有课程选择,请联系管理员进行创建') break for index,course in enumerate(all_course_list): print(index,course) choice = input('请选择编号:') if choice.isdigit(): choice = int(choice) if not (choice >= 0 and choice < len(all_course_list)): print('请输入正确的编号') continue course_name = all_course_list[choice] flag,msg = teacher_interface.choose_course(teacher_info["name"],course_name) if flag: print(msg) break else: print(msg) else: print('请输入正确的选择') @common.login_auth('teacher') def check_student(): while True: course_list = teacher_interface.check_course_teacher_interface(teacher_info['name']) print(course_list) if not course_list: print('老师下面没有课程') break for index, course in enumerate(course_list): print(index, course) choice = input('请选择课成:').strip() if choice.isdigit(): choice = int(choice) if choice >= 0 and choice < len(course_list): course_name = course_list[choice] flag = teacher_interface.get_student_interface(teacher_info['name'], course_name) if flag: print(flag) break else: print('课程下没有学生') else: print('请输入正确的编号') else: print('请输入数字') @common.login_auth('teacher') def revise_student_grade(): while True: # 打印老师下的所有课程 course_list = teacher_interface.check_course_teacher_interface(teacher_info['name']) if not course_list: print('老师没有课程') break for index, course in enumerate(course_list): print(index, course) choice = input('请输入您的选择:').strip() if not choice.isdigit(): print('请输入数字') continue choice = int(choice) if not (choice >= 0 and choice < len(course_list)): print('请输入正确的编号') continue course_name = course_list[choice] student_list = teacher_interface.get_student_interface(teacher_info['name'], course_name) if not student_list: print('课程下没有学生') break for index, student in enumerate(student_list): print(index, student) choice = input('请输入学生编号:').strip() if choice.isdigit(): choice = int(choice) if choice >= 0 and choice < len(student_list): student_name = student_list[choice] score = input('请输入分数:').strip() flag, msg = teacher_interface.change_score(teacher_info['name'], course_name, student_name,score) if flag: print(msg) break else: print('请输入正确的编号') else: print('请输入数字') func_dic = { '1': login, '2': check_course, '3': choose_course, '4': check_student, '5': revise_student_grade, } # 主程序视图 def run(): while True: print(""" 1.登录 2.查看课程 3.选择课程 4.查看学生 5.修改学生成绩 q.退出 """) choice = input("please user sys:>>>").strip() if choice == "q" \ :break elif choice in func_dic: func_dic[choice]() else: print("not have this sys") continue
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
"""""" """ 数据层 """ import os from conf import settings import pickle def db_save(obj): # admin path = os.path.join(settings.DB_PATH,obj.__class__.__name__.lower()) if not os.path.exists(path): os.mkdir(path) user_path = os.path.join(path,obj.name) with open(user_path,'wb') as f: pickle.dump(obj,f) f.flush() def db_select(user_type,name): path = os.path.join(settings.DB_PATH,user_type.__name__.lower()) if not os.path.exists(path): os.mkdir(path) user_path = os.path.join(path,name) if not os.path.exists(user_path): return False with open(user_path,'rb') as f: user_obj = pickle.load(f) if user_obj: return user_obj else: return False
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
"""""" ''' 各种类以及类方法的定义 ''' from db import DB_hanlder class Base: def save(self): DB_hanlder.db_save(self) @classmethod def select(cls,name): obj = DB_hanlder.db_select(cls,name) return obj class Admin(Base): def __init__(self,name,pwd): self.name = name self.pwd = pwd self.save() def add_school(self,school_name,school_addr): School(school_name,school_addr) def add_teacher(self,teacher_name,pwd): Teacher(teacher_name,pwd) def add_course(self,course_name): Course(course_name) class School(Base): def __init__(self,school_name,school_addr): self.name = school_name self.school_addr = school_addr self.school_course_list = [] # #学校的课程列表 self.save() # 老师类 class Teacher(Base): def __init__(self, teacher_name, pwd): self.name = teacher_name self.pwd = pwd self.teacher_course_list = [] # 老师的课程列表 self.save() def choose_course(self,course_name): self.teacher_course_list.append(course_name) self.save() def check_student(self,course_name): course_obj = Course.select(course_name) return course_obj.student_list def change_score(self,course_name,student_name,score): student_obj = Student.select(student_name) student_obj.score[course_name] = score student_obj.save() class Student(Base): def __init__(self, student_name, student_pwd): self.name = student_name self.pwd = student_pwd self.school = None self.course_list = [] self.score = {} self.save() def choose_school(self,school_name): self.school = school_name self.save() def choose_course(self,course_name): self.course_list.append(course_name) self.score[course_name] = 0 self.save() class Course(Base): def __init__(self,course_name): self.name = course_name self.student_list = [] self.save() def add_student(self,student_name): self.student_list.append(student_name) self.save()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from db import modles # 注册接口 def admin_register(user,pwd): admin_obj = modles.Admin.select(user) # cls,name if admin_obj: return False, '用户已存在' # 调用类,自动触发内部的 __init__ modles.Admin(user,pwd) return True,f'{user}创建成功' # 注册学校接口 def create_school_interface(admin_name,school_name,school_addr): school_obj = modles.Admin.select(school_name) if not school_obj: admin_obj = modles.Admin.select(admin_name) admin_obj.add_school(school_name,school_addr) return True,f'{school_name}学校创建成功' # 创建老师接口 def create_teacher_interface(admin_name,teacher_name,pwd = '123'):# #管理员控制密码给他一个默认的密码 tea_obj = modles.Teacher.select(teacher_name) if tea_obj: return False,'老师已经存在' admin_obj = modles.Admin.select(admin_name) admin_obj.add_teacher(teacher_name,pwd) return True,f'{teacher_name}老师创建成功' # 创建课程接口 def create_course_interface(admin_name,school_name,course_name): school_obj = modles.School.select(school_name) if not school_obj: return False,'学校不存在' admin_obj = modles.Admin.select(admin_name) admin_obj.add_course(course_name) school_list = school_obj.school_course_list if course_name not in school_list: school_obj.school_course_list.append(course_name) school_obj.save() return True,f"{course_name}课程创建成功" else: return False,'课程已经存在'
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from db import modles import os from conf import settings # 登录接口 def login_interface(user,pwd,role): if role == 'admin': obj = modles.Admin.select(user) if not obj: return False,'管理员用户不存在' elif role == 'student': obj = modles.Student.select(user) if not obj: return False,'学生用户不存在' elif role == 'teacher': obj = modles.Teacher.select(user) if not obj: return False,'老师用户不存在' else: return False,'没有权限' if obj.pwd == pwd: return True, '登录成功' else: return False, '密码错误' # 查看文件接口 def check_all_course(user_type): course_path = os.path.join(settings.DB_PATH,user_type) if os.path.exists(course_path): return os.listdir(course_path) return False
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
''' 学生的接口 ''' from db import modles from interface import common_interface # 注册接口 def student_register(username,password): student_obj = modles.Student.select(username) if student_obj: return False,'学生已存在' modles.Student(username,password) return True,f'{username}学生注册成功' # 得到所有的学校 def get_all_school(school): school_list = common_interface.check_all_course(school) if not school_list: return False,'没有学校可选' return school_list # 选择学校 def choose_school_interface(student_name,school_name): student_obj = modles.Student.select(student_name) if student_obj.school: return False,'已选择学校' student_obj.choose_school(school_name) return True,'选择学校成功' # 查看学校 def check_school(student_name): student_obj = modles.Student.select(student_name) if student_obj.school: return student_obj.school return False # 获取学校所有课程 def get_all_from_school(school_name): school_obj = modles.School.select(school_name) if not school_obj.school_course_list: return False,'没有课程' return school_obj.school_course_list # 选择课程 def choose_course(student_name,course_name): student_obj = modles.Student.select(student_name) c_list = student_obj.course_list if course_name in c_list: return False,'课程已选择' student_obj.choose_course(course_name) course_obj = modles.Course.select(course_name) course_obj.add_student(student_name) return True,'添加课程成功' # 获取学生的所有课程 def get_all_course(student_name): student_obj = modles.Student.select(student_name) if not student_obj.course_list: return False return student_obj.course_list # 查看课程分数接口 def check_score_interface(student_name,course_name): student_obj = modles.Student.select(student_name) return student_obj.score[course_name]
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
''' 老师的接口 ''' from db import modles from interface import common_interface # 查看课程 def check_course_teacher_interface(teacher_name): teacher_obj = modles.Teacher.select(teacher_name) course_list = teacher_obj.teacher_course_list if not course_list: return False return course_list # 获取课程的接口 def get_all_course(course): all_course_list = common_interface.check_all_course(course) if not all_course_list: return False return all_course_list # 选择课程 def choose_course(teacher_name,course_name): teacher_obj = modles.Teacher.select(teacher_name) course_list = teacher_obj.teacher_course_list if course_name in course_list: return False,'课程已经添加' teacher_obj.choose_course(course_name) return True,f'{course_name}课程已经添加成功' # 查看课程下面的学生 def get_student_interface(teacher_name,course_name): teacher_obj = modles.Teacher.select(teacher_name) student_list = teacher_obj.check_student(course_name) if not student_list: return False return student_list # 修改学生分数接口 def change_score(teacher_name,course_name,student_name,score): teacher_obj = models.Teacher.select(teacher_name) teacher_obj.change_score(course_name,student_name,score) return True,'修改分数成功'
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import hashlib def get_md5(pwd): # 加盐 val = '天山这没收' md5 = hashlib.md5() md5.update(pwd.encode('utf-8')) md5.update(val.encode('utf-8')) res = md5.hexdigest() return res # 装饰器 def login_auth(user_type): from core import admin,teacher,student def auth(func): def inner(*args,**kwargs): if user_type == 'admin': if admin.admin_info["name"]: return func(*args,**kwargs) else: admin.login() elif user_type == 'teacher': if teacher.teacher_info['name']: return func(*args, **kwargs) else: teacher.login() elif user_type == 'student': if student.student_info['name']: return func(*args, **kwargs) else: student.login() return inner return auth
log
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
作业要求 角色:学校、学生、课程、讲师 要求: 1. 创建北京、上海 2 所学校 ----> 创建学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 ---> 创建课程、课程绑定给学校 3. 管理员 创建学校,老师,课程 ---> 管理员功能 4. 课程包含课程名称(周期,价格等属性) ---> 课程信息 5. 学校包含学校名称,地址等属性 ----> 学校的信息 6. 创建 老师角色 要关联学校 ----> 老师关联学校 7. 学生 注册登录后,可以选择学校,选择课程,查看成绩 ---> 学生的功能、学生绑定给课程 8. 老师登录后,可以查看教授课程,选择想要教授的课程,查看课程下的学生,修改学生成绩等 ---> 老师的功能 用户功能层: 管理员视图: 1.注册 2.登录 3.创建学校 4.创建老师 5.创建课程 学生视图: 1.注册 2.登录 3.选择学校 4.选择课程 5.查看成绩 老师视图: 1.登录 2.查看教授的课程 3.选择教授的课程 4.查看课程下的学生 5.修改学生成绩 项目目录搭建: conf放置配置信息setting core:放置用户层视图 db:数据操作层py文件和以文件形式保存的数据 interface:放置接口相关信息,有管理员接口,老师接口,学校接口,学生接口和公共接口 lib:放置公共方法 用户功能层:src下: src:主视图, admin:管理员视图, student:学生视图 teacher:老师视图 接口层:interface下: admin_interface管理员的接口 common_interface公共的接口 school_interface学校的接口 student_interface学生的接口 teacher_interface老师的接口 数据层:db目录下: db_handler,文件操作相关的方法 models:各种类及类方法的定义 其它目录:admin,course,school,student,teacher是自动生成的目录,用来存放数据信息 start.py启动文件 models: 父类: Base: 方法属性: 绑定给类方法: (类来调用会自动把类当做第一个参数传给它) select(类, 对象的名字): 由类来调用查看某个角色是否存在。 绑定给对象方法: (对象来调用会把对象当做第一个参数传给它) save(对象): 由对象来调用保存某个角色。 子类: Admin(管理员): 数据属性: name = admin_username pwd = admin_password 方法属性: 继承父类: select(类, 对象的名字): save(对象) 自己的方法: create_school create_teacher create_course School(学校): 数据属性: addr = school_addr name = school_name course_list = [] # 学校应该有多个课程,所以给学校对象添加一个 课程列表 用于存放课程。 方法属性: 继承父类: select(类, 对象的名字): save(对象) 对象自己的: add_course(self, course_name): # 添加课程方法 (在管理员选择学校并选择课程的时候,课程对象由管理员来创建,并且得把课程名称追加到学校对象中) self.course_list.append(course_name) Course(课程): 数据属性: course_name student_list = [] 方法属性: 继承父类: select(类, 对象的名字): save(对象) 对象自己的: tell_all_student(self): return self.student_list Student(学生): 数据属性: name = student_name pwd = student_pwd school = None course_list = [] score = {} 方法属性: 继承父类: select(类, 对象的名字): save(对象) 对象自己的: choose_school: 选择学校 choose_course: 选择课程 check_course: 查看课程 Teacher(老师): 数据属性: name = teacher_name pwd = teacher_pwd course_list = [] 方法属性: 继承父类: select(类, 对象的名字): save(对象) 对象自己的: check_course: 查看教授课程 choose_course: 选择教授课程 check_student_from_course: 查看课程下的学生 change_student_score: 修改学生的分数
关联关系.png