作业内容:
用户管理程序:
普通用户:登录、注册、修改密码、查看本用户信息
管理员用户:登录、注册、修改密码、查看本用户信息,
删除、添加普通用户
修改普通用户密码
查看所有普通用户,按照指定关键字搜索用户信息,
提高普通用户权限
要求:
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|123@123|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')