花了一夜写的,可能还存在不足
python
D:/选课系统 |___api | |___common_api.py |___bil | |___common.py |___conf | |___setting.py |___core | |___admin.py | |___src.py | |___student.py | |___teacher.py |___db | |___common_modles.py | |___modles.py |___starts.py |___test.py |___选课系统.jpg #写的思路,先写视图,再根据功能需求写接口,路径什么的都丢入setting.py,生成的人物的类丢modles.py,公共的课程学习等类丢入common_modles.py,后面写功能就是写逻辑了
import pickle import os def save_obj(obj): path = os.path.dirname(os.path.dirname(__file__)) file_path = os.path.join(path,'db',obj.__class__.__name__) if not os.path.exists(file_path): os.mkdir(file_path) obj_path = os.path.join(file_path,f'{obj.name}.pkl') if not os.path.exists(obj_path): with open(obj_path,'wb') as fw: pickle.dump(obj,fw) return True with open(obj_path, 'wb') as fw: pickle.dump(obj, fw) return False
from conf.setting import LONG_DICT import pickle import os def user(user): def login_deco(func): def wrapper(*args, **kwargs): if LONG_DICT[user]: func() else: print('请先登入') return wrapper return login_deco def read_obj(objtype,name): path = os.path.dirname(os.path.dirname(__file__)) file_path = os.path.join(path,'db',objtype) if not os.path.exists(file_path): os.mkdir(file_path) obj_path = os.path.join(file_path,f'{name}.pkl') if os.path.exists(obj_path): with open(obj_path, 'rb') as fr: read_obj = pickle.load(fr) return read_obj return False
import os LONG_DICT = {'student':None,'teacher':None,'admin':None} PATH = os.path.dirname(os.path.dirname(__file__)) STUDENT_FILE_PATH = os.path.join(PATH,'db','student') TEACHER_FILE_PATH = os.path.join(PATH,'db','teacher') ADMIN_FILE_PATH = os.path.join(PATH,'db','admin') COURSE_FILE_PATH = os.path.join(PATH,'db','course') SCHOOL_FILE_PATH = os.path.join(PATH,'db','school')
from conf.setting import * from bil.common import user,read_obj from db.modles import Admin,Teacher,Course,School #注册功能 def register(): print('欢迎使用注册功能') while True: print('输入Q退出') register_name = input('请输入你的名字') register_pwd = input('请输入你的密码') if register_name=='Q' or register_pwd =='Q': print('退出成功') return False admin = Admin(register_name,register_pwd) if admin.save(): print('注册成功') return True else: print('帐户已存在') continue #登入功能 def login(): print('欢迎使用登入功能') while True: print('输入Q退出') login_name = input('请输入你的名字') login_pwd = input('请输入你的密码') if login_name == 'Q' or login_pwd == 'Q': print('退出成功') return False if not os.path.exists(ADMIN_FILE_PATH): os.mkdir(ADMIN_FILE_PATH) path = os.path.join(ADMIN_FILE_PATH,f'{login_name}.pkl') if not os.path.exists(path): print('帐号不存在') continue info_obj = read_obj('admin',login_name) if info_obj.pwd == login_pwd: print('登入成功') LONG_DICT['admin'] = login_name return True else: print('密码错误') continue #建立学习功能 @user('admin') def found_school(): print('欢迎使用建立学校功能') while True: print('输入Q退出') name = input('请输入学校的名字') pwd = input('请输入学校的地址') if name == 'Q' or pwd == 'Q': print('退出成功') return False obj = School(name, pwd) if obj.save(): print('建立成功') return True else: print('帐户已存在') continue #建立老师功能 @user('admin') def found_teacher(): print('欢迎使用建立老师功能') while True: print('输入Q退出') name = input('请输入老师的名字') pwd = input('请输入你的密码') if name=='Q' or pwd =='Q': print('退出成功') return False obj = Teacher(name,pwd) if obj.save(): print('建立成功') return True else: print('帐户已存在') continue #建立课程功能 @user('admin') def found_course(): print('欢迎使用建立课程功能') while True: print('输入Q退出') name = input('请输课程的名字') if name == 'Q' : print('退出成功') return False obj = Course(name) if obj.save(): print('建立成功') return True else: print('已存在') continue #功能字典 action ={ '1':register, '2':login, '3':found_school, '4':found_teacher, '5':found_course, } #终端显示功能字典 msg = ''' ------------------ | 1:注册帐号 | | 2:登入帐号 | | 3:建立学校 | | 4:建立老师 | | 5:建立课程 | | Q:退出功能 | ------------------ ''' #管理员视图运行 def admin_action(): while True: print(msg) chiose = input('请选择') if chiose == 'Q': print('退出成功') ; break elif chiose in action: action[chiose]() else:print('请好好输入') ; continue
from core.student import student_action from core.teacher import teacher_action from core.admin import admin_action action ={ '1':student_action, '2':teacher_action, '3':admin_action, } #终端显示功能字典 msg = ''' ------------------ | 1:学生 | | 2:老师 | | 3:管理员 | | Q:退出功能 | ------------------ ''' #主界面视图运行 def run(): while True: print(msg) chiose = input('请选择') if chiose == 'Q': print('退出成功') ; break elif chiose in action: action[chiose]() else:print('请好好输入') ; continue
from conf.setting import * from bil.common import user,read_obj from db.modles import Student,Course #注册功能 def register(): print('欢迎使用注册功能') while True: print('输入Q退出') register_name = input('请输入你的名字') register_pwd = input('请输入你的密码') if register_name=='Q' or register_pwd =='Q': print('退出成功') return False obj = Student(register_name,register_pwd) if obj.save(): print('注册成功') return True else: print('帐户已存在') continue #登入功能 def login(): print('欢迎使用登入功能') while True: print('输入Q退出') login_name = input('请输入你的名字') login_pwd = input('请输入你的密码') if login_name == 'Q' or login_pwd == 'Q': print('退出成功') return False if not os.path.exists(STUDENT_FILE_PATH): os.mkdir(STUDENT_FILE_PATH) path = os.path.join(STUDENT_FILE_PATH, f'{login_name}.pkl') if not os.path.exists(path): print('帐号不存在') continue info_obj = read_obj('student', login_name) if info_obj.pwd == login_pwd: print('登入成功') LONG_DICT['student'] = login_name return True else: print('密码错误') continue #选择学校功能 @user('student') def choose_school(): print('欢迎使用选择学校功能') while True: print('输入Q退出') if not os.path.exists(SCHOOL_FILE_PATH): os.mkdir(SCHOOL_FILE_PATH) lis = os.listdir(SCHOOL_FILE_PATH) if lis == []: print('没有学校,请让管理员建立学校') return False while True: print('学校名称:') for school_name in lis: print(f'\t\t{school_name[:-4]}') name = input('请输入学校的名字') if name == 'Q': print('退出成功') return False if read_obj('school',name): obj_student = read_obj('student',LONG_DICT['student']) obj_student.school = name obj_student.save() print('选择学校成功') return True else: print('学校不存在') continue #选择课程功能 @user('student') def choose_course(): print('欢迎使用选择课程功能') print('输入Q退出') if not os.path.exists(COURSE_FILE_PATH): os.mkdir(COURSE_FILE_PATH) lis = os.listdir(COURSE_FILE_PATH) if lis == []: print('没有课程,请让管理员建立课程') return False while True: print('课程名字:') for course_name in lis: print(f'\t\t{course_name[:-4]}') name = input('请输入学校的名字') if name == 'Q': print('退出成功') return False if read_obj('course', name): obj_student = read_obj('student', LONG_DICT['student']) #type:Student obj_student.course.append(name) obj_student.save() course_obj = read_obj('course', name) #type:Course obj_student.add_course(course_obj) course_obj.save() print('选择课程成功') return True else: print('学校不存在') continue #查当作绩功能 @user('student') def check_score(): print('欢迎使用查当作绩功能') obj_student = read_obj('student', LONG_DICT['student']) #type:Student if obj_student.score : print(f'你的成绩是{obj_student.score }') return True print('你没有成绩') #功能字典 action ={ '1':register, '2':login, '3':choose_school, '4':choose_course, '5':check_score, } #终端显示功能字典 msg = ''' ------------------ | 1:注册帐号 | | 2:登入帐号 | | 3:选择学校 | | 4:选择课程 | | 5:查当作绩 | | Q:退出功能 | ------------------ ''' #学生视图运行 def student_action(): while True: print(msg) chiose = input('请选择') if chiose == 'Q': print('退出成功') ; break elif chiose in action: action[chiose]() else:print('请好好输入') ; continue if __name__ == '__main__': student_action()
from conf.setting import * from bil.common import user,read_obj from db.modles import Student,Course #登入功能 def login(): print('欢迎使用登入功能') while True: print('输入Q退出') login_name = input('请输入你的名字') login_pwd = input('请输入你的密码') if login_name == 'Q' or login_pwd == 'Q': print('退出成功') return False if not os.path.exists(TEACHER_FILE_PATH): os.mkdir(TEACHER_FILE_PATH) path = os.path.join(TEACHER_FILE_PATH, f'{login_name}.pkl') if not os.path.exists(path): print('帐号不存在') continue info_obj = read_obj('teacher', login_name) if info_obj.pwd == login_pwd: print('登入成功') LONG_DICT['teacher'] = login_name return True else: print('密码错误') continue #查看学生 @user('teacher') def check_student(): print('欢迎使用查看学生功能') print('输入Q退出') if not os.path.exists(STUDENT_FILE_PATH): os.mkdir(STUDENT_FILE_PATH) lis = os.listdir(STUDENT_FILE_PATH) if lis == []: print('没有学生') return False while True: print('学生帐号:') for course_name in lis: print(f'\t\t{course_name[:-4]}') name = input('请输入学生的名字') if name == 'Q': print('退出成功') return False if read_obj('student', name): student_obj = read_obj('student', name) #type:Student print(f'学生帐号:{student_obj.name}\n' f'学生密码:{student_obj.pwd}\n' f'学生学校:{student_obj.school}\n' f'学生课程:{student_obj.course}\n' f'学生成绩:{student_obj.score}\n') return True else: print('学生帐号不存在') #查看课程 @user('teacher') def check_course(): print('欢迎使用查看课程功能') if not os.path.exists(COURSE_FILE_PATH): os.mkdir(COURSE_FILE_PATH) lis = os.listdir(COURSE_FILE_PATH) if lis == []: print('没有课程') return False else: print('课程名称:') for course_name in lis: print(f'\t\t{course_name[:-4]}') wait = input('输入任意键退出\n') #选择课程功能 @user('teacher') def choose_course(): print('欢迎使用选择课程功能') print('输入Q退出') if not os.path.exists(COURSE_FILE_PATH): os.mkdir(COURSE_FILE_PATH) lis = os.listdir(COURSE_FILE_PATH) if lis == []: print('没有课程') return False else: print('课程名称:') for course_name in lis: print(f'\t\t{course_name[:-4]}') name = input('请输入课程的名字') if name == 'Q': print('退出成功') return False if read_obj('course', name): obj_teacher = read_obj('teacher', LONG_DICT['teacher']) obj_teacher.course.append(name) obj_teacher.save() course_obj = read_obj('course', name) # type:Course obj_teacher.add_course(course_obj) course_obj.save() print('课程选择成功') else: print('课程不存在') #修改为绩 @user('teacher') def revision_score(): print('欢迎使用修改为绩功能') print('输入Q退出') if not os.path.exists(STUDENT_FILE_PATH): os.mkdir(STUDENT_FILE_PATH) lis = os.listdir(STUDENT_FILE_PATH) if lis == []: print('没有学生') return False else: print('学生名称:') for course_name in lis: print(f'\t\t{course_name[:-4]}') name = input('请输入学生的名字') if name == 'Q': print('退出成功') return False if read_obj('student', name): student_obj = read_obj('student', name) #type:Student score = input('请输入学生的成绩') student_obj.score = score student_obj.save() else: print('学生不存在') #功能字典 action ={ '1':login, '2':check_student, '3':check_course, '4':choose_course, '5':revision_score, } #终端显示功能字典 msg = ''' ------------------ | 1:登入帐号 | | 2:查看学生 | | 3:查看课程 | | 4:选择课程 | | 5:修改为绩 | | Q:退出功能 | ------------------ ''' #老师视图运行 def teacher_action(): while True: print(msg) chiose = input('请选择') if chiose == 'Q': print('退出成功') ; break elif chiose in action: action[chiose]() else:print('请好好输入') ; continue
''' 基类: 保存 学校类:姓名、地址、课程列表 添加课程 课程类:姓名、学生列表 添加学生 添加老师 ''' from api.common_api import save_obj #基类 class Base: #存对象 def save(self): return save_obj(self) #定义学校 class School(Base): def __init__(self,name,addr): self.name = name self.addr = addr self.course = [] self.teacher = [] self.student = [] def add_course(self,Course): self.course.append(Course) #定义课程 class Course(Base): def __init__(self, name): self.name = name self.studet_list = [] self.teacher_list = [] def add_studet(self,Student): self.studet_list.append(Student) def add_teacher(self,Teacher): self.teacher_list.append(Teacher)
''' 基类: 保存 管理员类:姓名、密码 建立学校 建立课程 建立老师 老师类:姓名、密码、课程列表 添加课程 修改分数 学生类:姓名、密码、学校、课程列表、分数 获取学校 选择学校 添加课程 ''' from db.common_modles import * #建立学生 class Student(Base): def __init__(self,name,pwd): self.name = name self.pwd = pwd self.school = None self.course = [] self.score = None def check_school(self): return self.school def choose_school(self,obj): self.school = obj.name def add_course(self,Course): Course.add_studet(self) class Teacher(Base): def __init__(self,name,pwd): self.name = name self.pwd = pwd self.course = [] self.school = None def revision_score(self,Student,score): Student.score = score def add_course(self,Course): Course.add_teacher(self) class Admin(Base): def __init__(self,name,pwd): self.name = name self.pwd = pwd def found_school(self,name,addr): School(name,addr) def found_teacher(self,name,pwd): Teacher(name,pwd) def found_course(self,name): Course(name)
from core.src import run if __name__ == '__main__': run()
import os def dirsTree(): PATH = os.path.dirname(__file__) print(PATH) lis = os.listdir(PATH) if lis != None: for a in lis: print(f'|___{a}') if '.' not in a: a_path = os.path.join(PATH,a) lis_2 = os.listdir(a_path) if lis_2 != None: for b in lis_2: if b != '__pycache__': print(f'| |___{b}') dirsTree()