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中操作文件之read()方法的使用教程
May 24 Python
六个窍门助你提高Python运行效率
Jun 09 Python
Python合并两个字典的常用方法与效率比较
Jun 17 Python
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
Django 实现购物车功能的示例代码
Oct 08 Python
实例详解Python模块decimal
Jun 26 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
Aug 28 Python
Python列表倒序输出及其效率详解
Mar 04 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
Jun 04 Python
python 提取html文本的方法
May 20 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Jun 03 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中读写文件实现代码
2011/10/20 PHP
php按单词截取字符串的方法
2015/04/07 PHP
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
Python 的类、继承和多态详解
2017/07/16 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
篮球比赛口号
2014/06/10 职场文书
教务处干事工作总结
2015/08/14 职场文书
禁毒心得体会范文
2016/01/15 职场文书
使用Canvas绘制一个游戏人物属性图
2022/03/25 Javascript