Python 实例:手机通讯录(使用text文本记录数据)

在最原始的通讯录的基础之上进行了改进
使用了text文本记录数据
之后打算再研究一下用tkinter怎么写出有界面的通讯录(还是用text文本记录数据),然后再考虑一下用pymysql数据库记录数据,单纯只是完成一下期末老师布置的作业····
上篇的通讯录Python 最简单的实例:手机通讯录

Python 实例:手机通讯录(使用text文本记录数据)_第1张图片代码直接复制粘贴就可以使用了

import sys
import json
import os

class TelephoneBook:
    def show_menu(self):  # 用于界面展示
        print("*" * 20)
        print("欢迎使用[通讯录] V1.0")
        print("1.添加联系人")
        print("2.查看通讯录")
        print("3.删除联系人")
        print("4.修改联系人")
        print("5.查找联系人")
        print("6.退出")
        print("*" * 20)

    # 1-添加联系人
    def add_info(self):
        name_str = input("请输入姓名:")
        phone_num = input("请输入手机号:")
        mail_adr = input("请输入邮箱:")
        adr_str = input("请输入地址:")
        # 将数据封装到字典中
        card_dict = {"姓名": name_str, "手机号": phone_num,
                      "邮箱": mail_adr,"地址": adr_str}
        f = open("通讯录.txt", mode='a+', encoding='utf-8')

        # 将字典转换为str,然后再使用write()写入到通讯录的文本文件中
        f.write(str(card_dict) + '\n')
        f.close()
        print(f"成功添加{name_str}为联系人")

    # 2-显示所有联系人信息
    def show_info(self):
        file = open("通讯录.txt", mode='r', encoding='utf-8')
        # 如果通讯录.txt文件不为空时,执行下面代码
        if len(file.read()) != 0:
            # 保证每次从开始位置读取
            file.seek(0, 0)

            # 读取通讯录.txt文件中的内容
            file_data = file.read()

            # 对字符串进行分隔
            split_info = file_data.split('\n')

            # 删除多余的字符串
            split_info.remove(split_info[len(split_info) - 1])

            name_li = []       # 用于存储联系人姓名的列表
            all_info_li = []   # 用于存储所有信息的列表

            for i in split_info:
                # 将单引号替换为双引号
                dict_info = json.loads(i.replace("\'", '\"'))

                all_info_li.append(dict_info)

                # 获取所有联系人的姓名
                name_li.append(dict_info['姓名'])


            for person_info in all_info_li:
                print('--*' * 17)
                print(person_info)
                print('--*' * 17+'\n')

        else:
            print("通讯录为空")

    # 3-删除联系人信息
    def del_info(self):
            file = open("通讯录.txt", mode='r+', encoding='utf-8')
            # 如果通讯录.txt文件不为空时,执行下面代码
            if len(file.read()) != 0:
                # 保证每次从开始位置读取
                file.seek(0, 0)

                # 读取通讯录.txt文件中的内容
                file_data = file.read()

                # 对字符串进行分隔
                split_info = file_data.split('\n')

                # 删除多余的字符串
                split_info.remove(split_info[len(split_info) - 1])

                name = input("请输入要删除的联系人姓名:")

                name_li = []  # 用于存储联系人姓名的列表
                all_info_li = []  # 用于存储所有信息的列表

                for i in split_info:
                    # 将单引号替换为双引号
                    dict_info = json.loads(i.replace("\'", '\"'))

                    all_info_li.append(dict_info)

                    # 获取所有联系人的姓名
                    name_li.append(dict_info['姓名'])

                if name in name_li:
                    通讯录_copy = open('通讯录_copy.txt', mode='w', encoding="utf-8")
                    for person_info in all_info_li:
                        if name not in str(person_info):
                            通讯录_copy.write(str(person_info)+'\n')

                    通讯录_copy.close()
                    file.close()
                    os.rename('通讯录.txt', '通讯录_del.txt')
                    os.rename('通讯录_copy.txt', '通讯录.txt')
                    os.remove('通讯录_del.txt')
                    print('删除成功!')
                else:
                    print('联系人不存在')
            else:
                print("通讯录为空")

    # 4-更新联系人信息
    def update_info(self):

        file = open("通讯录.txt", mode='r+', encoding='utf-8')
        # 如果通讯录.txt文件不为空时,执行下面代码
        if len(file.read()) != 0:
            # 保证每次从开始位置读取
            file.seek(0, 0)

            # 读取通讯录.txt文件中的内容
            file_data = file.read()

            # 对字符串进行分隔
            split_info = file_data.split('\n')

            # 删除多余的字符串
            split_info.remove(split_info[len(split_info) - 1])

            name = input("请输入要更新的联系人姓名:")

            name_li = []  # 用于存储联系人姓名的列表
            all_info_li = []  # 用于存储所有信息的列表

            for i in split_info:
                # 将单引号替换为双引号
                dict_info = json.loads(i.replace("\'", '\"'))

                all_info_li.append(dict_info)

                # 获取所有联系人的姓名
                name_li.append(dict_info['姓名'])

            if name in name_li:
                通讯录_copy = open('通讯录_copy.txt', mode='w', encoding="utf-8")

                name_new = input("请输入新的姓名:")
                phone_new = input("请输入新的手机号:")
                mail_new = input("请输入新的邮箱:")
                adr_new = input("请输入新的地址:")

                # 将数据封装到字典中
                card_dict = {"姓名": name_new, "手机号": phone_new,
                             "邮箱": mail_new, "地址": adr_new}

                for person_info in all_info_li:
                    if name in str(person_info):
                        person_info = str(card_dict)
                    通讯录_copy.write(str(person_info) + '\n')

                通讯录_copy.close()
                file.close()
                os.rename('通讯录.txt', '通讯录_del.txt')
                os.rename('通讯录_copy.txt', '通讯录.txt')
                os.remove('通讯录_del.txt')
                print('更新成功!')
            else:
                print('联系人不存在')
        else:
                print("通讯录为空")

    # 5-查找相关联系人信息
    def find_info(self):
        file = open("通讯录.txt", mode='r', encoding='utf-8')
        # 如果通讯录.txt文件不为空时,执行下面代码
        if len(file.read()) != 0:
            # 保证每次从开始位置读取
            file.seek(0, 0)

            # 读取通讯录.txt文件中的内容
            file_data = file.read()

            # 对字符串进行分隔
            split_info = file_data.split('\n')

            # 删除多余的字符串
            split_info.remove(split_info[len(split_info) - 1])
            name = input("请输入要查询的姓名:")
            name_li = []       # 用于存储联系人姓名的列表
            all_info_li = []   # 用于存储所有信息的列表

            for i in split_info:
                # 将单引号替换为双引号
                dict_info = json.loads(i.replace("\'", '\"'))

                all_info_li.append(dict_info)

                # 获取所有联系人的姓名
                name_li.append(dict_info['姓名'])

            if name in name_li:
                for person_info in all_info_li:
                    for title_key, name_value in person_info.items():
                        if name_value == name:#找到匹配的名字并输出相关信息
                            for title, info_value in person_info.items():
                                print(title + ":" + info_value)
            else:
                print('联系人不存在')
        else:
            print("通讯录为空")

    # 主函数
    def main(self):
        while True:
            self.show_menu()
            action_str = input("请选择操作功能:")  # 判断用户输入的功能指令
            if action_str.isdigit() is True:
                if int(action_str) == 1:
                    self.add_info()
                elif int(action_str) == 2:
                    self.show_info()
                elif int(action_str) == 3:
                    self.del_info()
                elif int(action_str) == 4:
                    self.update_info()
                elif int(action_str) == 5:
                    self.find_info()
                elif int(action_str) == 6:
                    sys.exit()
            else:
                print('请输入正确的指令')

    #执行主程序
if __name__ == '__main__':
    tb = TelephoneBook()
    tb.main()

你可能感兴趣的:(作业,python)