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爬虫工程师面试问题总结
Mar 22 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
python中join()方法介绍
Oct 11 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
python仿evething的文件搜索器实例代码
May 13 Python
Python 继承,重写,super()调用父类方法操作示例
Sep 29 Python
Python帮你识破双11的套路
Nov 11 Python
解决python对齐错误的方法
Jul 16 Python
python利用文件时间批量重命名照片和视频
Feb 09 Python
解决Pytorch中关于model.eval的问题
May 22 Python
Django框架模板用法详解
Jun 10 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 curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
jQuery 选择器理解
2010/03/16 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
JS实现QQ图片一闪一闪的效果小例子
2013/07/31 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
Python网络编程详解
2017/10/31 Python
Python WSGI的深入理解
2018/08/01 Python
解决python中无法自动补全代码的问题
2018/12/04 Python
python实现随机漫步方法和原理
2019/06/10 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
2019/06/27 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
python处理excel绘制雷达图
2019/10/18 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
德国苹果商店:MacTrade
2020/05/18 全球购物
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
行政总监岗位职责
2013/12/05 职场文书
公司业务主管岗位职责
2013/12/07 职场文书
给幼儿园老师的表扬信
2014/01/19 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
MySQL视图概念以及相关应用
2022/04/19 MySQL