Python入门(二)使用Python实现简单的通讯录(1.0版本)

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.修改

扫描二维码关注公众号,回复: 2947639 查看本文章

7.搜索

猜你喜欢

转载自blog.csdn.net/shujian_tianya/article/details/81252032