이 글은 주로 간단한 Python 배경 관리 프로그램의 구현 방법을 자세히 소개하며, 관심 있는 친구들이 참고할 수 있습니다.
1. 작업 요구 사항
2. 흐름도
3. 소스코드와 구체적인 아이디어
import shutil import os import sys USER_LOGIN = {'is_login': False} def outer(func): #装饰器,若没有登陆则输出“请登陆” def inner(*args, **kwargs): if USER_LOGIN['is_login']: r = func(*args, **kwargs) return r else: print("请登陆") return inner def outer1(func): #装饰器,若不是管理员则输出“权限不足” def inner1(*args, **kwargs): if USER_LOGIN['user_type'] == '2': r = func(*args, **kwargs) return r else: print("不是管理员,权限不足") return inner1 @outer def change_pwd(changed_user, changed_pwd, type_user): #修改密码 if type_user == '1': print("欢迎%s修改密码".center(50, '-') % USER_LOGIN['current_user']) with open('regist', 'r', encoding='utf-8') as f1, open('regist_new', 'w', encoding='utf-8') as f2: for line in f1: read_list = line.strip().split('|') if read_list[0] == changed_user: read_list[1] = changed_pwd f2.write('|'.join(read_list) + '\n') continue f2.write(line) shutil.move('regist', 'regist_bak') #把regist文件复制到regist_bak文件中去 os.rename('regist_new', 'regist') #再将regist_new改名为regist 妙妙妙! else: print("没有权限修改管理员密码") @outer def look_information(): #查看本用户信息 print("欢迎%s查看信息".center(50, '-') % USER_LOGIN['current_user']) with open('regist', 'r+', encoding='utf-8') as f: for line in f: read_list = line.strip().split('|') if read_list[0] == USER_LOGIN['current_user']: print("用户名:%s" % read_list[0]) print("密码:%s" % read_list[1]) print("邮箱:%s" % read_list[2]) print("电话:%s" % read_list[3]) def login(user, pwd): #登陆 with open('regist', 'r+', encoding='utf-8') as f: for line in f: read_list = line.strip().split('|') if read_list[0] == user and read_list[1] == pwd: #若用户存在 USER_LOGIN['is_login'] = True USER_LOGIN['current_user'] = user USER_LOGIN['user_type'] = read_list[-1] print("欢迎%s登陆".center(50, '-') % USER_LOGIN['current_user']) break if not USER_LOGIN['is_login']: #若用户还没注册 print("用户不存在,请注册") def register(reg_user, reg_pwd, reg_email, reg_phone): #注册 register_list = [] register_list.append(reg_user) #将用户信息加入列表 register_list.append(reg_pwd) register_list.append(reg_email) register_list.append(reg_phone) register_list.append('1') with open('regist', 'a', encoding='utf-8') as f: #将用户信息写入文件 li = '|'.join(register_list) f.write(li + '\n') print("注册/添加信息:", li) def delete_func(dele_user, type_user): #删除普通用户 if type_user == '1': #若删除的是普通用户 exit_flag = False with open('regist', 'r+', encoding='utf-8') as f1, open('regist_new', 'w', encoding='utf-8') as f2: for line in f1: ret_list = line.strip().split('|') if ret_list[0] == dele_user: exit_flag = True #标志位原本设为False,当找到相应用户删除后,标志位设为True print("普通用户删除成功") continue f2.write(line) shutil.move('regist', 'regist_bak') os.rename('regist_new', 'regist') if not exit_flag: print("要删除普通用户不存在") elif type_user == '2': #若删除的是管理员用户 print("没有权限删除管理员帐号") def upper_level(upper_user): #升级为管理员 with open('regist', 'r+', encoding='utf-8') as f1, open('regist_new', 'w', encoding='utf-8') as f2: for line in f1: li = line.strip().split('|') if li[0] == upper_user: li[-1] = '2' print("%s已成为管理员" % upper_user) f2.write('|'.join(li) + '\n') continue f2.write(line) shutil.move('regist', 'regist_bak') os.rename('regist_new', 'regist') def search(search_info): #简单搜索 with open('regist', 'r+', encoding='utf-8') as f: for line in f: ret_list = line.strip().split('|') if search_info in ret_list: print(ret_list) def get_usertype(user): #通地用户名获得用户类型,返回1或2 with open('regist', 'r+', encoding='utf-8') as f: for line in f: li = line.strip().split('|') if li[0] == user: return li[-1] #返回帐号的类型 1或2 @outer1 def admin_user(): #管理员调用 num = input("请选择:1.修改密码;2.查看本用户信息;3.修改普通用户密码;" "4.删除/添加普通用户;5.权限管理;6.关键字搜索普通用户信息;7.退出:") if num == '1': new_pwd = input("请输入新的密码:") change_pwd(new_pwd) elif num == '2': look_information() elif num == '3': user_changed = input("请输入修改密码的用户名:") type_user = get_usertype(user_changed) new_pwd = input("请输入新的密码:") change_pwd(user_changed, new_pwd, type_user) elif num == '4': add_or_dele = input("1.删除普通用户;2.添加普通用户") if add_or_dele == '1': delete_username = input("请输入要删除普通用户的用户名:") type_user = get_usertype(delete_username) delete_func(delete_username, type_user) elif add_or_dele == '2': regi_username = input("请输入注册用户名:") regi_pwd = input("请输入注册密码:") regi_email = input("请输入邮箱:") regi_phone = input("请输入电话:") register(regi_username, regi_pwd, regi_email, regi_phone) elif num == '5': upper_user = input("请输入升级为管理员的普通用户名:") upper_level(upper_user) elif num == '6': search_information = input("请输入要查找的关键字:") search(search_information) elif num == '7': sys.exit() def main(): while True: choice = input("请选择:1.登陆;2.注册;3.修改密码;4.查看信息;5.后台管理;6.退出:") if choice == '1': username = input("请输入用名名:") password = input("请输入密码:") login(username, password) elif choice == '2': regi_username = input("请输入注册用户名:") regi_pwd = input("请输入注册密码:") regi_email = input("请输入邮箱:") regi_phone = input("请输入电话:") register(regi_username, regi_pwd,regi_email,regi_phone) print("注册成功".center(50, '*')) elif choice == '3': new_pwd = input("请输入新的密码:") current_user = USER_LOGIN['current_user'] change_pwd(current_user, new_pwd) print("修改密码成功,请重新登陆".center(50, '-')) sys.exit() elif choice == '4': look_information() elif choice == '5': admin_user() elif choice == '6': sys.exit() main()편의상 펼쳐진 코드를 올려드립니다
@outer1 def admin_user(): #管理员调用 num = input("请选择:1.修改密码;2.查看本用户信息;3.修改普通用户密码;" "4.删除/添加普通用户;5.权限管理;6.关键字搜索普通用户信息;7.退出:") if num == '1': new_pwd = input("请输入新的密码:") change_pwd(new_pwd) elif num == '2': look_information() elif num == '3': user_changed = input("请输入修改密码的用户名:") type_user = get_usertype(user_changed) new_pwd = input("请输入新的密码:") change_pwd(user_changed, new_pwd, type_user) elif num == '4': add_or_dele = input("1.删除普通用户;2.添加普通用户") if add_or_dele == '1': delete_username = input("请输入要删除普通用户的用户名:") type_user = get_usertype(delete_username) delete_func(delete_username, type_user) elif add_or_dele == '2': regi_username = input("请输入注册用户名:") regi_pwd = input("请输入注册密码:") regi_email = input("请输入邮箱:") regi_phone = input("请输入电话:") register(regi_username, regi_pwd, regi_email, regi_phone) elif num == '5': upper_user = input("请输入升级为管理员的普通用户名:") upper_level(upper_user) elif num == '6': search_information = input("请输入要查找的关键字:") search(search_information) elif num == '7': sys.exit() def main(): while True: choice = input("请选择:1.登陆;2.注册;3.修改密码;4.查看信息;5.后台管理;6.退出:") if choice == '1': username = input("请输入用名名:") password = input("请输入密码:") login(username, password) elif choice == '2': regi_username = input("请输入注册用户名:") regi_pwd = input("请输入注册密码:") regi_email = input("请输入邮箱:") regi_phone = input("请输入电话:") register(regi_username, regi_pwd,regi_email,regi_phone) print("注册成功".center(50, '*')) elif choice == '3': new_pwd = input("请输入新的密码:") current_user = USER_LOGIN['current_user'] change_pwd(current_user, new_pwd) print("修改密码成功,请重新登陆".center(50, '-')) sys.exit() elif choice == '4': look_information() elif choice == '5': admin_user() elif choice == '6': sys.exit() main()
4. 함정 요약
1. 비밀번호는 어떻게 변경하나요? 그때 저는 혼란스러웠어요. f.write(xx)를 사용하면 파일 끝에 직접 기록되기 때문입니다. 그래서 그냥 마지막에 쓰자고 생각했어요. 근데 비밀번호 변경 기록을 마지막 줄에 추가하면 원래 비밀번호는 어떻게 삭제할 수 있나요? 문제가 하나 더 있습니다.shutil.move('regist', 'regist_bak') #把regist文件复制到regist_bak文件中去 os.rename('regist_new', 'regist') #再将regist_new改名为regist 妙妙妙!2. 사용자 user_type을 수정하는 방법(1을 2로 변경)
new_str = line.replace(read_list[1], selected_pwd) 처음에는 사용했는데 나중에 버그가 발생했어요!
예:
사용자 이름과 비밀번호가 동일한 경우 비밀번호가 변경되면 비밀번호도 변경됩니다. 그뿐만 아니라, user_type을 변경하면 replacement() 메소드를 사용하여 사용자 이름 등도 수정되는 것으로 나타난다. 그 때 나는 또 고민에 빠졌다. 이것은 비과학적입니다!
나중에
replace()의 소스 코드를 주의 깊게 살펴본 결과 내가 틀렸다는 것을 알게 되었습니다. Python의 replacement() 메소드를 통해서도 보실 수 있습니다
전역 변수를 남용한 것을 발견했습니다
USER_LOGIN['user_type'] = '1' register_list.append(USER_LOGIN['user_type'])여기에서 다시 할당한 것으로 나타났습니다. USER_LOGIN['user_type'] = '1'나중에 이런 문제를 해결하기 위해 get_user_type() 메소드를 작성했습니다
위 내용은 간단히 Python 배경 관리 프로그램을 만들어 보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!