创建一个新的文本,account.txt,输入以下个人信息内容,

lanyinhua,lanyinhua,蓝银花,22,Model,PR,22
alex,123,华仔 Li,222,CEO,IT,1333
rain,rain,刘峰,27, Engineer ,IT ,133542453453
要求
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()

全部代码

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')

来源:http://www.cnblogs.com/xiao-apple36/p/8624143.html

来源:

python--个人信息修改程序的更多相关文章

  1. python 校招信息爬虫程序

    发现一个爬虫程序,正在学习中: https://github.com/lizherui/spider_python

  2. python作业员工信息表程序(第四周)

    作业需求: 1. 员工信息表程序,实现增删改查操作: 2. 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 ...

  3. linux下面升级 Python版本并修改yum属性信息

    最近需要在linux下使用python,故需要升级一下python版本,上网查询了一下相关资料,更新了一下linux下面的python环境,记录如下: linux下面升级 Python版本并修改yum ...

  4. [python]用profile协助程序性能优化

    转自:http://blog.csdn.net/gzlaiyonghao/article/details/1483728 本文最初发表于恋花蝶的博客http://blog.csdn.net/lanph ...

  5. 使用Python实现Hadoop MapReduce程序

    转自:使用Python实现Hadoop MapReduce程序 英文原文:Writing an Hadoop MapReduce Program in Python 根据上面两篇文章,下面是我在自己的 ...

  6. python学习1:程序元素和基本使用方法(跟随mooc学习)

    程序元素: 注释,缩进,变量,常量,表达式 输入,输出,分支,循环 示例程序,温度转换程序: #TempConvert.pyval=input("请输入带温度表示符号发温度值(例如:32C) ...

  7. Python编写守护进程程序

    Python编写守护进程程序思路 1. fork子进程,父进程退出通常,我们执行服务端程序的时候都会通过终端连接到服务器,成功连接后会加载shell环境,终端和shell都是进程,shell进程是终端 ...

  8. 【转】Python用数据说明程序员需要掌握的技能

    [转]Python用数据说明程序员需要掌握的技能 https://blog.csdn.net/HuangZhang_123/article/details/80497951 当下是一个大数据的时代,各 ...

  9. Python - 使用Setuptools进行程序打包

    1- Setuptools简介 通过Setuptools可以更方便的创建和发布Python包,特别是那些对其它包具有依赖性的状况: Python打包用户指南(Python Packaging User ...

随机推荐

  1. 寻找U2OS中表达的基因及其promoter并用于后续annotation

    方法1.RNA-seq得到不同表达程度基因 方法2. 直接download U2OS_gene.csv https://cancer.sanger.ac.uk/cell_lines/download ...

  2. 不平衡数据下的机器学习方法简介 imbalanced time series classification

    imbalanced time series classification http://www.vipzhuanli.com/pat/books/201510229367.5/2.html?page ...

  3. Idea导包与打包

    今天做了一个javavuser协议的性能测试,需要导入jar包,将jar包粘贴到lib下面后不知道怎么加到工程当中, 1,下面分享一下有关导包的流程: 先是在jar 右键,如图 : 选择项目结构,选择 ...

  4. spring源码解析2--容器的基本实现

    spring的主要特性是IOC,实现IOC的关键是bean,而更关键的是如何bean的管理容器,也就是BeanFactory,本文的目标是弄清楚BeanFactory具体是怎么样的存在. 先看下最简单 ...

  5. flask框架----整合Flask中的目录结构

    一.SQLAlchemy-Utils 由于sqlalchemy中没有提供choice方法,所以借助SQLAlchemy-Utils组件提供的choice方法 import datetime from ...

  6. 【转载】opencv实现人脸检测

    全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...

  7. 字符和字符串在Java中的旅程

    以下是个人对java中字符和字符串的见解,如有疏漏之处,还请不吝赐教. 下面通过一个简单的程序来说明字符和字符串在Java中的旅程. 以字符 ' 中 '为例, 它的GBK编码是2个字节:0xd6d0, ...

  8. 浅谈Vue之双向绑定

    VUE实现双向数据绑定的原理就是利用了 Object.defineProperty() 这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的.那么Object.defineP ...

  9. topcoder srm 575 div1

    problem1 link 如果$k$是先手必胜那么$f(k)=1$否则$f(k)=0$ 通过对前面小的数字的计算可以发现:(1)$f(2k+1)=0$,(2)$f(2^{2k+1})=0$,(3)其 ...

  10. ace-editor线上代码编辑器

    package.json { "name": "vue-cli", "version": "1.0.0", " ...