員工管理系統函式封裝版與裝飾器的常見使用
阿新 • • 發佈:2021-11-20
# 1.編寫員⼯管理系統進階版 # 功能全部封裝成函式 資料全部來源於⽂件 # ⼤致功能:註冊 登入 新增員⼯ 檢視員⼯等 # 普通要求: # 新增 檢視等功能每次都必須先登入才可執⾏(認證裝飾器) # 進階要求: # ⽤戶登入⼀次之後⽆需校驗身份(全域性校驗) # 昇華超越:(後期再說) # 每個⽤戶配備⻆⾊資訊 # ⽤戶認證過程中只有管理員才可執⾏被裝飾函式 # 定義一個認證裝飾器 is_login = {'is_login':False} # 全域性校驗功能 def login_auth(func): def auth(*args,**kwargs): # 1.1 先判斷使用者是否已經登入 if is_login.get('is_login'): # 3.正常執行函式index res = func(*args, **kwargs) return res # 1.先獲取使用者的使用者名稱和密碼 print('請輸入管理員專用使用者名稱和密碼') username = input('username>>>:').strip() password = input('password>>>:').strip() # 2.校驗專屬管理員使用者名稱和密碼是否正確 if username == 'jia' and password == '123': # 3.正常執行函式index res = func(*args,**kwargs) # 4.將記錄使用者登入狀態的資料修改 is_login['is_login'] = True return res else: print('使用者名稱或密碼錯誤 無法使用管理員許可權') return auth # 1註冊資訊 def register(): print('註冊功能') username = input('username>>>:').strip() password = input('password>>>:').strip() # 4.應該先校驗使用者編號是否已存在 with open(r'a.txt', 'rt', encoding='utf8') as f: for i in f: username1, password1 = i.split('|') if username1 == username: print('使用者已存在') break # 結束for迴圈校驗 else: data = '%s|%s\n'%(username, password) with open(r'a.txt', 'at', encoding='utf8') as f: f.write(data) print('使用者%s註冊成功'%username) # 2.登入功能 def login(): print('登入功能') username = input('username>>>:').strip() password = input('password>>>:').strip() with open(r'a.txt', 'rt', encoding='utf8') as f: # 2.校驗使用者名稱和密碼是否正確 for i in f: username1, password1 = i.split('|') # print(i) if username1 == username and password1.strip() == password: print('登陸成功') break elif username == 'jia' and password == '123': is_login['is_login'] = True print('管理員身份登入成功') break else: print('使用者名稱或密碼錯誤 重新嘗試') # 3.新增員工 @login_auth def add(): print('輸入員工資訊>>>:') username = input('username>>>:').strip() password = input('password>>>:').strip() with open(r'a.txt', 'rt', encoding='utf8') as f: for i in f: username1, password1 = i.split('|') if username1 == username: print('使用者已存在') break # 結束for迴圈校驗 else: data = '%s|%s\n'%(username, password) with open(r'a.txt', 'at', encoding='utf8') as f: f.write(data) print('使用者%s新增成功'%username) # 4.檢視員工資訊 @login_auth def look(): print('檢視員工資訊') choice1 = input('輸入1查詢所有 輸入2按個人編號查詢:').strip() # 讓客戶選擇查詢範圍 if choice1 == '1': with open(r'a.txt', 'rt', encoding='utf8') as f: for i in f: print(i) elif choice1 == '2': username = input('輸入員工姓名:').strip() with open(r'a.txt', 'rt', encoding='utf8') as f: for i in f: username1, password1 = i.split('|') if username1 == username: print(i) else: print('輸入使用者資訊錯誤') while True: print(""" 1.註冊功能 2.登入功能 3.新增員工 4.檢視員工資訊 """) choice = input('請輸入功能編號>>>:').strip() # 判斷使用者輸入的編號 func_dic = { '1': register, '2': login, '3': add, '4': look, } if choice in func_dic: # 獲取功能字典的值 func_name = func_dic.get(choice) # 呼叫相印的函式 func_name() else: print('功能不存在') # 2.編寫統計函式執⾏次數裝飾器 # 任意定義⼀個函式給其新增裝飾器 # 要求:每次執⾏該函式 裝飾器⾃動記錄次數 記錄需儲存在⽂件中 # 計算執行次數的功能 def func1(name): num = 0 # 閉包中外函式中的變數指向的引用不可變 def func2(): name() nonlocal num # 使用nonlocal 訪問修改外部函式變數 num += 1 print("執行次數", num) res = '%s\n' % num # NoneNoneNoneNone with open(r'a.txt', 'at', encoding='utf8') as f: f.write(res) return func2 # 待計次方法 @func1 def index(): pass index() index() index() # 執行次數 1 # 執行次數 2 # 執行次數 3