独书先生 Menu

Python初学者笔记(5)-简单的通讯录

要求:

编写一个简单的通讯录

1、通讯录包含至少包含姓名、电话号码、电子邮箱;2、通讯录的信息能够保存在本地磁盘;3、通讯录查找特定人员的信息;4、通讯录能够修改特定人员的信息;5、通讯录能够删除特定人员的信息;6、通讯录能完全显示所有人的信息

 

方法:Python 2.7.9 / Windows

# -*- coding: gbk -*-

import os,sys
import cPickle as p

#判断通讯录是否存在,不存在则创建通讯录
if os.path.exists('contacts.dat')==False:
    f = file('contacts.dat','wb')
    temp = {'total':0}
    p.dump(temp,f)
    f.close()
    print "\n本地磁盘尚无通讯录,新通讯录创建成功!\n"
else:
    pass

#添加联系人
def add():
    f = file('contacts.dat','rb')
    a = p.load(f)
    f.close()
    name = raw_input('请输入所要添加联系人的姓名:')
    if a.has_key(name):
        print "\n联系人已存在,添加失败!请改名~"
    else:
        tel = raw_input('请输入电话号码:')
        email = raw_input('请输入所要添加联系人的电子邮件(example@example.com):')
        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(name):
    f = file('contacts.dat','rb')
    a = p.load(f)
    if a.has_key(name):
        print "{}的号码是:{}".format(name,a[name][0])
        print "{}的电子邮箱是:s{}".format(name,a[name][1])
    else:
        print "联系人不存在!"
    f.close()

#删除
def delete(name):
    f = file('contacts.dat','rb')
    a = p.load(f)
    f.close()
    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 modify(name):
    f = file('contacts.dat','rb')
    a = p.load(f)
    f.close()
    if a.has_key(name):
        tel = raw_input("请输入修改后的号码:")
        a[name][0] = tel
        email = raw_input("请输入修改后的邮箱:")
        a[name][1] = email
        f = file('contacts.dat','wb')
        p.dump(a,f)
        f.close()
        print "修改成功!"
    else:
        print "联系人不存在!"

#界面
def menu():
    print
    print "****************************"
    print "     显示菜单提示信息:*"
    print "     显示所有联系人:0"
    print "     查找联系人:1"
    print "     添加联系人:2"
    print "     删除联系人:3"
    print "     更改联系人资料:4"
    print "     退出通讯录:5"
    print "****************************"

#主程序
while True:
    menu()
    x=raw_input("\n请输入您的选择菜单号:")
    if x == '2':
        add()
        continue
    if x == '0':
        showall()
        continue
    if x == '5':
        print "谢谢使用!"
        exit()
        continue
    if x == '1':
        name = raw_input("请输入所要查找的联系人姓名:")
        search(name)
        continue
    if x == '3':
        name = raw_input("请输入所要删除的联系人姓名:")
        delete(name)
        continue
    if x == '4':
        name = raw_input("请输入所要修改的联系人姓名:")
        modify(name)
        continue
    if x == '*':
        menu()
    else:
        print "输入的选项不存在,请重新输入!"
        continue

结果:

>>>

****************************
显示菜单提示信息:*
显示所有联系人:0
查找联系人:1
添加联系人:2
删除联系人:3
更改联系人资料:4
退出通讯录:5
****************************

其余功能显示正常。

 

说明:Windows平台下,开头声明# -*- coding: gbk -*-显示中文正常

本来网上查询中文乱码问题,应该是使用# -*- coding: utf-8 -*-的开头声明,后发现这个声明不管用,后改用gbk起作用。

更深入的内容有待后续研究,欢迎大家讨论!

 

源自:DuShuSir.com