1.通讯录:保存联系人的信息,提供增加、删除、查询和修改联系人的功能
2.使用Python的数据结构——字典的形式来保存联系人的信息:姓名 电话 邮件 地址 生日
通讯录中所有联系人的信息可以写入文件保存,当然也可以从文件中读取
3.只是巩固近两天学习的基本知识,程序诚然后很多不完善的地方,随着后续学习的深入,逐渐更新
import pickle # Python的标准模块,可以将纯Python对象存储在文件中
class Contact:
""" 联系人类,保存联系人的信息:包括了姓名、电话、邮件、地址和生日"""
total_amount = 0 # 类变量,用于记录当前通讯录的总人数
contacts_dict = {} # 创建空的联系人字典,字典以键值对的形式存储信息
@classmethod
def add_contact(cls):
"""添加联系人"""
name = input("请输入添加的联系人姓名:") # input函数可以接受一个字符串作为参数,等待用户输入后将返回用户输入的文本
if name in Contact.contacts_dict: # 运算符in来检查某一键值对是否存在于字典中
print("该联系人已经存在")
else:
telephone = input("请输入13位电话号码:")
email = input("请输入邮件:")
address = input("请输入地址:")
birthday = input("请输入生日:")
label = {"tele": telephone, "email": email, "add": address, "birth": birthday}
Contact.contacts_dict[name] = label
Contact.total_amount += 1
print("添加成功,当前已有联系人{}人".format(Contact.total_amount))
@classmethod
def delete_contact(cls):
"""根据姓名删除联系人"""
name = input("请输入要删除的联系人姓名:")
if name in Contact.contacts_dict:
del Contact.contacts_dict[name] # del语句用来删除某一键值对
print(Contact.contacts_dict)
Contact.total_amount -= 1
print("删除成功,当前已有联系人{}人".format(Contact.total_amount))
else:
print("{}人不在通讯录中".format(name))
@classmethod
def search_contact(cls):
"""根据姓名搜索联系人"""
name = input("请输入要搜索的联系人姓名:")
if name in Contact.contacts_dict:
print(Contact.contacts_dict[name])
else:
print("{}人不在通讯录中".format(name))
@classmethod
def modify_contact(cls):
"""修改联系人信息,注意,由于name是字典的键,所以name的值不可以修改"""
name = input("请输入要修改的联系人姓名:")
if name in Contact.contacts_dict:
print("修改前:")
print(Contact.contacts_dict[name])
modify_tele = input("请输入修改后的电话")
modify_email = input("请输入修改后的邮件")
modify_address = input("请输入修改后的地址")
modify_birth = input("请输入修改后的生日")
modify_label = {"tele": modify_tele, "email": modify_email, "add": modify_address, "birth": modify_birth}
Contact.contacts_dict[name] = modify_label
print("修改后:")
print(Contact.contacts_dict[name])
else:
print("{}人不在通讯录中".format(name))
@classmethod
def write(cls):
"""将通讯录写入文件"""
# 写入的方式打开文件
f = open('contact.txt', 'wb')
pickle.dump(Contact.contacts_dict, f)
# 关闭文件
f.close()
@classmethod
def read(cls):
file = 'contact.txt'
try:
# 读的方式打开文件
f = open(file, 'rb')
# 拆封
Contact.contacts_dict = pickle.load(f)
print("已经保存联系人{}位".format(len(Contact.contacts_dict)))
Contact.total_amount += len(Contact.contacts_dict)
print(Contact.contacts_dict)
# 关闭文件
f.close()
except EOFError:
print("尚未保存联系人")
except FileNotFoundError:
f.close()
def contact_menu():
print("欢迎来到Leaf通讯录,系统提供以下功能:"
"1:添加"
"2:删除"
"3:修改"
"4:搜索"
"5:退出")
contact_person = Contact()
contact_person.read()
while True:
try:
contact_menu()
choice = int(input("请选择功能:输入对应的数字"))
if choice == 1: # 添加
contact_person.add_contact()
elif choice == 2: # 删除
contact_person.delete_contact()
elif choice == 3: # 修改
contact_person.modify_contact()
elif choice == 4: # 搜索
contact_person.search_contact()
elif choice == 5: # 退出
contact_person.write() # 字典中数据重写写到文件中
break
else:
print("输入不合法,请重新输入")
except ValueError:
print("请输入相应的数字")
4.增加
5.删除
6.修改
7.搜索