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')
詳細代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM