Python编程--个人信息修改小程序

简介: Python编程--个人信息修改小程序

一个练习题,本人又做了一些功能的增加和完善。题目是:个人信息修改小程序。

IDE: Pycharm

OS: mac

功能需求:

1.输入管理员和密码,正确后登录系统,打印:

1. 打印个人信息
2. 修改个人信息
3. 修改密码
4. 添加个人信息

源码如下:

# 个人信息修改,查询小程序

def print_personal_info(account_dic, username):
    """
    print user info
    :param account_dic: all account's data
    :param username: username
    :return: None
    """
    person_data = account_dic[username]
    info = '''
    ------------------------
    Name:   %s
    Age:    %s
    Job:    %s
    Dept:   %s
    Phone:  %s
    -------------------------
    '''%(person_data[0],
         person_data[2],
         person_data[3],
         person_data[4],
         person_data[5],
         )

    print(info)

def save_back_to_file(account_dic):
    """
    把account_dic 转成字符串格式, 写回文件
    :param account_dic:
    :return:
    """
    with open('account.txt', mode='a', encoding='utf-8') as f:
        f.seek(0)  # 回到文件头
        f.truncate()  # 清空原文件
        for k in account_dic:
            row = ','.join(account_dic[k])
            f.write('%s\n'%row)
        f.flush()


def change_personal_info(account_dic, username):
    """
    change user info,思路如下
    1.把这个人的每个信息打印出来,让其选择改哪个字段,用户选择了的数字,正好是字段的索引,这样直接把字段找出来改掉就可以了
    2.改完后,还要把这个新数据重新写回到account.txt,由于改完后的新数据是dict类型,还需把dict转成字符串后,再写回硬盘
    :param account_dic:all account's data
    :param username:username
    :return:None
    """

    person_data = account_dic[username]
    # print('person data:', person_data)
    column_names = ['Name', 'Password', 'Age', 'Job', 'Dept', 'Phone']
    print('1. ' + person_data[0])
    for index, k in enumerate(person_data):

        if index > 1: #0 is username and 1 is password
            print('%s. %s:%s'%(index, column_names[index],k))

    choice = input('[select column id to change]:').strip()
    if choice.isdigit():
        choice = int(choice)

        if choice > 0 and choice < len(person_data):   # index不能超出列表长度边界
            column_data = person_data[choice]  # 拿到修改的数据
            print('current value>:', column_data)
            new_val = input('new value>:').strip()
            if new_val: # 不能为空
                person_data[choice] = new_val
                print(person_data)

                save_back_to_file(account_dic) # 改完写回文件
            else:
                print('不能为空....')


# 修改密码
def change_password(account_dic, username):
    """
    修改个人密码
    :param account_dic: 用户信息字典
    :param username: 用户名
    :return: None
    """
    new_password = input('new password>:').strip()
    if new_password:  # 不能为空
        account_dic[username][1] = new_password
        save_back_to_file(account_dic)  # 改完写回文件
    else:
        print('不能为空....')


def add_personal_info(account_dic, username):
    """
    增加个人信息
    :param account_dic: 用户信息字典
    :return: None
    """
    # 要添加的个人信息

    password = input('请输入密码:')
    age = input('请输入年龄:')
    position = input('请输入工作:')
    depart = input('请输入部门')
    phone = input('请输入电话:')
    info = '''
        ------------------------
        Name:       %s,
        Password:   %s,
        Age:        %s,
        Job:        %s,
        Dept:       %s,
        Phone:      %s
        -------------------------
        '''%(username, password, age, position, depart, phone)
    print(info)

    account_dic[username] = [username, password, age, position, depart, phone]
    save_back_to_file(account_dic)


# 便于查询操作,把文件变成字典
account_file = 'account.txt'
accounts = {
   }
# 把账户数据从文件里读出来,变成dict,这样后面就好查询了
with open(account_file, 'r+', encoding='utf-8') as f:
    raw_data = f.readlines()  # 读取所有的行数据,列表形式
    for line in raw_data:
        line = line.strip()
        if not line.startswith('#'):
            items = line.split(',')  # 行数据变成列表
            accounts[items[0]] = items  # 用首个元素name当作accounts字典的键,行数据列表变成值


# 主界面
menu = '''
1. 打印个人信息
2. 修改个人信息
3. 修改密码
4. 添加个人信息
'''
count = 0
while count < 3:
    username = input('Administrator:').strip()
    password = input('Password:').strip()
    if username in accounts:
        if password == accounts[username][1]:  # 字典的值的第2项是密码
            print('welcome %s'.center(50, '-') %username)
            while True:
                print(menu)
                user_choice = input('>>>').strip()
                if user_choice.isdigit():
                    user_choice = int(user_choice)
                    if user_choice == 1:
                        print_personal_info(accounts, username)
                    elif user_choice == 2:
                        change_personal_info(accounts, username)
                    elif user_choice == 3:
                        change_password(accounts, username)
                    elif user_choice == 4:
                        username = input('请输入姓名:')
                        add_personal_info(accounts, username)

                elif user_choice == 'q':
                    exit('bye.')
        else:
            print('Wrong username or password!')
    else:
        print('Username does not exist!')

    count += 1
else:
    print('too many attempts')

运行结果如下图:
image.png

相关文章
|
7天前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
7天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
7天前
|
设计模式 机器学习/深度学习 前端开发
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
|
8天前
|
数据采集 搜索推荐 C语言
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化和调试技巧,涵盖使用内置函数、列表推导式、生成器、`cProfile`、`numpy`等优化手段,以及`print`、`assert`、`pdb`和`logging`等调试方法。通过实战项目如优化排序算法和日志记录的Web爬虫,帮助你编写高效稳定的Python程序。
|
5天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
5天前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
8天前
|
数据采集 人工智能 数据挖掘
Python 编程基础与实战:从入门到精通
本文介绍Python编程语言,涵盖基础语法、进阶特性及实战项目。从变量、数据类型、运算符、控制结构到函数、列表、字典等基础知识,再到列表推导式、生成器、装饰器和面向对象编程等高级特性,逐步深入。同时,通过简单计算器和Web爬虫两个实战项目,帮助读者掌握Python的应用技巧。最后,提供进一步学习资源,助你在Python编程领域不断进步。
|
3月前
|
存储 小程序 Python
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序
### 农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序 该程序通过`lunardate`库实现公历与农历的日期转换,支持闰月和跨年处理,用户输入农历节日名称后,可准确计算距离该节日还有多少天。功能包括农历节日查询、倒计时计算等。欢迎使用! (239字符)
259 86
|
8天前
|
Python
Python 高级编程与实战:深入理解面向对象与并发编程
本文深入探讨Python的高级特性,涵盖面向对象编程(继承、多态、特殊方法、类与实例属性)、异常处理(try-except、finally)和并发编程(多线程、多进程、异步编程)。通过实战项目如聊天服务器和异步文件下载器,帮助读者掌握这些技术,编写更复杂高效的Python程序。
|
8天前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。

热门文章

最新文章