python123注册需要输入真实姓名和学校吗_python-----作业完成--学校选课系统
選課系統:
角色:學校、學員、課程、講師
要求:
1. 創建北京、上海 2 所學校
2. 創建linux , python , go 3個課程 , linux\py 在北京開, go 在上海開
3. 課程包含,周期,價格,通過學校創建課程
4. 通過學校創建班級, 班級關聯課程、講師
5. 創建學員時,選擇學校,關聯班級
5. 創建講師角色時要關聯學校,
6. 提供兩個角色接口
6.1 學員視圖, 可以注冊, 交學費, 選擇班級,
6.2 講師視圖, 講師可管理自己的班級, 上課時選擇班級, 查看班級學員列表 , 修改所管理的學員的成績
6.3 管理視圖,創建講師, 創建班級,創建課程
7. 上面的操作產生的數據都通過pickle序列化保存到文件里
README學校選課系統
學生視圖:可以自助注冊,注冊時可以選擇班級,通過注冊名登陸,,交學費,上課
講師視圖:通過講師編號登陸,可以管理自己的班級,上課時選擇班級, 查看班級學員列表 , 修改所管理的學員的成績
管理視圖: 1、創建學校. 2、查看學校.
3、創建班級. 4、查看班級.
5、創建講師. 6、查看講師.
7、創建課程. 8、查看課程.
9、課師關聯. 10、查看課師關聯.
11、創建學員. 12、查看學員.
程序結構:
school/#程序目錄
|- - -__init__.py
|- - -bin/#啟動目錄
| |- - -__init__.py
| |- - -admin.py#管理視圖啟動
| |- - -initalize.py#系統初始化
| |- - -stud.py#學生視圖啟動
| |- - -teacher.py#講師視圖啟動
|
|- - -cfg/#配置目錄
| |- - -__init__.py
| |- - -config.py#配置文件
|
|- - -core/#主要程序目錄
| |- - -__init__.py
| |- - -admin_main.py#管理視圖主邏輯
| |- - -class_main.py#主邏輯,類
| |- - -func_main.py#主邏輯,函數
| |- - -id_classes.py#id文件主邏輯,函數
| |- - -log_file.py#日志函數
| |- - -students_main.py#學生視圖主邏輯
| |- - -teacher_main.py#講師視圖主邏輯
|
|- - -db/#數據目錄
| |- - -__init__.py
| |- - -admin_file/#管理員相關文件
| | |- - -
| |
| |- - -admin_user_list#是否初始化的檢測文件
| |
| |- - -classes/#班級文件目錄
| |- - -course/#課程文件目錄
| |- - -school/#學校文件目錄
| |- - -students_file/#學生文件目錄
| |- - -teac_to_cour/#講師與課程關聯文件目錄
| |- - -teacher_file/#講師文件目錄
|
|
|- - -log/#日志目錄
| |- - -__init__.py
詳細代碼:
admin.py
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 5 6 #管理視圖:創建講師, 創建班級,創建課程 7 8 import os ,sys 9 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#獲取相對路徑轉為絕對路徑賦于變量10 sys.path.append(BASE_DIR)#增加環境變量11 #print(BASE_DIR)12 from core import admin_main #包含目錄下的文件腳本13 if __name__ == '__main__':14 admin_main.loging()View Code
initalize.py
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 #初始化系統 5 import os ,sys 6 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#獲取相對路徑轉為絕對路徑賦于變量 7 sys.path.append(BASE_DIR)#增加環境變量 8 from core import func_main 9 if __name__ == '__main__':10 func_main.initialize_admin()#初始化管理員View Code
stud.py
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import os ,sys 5 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#獲取相對路徑轉為絕對路徑賦于變量 6 sys.path.append(BASE_DIR)#增加環境變量 7 8 from core import students_main 9 from core.func_main import stud_alize10 11 if __name__ == '__main__':12 while True:13 print('''14 溫馨提示:如果未注冊可以自助注冊15 1、自助注冊16 2、進入登陸17 3、退出18 ''')19 s=input('請選擇:')20 if s=='1':21 stud_alize()22 continue23 elif s=='2':24 students_main.stud_log()25 continue26 elif s=='3':27 exit()28 else:29 print('輸入有誤,請重輸!')View Code
teacher.py
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import os ,sys 5 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#獲取相對路徑轉為絕對路徑賦于變量 6 sys.path.append(BASE_DIR)#增加環境變量 7 8 from core.teacher_main import teach_log 9 10 if __name__ == '__main__':11 teach_log()View Code
config.py
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import os ,sys 5 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#獲取相對路徑轉為絕對路徑賦于變量 6 sys.path.append(BASE_DIR)#增加環境變量 7 8 ADMIN_USER_FILE=BASE_DIR+'\db\\admin_user_list'#定義管理員列表文件變量 9 10 ADMIN_DIR=BASE_DIR+'\db\\admin_file\\'#定義管理員路徑變量11 CLASS_DIR=BASE_DIR+'\db\\classes\\'#定義班級文件路徑變量12 COURSE_DIR=BASE_DIR+'\db\\course\\'#定義學校課程文件路徑變量13 STUD_DIR=BASE_DIR+'\db\\students_file\\'#定義學員文件路徑變量14 TEACH_DIR=BASE_DIR+'\db\\teacher_file\\'#定義講師文件路徑變量15 SCHOOL_DIR=BASE_DIR+'\db\\schools\\'#定義學校路徑變量16 TEAC_COUR_DIR=BASE_DIR+'\db\\teac_to_cour\\'#定義學校課程文件路徑變量17 18 AMOUNT=300#每堂課收入基數19 20 21 USER_LOG=BASE_DIR+'\log\\user_log.log'#用戶登陸日志文件22 USER_ERRO=BASE_DIR+'\log\\user_erro.log'#用戶錯誤日志文件23 USER_OPERT=BASE_DIR+'\log\\user_operation.log'#用戶操作日志文件24 25 ADMIN_LOG=BASE_DIR+'\log\\admin_log.log'#管理員登陸日志文件26 ADMIN_ERRO=BASE_DIR+'\log\\admin_erro.log'#管理員錯誤日志文件27 ADMIN_OPERT=BASE_DIR+'\log\\admin_operation.log'#管理員操作日志文件View Code
admin_main.py
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import pickle 5 import os ,sys 6 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#獲取相對路徑轉為絕對路徑賦于變量 7 sys.path.append(BASE_DIR)#增加環境變量 8 #from core import user_pass 9 from core import class_main 10 from core import func_main 11 from core import log_file 12 from cfg import config 13 14 15 def loging():#運行函數 16 if func_main.file_char(config.ADMIN_USER_FILE):#檢測相關文件是否不存在,進行初始化 17 print('系統還未進行初始化!') 18 func_main.initialize_admin()#進行初始化 19 while True: 20 print('管理員界面'.center(60,'=')) 21 print('按q/Q退出<<<
class_main.py
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import os ,sys,pickle,uuid,time 5 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#獲取相對路徑轉為絕對路徑賦于變量 6 sys.path.append(BASE_DIR)#增加環境變量 7 8 9 from cfg import config 10 11 from core import id_classes 12 13 #基礎類 14 class BasisClass(object):#基礎類 15 def save(self): 16 file_dir=os.path.join(self.file_path,str(self.ID))#拼接文件路徑 17 pickle.dump(self,open(file_dir,'wb'))#序列化到文件 18 19 @classmethod 20 def open_file_list(cls):#傳入當前類 21 list_l=[]#定義一個列表 22 for file in os.listdir(cls.file_path):#循環輸出對應目錄下的文件 23 file_dir=os.path.join(cls.file_path,file)##拼接文件路徑 24 list_l.append(pickle.load(open(file_dir,'rb')))#反序列化,追加到列表 25 return list_l#返回列表 26 27 #管理員類 28 class Admin(BasisClass): 29 file_path=config.ADMIN_DIR#管理員路經變量 30 def __init__(self,user,pwd): 31 self.ID=id_classes.Admin_id(self.file_path)#自動生成唯一ID 32 self.USER=user 33 self.PWD=pwd 34 self.create_time=time.strftime('%Y-%m-%d %H:%M:%S')#創建的時間 35 @staticmethod 36 def login(name,pas): 37 try: 38 for obj in Admin.open_file_list(): 39 if obj.USER == name and obj.PWD == pas: 40 tag=True 41 error='' 42 data='\033[32;1m登錄成功\033[0m' 43 break 44 else: 45 raise Exception('\033[41;1m用戶名或密碼錯誤\033[0m' %name) 46 except Exception as e: 47 tag=False 48 error=str(e) 49 data='' 50 return {'tag':tag,'error':error,'data':data} 51 52 53 #學校類 54 class SchoolName(BasisClass): 55 file_path=config.SCHOOL_DIR#學校路徑變量 56 def __init__(self,schoo_name,addr):#學校名稱 地址 57 self.NAME=schoo_name#學校的名字 58 self.ADDR=addr#地址 59 self.ID=id_classes.Schools_id(self.file_path)#自動生成唯一ID 60 self.create_time=time.strftime('%Y-%m-%d %H:%M:%S')#創建的時間 61 self.amount=0#收入 62 # def get_amount(self): 63 # return str(self.__amount)#返回收入 64 def __str__(self): 65 return self.NAME 66 67 #班級類 68 class Class_leven(BasisClass):#續承學校類 69 '''班級類''' 70 file_path=config.CLASS_DIR#班級所在目錄 71 number=0#班級數 72 def __init__(self,school_id,name,teac_to_cour_id):#學校, 班級名,講師與課程 73 self.NAME=name 74 self.ID=id_classes.Class_id(self.file_path)#自動生成唯一ID 75 self.SCHOOL_ID=school_id#學校名字ID 76 self.create_time=time.strftime('%Y-%m-%d %H:%M:%S')#創建的時間 77 self.TEAC_TO_LSIT_ID=teac_to_cour_id#講師與課程列表 78 Class_leven.number+=1 79 def __str__(self): 80 return self.NAME 81 82 83 84 # '''老師類''' 85 class Teacher(BasisClass): 86 number=0#老師人數 87 file_path=config.TEACH_DIR#講師路經變量 88 def __init__(self,name,pwd,age,sex,leve,school_id):#名字,密碼,年齡,性別,學校名 89 self.ID=id_classes.Teacher_id(self.file_path) 90 self.NAME=name 91 self.PWD=pwd 92 self.AGE=age 93 self.SEX=sex 94 self.LEVE=leve 95 self.SCHOOL_ID=school_id#關聯學校 96 self.amount=0#收入 97 self.create_time=time.strftime('%Y-%m-%d %H:%M:%S')#創建的時間 98 Teacher.number+=1#創建時加1 99 def __str__(self):100 return self.NAME101 @staticmethod102 def login(name,pas):103 try:104 for obj in Teacher.open_file_list():105 if obj.NAME == name and obj.PWD == pas:106 tag=True107 error=''108 file_dir=os.path.join(obj.file_path,str(obj.ID))#拼接文件路徑109 data=file_dir#返回對應的文件110 break111 else:112 raise Exception('\033[41;1m用戶名或密碼錯誤\033[0m' %name)113 except Exception as e:114 tag=False115 error=str(e)116 data=''117 return {'tag':tag,'error':error,'data':data}118 119 #'''學生類'''120 class Students(BasisClass):121 '''學生類'''122 file_path=config.STUD_DIR#學生文件路徑變量123 number=0#學生總人數124 def __init__(self,num,name,pwd,age,sex,school_id,class_leven_id,phone):#學號,名字,年齡,性別,學校,班級,電話,分數,學費125 self.ID=id_classes.Students_id(self.file_path)126 self.NUM=num127 self.NAME=name128 self.PWD=pwd129 self.AGE=age130 self.SEX=sex131 self.SCHOOL_ID=school_id132 self.CLASS_ID=class_leven_id133 self.PHONE=phone134 self.SCORE=Score(self.NUM)135 self.create_time=time.strftime('%Y-%m-%d %H:%M:%S')#創建的時間136 self.FEES=0137 def __str__(self):138 return self.NAME139 @staticmethod140 def login(name,pas):#登陸檢測141 try:142 for obj in Students.open_file_list():143 if obj.NAME == name and obj.PWD == pas:144 tag=True145 error=''146 file_dir=os.path.join(obj.file_path,str(obj.ID))#拼接文件路徑147 data=file_dir#返回對應的文件148 break149 else:150 raise Exception('\033[41;1m用戶名或密碼錯誤\033[0m' %name)151 except Exception as e:152 tag=False153 error=str(e)154 data=''155 return {'tag':tag,'error':error,'data':data}156 157 158 159 #'''課程類'''160 class Course(BasisClass):161 file_path=config.COURSE_DIR#課程文件路徑變量162 def __init__(self,name,cycle,fees,school_id,):#傳入名字,周期,學費,學校對應的ID163 self.ID=id_classes.Course_id(self.file_path)#自動生成唯一ID164 self.NAME=name165 self.CYCLE=cycle166 self.FEES=fees167 self.SCHOOL_ID=school_id168 self.SCORE=Score(self.ID)#傳入自身ID 實例化出來一個分數對象169 self.CREATE_TIME=time.strftime('%Y-%m-%d %H:%M:%S')#創建的時間170 def __str__(self):171 return self.NAME172 173 #講師到課程174 class Teac_to_cour(BasisClass):175 '''講師到課程'''176 file_path=config.TEAC_COUR_DIR#講師到課程文件路徑變量177 def __init__(self,course_name,teacher_name,school_id):#課程,講師178 self.ID=id_classes.Teac_to_cour_id(self.file_path)#自動生成唯一ID179 self.NAME=teacher_name+'->'+course_name180 self.COURSE_NAME=course_name#課程名稱181 self.TEACHER_NAME=teacher_name#講師姓名182 self.SCHOOL_ID=school_id#學校ID183 def __str__(self):184 return self.NAME185 186 187 #分數類188 class Score():189 def __init__(self,nid):190 self.ID=nid#學號191 self.score_dict={}#分數字典192 193 def set(self,Teac_to_cour_id,number):194 self.score_dict[Teac_to_cour_id]=number#課程與講師合到分數195 196 def get(self,Teac_to_cour_id):197 return self.score_dict[Teac_to_cour_id]#取出分數View Code
func_main.py
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import os ,sys,pickle,uuid,hashlib,time 5 6 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#獲取相對路徑轉為絕對路徑賦于變量 7 sys.path.append(BASE_DIR)#增加環境變量 8 from cfg import config 9 from core import class_main 10 from core import log_file 11 12 13 #id生成 14 def id_uu(): 15 return str(uuid.uuid1()) 16 #id生成 17 def id_md5(): 18 id_i=hashlib.md5() 19 id_i.update(bytes(str(time.time()),encoding='utf8')) 20 return id_i.hexdigest()#返回用時間創建 的ID 21 22 #初始化檢測 23 def file_char(name):# 24 if not os.path.exists(name):#檢測相關文件是否不存在 25 #info={'北京':[],'上海':[]} 26 #file_pick(name,info)#進行初始化 27 return True 28 else: 29 return False 30 31 #初始化管理員 32 def initialize_admin(): 33 print('系統正在初始化....') 34 try: 35 user = input('請輸入初始化用戶名:') 36 pwd = input('請輸入初始化密碼:') 37 obj = class_main.Admin(user, pwd) 38 obj.save() 39 with open(config.ADMIN_USER_FILE,'w') as f: 40 f.write('yes')#應文件用來確認初始化 41 return True 42 except Exception as e: 43 print(e) 44 45 #創建學校函數 46 def car_school(): 47 try: 48 print('提示: B/b 返回上級!') 49 names=input('請輸入您要添加的學校名字:').strip() 50 if names=='b' or names=='B': 51 return 52 addrs=input('請輸入學校所在地址:').strip() 53 if addrs=='b' or addrs=='B': 54 return 55 school_name_list=[(obj.NAME,obj.ADDR) for obj in class_main.SchoolName.open_file_list()]#進行學校校區重名檢測用,返回列表 56 if (names,addrs) in school_name_list: 57 print('\033[41;1m[%s] [%s]校區 已經存在,不可重復創建\033[0m' %(names,addrs)) 58 return 59 else: 60 obj=class_main.SchoolName(names,addrs)#創建學校 61 obj.save()#pickle序列化保存到文件 62 print('\033[32;1m創建[%s] 學校,[%s]校區成功!\033[0m'%(names,addrs)) 63 return 64 except Exception as e: 65 print(e) 66 67 #查看學校 68 def show_school(): 69 for obj in class_main.SchoolName.open_file_list(): 70 #amo=obj.get_amount() 71 print('\033[32;1m學校[%s] 地址[%s] 總收入[%s] 創建日期[%s] \033[0m'.center(60,'-') %(obj.NAME,obj.ADDR,obj.amount,obj.create_time)) 72 73 #創建課程函數 74 def car_course(): 75 print('\033[36;1m創建課程\033[0m'.center(60,'=')) 76 school_list=class_main.SchoolName.open_file_list()#打開學校列表 77 try: 78 #while True: 79 print('\033[33;1m提示: B/b 返回上級!\033[0m') 80 fon=input('===============其他鍵確認開始創建課程:') 81 if fon=='b' or fon=='B': 82 return 83 for k,obj in enumerate(school_list): 84 print('\033[35;1m學校編號:%s,學校名稱:%s,校區:%s\033[0m'%(k,obj,obj.ADDR)) 85 sch_name=int(input('請選擇學校: ')) 86 school_obj=school_list[sch_name]#用數字選定學校 87 # print(school_list[sch_name]) 88 # print(school_obj.ID.ID) 89 course_name=input('請輸入要創建的課程名:').strip() 90 price=input('請輸入課程價格: ').strip() 91 period=input('請輸入課程周期: ').strip() 92 course_name_list=[(obj.NAME,obj.SCHOOL_ID.ID) for obj in class_main.Course.open_file_list()]#返回所有課程是名字,對應的學校列表 93 if (course_name,school_obj.ID.ID) in course_name_list:#查課程名,與學校名是否存 94 print('\033[43;1m課程[%s] 已經存在,不能重復創建\033[0m' %(course_name)) 95 return 96 else: 97 obj=class_main.Course(course_name,period,price,school_obj.ID) 98 obj.save() 99 print('\033[33;1m課程[%s] 價格[%s] 周期[%s]創建成功\033[0m' %(obj.NAME,obj.FEES,obj.CYCLE))100 return101 except Exception as e:102 return print('選擇有誤,請重新選擇')103 104 #查看課程105 def show_course():106 for obj in class_main.Course.open_file_list():#調用ID類中的方法107 print('\033[32;1m[%s] [%s]校區 [%s]課程 價格[%s] 周期[%s]\033[0m'.center(60,'-')%(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.NAME,obj.FEES,obj.CYCLE))108 109 #創建講師函數110 def car_teacher():111 print('\033[36;1m創建講師\33[0m'.center(60,'='))112 school_list=class_main.SchoolName.open_file_list()#打開學校列表113 try:114 #while True:115 print('\033[33;1m提示: B/b 返回上級!\033[0m')116 fon=input('===============其他鍵確認開始創建講師:')117 if fon=='b' or fon=='B':118 return119 for k,obj in enumerate(school_list):120 print('\033[35;1m學校編號:%s,學校名稱:%s,校區:%s\033[0m'%(k,obj,obj.ADDR))121 sch_name=int(input('請選擇學校: '))122 school_obj=school_list[sch_name]#用數字選定學校123 uname=input('請輸入要創建的講師名字:').strip()124 upwd=input('請輸入講師登陸密碼:').strip()125 uleve=input('請輸入講師級別:').strip()126 uage=input('請輸入年齡:').strip()127 usex=input('請輸入性別:').strip()128 uname_list=[(obj.NAME,obj.SCHOOL_ID.ID) for obj in class_main.Teacher.open_file_list()]#返回所有講師是名字,對應的學校列表129 if (uname,school_obj.ID.ID) in uname_list:#查講師名,與學校名是否存130 print('\033[43;1m講師[%s] 已經存在,不能重復創建\033[0m' %(uname))131 return132 else:133 obj=class_main.Teacher(uname,upwd,uage,usex,uleve,school_obj.ID)134 obj.save()135 print('\033[33;1m[%s] [%s]校區 講師[%s] 創建成功\033[0m' %(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.NAME))136 return137 except Exception as e:138 return print('選擇有誤,請重新選擇')139 140 #查看講師141 def show_teacher():142 for obj in class_main.Teacher.open_file_list():#調用ID類中的方法143 print('\033[32;1m[%s] [%s]校區 [%s]講師 性別:[%s] 級別[%s] 創建時間[%s]\033[0m'.center(60,'-')%(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.NAME,obj.SEX,obj.LEVE,obj.create_time))144 145 #創建班級函數146 def car_classes():147 print('\033[36;1m創建班級\33[0m'.center(60,'='))148 school_list=class_main.SchoolName.open_file_list()#打開學校列表149 try:150 #while True:151 print('\033[33;1m提示: B/b 返回上級!\033[0m')152 fon=input('===============其他鍵確認開始創建班級:')153 if fon=='b' or fon=='B':154 return155 for k,obj in enumerate(school_list):156 print('\033[35;1m學校編號:%s,學校名稱:%s,校區:%s\033[0m'%(k,obj,obj.ADDR))157 sch_name=int(input('請選擇學校: '))158 school_obj=school_list[sch_name]#用數字選定學校159 uname=input('請輸入要創建的班級名:').strip()160 uname_list=[(obj.NAME,obj.SCHOOL_ID.ID) for obj in class_main.Class_leven.open_file_list()]#返回所有班級是名字,對應的學校列表161 if (uname,school_obj.ID.ID) in uname_list:#查課程名,與學校名是否存162 print('\033[43;1m[%s] [%s]校區 ,[%s]班級 已經存在,不能重復創建\033[0m' %(school_obj.ID.get_id_file().NAME,school_obj.ID.get_id_file().ADDR,uname))163 return164 else:165 teac_to_cour_list=class_main.Teac_to_cour.open_file_list()#打關聯列表166 for k ,obj in enumerate(teac_to_cour_list):167 if str(school_obj.ID)==str(obj.SCHOOL_ID.ID):168 print('\033[35;1m課程編號:%s,關聯的講師:%s\033[0m'%(k,obj))169 coures_name=int(input('請選擇講師與課程'))170 teac_to_cour_obj=teac_to_cour_list[coures_name]171 obj=class_main.Class_leven(school_obj.ID,uname,teac_to_cour_obj.ID)172 obj.save()173 print('\033[33;1m[%s] [%s]校區 [%s]班級 創建成功\033[0m' %(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.NAME))174 return175 except Exception as e:176 return print('選擇有誤,請重新選擇')177 178 #查看班級179 def show_classes():180 for obj in class_main.Class_leven.open_file_list():#調用ID類中的方法 學校ID 老師到課程ID181 print('\033[32;1m[%s] [%s]校區 [%s]班 所開課程:[%s] 講師:[%s]\033[0m'.center(60,'-')%(obj.SCHOOL_ID.get_id_file().NAME,\182 obj.SCHOOL_ID.get_id_file().ADDR,\183 obj.NAME,\184 obj.TEAC_TO_LSIT_ID.get_id_file().COURSE_NAME,obj.TEAC_TO_LSIT_ID.get_id_file().TEACHER_NAME))185 186 #關聯課程187 def associated_course():188 try:189 #while True:190 school_list=class_main.SchoolName.open_file_list()#打開學校列表191 print('課程關聯'.center(60,'='))192 for k,obj in enumerate(school_list):193 print('\033[35;1m學校編號:%s,學校名稱:%s,校區:%s\033[0m'%(k,obj,obj.ADDR))194 sch_name=int(input('請選擇學校: '))195 school_obj=school_list[sch_name]#用數字選定學校196 course_list=class_main.Course.open_file_list()#打開課程列表197 for k,obj in enumerate(course_list):198 if str(obj.SCHOOL_ID.ID)==str(school_obj.ID):#判斷學校名是否相同199 print('\033[35;1m課程編號:%s,課程名稱:%s\033[0m'%(k,obj))200 cou_name=int(input('請選擇課程: '))201 course_obj=course_list[cou_name]#用數字選定課程202 teacher_list=class_main.Teacher.open_file_list()#打開講師列表203 for k,obj in enumerate(teacher_list):204 if str(obj.SCHOOL_ID.ID)==str(school_obj.ID):#判斷學校名是否相同205 print('\033[35;1m講師編號:%s,講師姓名:%s\033[0m'%(k,obj))206 teach_name=int(input('請選擇講師: '))207 teach_obj=teacher_list[teach_name]#用數字選定老師208 uname_list=[(obj.COURSE_NAME,obj.TEACHER_NAME,obj.SCHOOL_ID.ID) for obj in class_main.Teac_to_cour.open_file_list()]#返回所有關聯課程列表209 if (course_obj.NAME,teach_obj.NAME,school_obj.ID.ID) in uname_list:#查課程名,與學校名是否存210 print('\033[43;1m[%s] [%s]校區 ,課程[%s]與[%s] 已經關聯,不能重復關聯\033[0m' %(school_obj.ID.get_id_file().NAME,school_obj.ID.get_id_file().ADDR,course_obj.NAME,teach_obj.NAME))211 return212 else:213 obj=class_main.Teac_to_cour(course_obj.NAME,teach_obj.NAME,school_obj.ID)214 obj.save()215 print('\033[33;1m[%s] [%s]校區 ,課程[%s]與[%s] 關聯成功\033[0m' %(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.COURSE_NAME,obj.TEACHER_NAME))216 return217 except Exception as e:218 return print('選擇有誤,請重新選擇')219 220 #查看課程關聯221 def show_teac_to_cour():222 for obj in class_main.Teac_to_cour.open_file_list():223 print('\033[32;1m[%s] [%s]校區 課程:[%s] 講師:[%s]\033[0m'.center(60,'=')%(obj.SCHOOL_ID.get_id_file().NAME,\224 obj.SCHOOL_ID.get_id_file().ADDR,\225 obj.COURSE_NAME,obj.TEACHER_NAME))226 227 #學員自動注冊228 def stud_alize():229 print('\033[36;1m學員自助注冊\33[0m'.center(60,'='))230 school_list=class_main.SchoolName.open_file_list()#打開學校列表231 try:232 #while True:233 print('\033[33;1m提示: B/b 返回上級!\033[0m')234 fon=input('===============其他鍵確認開始注冊:')235 if fon=='b' or fon=='B':236 return237 for k,obj in enumerate(school_list):238 print('\033[35;1m學校編號:%s,學校名稱:%s,校區:%s\033[0m'%(k,obj,obj.ADDR))239 sch_name=int(input('請選擇您要注冊的學校: '))240 uname_list=[(obj.NUM,obj.PHONE) for obj in class_main.Students.open_file_list()]#返回所有學員的名字,對應的學校,電話號碼列表241 school_obj=school_list[sch_name]#用數字選定學校242 unum=int(input('請輸入您要的學號:').strip())243 if (unum)in uname_list:#查學號是否存244 print('\033[43;1m學號[%s] 已經存在,不能重復創建\033[0m' %(unum))245 return246 uname=input('請輸入注冊名字:').strip()247 upwd=input('請輸入登陸密碼:').strip()248 uphone=input('請輸入電話號碼:').strip()249 uage=input('請輸入年齡:').strip()250 usex=input('請輸入性別:').strip()251 if (uphone) in uname_list:#查電話是否存252 print('\033[43;1m學員[%s] 電話號碼已經存在,不能重復創建\033[0m' %(uname))253 return254 else:255 class_list=class_main.Class_leven.open_file_list()#打開班級256 for k,obj in enumerate(class_list):257 if str(obj.SCHOOL_ID.ID)==str(school_obj.ID):#判斷學校名是否相同258 print('\033[35;1m班級編號:%s, [%s]\033[0m'%(k,obj))259 uclass_name=int(input('請選擇班級:'))260 class_name_obj=class_list[uclass_name]#261 obj=class_main.Students(unum,uname,upwd,uage,usex,school_obj.ID,class_name_obj.ID,uphone)262 obj.save()263 print('\033[33;1m[%s] [%s]校區 學員[%s] 注冊成功\033[0m' %(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.NAME))264 return265 except Exception as e:266 return print('輸入有誤,請重新選擇')267 268 269 #創建學員270 def car_students():271 print('\033[36;1m創建學員\33[0m'.center(60,'='))272 school_list=class_main.SchoolName.open_file_list()#打開學校列表273 try:274 #while True:275 print('\033[33;1m提示: B/b 返回上級!\033[0m')276 fon=input('===============其他鍵確認開始創建學員:')277 if fon=='b' or fon=='B':278 return279 for k,obj in enumerate(school_list):280 print('\033[35;1m學校編號:%s,學校名稱:%s,校區:%s\033[0m'%(k,obj,obj.ADDR))281 sch_name=int(input('請選擇學校: '))282 uname_list=[(obj.NUM,obj.PHONE) for obj in class_main.Students.open_file_list()]#返回所有學員的名字,對應的學校,電話號碼列表283 school_obj=school_list[sch_name]#用數字選定學校284 unum=int(input('請輸入要創建學員學號:').strip())285 if (unum)in uname_list:#查學號是否存286 print('\033[43;1m學號[%s] 已經存在,不能重復創建\033[0m' %(unum))287 return288 uname=input('請輸入要創建學員名字:').strip()289 upwd=input('請輸入學員登陸密碼:').strip()290 uphone=input('請輸入電話號碼:').strip()291 uage=input('請輸入年齡:').strip()292 usex=input('請輸入性別:').strip()293 if (uphone) in uname_list:#查電話是否存294 print('\033[43;1m學員[%s] 電話號碼已經存在,不能重復創建\033[0m' %(uname))295 return296 else:297 class_list=class_main.Class_leven.open_file_list()#打開班級298 for k,obj in enumerate(class_list):299 if str(obj.SCHOOL_ID.ID)==str(school_obj.ID):#判斷學校名是否相同300 print('\033[35;1m班級編號:%s, [%s]\033[0m'%(k,obj))301 uclass_name=int(input('請選擇班級:'))302 class_name_obj=class_list[uclass_name]#303 obj=class_main.Students(unum,uname,upwd,uage,usex,school_obj.ID,class_name_obj.ID,uphone)304 obj.save()305 print('\033[33;1m[%s] [%s]校區 學員[%s] 創建成功\033[0m' %(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.NAME))306 return307 except Exception as e:308 return print('輸入有誤,請重新選擇')309 310 #查看學員311 def show_students():312 for obj in class_main.Students.open_file_list():313 print('\033[32;1m[%s] [%s]校區 學員編號:[%s] 學員姓名:[%s] 年齡:[%s] 性別:[%s] 電話:[%s] 所在班級:[%s]\033[0m'.center(60,'=')%(obj.SCHOOL_ID.get_id_file().NAME,\314 obj.SCHOOL_ID.get_id_file().ADDR,obj.NUM,\315 obj.NAME,obj.AGE,obj.SEX,obj.PHONE,obj.CLASS_ID.get_id_file().NAME))316 317 318 319 #學員個人信息查看320 321 def show_info(obj):322 info='''\033[34;1m323 學號:{NUM}\t\t\t姓名:{NAME}\t\t\t年齡:{AGE}\t\t\t性別:{SEX}\t\t\t電話:{PHONE}324 325 學校:{SCHOOL}\t\t\t校區:{SCHOOL_}\t\t\t班級:{CLASS}\t\t\t學費:{FEES}\t\t\t分數:{SCORE}326 327 \033[0m'''.format(NUM=str(obj.NUM),NAME=obj.NAME,AGE=obj.AGE,SEX=obj.SEX,PHONE=obj.PHONE,\328 SCHOOL=obj.SCHOOL_ID.get_id_file().NAME,SCHOOL_=obj.SCHOOL_ID.get_id_file().ADDR,\329 CLASS=obj.CLASS_ID.get_id_file().NAME,FEES=str(obj.FEES),SCORE=obj.SCORE.score_dict)330 331 print(info)332 333 #講師個人信息查看334 335 def show_teach_info(obj):336 info='''\033[34;1m337 姓名:{NAME}\t\t\t年齡:{AGE}\t\t\t性別:{SEX}\t\t\t338 339 學校:{SCHOOL}\t\t\t校區:{SCHOOL_}\t\t\t級別:{LEVE}\t\t\t收入:{amount}340 341 \033[0m'''.format(NAME=obj.NAME,AGE=obj.AGE,SEX=obj.SEX,\342 SCHOOL=obj.SCHOOL_ID.get_id_file().NAME,SCHOOL_=obj.SCHOOL_ID.get_id_file().ADDR,\343 LEVE=obj.LEVE,amount=str(obj.amount))344 345 print(info)346 347 #講師操作相關函數348 def teacher_char_l(obj_teach):349 class_teach_list=[]#講師的班級列表350 for obj in class_main.Class_leven.open_file_list():#打開班級列表351 if obj_teach.NAME==obj.TEAC_TO_LSIT_ID.get_id_file().TEACHER_NAME:#查詢對應的課程老師352 class_teach_list.append(obj)#加入列表353 return class_teach_list#講師的班級列表354 355 #講師操作相關函數查看學生356 def teacher_char_class(class_teach_list):357 while True:358 for k,obj in enumerate(class_teach_list):359 print('\033[32;1m班級編號:%s 班級名稱:[%s]\033[0m'%(k,obj))360 try:361 sart_class=int(input('請選擇您要查看的學員班級編號:'))362 sart_class_obj=class_teach_list[sart_class]#用數字選定班級363 for obj in class_main.Students.open_file_list():#查看學生364 if str(obj.CLASS_ID.get_id_file().NAME)==str(sart_class_obj.NAME):#查看對應班級365 print('\033[34;1m學號:[%s] 姓名:[%s]\033[0m'%(obj.NUM,obj.NAME))366 return367 except Exception as e:368 print('選擇有誤,請重新選擇')369 else:370 print('\033[31;1m對不起,您還沒有分配班級與課程,請與校方聯系!\033[0m')371 372 373 #講師操作相關函數學員成績374 def teacher_char_class_students(class_teach_list):375 while True:376 for k,obj in enumerate(class_teach_list):377 print('\033[32;1m班級編號:%s 班級名稱:[%s]\033[0m'%(k,obj))378 try:379 sart_class=int(input('請選擇您要查看的學員班級編號:'))380 sart_class_obj=class_teach_list[sart_class]#用數字選定班級381 students_list=[]382 for obj in class_main.Students.open_file_list():#查看學習383 if str(obj.CLASS_ID.get_id_file().NAME)==str(sart_class_obj.NAME):#查看對應班級384 #print('\033[34;1m學號:[%s] 姓名:[%s]\033[0m'%(obj.NUM,obj.NAME))385 students_list.append(obj)#返回當前班級學員列表386 return students_list387 except Exception as e:388 print('選擇有誤,請重新選擇')389 else:390 print('\033[31;1m對不起,您還沒有分配班級與課程,請與校方聯系!\033[0m')391 392 393 #獲取學生上課課程函數394 def studnts_class(class_name):395 for obj in class_main.Course.open_file_list():#返回所有課程的名字396 if class_name==str(obj.NAME):397 return obj398 399 400 #交學費401 def jxf(file_dir,user):402 obj=pickle.load(open(file_dir,'rb'))403 money=input('請輸入學費金額:')404 if money.isdigit():#是否為整數405 obj.FEES=obj.FEES+int(money)406 obj.save()#進行保存407 print("交費成功,金額:\033[32;1m%s\033[0m"%money)408 file_dir=os.path.join(config.SCHOOL_DIR,str(obj.SCHOOL_ID.get_id_file().ID))##拼接文件路徑409 school_obj=pickle.load(open(file_dir,'rb'))#反序列化,追加到文件410 school_obj.amount+=int(money)411 school_obj.save()#進行保存412 info_str='%s 學員進行交費,金額:[%s]'%(user,money)413 log_file.user_opert(info_str)414 else:415 print('請正確輸入整數!')View Codeid_classes.py
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import pickle,os 5 from core import func_main 6 # ID 類 7 class id_mode(object):#id 基礎類 8 def __init__(self,file_path): 9 self.ID=func_main.id_uu()##自動生成唯一ID10 self.File_path=file_path#傳入的路徑11 def __str__(self):12 return self.ID13 def get_id_file(self):#通過ID找到對應文件14 for filename in os.listdir(self.File_path):15 if filename == self.ID:16 file_dir=os.path.join(self.File_path,self.ID)#拼接文件路徑17 return pickle.load(open(file_dir,'br'))#返回反序列化的文件對象18 return None19 20 class Admin_id(id_mode):#管理員類21 def __init__(self,file_path):22 super(Admin_id,self).__init__(file_path) #23 24 class Class_id(id_mode):#班級類25 def __init__(self,file_path):26 super(Class_id,self).__init__(file_path)27 28 class Course_id(id_mode):#課程類\29 def __init__(self,file_path):30 super(Course_id,self).__init__(file_path)31 32 class Schools_id(id_mode):#學校類33 def __init__(self,file_path):34 super(Schools_id,self).__init__(file_path)35 36 class Students_id(id_mode):#學生類37 def __init__(self,file_path):38 super(Students_id,self).__init__(file_path)39 40 class Teac_to_cour_id(id_mode):#講師到課程類41 def __init__(self,file_path):42 super(Teac_to_cour_id,self).__init__(file_path)43 44 class Teacher_id(id_mode):#講師類45 def __init__(self,file_path):46 super(Teacher_id,self).__init__(file_path)View Code
log_file.py
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 #日志記錄相關函數 5 import os,logging,time 6 from cfg import config 7 8 9 def log_err(info_str):#錯誤日志,傳入的錯誤內容10 logger=logging.getLogger('用戶登陸錯誤日志')#設置日志模塊11 logger.setLevel(logging.DEBUG)12 fh=logging.FileHandler(config.USER_ERRO,encoding='utf-8')#寫入文件13 fh.setLevel(logging.DEBUG)#寫入信息的級別14 fh_format=logging.Formatter('%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')#日志格式15 fh.setFormatter(fh_format)#關聯格式16 logger.addHandler(fh)#添加日志輸出模式17 logger.warning(info_str)18 return 019 20 def log_log(info_str):#登陸日志,傳入內容21 logger=logging.getLogger('用戶成功登陸日志')#設置日志模塊22 logger.setLevel(logging.DEBUG)23 fh=logging.FileHandler(config.USER_LOG,encoding='utf-8')#寫入文件24 fh.setLevel(logging.DEBUG)#寫入信息的級別25 fh_format=logging.Formatter('%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')#日志格式26 fh.setFormatter(fh_format)#關聯格式27 logger.addHandler(fh)#添加日志輸出模式28 logger.warning(info_str)29 return 030 31 def user_opert(info_str):#用戶操作日志,傳入內容32 logger=logging.getLogger('用戶操作日志')#設置日志模塊33 logger.setLevel(logging.CRITICAL)34 fh=logging.FileHandler(config.USER_OPERT,encoding='utf-8')#寫入文件35 fh.setLevel(logging.CRITICAL)#寫入信息的級別36 fh_format=logging.Formatter('%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')#日志格式37 fh.setFormatter(fh_format)#關聯格式38 logger.addHandler(fh)#添加日志輸出模式39 logger.critical(info_str)40 return 041 42 43 44 def admin_log(info_str):#管理員登陸日志,傳入內容45 logger=logging.getLogger('管理員成功登陸日志')#設置日志模塊46 logger.setLevel(logging.DEBUG)47 fh=logging.FileHandler(config.ADMIN_LOG,encoding='utf-8')#寫入文件48 fh.setLevel(logging.DEBUG)#寫入信息的級別49 fh_format=logging.Formatter('%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')#日志格式50 fh.setFormatter(fh_format)#關聯格式51 logger.addHandler(fh)#添加日志輸出模式52 logger.warning(info_str)53 return 054 55 def admin_err(info_str):#管理員錯誤日志,傳入的錯誤內容56 logger=logging.getLogger('管理員登陸錯誤日志')#設置日志模塊57 logger.setLevel(logging.DEBUG)58 fh=logging.FileHandler(config.ADMIN_ERRO,encoding='utf-8')#寫入文件59 fh.setLevel(logging.DEBUG)#寫入信息的級別60 fh_format=logging.Formatter('%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')#日志格式61 fh.setFormatter(fh_format)#關聯格式62 logger.addHandler(fh)#添加日志輸出模式63 logger.warning(info_str)64 return 065 66 def admin_opert(info_str):#管理員操作日志,傳入內容67 logger=logging.getLogger('管理員操作日志')#設置日志模塊68 logger.setLevel(logging.CRITICAL)69 fh=logging.FileHandler(config.ADMIN_OPERT,encoding='utf-8')#寫入文件70 fh.setLevel(logging.CRITICAL)#寫入信息的級別71 fh_format=logging.Formatter('%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')#日志格式72 fh.setFormatter(fh_format)#關聯格式73 logger.addHandler(fh)#添加日志輸出模式74 logger.critical(info_str)75 return 0View Code
students_main.py
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import os ,sys,pickle,time 5 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#獲取相對路徑轉為絕對路徑賦于變量 6 sys.path.append(BASE_DIR)#增加環境變量 7 from cfg import config 8 from core.class_main import Students 9 from core.class_main import Course10 11 from core.func_main import show_info12 from core.func_main import studnts_class13 from core.func_main import jxf14 from core import log_file15 16 17 18 def stud_log():#學生登陸19 while True:20 print('學生登陸界面'.center(60,'='))21 print('按q/Q退出<<<=int(class_obj.FEES):#如果交的學費大于課程的費用才能上課74 print('開始上課....')75 for i in range(50):#加載動畫76 sys.stdout.write('#')77 sys.stdout.flush()78 time.sleep(0.05)79 print('\n恭喜!您已經完成本次課時.....')80 info_str='%s 學員上課,完成課時!'%(user)81 log_file.user_opert(info_str)82 continue83 else:84 print('您的學費不夠,請先交學費')85 continue86 elif foo=='4':87 print('您已經成功退出!')88 info_str='學員[%s] 成功退出 '%user89 log_file.log_log(info_str)90 exit()91 else:92 print('選擇有誤,請重新選擇!')93 continue94 else:95 print('用戶名或密碼錯誤請重輸入')96 info_str='%s登陸錯誤!'%user97 log_file.log_err(info_str)98 continueView Code
teacher_main.py
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 #上課時選擇班級, 查看班級學員列表 , 修改所管理的學員的成績 5 import os ,sys,pickle,time 6 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#獲取相對路徑轉為絕對路徑賦于變量 7 sys.path.append(BASE_DIR)#增加環境變量 8 from core.class_main import Teacher 9 from core.func_main import teacher_char_l 10 from core.func_main import teacher_char_class 11 from core.func_main import teacher_char_class_students 12 from core.func_main import show_teach_info 13 from cfg import config 14 from core import log_file 15 def teach_log():#講師運行函數 16 while True: 17 print('講師界面'.center(60,'=')) 18 print('按q/Q退出<<<
本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴
本文系統來源:php中文網
總結
以上是生活随笔為你收集整理的python123注册需要输入真实姓名和学校吗_python-----作业完成--学校选课系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猜开头成语有哪些?
- 下一篇: Java如何清除日期_Java中关于日期