• python函数练习——个人信息修改


    阅读目录

    1. 修改个人信息程序

    修改个人信息程序

    在一个文件里存多个人的个人信息,如以下

    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
    '% 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("33[32;1m%s33[0m" %msg)
        elif log_type == 'error':
            print("33[31;1m%s33[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
    '% 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')
    复制代码
  • 相关阅读:
    git创建版本库
    DataSet的加密解密
    在InstallShield中加密字符串,在C#中解密
    asp.net后台长时间操作时,向前台输出“请等待"信息的方法
    DataSet的加密解密(续)
    XXTEA加密算法的InstallShield 脚本实现
    c#如何监视文件或者文件夹的变化
    wpf制作毛玻璃效果按钮的代码
    WPF中用于Path的Geometry MiniLanguage
    如何在非英文环境中正确显示数字
  • 原文地址:https://www.cnblogs.com/valorchang/p/11283139.html
Copyright © 2020-2023  润新知