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 生成目录树及显示文件大小的代码
Jul 23 Python
浅谈Python 的枚举 Enum
Jun 12 Python
对Python中type打开文件的方式介绍
Apr 28 Python
详解多线程Django程序耗尽数据库连接的问题
Oct 08 Python
python 执行文件时额外参数获取的实例
Dec 18 Python
Python从单元素字典中获取key和value的实例
Dec 31 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
python用match()函数爬数据方法详解
Jul 23 Python
浅析使用Python搭建http服务器
Oct 27 Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
Python偏函数Partial function使用方法实例详解
Jun 17 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基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
redis 队列操作的例子(php)
2012/04/12 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
详解PHP数组赋值方法
2015/11/07 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
在centos7中分布式部署pyspider
2017/05/03 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
Pyqt5自适应布局实例
2019/12/13 Python
python re模块匹配贪婪和非贪婪模式详解
2020/02/11 Python
性能服装:HYLETE
2018/08/14 全球购物
现代化办公人员工作的自我评价
2013/10/16 职场文书
求职简历中个人的自我评价
2013/12/01 职场文书
小学信息技术教学反思
2014/02/10 职场文书
个人租房协议书
2014/04/09 职场文书
会议室标语
2014/06/21 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
安徽导游词
2015/02/12 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
海上钢琴师观后感
2015/06/03 职场文书
放飞理想主题班会
2015/08/14 职场文书
教师个人教学反思
2016/02/23 职场文书
Vue Element plus使用方法梳理
2022/12/24 Vue.js