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采用raw_input读取输入值的方法
Aug 18 Python
python实现linux下使用xcopy的方法
Jun 28 Python
详解python的数字类型变量与其方法
Nov 20 Python
python使用opencv驱动摄像头的方法
Aug 03 Python
Python3 实现串口两进程同时读写
Jun 12 Python
python增加图像对比度的方法
Jul 12 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
python实现代码统计程序
Sep 19 Python
在Python中预先初始化列表内容和长度的实现
Nov 28 Python
Pandas 解决dataframe的一列进行向下顺移问题
Dec 27 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
Feb 15 Python
matplotlib 三维图表绘制方法简介
Sep 20 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的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
php生成EXCEL的东东
2006/10/09 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
jQuery 性能优化指南 (1)
2009/05/21 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
vue中activated的用法
2021/01/03 Vue.js
Python代码调试的几种方法总结
2015/04/15 Python
用matplotlib画等高线图详解
2017/12/14 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
华为慧通笔试题
2016/04/22 面试题
个人承诺书格式
2014/06/03 职场文书
面试感谢信范文
2015/01/22 职场文书
九华山导游词
2015/02/03 职场文书
行政撤诉申请书
2015/05/18 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
JS class语法糖的深入剖析
2022/07/07 Javascript
Go gorilla/sessions库安装使用
2022/08/14 Golang
Java Redisson多策略注解限流
2022/09/23 Java/Android