最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

Python实现简单的电话本功能

来源:懂视网 责编:小采 时间:2020-11-27 14:34:43
文档

Python实现简单的电话本功能

Python实现简单的电话本功能:myPhoneBook2.py #!/usr/bin/python # -*- coding: utf-8 -*- import re class PhoneBook(object): '''这是一个电话簿脚本。 该脚本能够实现 AddContact:添加联系人信息 ShowContact:查找姓名显示联系人 SaveContacts:
推荐度:
导读Python实现简单的电话本功能:myPhoneBook2.py #!/usr/bin/python # -*- coding: utf-8 -*- import re class PhoneBook(object): '''这是一个电话簿脚本。 该脚本能够实现 AddContact:添加联系人信息 ShowContact:查找姓名显示联系人 SaveContacts:

myPhoneBook2.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
class PhoneBook(object):
 '''这是一个电话簿脚本。

 该脚本能够实现
 AddContact:添加联系人信息
 ShowContact:查找姓名显示联系人
 SaveContacts:存储联系人到 TXT 文档(存储格式——姓名:号码/号码)
 LoadContacts:从 txt 文档中载入联系人
 '''
 def __init__(self):
 self.contactsDict = {}

 def AddContact(self):
 while True:
 name = raw_input('请输入姓名>>>')
 name = name.strip()
 # 姓名必须包含有效字符
 if name != '':
 break
 print '***姓名不能为空'
 
 while True:
 number = raw_input('请输入号码>>>')
 number = re.sub(r'D', '', number)
 # 删除号码中的非数字字符
 if number != '':
 break
 print '***号码只能是数字'

 cover = True #若联系人已存在,是否覆盖
 if self.contactsDict.has_key(name):
 print '***联系人已存在'
 self.ShowContact(name)
 while True:
 control = raw_input('''
输入 "c":覆盖原来号码
输入 "n":保留原来号码并存储新号码
输入 "q" 退出
>>>''')
 if control.lower() == 'n':
 cover = False
 break
 if control.lower() == 'c':
 break
 if control.lower() == 'q':
 return None
 print '***输入错误'
 
 if cover:
 self.contactsDict[name] = number
 else:
 if number in self.contactsDict[name]:
 print '***号码已经存在'
 else:
 self.contactsDict[name] = self.contactsDict[name] + '/' + number

 def ShowContact(self, name):
 print '++++++++++++++++++++++++'
 if self.contactsDict.has_key(name):
 print '【联系人信息】'
 print '【姓名: %s】' % name
 numberList = self.contactsDict[name].split('/')
 for num in range(len(numberList)):
 print '【号码%d: %s】' % (num+1, numberList[num])
 
 else:
 print '【找不到联系人%s】' % name
 print '++++++++++++++++++++++++'
 
 def DeleteNumber(self, name):
 if self.contactsDict.has_key(name):
 self.ShowContact(name)
 number = self.contactsDict[name].split('/')
 while True:
 print '''
请输入要删除号码的序号
或者输入 "a" 删除该联系人
或者输入 "q" 退出(不删除)
(若联系人号码被全部删除,该联系人也将被删除)'''
 control = raw_input('>>>')
 if control.lower() == 'q':
 break
 elif control.lower() == 'a':
 del self.contactsDict[name]
 break
 elif control.isdigit() and int(control) <= len(number):
 del number[int(control)-1]
 self.contactsDict[name] = '/'.join(number)
 break
 else:
 print '***输入有误'

 def LoadContacts(self):
 '''
 try:
 PhoneBook = open('PhoneBook.txt', 'a+')
 contacts = PhoneBook.read()
 if contacts == '':
 print '***电话簿为空'
 else:
 ContactsList = contacts.split('
')
 for contact in ContactsList:
 if not contact == '':
 contact = contact.split(':')
 name = contact[0]
 number = contact[1]
 self.contactsDict[name] = number
 finally:
 PhoneBook.close()
 '''
 self.contactsDict = {line.split(':')[0]: line.split(':')[1] for line in open('PhoneBook.txt','a+').readlines()}

 def SaveContacts(self):
 try: 
 if self.contactsDict:
 PhoneBook = open('PhoneBook.txt', 'w')
 for name, number in self.contactsDict.items():
 line = name + ':' + number
 PhoneBook.write(line)
 PhoneBook.write('
')
 
 else:
 print '***没有联系人信息'
 
 finally:
 PhoneBook.close()
 
 
if __name__ == '__main__':
 myPhoneBook = PhoneBook()
 myPhoneBook.LoadContacts()
 try:
 while True:
 raw_input('按回车键继续')
 print '''
--------------------------------
 输入 a:添加联系人
 输入 s:显示联系人信息
 输入 d:删除联系人
 输入 q:退出
--------------------------------'''
 control = raw_input('>>>')
 if control.lower() == 'a':
 myPhoneBook.AddContact()
 elif control.lower() == 's':
 name = raw_input('请输入要查找的联系人姓名
>>>')
 myPhoneBook.ShowContact(name)
 elif control.lower() == 'd':
 name = raw_input('请输入要删除的联系人姓名
>>>')
 myPhoneBook.DeleteNumber(name)
 elif control.lower() == 'q':
 break
 else:
 print '***输入有误'
 
 finally:
 myPhoneBook.SaveContacts()

花了一个下午和半个晚上写了这个简单通讯录:
哈哈,第一次写这么长的Python代码,自认为结构还是挺合理的。
代码如下:

#-*- coding:utf-8 -*- 
# file :addrList.py 
# date :2011-10-24 15:40:13 
# 设计一个基本的通讯录管理程序,使其具有添加,删除,编辑,查找等功能。 
# 要求使用C/C++,java,javascript,python中任意一种语言实现。字符界面即可。 
# 不需要有GUI(图形界面) 
import sys 
import os 
import string 
import re 
from datetime import datetime 
 
QUIT_FLAG = False 
ADDRS_LIST = "addr_list.txt" 
_addrs_dict = {} 
_addrs_count = 0 
DEBUG=2 
def info(message): 
 global DEBUG 
 if DEBUG > 0: 
 print message 
 
def debug(message): 
 global DEBUG 
 if DEBUG > 1: 
 print message 
 
def warn(message): 
 global DEBUG 
 if DEBUG > 0: 
 print message 
 
def error(message): 
 print message 
 
def help(): 
 print "用法:输入菜单中的命令即可执行相应操作!" 
 print "可用菜单命令如下:" 
 showMenu() 
 
def showMenu(): 
 print "+******************操作菜单***********************+" 
 print "|查看所有联系人(all) | 查找联系人(find) |" 
 print "|添加联系人(add) | 删除联系人(remove) |" 
 print "|编辑联系人(edit) | 保存并退出(save) |" 
 print "|使用帮助(help) | 退出但不保存(quit) |" 
 print "+_________________________________________________+" 
 
def showError(info): 
 print info 
 
 
def doSwitch(op): 
 if op == "all": 
 doAll() 
 elif op == "find": 
 doFind() 
 elif op == "add": 
 doAdd() 
 elif op == "remove": 
 doRemove() 
 elif op == "edit": 
 doEdit() 
 elif op == "save": 
 doSave() 
 elif op == "help": 
 help() 
 elif op == "quit": 
 doQuit() 
 else: 
 showError("错误:您输入的命令有误,请重新输入。需要帮助请输入help!") 
 
def verifyInput(items): 
 _flag = True 
 _rPhone = re.compile(r'1[0-9]{10}') 
 _rQQ = re.compile(r'[1-9][0-9]{4,9}') 
 if len(items[0]) > 10: 
 _flag = False 
 print "姓名太长了!" 
 if not _rPhone.match(items[1]): 
 _flag = False 
 print "手机号码格式不正确" 
 if not _rQQ.match(items[2]): 
 _flag = False 
 print "QQ号码输入有误" 
 return _flag 
 
 
def buildAddr(addr): 
 _addr={} 
 items=addr.split() 
 if len(items) < 3: 
 print "您输入的信息太少了" 
 return None 
 if not verifyInput(items): 
 return None 
 
 _addr['name']=items[0] 
 _addr['phone'] = items[1] 
 _addr['QQ'] = items[2] 
 return _addr 
 
def addAddr(addr): 
 global _addrs_count,_addrs_dict 
 _addrs_count+=1 
 _addr=buildAddr(addr) 
 if not _addr: 
 return None 
 _addrs_dict[_addrs_count]=_addr 
 
def init(): 
 if not os.path.isfile(ADDRS_LIST): 
 return None 
 
 faddr=open(ADDRS_LIST,"r") 
 for line in faddr: 
 if len(line) == 0: 
 continue 
 addAddr(line) 
 faddr.close() 
 
 
def save(): 
 global _addrs_dict 
 faddr=open(ADDRS_LIST,"w+") 
 for addr in _addrs_dict.values(): 
 faddr.write("{0}	{1}	{2}
".format(addr['name'],addr['phone'],addr['QQ'])) 
 faddr.flush() 
 faddr.close() 
 
 
def doAll(): 
 global _addrs_dict 
 if len(_addrs_dict) < 1: 
 print "联系人当中暂无记录!" 
 return None 
 printHead() 
 for key,addr in _addrs_dict.items(): 
 printAddr(key,addr) 
 
def doFind(): 
 _flag=False 
 flag1=flag2=flag3=False 
 cond=raw_input("请输入查询信息:>") 
 debug("DEBUG:{0}".format(cond)) 
 if len(cond) == 0: 
 return None 
 if cond.isdigit(): 
 flag1=findById(int(cond,10)) 
 flag2=findByPhone(cond) 
 flag3=findByQQ(cond) 
 else: 
 flag1=findByName(cond) 
 
 _flag = flag1 or flag2 or flag3 
 if not _flag: 
 print "没有查找到任何联系人!" 
 
def doAdd(): 
 line = raw_input("请依次输入联系人的姓名,手机号码,QQ号码>") 
 if len(line) == 0: 
 return None 
 addAddr(line) 
 
def existsId(_id): 
 global _addrs_dict 
 return _addrs_dict.has_key(_id) 
# if _id > _addrs_count or _id < 1: 
# return False 
# else: 
# return True 
 
def doRemove(): 
 FLAG = True 
 while FLAG: 
 key=raw_input("请输入要删除的联系人的编号(取消请输入#)") 
 if key == '#': 
 FLAG = False 
 continue 
 if not existsId(int(key,10)): 
 print "不存在您所输入编号的联系人。请确认" 
 continue 
 
 print "编号为 {0} 的联系人信息如下:".format(key) 
 printById(int(key,10)) 
 yesOrNo=raw_input("您确定要删除上述联系人吗?(y/n)") 
 if yesOrNo in "yY": 
 removeById(int(key,10)) 
 print "删除成功!" 
 yesOrNo=raw_input("您还需要继续删除联系人吗?(y/n)") 
 if not yesOrNo in "yY": 
 FLAG = False 
 
 
 
def doEdit(): 
 FLAG = True 
 while FLAG: 
 key=raw_input("请输入要编辑的联系人的编号(取消请输入#)") 
 print "DEBUG:key:{0}".format(key) 
 if key == '#': 
 FLAG = False 
 continue 
 if not existsId(int(key,10)): 
 print "不存在您所输入编号的联系人。请确认" 
 continue 
 
 print "编号为 {0} 的联系人信息如下:".format(key) 
 printById(int(key,10)) 
 updateById(int(key,10)) 
 FLAG = False 
 
 
def doSave(): 
 save() 
 doQuit() 
 
def doQuit(): 
 global QUIT_FLAG 
 QUIT_FLAG = True 
 print "正在退出……" 
# exit(0) 
 
def printHead(): 
 print "+-----+----------+---------------+---------------+" 
 print "|编号 | 姓名 | 手机号码 | QQ号码 |" 
 print "+-----+----------+---------------+---------------+" 
 
def printAddr(key,addr): 
# print "+-----+----------+---------------+---------------+" 
 print "|{0:^5}|{1:^10}|{2:^15}|{3:^15}|".format(key,addr['name'],addr['phone'],addr['QQ']) 
 print "+-----+----------+---------------+---------------+" 
 
 
 
def printById(_id): 
 global _addrs_dict 
 printHead() 
 printAddr(_id,_addrs_dict[_id]) 
 
def removeById(_id): 
 global _addrs_dict 
 _addrs_dict.pop(_id) 
 
def updateById(_id): 
 global _addrs_dict 
 _addr= _addrs_dict.get(_id) 
 
 print "请输入该联系人的新信息,相应留空则保留原有信息" 
 name=raw_input("请输入新姓名:>") 
 if len(name) > 0: 
 _addr['name']=name 
 
 phone=raw_input("请输入新手机号码:>") 
 if len(phone) > 0: 
 _addr['phone']=phone 
 
 qq=raw_input("请输入新的QQ号码:>") 
 if len(qq) > 0 : 
 _addr['QQ']=qq 
 
 _addrs_dict[_id]=_addr 
 print "更新成功!" 
 print "联系人新的信息如下:" 
 printById(_id) 
 
def findById(_id): 
 if existsId(_id): 
 printById(_id) 
 return True 
 else: 
 return False 
 
def findByField(cond,field='name'): 
 global _addrs_dict 
 _flag = False 
 for key,addr in _addrs_dict.items(): 
 if addr[field].find(cond) != -1: 
 printAddr(key,addr) 
 _flag=True 
 return _flag 
 
def findByName(name): 
 return findByField(name,'name') 
 
def findByPhone(phone): 
 return findByField(phone,'phone') 
 
def findByQQ(qq): 
 return findByField(qq,'QQ') 
 
 
 
def main(): 
 init() 
 showMenu() 
 while(not QUIT_FLAG): 
 operation=raw_input("请在此处输入菜单命令>") 
 doSwitch(operation) 
 
 
if __name__=='__main__': 
 main() 
 ## do something 
##---------------------------------------------------- 

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

Python实现简单的电话本功能

Python实现简单的电话本功能:myPhoneBook2.py #!/usr/bin/python # -*- coding: utf-8 -*- import re class PhoneBook(object): '''这是一个电话簿脚本。 该脚本能够实现 AddContact:添加联系人信息 ShowContact:查找姓名显示联系人 SaveContacts:
推荐度:
标签: 通讯录 功能 实现
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top