1. 程式人生 > >python自動化-作業4.使用者管理程式——A+

python自動化-作業4.使用者管理程式——A+

作業內容:

  使用者管理程式:

    普通使用者:登入、註冊、修改密碼、檢視本使用者資訊

    管理員使用者:登入、註冊、修改密碼、檢視本使用者資訊,

          刪除、新增普通使用者

          修改普通使用者密碼

          檢視所有普通使用者,按照指定關鍵字搜尋使用者資訊,

          提高普通使用者許可權

   要求:

    1.使用者資訊存檔案

    2.許可權用裝飾器

  1.0版完成時間:2108/12/8

FLOG = {'is_login':False,                           # 是否註冊標誌
'is_register':False, # 是否登入標誌 'user_info':[], # 登入使用者的性息 'line_count':0, # 所要修改的內容在檔案user_data中的行數 } temp_file = [] def login(u,p): # 登入 with open('
user_data','r+',encoding='utf-8') as f: count = 0 for i in f: count += 1 username = i.split('|')[0] password = i.split('|')[1] email = i.split('|')[2] phone = i.split('|')[3] conservator = i.split('|')[4]
if u == username and p == password: FLOG['is_login'] = True FLOG['user_info'] = [username, password, email, phone, conservator] FLOG['line_count'] = count if not FLOG.get('is_login'): print('賬號或密碼錯誤,請重新登入'.center(50,'-')) else: print('恭喜【{}】登入成功!'.format(u)) def register(u,p): # 註冊 with open('user_data','r+',encoding='utf-8') as f: for i in f: username = i.split('|')[0] if u == username: # 判斷是否有使用者名稱重複註冊 print('該賬號已被註冊'.center(50,'-')) FLOG['is_register'] = True with open('user_data', 'a+', encoding='utf-8') as f: if not FLOG.get('is_register'): in_email = input('請輸入您的郵箱:>>>').strip() in_phone = input('請輸入您的電話號碼:>>>').strip() in_conservator = input('是否為管理員(1.不是,2.是):>>>').strip() str_join = '{}|{}|{}|{}|{}|\n'.format(u,p,in_email,in_phone,in_conservator) f.write(str_join) print('註冊成功'.center(50,'-')) FLOG['is_register'] = False def outer(fun): # 是否登入裝飾器 def inner(*args,**kwargs): if FLOG.get('is_login'): r = fun(*args,**kwargs) else: print('請先登入'.center(50,'-')) while not FLOG['is_login']: in_username = input('請輸入你的使用者名稱:>>>').strip() in_password = input('請輸入您的密碼:>>>').strip() login(in_username,in_password) r = fun(*args,**kwargs) return r return inner @outer def modify_pwd(): # 修改密碼 in_password = input('請輸入您的新密碼:>>>').strip() FLOG['user_info'][1] = in_password str_join = '|'.join(FLOG['user_info'])+'|\n' temp_file = [] temp_flog = False with open('user_data','r+',encoding='utf-8') as f: count = 0 for i in f: count += 1 if FLOG.get('line_count') == count: temp_flog = True continue if temp_flog: temp_file.append(i) with open('user_data','r+',encoding='utf-8') as f: for i in range(FLOG.get('line_count')-1): f.readline() f.seek(f.tell()) f.truncate() f.write(str_join) # 在這一行中新增修改了密碼的使用者性息 for i in temp_file: f.write(i) print('修改成功!'.center(50,'-')) @outer def print_userinfo(): # 檢視本使用者性息 print('登入使用者性息'.center(100,'-')) print('使用者名稱 密碼 郵箱 電話 使用者許可權') print('{: <12}{: <12}{: <24}{: <18}{: <2}'.format(FLOG['user_info'][0],FLOG['user_info'][1],FLOG['user_info'][2],FLOG['user_info'][3],FLOG['user_info'][4])) def privilege_user(fun): # 是否為管理員裝飾器 def inner(*args,**kwargs): if FLOG['user_info'][4] == '2': r = fun(*args,**kwargs) else: print('您的許可權不夠,請以管理員許可權登入'.center(50,'-')) FLOG['is_login'] = False # 退出登入狀態 print('【{}】退出登入!'.format(FLOG['user_info'][0])) FLOG['user_info'] = [] while not FLOG['user_info'][4] == '2': in_username = input('請輸入你的使用者名稱:>>>').strip() in_password = input('請輸入您的密碼:>>>').strip() login(in_username,in_password) r = fun(*args,**kwargs) return r return inner @outer @privilege_user def del_comuser(): # 刪除普通使用者 in_user = input('請輸入您要刪除的使用者名稱:>>>') temp_is_comuser = False with open('user_data','r+',encoding='utf-8') as f: # 判斷有沒有這個使用者,判斷是否為普通使用者 for i in f: username = i.split('|')[0] privilege = i.split('|')[4] if in_user == username and privilege == '1': temp_is_comuser = True temp_file = [] temp_flog = False if temp_is_comuser: # temp_flog = True 刪除輸入的普通使用者 with open('user_data','r+',encoding='utf-8') as f: count = 0 for i in f: count += 1 username = i.split('|')[0] if in_user == username: FLOG['line_count'] = count temp_flog = True continue if temp_flog: temp_file.append(i) with open('user_data','r+',encoding='utf-8') as f: for i in range(FLOG.get('line_count')-1): f.readline() f.seek(f.tell()) f.truncate() # 清除游標之後的內容 for i in temp_file: f.write(i) print('刪除使用者成功'.center(50,'-')) else: print('使用者不存在/使用者許可權為管理員,無法刪除'.center(50,'-')) @outer @privilege_user def add_user(): # 新增使用者 in_username = input('請輸入您要新增使用者的使用者名稱:>>>').strip() in_password = input('請輸入您要新增使用者的密碼:>>>').strip() in_email = input('請輸入您要新增使用者的郵箱:>>>').strip() in_phone = input('請輸入您要新增使用者的電話號碼:>>>').strip() in_conservator = input('新增的使用者是否為管理員(1.不是,2.是):>>>').strip() str_join = '{}|{}|{}|{}|{}|\n'.format(in_username, in_password, in_email, in_phone, in_conservator) tamp_flog = False with open('user_data', 'r+', encoding='utf-8') as f: for i in f: username = i.split('|')[0] password = i.split('|')[1] if username == in_username and password == in_password: print('使用者以存在'.center(50,'-')) tamp_flog = True if not tamp_flog: with open('user_data', 'a+', encoding='utf-8') as f: f.write(str_join) print('使用者新增成功'.center(50,'-')) @outer @privilege_user def alter_comuser_pwd(): # 修改普通使用者密碼 in_user = input('請輸入您要修改使用者的使用者名稱:>>>') temp_is_comuser = False with open('user_data', 'r+', encoding='utf-8') as f: # 判斷有沒有這個使用者,判斷是否為普通使用者 count = 0 for i in f: count += 1 username = i.split('|')[0] privilege = i.split('|')[4] if in_user == username and privilege == '1': temp_is_comuser = True FLOG['line_count'] = count FLOG['user_info'] = [i.split('|')[0],i.split('|')[1],i.split('|')[2],i.split('|')[3],i.split('|')[4]] temp_file = [] temp_flog = False if temp_is_comuser: in_password = input('請輸入您的新密碼:>>>').strip() FLOG['user_info'][1] = in_password str_join = '|'.join(FLOG['user_info'])+'|\n' with open('user_data','r+',encoding='utf-8') as f: count = 0 for i in f: count += 1 if FLOG.get('line_count') == count: temp_flog = True continue if temp_flog: temp_file.append(i) with open('user_data','r+',encoding='utf-8') as f: for i in range(FLOG.get('line_count')-1): f.readline() f.seek(f.tell()) f.truncate() f.write(str_join) # 在這一行中新增修改了密碼的使用者性息 for i in temp_file: f.write(i) print('修改成功'.center(50,'-')) else: print('使用者不存在/使用者許可權為管理員,修改失敗'.center(50,'-')) @outer @privilege_user def print_all_comuser_info(): # 檢視所用普通使用者 Tamp_FLOG_user_info = FLOG['user_info'] print('所有普通使用者性息'.center(100,'-')) print('使用者名稱 密碼 郵箱 電話 使用者許可權') with open('user_data','r+',encoding='utf-8') as f: for i in f: privilege = i.split('|')[4] if privilege == '1': FLOG['user_info'] = [i.split('|')[0], i.split('|')[1], i.split('|')[2], i.split('|')[3], i.split('|')[4]] print('{: <12}{: <12}{: <24}{: <18}{: <2}'.format(FLOG['user_info'][0], FLOG['user_info'][1], FLOG['user_info'][2], FLOG['user_info'][3], FLOG['user_info'][4])) FLOG['user_info'] = Tamp_FLOG_user_info @outer @privilege_user def raise_authority(): # 提高普通使用者權利 in_user = input('請輸入普通使用者的使用者名稱:>>>') is_comuser = False temp_file = [] temp_flog = False with open('user_data','r',encoding='utf-8') as f: count = 0 for i in f: count += 1 username = i.split('|')[0] privilege = i.split('|')[4] if in_user == username and privilege == '1': # 確認有這個使用者這個使用者為普通使用者 is_comuser = True FLOG['user_info'] = [i.split('|')[0], i.split('|')[1], i.split('|')[2], i.split('|')[3], i.split('|')[4]] FLOG['line_count'] = count if is_comuser: FLOG['user_info'][4] = '2' str_join = '|'.join(FLOG['user_info'])+'|\n' with open('user_data','r+',encoding='utf-8') as f: count = 0 for i in f: count += 1 if FLOG.get('line_count') == count: temp_flog = True continue if temp_flog: temp_file.append(i) with open('user_data','r+',encoding='utf-8') as f: for i in range(FLOG.get('line_count')-1): f.readline() f.seek(f.tell()) f.truncate() f.write(str_join) # 在這一行中新增修改了密碼的使用者性息 for i in temp_file: f.write(i) print('修改成功'.center(50,'-')) else: print('沒有這個使用者'.center(50,'-')) if __name__ == '__main__': while True: print('使用者管理程式'.center(100,'-')) print('1.登入\n2.註冊\n3.修改密碼\n' '4.檢視本使用者性息\n' '5.刪除普通使用者\n' '6.新增使用者\n' '7.修改普通使用者密碼\n' '8.檢視所有普通使用者\n' '9.提高普通使用者許可權') index = input('請輸入您的選擇(注意:5-9只使用於管理員):>>>') if int(index) in range(1,10): if index == '1': # 登入 username = input('請輸入你的使用者名稱:>>>').strip() password = input('請輸入您的密碼:>>>').strip() login(username,password) if index == '2': # 註冊 username = input('請輸入你的使用者名稱:>>>').strip() password = input('請輸入您的密碼:>>>').strip() register(username,password) if index == '3': # 修改密碼 modify_pwd() if index == '4': # 檢視本使用者性息 print_userinfo() if index == '5': # 刪除普通使用者 del_comuser() if index == '6': # 新增使用者 add_user() if index == '7': # 修改普通使用者密碼 alter_comuser_pwd() if index == '8': # 檢視所用普通使用者 print_all_comuser_info() if index == '9': # 提高普通使用者許可權 raise_authority() else: print('您的輸入有誤,請重新輸入'.center(50,'-'))

user_data檔案:

ggz|123|[email protected]|18670221892|2|
ggz1|123|[email protected]|18670221892|1|
g|123|[email protected]|18670221892|2|
huawei|123|[email protected]|18670221892|1|
zhongxin|123456|[email protected]|18670221892|1|
z|123|[email protected]|18670221892|1|
lianxiang|123|[email protected]|123|1|

除錯檔案:

with open('user_data','r+',encoding='utf-8') as f:
    f.write('guo|123|[email protected]|18670221892|1|\n')
    f.write('ggz|123|[email protected]|18670221892|2|\n')
    f.write('xiaomi|123|[email protected]|18670221892|1|\n')
    f.write('meizu|123|[email protected]|18670221892|1|\n')
    f.write('huawei|123|[email protected]|18670221892|1|\n')
    f.write('zhongxin|123|[email protected]|18670221892|1|\n')