花了一夜寫的,可能還存在不足
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()