欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Python 实现简单的电话本功能

程序员文章站 2022-05-05 19:53:36
...
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" 退出\n>>>''')
        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) >>')
      if control.lower() == 'a':
        myPhoneBook.AddContact()
      elif control.lower() == 's':
        name = raw_input('请输入要查找的联系人姓名\n>>>')
        myPhoneBook.ShowContact(name)
      elif control.lower() == 'd':
        name = raw_input('请输入要删除的联系人姓名\n>>>')
        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) ") 
  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 ") 
  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 
##---------------------------------------------------- 
Python 实现简单的电话本功能

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • Python 实现简单的电话本功能
  • 专题推荐