Python实现命令行通讯录实例教程


Posted in Python onAugust 18, 2016

1、实现目标

编写一个命令行通讯录程序,可以添加、查询、删除通讯录好友及电话

2、实现方法

创建一个类来表示一个人的信息。使用字典存储每个人的对象,名字作为键。
使用pickle模块永久地把这些对象存储下来。
使用字典内建的方法添加、删除修改人员信息。

3、思维导图

Python实现命令行通讯录实例教程

4、编写伪代码

# 1.创建字典用来存储通讯录信息
# 2.创建人员类,包含姓名、关系、电话三个属性
# 3.创建操作类,包含增加、查询、删除人员,退出,保存并退出五个方法
# 4.程序运行
# 5.判断通讯录文件是否存在
# 6.如果存在,将文件读取到personDictionary字典中
# 7.如果不存在,提示并创建
# 8.while循环等待读取指令
  # 9.如果指令为addperson,添加通讯录人员
  # 10.如果指令为delperson,删除通讯录人员
  # 11.如果指令为search,查找通讯录人员
  # 12.如果指令为quit,不保存退出程序
  # 13.如果指令为sq,保存更改并退出程序

5、根据伪代码编写代码

import pickle as p
import os

# 1.创建字典用来存储通讯录信息
personDictionary= {'name':{'relationship':'','tel':''}}
relationshipList=['家人','朋友','同事']

# 2.创建人员类,包含姓名、关系、电话三个属性
class Person:
  def __init__(self,name,relationship= relationshipList[1],tel='None'):
    personDictionary[name]= {'relationship':relationship,'tel':tel}
# 3.创建操作类,包含增加、查询、删除人员,退出,保存并退出五个方法
class Operation:
  def Addperson():
    addname= input('请输入姓名:')
    addrelationship= int(input('请选择分组(0:家人,1:朋友,2:同事):'))
    addtel= input('请输入电话:')
    Person(addname,relationshipList[addrelationship],addtel)
  def Delperson():
    name= input('请输入要删除的联系人姓名:')
    del personDictionary[name]
  def Search():
    name= input('请输入要查找的联系人的姓名:')
    if name in personDictionary:
      print('姓名:%s,关系:%s,电话:%s' %(name,personDictionary[name]['relationship'],personDictionary[name]['tel']))
    else:
      print('联系人不存在。')
  def Quit():
    running= False
  def SaveQuit():
    f= open(addressbookFile,'wb')
    p.dump(personDictionary,f)
    f.close()
    running= False
# 4.程序运行
running= True
# 5.判断通讯录文件是否存在
addressbookFile= 'addressbook.data'
# 6.如果存在,将文件读取到personDictionary字典中
if os.path.exists(addressbookFile):
  f= open(addressbookFile,'rb')  
  personDictionary= p.load(f)
# 7.如果不存在,提示并创建
else:
  jCommand= input('未找到通讯录文件,是否创建?yes/no ')
  if jCommand== 'yes':
    f= open(addressbookFile,'wb')
    p.dump(personDictionary,f)
    f.close()
  elif jCommand== 'no':
    running= False
# 8.while循环等待读取指令
while running:
  command= input('请输入指令:')
  # 9.如果指令为addperson,添加通讯录人员
  if command== 'addperson':
    Operation.Addperson()
    continue
  # 10.如果指令为delperson,删除通讯录人员
  elif command== 'delperson':
    Operation.Delperson()
    continue
  # 11.如果指令为search,查找通讯录人员
  elif command== 'search':
    Operation.Search()
    continue
  # 12.如果指令为quit,不保存退出程序
  elif command== 'quit':
    Operation.Quit()
    break
  # 13.如果指令为sq,保存更改并退出程序
  elif command== 'sq':
    Operation.SaveQuit()
    break
  else:
    print('未找到指令!')
    continue

6、演示

Python3 addressbook.py 
请输入指令:search
请输入要查找的联系人的姓名:zhangsan
联系人不存在。
请输入指令:addperson
请输入姓名:zhangsan
请选择分组(0:家人,1:朋友,2:同事):1
请输入电话:1234567
请输入指令:search
请输入要查找的联系人的姓名:zhangsan
姓名:zhangsan,关系:朋友,电话:1234567
请输入指令:sq
$ Python3 addressbook.py 
请输入指令:search
请输入要查找的联系人的姓名:zhangsan
姓名:zhangsan,关系:朋友,电话:1234567
请输入指令:addperson
请输入姓名:lisi
请选择分组(0:家人,1:朋友,2:同事):1
请输入电话:1234567
请输入指令:q
未找到指令!
请输入指令:quit
$ Python3 addressbook.py 
请输入指令:search
请输入要查找的联系人的姓名:lisi
联系人不存在。
请输入指令:search
请输入要查找的联系人的姓名:zhangsan
姓名:zhangsan,关系:朋友,电话:1234567
请输入指令:quit

总结

以上就是Python实现命令行通讯录实例教程的全部内容,如果有疑问可以留言讨论,希望本文的内容对大家学习使用python能有所帮助。

Python 相关文章推荐
Python实现二分查找算法实例
May 26 Python
python爬虫实战之爬取京东商城实例教程
Apr 24 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
浅谈python可视化包Bokeh
Feb 07 Python
Python基于pandas实现json格式转换成dataframe的方法
Jun 22 Python
使用python opencv对目录下图片进行去重的方法
Jan 12 Python
python覆盖写入,追加写入的实例
Jun 26 Python
pandas取出重复数据的方法
Jul 04 Python
Django 接收Post请求数据,并保存到数据库的实现方法
Jul 12 Python
Django REST Swagger实现指定api参数
Jul 07 Python
Python实现8种常用抽样方法
Jun 27 Python
python数字图像处理:图像简单滤波
Jun 28 Python
Python采用Django开发自己的博客系统
Sep 29 #Python
浅析Python中元祖、列表和字典的区别
Aug 17 #Python
Python+django实现简单的文件上传
Aug 17 #Python
Python Django使用forms来实现评论功能
Aug 17 #Python
小小聊天室Python代码实现
Aug 17 #Python
python如何在终端里面显示一张图片
Aug 17 #Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 #Python
You might like
一些常用的php简单命令代码集锦
2007/09/24 PHP
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
jQuery ui 1.7更新小结
2009/08/15 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
2015/04/26 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
面包屑导航详解
2017/12/07 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
[00:35]DOTA2上海特级锦标赛 MVP.Phx战队宣传片
2016/03/04 DOTA
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
python搭建微信公众平台
2016/02/09 Python
python编程实现归并排序
2017/04/14 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
银行实习生的自我评价
2013/12/09 职场文书
计算机毕业大学生求职信
2014/06/26 职场文书
家庭贫困证明
2014/09/23 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
Python基础之进程详解
2021/05/21 Python
QT与javascript交互数据的实现
2021/05/26 Javascript
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技