#!/usr/bin/env python # -*- coding: utf-8 -*- # __author__=="HAI" import re from time import sleep import json import os class Telephone_Book(object): """ :param 通讯管理系统 """ def __init__(self): astr = '通讯录管理系统[0m'.center(120, '=') self.phone_book = [] self.__tuple_list = [('增加姓名,手机号,地址',), ('删除姓名',), ('修改手机',), ('修改地址',), ('查询所有用户',), ('根据姓名查找手机号',)] print(astr) self.__tuple = set(self.__tuple_list) print('输入Q退出'.center(123, '-')) # 0: '增加姓名,手机号,地址', 1: '删除姓名', 2: '修改手机', 3: '查询所有用户', 4: '根据姓名查找手机号' def __name_author(self): author = {'author_於': {'电话': '13******888', '地址': '北京'}} authorlist = [] for itme_s in self.phone_book: for key in itme_s.keys(): authorlist.append(key) if author.keys() not in authorlist: self.phone_book.insert(0, author) def start_fn(self): """ 启动主函数 """ if 'telphone book' not in os.listdir(): os.mkdir('telphone book') if os.path.exists(r'telphone book\phone_book.josn'): self.phone_book = self.__dir_reade() else: self.__dir_write() while True: self.__show_directory() choice = input('请输入你的选择:') if choice == 'q' or choice == 'Q': self.__name_author() self.__dir_write() exit('资料已保存'.center(123, '-')) self.__queary_main(choice) def __queary_main(self, choice): """ 查询分支主函数 :param choice: """ choice = str(choice) if choice.isdigit(): choice = int(choice) adict = {} if (choice < len(self.__tuple)) and (choice >= 0): for aindex, avalues in enumerate(self.__tuple): adict[aindex] = avalues[0] if choice < len(self.__tuple): if adict[choice] == '增加姓名,手机号,地址': self.__add_name() elif adict[choice] == '删除姓名': self.__del_name() elif adict[choice] == '修改手机': self.__change_phone_number() elif adict[choice] == '查询所有用户': self.__add_color() self.__query_all_users() elif adict[choice] == '根据姓名查找手机号': self.__look_for_tel() elif adict[choice] == '修改地址': self.__change_addres() elif adict[choice] == '': pass elif adict[choice] == '': pass else: print('你输入的数字不对请你重新选择Q为退出') else: print('你输入的数字不对请你重新选择:Q为退出程序') def __change_and_del_main(self, litdex, adict, name, flage=1): """ 修改地址 修改电话 删除姓名 :param litdex: list :param adict: dict :param name: string :param flage: Bool """ print('{}\n{}'.format(litdex, adict)) number = input('》》》:') if number.isdigit(): number = int(number) if number in litdex: if flage == 1: del self.phone_book[number] self.__add_color(False) elif flage == 2: phone_nmber = input('请输入你的新电话') phone_nmber = self.__isdigt_n_b(phone_nmber) self.phone_book[number][name]['电话'] = phone_nmber self.__add_color(False) else: new_addres = input('请输入你的新地址') self.phone_book[number][name]['地址'] = new_addres self.__add_color(False) print('修改成功') else: print('输入的编号错误') else: print('输入error') def __change_addres(self): adict, row, name, litdex = self.__name_judge(flage=False) if row > 0: print('你查询的人的名字 [{1}]' '有{0}个'.format(row, name), '请根据编号输入修改想要修改的地址', sep='\n') self.__change_and_del_main(litdex, adict, name, flage=3) else: print('你查询的人的名字 [{1}]为{0}个'.format(row, name)) def __change_phone_number(self): """ 修改手机号码 """ adict, row, name, litdex = self.__name_judge(flage=False) if row > 0: print('你查询的人的名字 [{1}]' '有{0}个'.format(row, name), '请根据编号输入修改想要修改的电话号码', sep='\n') self.__change_and_del_main(litdex, adict, name, flage=2) else: print('你查询的人的名字 [{1}]为{0}个'.format(row, name)) def __add_name(self): """ 增加联系人 """ while True: adict = {} bdict = {} name = input('请输入你的姓名:') if re.match(r'[^A-Za-z0-9_]{2,6}', name): phone = input('请输入你的电话号码:') phone = self.__isdigt_n_b(phone) adders = input('请输入你的地址:') bdict['电话'] = phone bdict['地址'] = adders adict[name] = bdict self.phone_book.append(adict) print('修改成功') isexit = input('要继续添加姓名吗? ’Q‘ 退出') if isexit == 'q' or isexit == 'Q': break else: print('名字错误') def __del_name(self): """ 姓名删除 """ adict, row, name, litdex = self.__name_judge(flage=False) if row > 0: print('你查询的人的名字 [{1}]' '有{0}个'.format(row, name), '请根据编号输入想要删除的名字', sep='\n') self.__change_and_del_main(litdex, adict, name) else: print('你查询的人的名字 [{1}]为{0}个'.format(row, name)) def __name_judge(self, flage=True): """ 姓名搜索 :return: """ name = input('请输入姓名:') adict = {} row = 0 litdex = [] for aindex, itmes in enumerate(self.phone_book): for key_s, value_s in itmes.items(): if key_s == name: row += 1 litdex.append(aindex) if flage: adict['{}.{}'.format(row, name)] = value_s else: adict['show{}{}'.format(row, name)] = value_s return adict, row, name, litdex def __isdigt_n_b(self, phone_number): """ 电话号码长度判断 :param phone_number: """ phone_number = str(phone_number) while not len(phone_number) == 11 or not phone_number.isdigit(): phone_number = input('请输入正确的电话号码:') return phone_number def __query_all_users(self, flag=True): """ 查询所有用户 """ if flag: for all_contact in self.phone_book: for key_s in all_contact: print(key_s, end=' ') print() else: pass def __look_for_tel(self): """ 根据姓名查电话地址 :param :return: dict """ adict, row, name, litdex = self.__name_judge() self.__add_color() print('你查询的人的名字[{1}]有{0}个'.format(row, name)) print(adict) return adict def __add_color(self, flag=True): """ add_color """ if flag: alist = ['.', '查询中..', '正在玩命查找中...'] for i in alist: print('列 表 ' '显示中 请稍后{:50} '.format(i)) sleep(1) else: alist = ['.', '修改中..', '正在整理硬盘请稍后'] for i in alist: print('列 表修改中' '请稍后{:50} '.format(i)) sleep(1) def __show_directory(self, n=1): """ 显示目录 """ for aindex, avalues in enumerate(self.__tuple): print(aindex, avalues[0]) def __dir_write(self): """ 写入文件 """ with open(r'telphone book\phone_book.josn', 'w') as f: json.dump(self.phone_book, f) def __dir_reade(self): """ 阅读文件 """ with open(r'telphone book\phone_book.josn', 'r') as f: return json.load(f) if __name__ == '__main__': notptes = Telephone_Book() notptes.start_fn()
用列表字典作的通讯录
猜你喜欢
转载自blog.csdn.net/Hai_peng_yu/article/details/80642983
今日推荐
周排行