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

相关文章
|
4月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
2月前
|
数据采集 安全 BI
用Python编程基础提升工作效率
一、文件处理整明白了,少加两小时班 (敲暖气管子)领导让整理100个Excel表?手都干抽筋儿了?Python就跟铲雪车似的,哗哗给你整利索!
88 11
|
4月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
140 28
|
4月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
4月前
|
Python
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
64 4
|
4月前
|
设计模式 机器学习/深度学习 前端开发
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
|
4月前
|
数据采集 搜索推荐 C语言
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化和调试技巧,涵盖使用内置函数、列表推导式、生成器、`cProfile`、`numpy`等优化手段,以及`print`、`assert`、`pdb`和`logging`等调试方法。通过实战项目如优化排序算法和日志记录的Web爬虫,帮助你编写高效稳定的Python程序。
|
4月前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
4月前
|
Java API Docker
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
|
4月前
|
数据采集 人工智能 数据挖掘
Python 编程基础与实战:从入门到精通
本文介绍Python编程语言,涵盖基础语法、进阶特性及实战项目。从变量、数据类型、运算符、控制结构到函数、列表、字典等基础知识,再到列表推导式、生成器、装饰器和面向对象编程等高级特性,逐步深入。同时,通过简单计算器和Web爬虫两个实战项目,帮助读者掌握Python的应用技巧。最后,提供进一步学习资源,助你在Python编程领域不断进步。

推荐镜像

更多