编写一个简单的控制台通讯录
来源:互联网 发布:linux查看服务器外网ip 编辑:程序博客网 时间:2024/06/06 06:57
分两种实现,一种没有用到类,一种用到了类,后者较为复杂
# -*- coding:gbk -*-import osimport sysimport cPickle as p#判断通讯录是否存在,不在则创建通讯录if os.path.exists('contacts.dat') == False: f = file('contacts.dat','wb') #以写、二进制的方式读A信息 temp = {'total':0}#创建一个字典,保存所有信息 p.dump(temp,f)#将信息存储到文件 f.close() print "创建通讯录成功!"else: pass#添加联系人def add(): f = file('contacts.dat','rb') a = p.load(f)#下载信息 f.close() name = raw_input('请输入你要添加的联系人姓名:') if a.has_key(name):#如果已经存在该键 print '该联系人已经存在!添加失败,请更名' else: tel = raw_input('请输入电话号码:') email = raw_input('请输入邮箱:') list = [tel,email] #将每个联系人的信息存到列表中 information = {name:list}#列表存入字典中 a['total'] += 1#联系人总数加一 a.update(information)#将信息添加到元组 f = file('contacts.dat','wb') p.dump(a,f)#存储信息到文件 f.close() print '添加成功'#显示所有联系人def showall(): f = file('contacts.dat','rb') a = p.load(f) print '一共有{}个联系人.\n'.format(a['total']) print '{:<8}\t{:<15}\t{:<30}'.format('姓名','电话号码','邮箱') for key in a.keys(): if key != 'total': print "{:<8}\t{:<15}\t{:<30}".format(key,a[key][0],a[key][1]) f.close()def exit(): sys.exit()#查找def search(): f = file('contacts.dat','rb') a = p.load(f) f.close() name = raw_input('请输入需要查找的名字:') if a.has_key(name): print '{}的号码是:{}\t邮箱是{}'.format(name,a[name][0],a[name][1]) else: print '没有该信息!'#修改def mod(): f = file('contacts.dat','rb') a = p.load(f) f.close() name = raw_input('请输入需要修改的名字:') if a.has_key(name): new_tel = raw_input('请输入新的联系电话:') new_email = raw_input('请输入新的邮箱:') a[name][0] = new_tel a[name][1] = new_email f = file('contacts.dat','wb') p.dump(a,f) f.close() print '修改成功' else: print '该联系人不存在'def delete(): f = file('contacts.dat','rb') a = p.load(f) f.close() name = raw_input('请输入需要删除的名字:') if a.has_key(name): a.pop(name) a['total'] -= 1 f = file('contacts.dat','wb') p.dump(a,f) f.close() print '删除成功' else: print '联系人不存在'#主界面def menu(): print print "****************************" print " 显示菜单提示信息: *" print " 查找联系人: 1" print " 添加联系人: 2" print " 删除联系人: 3" print " 更改联系人资料: 4" print " 退出通讯录: 5" print "****************************"while True: menu() x=raw_input("请输入您的选择菜单号:") if x == '2': add() showall() continue if x == '5': print "谢谢使用!" exit() continue if x == '1': search() continue if x == '3': delete() showall() continue if x == '4': mod() showall() continue if x == '*': menu() else: print "输入的选项不存在,请重新输入!"Windows平台下
如果以“文本”方式打开文件,当读取文件的时候,系统会将所有的"/r/n"转换成"/n";当写入文件的时候,系统会将"/n"转换成"/r/n"写入。
如果以"二进制"方式打开文件,则读/写都不会进行这样的转换。
# -*- coding:gbk -*-import osimport sysimport pickle as pimport timecontacts = {'total' : 0,'':{'phone':'','email':'','type':''}}typelist = ['家人','朋友','同事']class contact: def __init__(self): if os.path.exists('contacts.dat') == False: f = file('contacts.dat','wb') p.dump(contacts,f) f.close() def show(self): print "{:<15}\t{:<8}\t{:<15}\t{:<30}\t".format('姓名', '类型', '电话', '邮箱') f = file('contacts.dat','rb') temp = p.load(f) f.close() for key in temp.keys(): if key != 'total': print "{:<15}\t{:<8}\t{:<15}\t{:<30}\t".format(key,temp[key]['type'],temp[key]['phone'],temp[key]['email'])#{}格式化输出,左对齐,字符宽度为8 def Add(self): f = file('contacts.dat','rb') temp = p.load(f) f.close() name = raw_input('请输入用户名:') if temp.has_key(name): print '已存在!请更名:' else: type = input('请输入类型:0-家人/1-朋友/2-同事') phone = raw_input('请输入电话:') email = raw_input('请输入邮箱:') info = {'phone':phone,'email':email,'type':typelist[type]} Info = {name:info} save = raw_input('确认存储?y/n') if save.lower() == 'y': temp['total'] += 1 temp.update(Info) f = file('contacts.dat', 'wb') p.dump(temp,f) f.close() print '添加成功' self.show() else: print '存储失败!' def Mod(self): f = file('contacts.dat','rb') temp = p.load(f) name = raw_input('请输入需要修改的名字:') if temp.has_key(name): type = input('请输入新的类型:0-家人/1-朋友/2-同事') phone = raw_input('请输入新的电话:') email = raw_input('请输入新的邮箱:') info = {'phone':phone,'email':email,'type':typelist[type]} mod = raw_input('确认修改?y/n') if mod.lower() == 'y': temp['total'] += 1 temp[name] = info f = file('contacts.dat', 'wb') p.dump(temp,f) f.close() print '修改成功' self.show() else: print '修改失败!' else: print '不存在改名字!请更名' def Del(self): name = raw_input('请输入需要删除的名字:') f = file('contacts.dat','rb') temp = p.load(f) if temp.has_key(name): temp.pop(name) temp['total'] -= 1 f = file('contacts.dat', 'wb') p.dump(temp,f) f.close() print '删除成功' self.show() else: print '没有该名字' def Search(self): t = input('按类型查找-0,按名字查找-1') f = file('contacts.dat','rb') temp = p.load(f) if t == 0: type = input('请输入类型 0-家人/1-朋友/2-同事') for key in temp.keys(): if key != 'total' and temp[key]['type'] == typelist[type]: print "{:<15}\t{:<8}\t{:<15}\t{:<30}\t".format(key, temp[key]['type'], \ temp[key]['phone'],temp[key]['email']) elif t == 1: name = raw_input('请输入要查询的姓名:') for key in temp.keys(): if key == name: print "{:<15}\t{:<8}\t{:<15}\t{:<30}\t".format(key, temp[key]['type'], \ temp[key]['phone'], temp[key]['email']) else: print '查询失败!' def Menu(self): print '******************通讯录*********************' print '**** 添加-0 ************' print '**** 修改-1 ************' print '**** 删除-2 ************' print '**** 查询-3 ************' print '**** 退出-4 ************' print '*********************************************'test = contact()print '欢迎查看通讯录!'time.sleep(3)test.show()time.sleep(1)while True: test.Menu() command = int(raw_input('请输入指令:0/1/2/3/4')) if command == 0: test.Add() continue elif command == 1: test.Mod() continue elif command == 2: test.Del() continue elif command == 3: test.Search() continue elif command == 4: print '欢迎使用!' time.sleep(3) sys.exit() else: print '没有该指令''''raw_input与input的区别:raw_input:把用户的输入转成字符串input:不转换,按原类型存储'''运行效果:
C:\Python27\python.exe D:/PyTest_one/test.py欢迎查看通讯录!姓名 类型 电话 邮箱 dd 同事 456798 456 jj 朋友 454 44 kl 家人 456 465 ******************通讯录************************* 添加-0 **************** 修改-1 **************** 删除-2 **************** 查询-3 **************** 退出-4 *********************************************************请输入指令:0/1/2/3/4
0 0
- 编写一个简单的控制台通讯录
- 一个简单的通讯录
- 一个简单的通讯录。。。
- 用java实现的简单控制台通讯录
- 一个简单的httpServer(STL编写,控制台程序)
- 一个简单的通讯录程序
- 用类写一个简单的通讯录
- 实现一个简单的通讯录
- VS C#编写的简单通讯录
- 简单数据库编写的简易通讯录
- 基于sqlite3实现的简单通讯录程序(控制台)
- 基于sqlite3实现的简单通讯录程序(控制台)
- 一个C++编写的控制台程序
- 用java编写一个的一个通讯录,有图形界面
- 【汇编语言】写一个简单的通讯录
- php写一个简单的通讯录
- 一个简单的python程序实例(通讯录)
- 一个简单通讯录的c#设计尝试
- 【笔记】JDK,Tomcat,MySQL@ubuntu安装
- Java源码集合类TreeMap学习1——数据结构4平衡二叉树插入一个元素的递归算法
- Spring Boot配置文件-多环境配置
- MyISAM和InnoDB的主要区别和应用场景
- 本地地址映射远程地址工具ngrok
- 编写一个简单的控制台通讯录
- 未来生活进行时: 畅想未来新兴技术40年——百大趋势性技术汇总(下)
- Jquery 当当网
- HackerRank
- Android-设备管理器Device Administration
- PHP第三方登录之OAuth协议
- unity中 getButton* 与 getKey*
- centos安装zeromq, jzmq
- Google关于MapReduce技术论文中文版