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中的实例方法、类方法和静态方法
Feb 17 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
Python中with及contextlib的用法详解
Jun 08 Python
Python实现的生产者、消费者问题完整实例
May 30 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
Django Rest framework认证组件详细用法
Jul 25 Python
python django生成迁移文件的实例
Aug 31 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 Python
django跳转页面传参的实现
Sep 17 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
python Pexpect模块的使用
Dec 25 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
抓取YAHOO股票报价的类
2009/05/15 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
PHP读取Excel类文件
2017/05/15 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
面向对象的javascript(笔记)
2009/10/06 Javascript
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
详解Python当中的字符串和编码
2015/04/25 Python
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
简单的Python调度器Schedule详解
2019/08/30 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
职业规划书如何设计?
2014/01/09 职场文书
回门宴父母答谢词
2014/01/26 职场文书
七一讲话心得体会
2014/09/05 职场文书
学校办公室主任岗位职责
2015/04/01 职场文书
中标通知书
2015/04/17 职场文书
民事答辩状格式范文
2015/05/21 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js
MySQL sql模式设置引起的问题
2022/05/15 MySQL