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')
详细代码

 

posted @ 2018-03-22 15:26  一只小小的寄居蟹  阅读(2670)  评论(0编辑  收藏  举报