python函数练习——个人信息修改
修改个人信息程序
在一个文件里存多个人的个人信息,如以下
1.输入用户名密码,正确后登录系统 ,打印
1. 修改个人信息
2. 打印个人信息
3. 修改密码
2.每个选项写一个方法
3.登录时输错3次退出程序
修改个人信息
def change_user_info(p_user): """ 修改用户信息 :param p_user: 用户名 :return: """ user_info = STAFF_INFO[p_user] for ind, val in enumerate(user_info): if ind > 1: msg = '%s, %s, %s'%(ind, COLUMN_NAME[ind], val) print_log(msg) while True: choice = input("输入要修改的列的序号").strip() if choice.isdigit(): choice = int(choice) # if choice > len(user_info) and choice < 2: if 2 < choice < len(user_info): print_log('输入要的序号不存在', 'error') else: curr_val = user_info[choice] print_log('当前值为'+curr_val) new_val = input('input new_value->').strip() user_info[choice] = new_val STAFF_INFO[p_user] = user_info save_db() msg = '%s修改成功'%COLUMN_NAME[choice] print_log(msg) break else: print_log('输入错误,请输入2-6的数字', 'error')
打印个人信息
def print_user_info(p_user): """ 打印用户信息 :param user: 用户名 :return: """ person_data = STAFF_INFO[p_user] # 使用切片把username,Password过滤掉 # 相当于深拷贝,如果数据量大,会占用大量内存空间 # person_data = person_data[COLUMN_NAME.index('Name'):] for i in range (0, COLUMN_NAME.index('Name')): person_data.pop(0) # print(person_data) info = ''' ------------------ Name: {} Age : {} Job : {} Dept: {} Phone: {} ------------------ ''' .format(*person_data) print_log(info)
修改密码
def change_user_pwd(p_user): """ 修改密码 :param p_user: :return: """ while True: pwd1 = input("输入新密码->").strip() pwd2 = input("再输一次新密码->").strip() if pwd1 == pwd2: pwd_ind = COLUMN_NAME.index('Password') # 得到密码索引 STAFF_INFO[user][pwd_ind] = pwd2 save_db() print_log('密码修改成功') break else: print_log('密码两次输入不一致','error')
用户登陆
def login_auth(username, pwd): """ 用户名密码验证 :param username: :param pwd: :return: """ if username in STAFF_INFO: if pwd == STAFF_INFO[username][1]: return True else: print_log('用户名与密码不一致','error') return False else: print_log('用户名不存在','error') return False
保存到文件
def save_db(): """ 保存到文件中 :return: """ f = open(DB_FILE, "r+", encoding='utf-8') f.seek(0) f.truncate() # 清空文件 for v_data in STAFF_INFO.values(): row_data = ','.join(v_data) f.write('%s\n'% row_data) f.close()
详细代码
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : 2018/3/21 10:33 # @Author : hyang # @File : Person_manage.py # @Software: PyCharm DB_FILE = 'account.txt' COLUMN_NAME =['Username','Password','Name','Age','Job','Dept','Phone'] MENU = ''' 1. 打印个人信息 2. 修改个人信息 3. 修改密码 ''' # 打印信息 def print_log(msg, log_type="info"): if log_type == 'info': print("\033[32;1m%s\033[0m" %msg) elif log_type == 'error': print("\033[31;1m%s\033[0m" %msg) def load_db(): """ 载入人员信息 :return: """ staff_data = {} # 构建字典空列表 #{'Username': ['username','Password','Name','Age','Job','Dept','Phone'} # for d in COLUMN_NAME: # staff_data[d] = [] with open(DB_FILE, 'r', encoding='utf-8') as f: for line in f: datas = line.split(",") # 构建员工信息字典 datas[-1] = datas[-1].strip() # 去掉回车 staff_data[datas[0]] = datas return staff_data def print_user_info(p_user): """ 打印用户信息 :param user: 用户名 :return: """ person_data = STAFF_INFO[p_user] # 使用切片把username,Password过滤掉 # 相当于深拷贝,如果数据量大,会占用大量内存空间 # person_data = person_data[COLUMN_NAME.index('Name'):] for i in range (0, COLUMN_NAME.index('Name')): person_data.pop(0) # print(person_data) info = ''' ------------------ Name: {} Age : {} Job : {} Dept: {} Phone: {} ------------------ ''' .format(*person_data) print_log(info) def save_db(): """ 保存到文件中 :return: """ f = open(DB_FILE, "r+", encoding='utf-8') f.seek(0) f.truncate() # 清空文件 for v_data in STAFF_INFO.values(): row_data = ','.join(v_data) f.write('%s\n'% row_data) f.close() def change_user_info(p_user): """ 修改用户信息 :param p_user: 用户名 :return: """ user_info = STAFF_INFO[p_user] for ind, val in enumerate(user_info): if ind > 1: msg = '%s, %s, %s'%(ind, COLUMN_NAME[ind], val) print_log(msg) while True: choice = input("输入要修改的列的序号").strip() if choice.isdigit(): choice = int(choice) # if choice > len(user_info) and choice < 2: if 2 < choice < len(user_info): print_log('输入要的序号不存在', 'error') else: curr_val = user_info[choice] print_log('当前值为'+curr_val) new_val = input('input new_value->').strip() user_info[choice] = new_val STAFF_INFO[p_user] = user_info save_db() msg = '%s修改成功'%COLUMN_NAME[choice] print_log(msg) break else: print_log('输入错误,请输入2-6的数字', 'error') def change_user_pwd(p_user): """ 修改密码 :param p_user: :return: """ while True: pwd1 = input("输入新密码->").strip() pwd2 = input("再输一次新密码->").strip() if pwd1 == pwd2: pwd_ind = COLUMN_NAME.index('Password') # 得到密码索引 STAFF_INFO[user][pwd_ind] = pwd2 save_db() print_log('密码修改成功') break else: print_log('密码两次输入不一致','error') def login_auth(username, pwd): """ 用户名密码验证 :param username: :param pwd: :return: """ if username in STAFF_INFO: if pwd == STAFF_INFO[username][1]: return True else: print_log('用户名与密码不一致','error') return False else: print_log('用户名不存在','error') return False if __name__ == '__main__': STAFF_INFO = load_db() # print(STAFF_INFO) count = 0 while count < 3: user = input('用户名:->') pwd = input('密码:->') if login_auth(user, pwd): print('welcome %s'.center(50,'-') % user) while True: # 用户停留这一层 print(MENU) user_choice = input(">>>").strip() if user_choice.isdigit(): user_choice = int(user_choice) if user_choice == 1: # 用户登录成功打印用户信息 print_user_info(user) elif user_choice == 2: change_user_info(user) elif user_choice == 3: change_user_pwd(user) elif user_choice == 'q': break else: count += 1 else: print_log("Too many attempts.", 'error')