用python写一个需要账号密码登录的能存储本地的通讯录
时间: 2024-03-26 17:39:21 浏览: 48
好的,这个任务可以分成几个步骤来完成。
首先,我们需要一个用户登录的系统。我们可以使用Python内置的`getpass`模块来获取用户输入的密码,并使用`hashlib`模块对密码进行加密存储。这样即使数据被盗,也无法轻易地获取到用户的密码。
```python
import getpass
import hashlib
def login():
# 读取用户信息
with open('users.txt', 'r') as f:
users = f.readlines()
# 获取用户名和密码
username = input('请输入用户名:')
password = getpass.getpass('请输入密码:')
# 验证用户信息
for user in users:
user_info = user.strip().split(',')
if username == user_info[0]:
if hashlib.sha256(password.encode()).hexdigest() == user_info[1]:
print('登录成功!')
return username
else:
print('密码错误!')
return None
# 用户不存在
print('用户不存在!')
return None
```
上述代码中,我们从文件中读取所有用户信息,然后获取用户输入的用户名和密码。接着,我们使用`hashlib`模块对密码进行加密,并与文件中存储的密码进行比较,来验证用户信息。如果用户名和密码都正确,则返回用户名,否则返回`None`。
接下来,我们需要一个能够存储联系人信息的数据结构。我们可以使用Python内置的`dict`类型来存储联系人姓名和电话号码。
```python
contacts = {}
```
然后,我们需要一个能够读取和保存联系人信息的函数。我们可以将联系人信息保存在以用户名命名的文件中,这样每个用户的联系人信息都相互独立,不会被其他用户看到。
```python
import os
def load_contacts(username):
filename = f'{username}.txt'
if os.path.exists(filename):
with open(filename, 'r') as f:
for line in f:
name, phone = line.strip().split(',')
contacts[name] = phone
def save_contacts(username):
filename = f'{username}.txt'
with open(filename, 'w') as f:
for name, phone in contacts.items():
f.write(f'{name},{phone}\n')
```
上述代码中,`load_contacts`函数会读取以用户名命名的文件,并将其中的联系人信息读取到`contacts`字典中。`save_contacts`函数会将`contacts`字典中的联系人信息保存到以用户名命名的文件中。
最后,我们需要一个能够添加、删除、查询联系人信息的函数。我们可以使用`input`函数获取用户输入,并根据用户的选择执行相应的操作。
```python
def add_contact():
name = input('请输入联系人姓名:')
phone = input('请输入联系人电话号码:')
contacts[name] = phone
print('联系人信息已添加!')
def delete_contact():
name = input('请输入要删除的联系人姓名:')
if name in contacts:
del contacts[name]
print('联系人信息已删除!')
else:
print('联系人不存在!')
def query_contact():
name = input('请输入要查询的联系人姓名:')
if name in contacts:
print(f'{name}的电话号码是{contacts[name]}')
else:
print('联系人不存在!')
```
最后,我们可以编写一个主函数来调用上述函数。
```python
def main():
# 用户登录
username = login()
if username is None:
return
# 加载联系人信息
load_contacts(username)
# 显示菜单
menu = '''
通讯录菜单:
1. 添加联系人
2. 删除联系人
3. 查询联系人
4. 退出
'''
while True:
print(menu)
choice = input('请输入要执行的操作:')
if choice == '1':
add_contact()
save_contacts(username)
elif choice == '2':
delete_contact()
save_contacts(username)
elif choice == '3':
query_contact()
elif choice == '4':
break
else:
print('无效操作!')
print('程序已退出!')
if __name__ == '__main__':
main()
```
上述代码中,我们首先调用`login`函数进行用户登录。如果登录成功,就调用`load_contacts`函数加载联系人信息。然后,我们显示菜单,根据用户的选择调用相应的函数。最后,我们在用户选择退出后调用`save_contacts`函数保存联系人信息,并退出程序。
这样,我们就完成了一个基本的通讯录程序,可以存储在本地,需要账号密码登录才能访问。
阅读全文