`
banxi1988
  • 浏览: 153755 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

用Python实现的简单通讯录

阅读更多
花了一个下午和半个晚上写了这个简单通讯录:
哈哈,第一次写这么长的Python代码,自认为结构还是挺合理的。
代码如下:
#-*- coding:utf-8 -*-
# file :addrList.py
# date :2011-10-24 15:40:13
# 设计一个基本的通讯录管理程序,使其具有添加,删除,编辑,查找等功能。
# 要求使用C/C++,java,javascript,python中任意一种语言实现。字符界面即可。
# 不需要有GUI(图形界面)
import sys
import os
import string
import re
from datetime import datetime

QUIT_FLAG = False
ADDRS_LIST = "addr_list.txt"
_addrs_dict = {} 
_addrs_count = 0
DEBUG=2
def info(message):
	global DEBUG
	if DEBUG > 0:
		print message

def debug(message):
	global DEBUG
	if DEBUG > 1:
		print message

def warn(message):
	global DEBUG
	if DEBUG > 0:
		print message
	
def error(message):
	print message

def help():
	print "用法:输入菜单中的命令即可执行相应操作!"
	print "可用菜单命令如下:"
	showMenu()

def showMenu():
	print "+******************操作菜单***********************+"
	print "|查看所有联系人(all) | 查找联系人(find)           |"
	print "|添加联系人(add)     | 删除联系人(remove)         |"
	print "|编辑联系人(edit)    | 保存并退出(save)           |"
	print "|使用帮助(help)      | 退出但不保存(quit)         |"
	print "+_________________________________________________+"

def showError(info):
	print info


def doSwitch(op):
	if op == "all":
		doAll()
	elif op == "find":
		doFind()
	elif op == "add":
		doAdd()
	elif op == "remove":
		doRemove()
	elif op == "edit":
		doEdit()
	elif op == "save":
		doSave()
	elif op == "help":
		help()
	elif op == "quit":
		doQuit()
	else:
		showError("错误:您输入的命令有误,请重新输入。需要帮助请输入help!")

def verifyInput(items):
	_flag = True
	_rPhone = re.compile(r'1[0-9]{10}')
	_rQQ    = re.compile(r'[1-9][0-9]{4,9}')
	if len(items[0]) > 10:
		_flag = False
		print "姓名太长了!"
	if not _rPhone.match(items[1]):
		_flag = False
		print "手机号码格式不正确"
	if not _rQQ.match(items[2]):
		_flag = False
		print "QQ号码输入有误"
	return _flag
	

def buildAddr(addr):
	_addr={}
	items=addr.split()
	if len(items) < 3:
		print "您输入的信息太少了"
		return None
	if not	verifyInput(items):
		return None

	_addr['name']=items[0]
	_addr['phone'] = items[1]
	_addr['QQ'] = items[2]
	return _addr

def addAddr(addr):
	global _addrs_count,_addrs_dict
	_addrs_count+=1
	_addr=buildAddr(addr)
	if not _addr:
		return None
	_addrs_dict[_addrs_count]=_addr

def init():
	if not os.path.isfile(ADDRS_LIST):
		return None

	faddr=open(ADDRS_LIST,"r")
	for line in faddr:	
		if len(line) == 0:
			continue
		addAddr(line)
	faddr.close()


def save():
	global _addrs_dict
	faddr=open(ADDRS_LIST,"w+")
	for addr in _addrs_dict.values():
		faddr.write("{0}\t{1}\t{2}\n".format(addr['name'],addr['phone'],addr['QQ']))
	faddr.flush()
	faddr.close()


def doAll():
	global _addrs_dict
	if len(_addrs_dict) < 1:
		print "联系人当中暂无记录!"
		return None
	printHead()
	for key,addr in _addrs_dict.items():
		printAddr(key,addr)

def doFind():
	_flag=False
	flag1=flag2=flag3=False
	cond=raw_input("请输入查询信息:>")
	debug("DEBUG:{0}".format(cond))
	if len(cond) == 0:
		return None
	if cond.isdigit():
		flag1=findById(int(cond,10))
		flag2=findByPhone(cond)
		flag3=findByQQ(cond)
	else:
		flag1=findByName(cond)
	
	_flag = flag1 or flag2 or flag3 
	if not _flag:
		print "没有查找到任何联系人!"

def doAdd():
	line = raw_input("请依次输入联系人的姓名,手机号码,QQ号码>")
	if len(line) == 0:
		return None
	addAddr(line)	

def existsId(_id):
	global _addrs_dict
	return _addrs_dict.has_key(_id)
#	if _id > _addrs_count or _id < 1:
#		return False 
#	else:
#		return True

def doRemove():
	FLAG = True
	while FLAG:
		key=raw_input("请输入要删除的联系人的编号(取消请输入#)")
		if key == '#':
			FLAG = False
			continue
		if not existsId(int(key,10)):
			print "不存在您所输入编号的联系人。请确认"
			continue
	
		print "编号为 {0} 的联系人信息如下:".format(key)
		printById(int(key,10))
		yesOrNo=raw_input("您确定要删除上述联系人吗?(y/n)")
		if yesOrNo in "yY":
			removeById(int(key,10))
			print "删除成功!"
		yesOrNo=raw_input("您还需要继续删除联系人吗?(y/n)")
		if not yesOrNo in "yY":
			FLAG = False



def doEdit():
	FLAG = True
	while FLAG:
		key=raw_input("请输入要编辑的联系人的编号(取消请输入#)")
		print "DEBUG:key:{0}".format(key)
		if key == '#':
			FLAG = False
			continue
		if not existsId(int(key,10)):
			print "不存在您所输入编号的联系人。请确认"
			continue
	
		print "编号为 {0} 的联系人信息如下:".format(key)
		printById(int(key,10))
		updateById(int(key,10))
		FLAG = False


def doSave():
	save()
	doQuit()

def doQuit():
	global QUIT_FLAG
	QUIT_FLAG = True
	print "正在退出……"
#	exit(0)

def printHead():
	print "+-----+----------+---------------+---------------+"
	print "|编号 |   姓名   |  手机号码     |     QQ号码    |"
	print "+-----+----------+---------------+---------------+"

def printAddr(key,addr):
#	print "+-----+----------+---------------+---------------+"
	print "|{0:^5}|{1:^10}|{2:^15}|{3:^15}|".format(key,addr['name'],addr['phone'],addr['QQ'])
	print "+-----+----------+---------------+---------------+"



def printById(_id):
	global _addrs_dict
	printHead()
	printAddr(_id,_addrs_dict[_id])

def removeById(_id):
	global _addrs_dict
	_addrs_dict.pop(_id)

def updateById(_id):
	global _addrs_dict
	_addr= _addrs_dict.get(_id)

	print "请输入该联系人的新信息,相应留空则保留原有信息"
	name=raw_input("请输入新姓名:>")
	if len(name) > 0:
		_addr['name']=name

	phone=raw_input("请输入新手机号码:>")
	if len(phone) > 0:
		_addr['phone']=phone

	qq=raw_input("请输入新的QQ号码:>")
	if len(qq) > 0 :
		_addr['QQ']=qq

	_addrs_dict[_id]=_addr
	print "更新成功!"
	print "联系人新的信息如下:"
	printById(_id)

def findById(_id):
	if existsId(_id):
		printById(_id)
		return True
	else:
		return False

def findByField(cond,field='name'):
	global _addrs_dict
	_flag = False
	for key,addr in  _addrs_dict.items():
		if addr[field].find(cond) != -1:
			printAddr(key,addr)
			_flag=True
	return _flag

def findByName(name):
	return findByField(name,'name')

def findByPhone(phone):
	return findByField(phone,'phone')

def findByQQ(qq):
	return findByField(qq,'QQ')



def main():
	init()
	showMenu()
	while(not QUIT_FLAG):
		operation=raw_input("请在此处输入菜单命令>")
		doSwitch(operation)


if __name__=='__main__':
	main()
	## do something
##----------------------------------------------------

0
1
分享到:
评论

相关推荐

    python实现简单通讯录

    python实现简单通讯录,供大家一起共同分享学习。

    Python实现简单通讯录

    Python实现简单通讯录

    python实现通讯录功能

    下面将详细讲解如何利用Python实现这个通讯录系统。 首先,我们需要创建一个数据结构来存储通讯录信息。在这个例子中,每个联系人由姓名和电话号码两个字段组成。我们可以定义一个简单的类`Contact`来表示: ```...

    python tkinter 实现学生通讯录

    在"学生信息.txt"文件中,我们可以预设一些学生数据,使用Python的内置函数`open()`读取文件内容,再通过`json.load()`或简单的字符串处理解析数据,将其转化为可操作的字典列表。 在"学生备份信息.txt"文件中,...

    python实现通讯录管理系统.zip

    【Python实现通讯录管理系统】 在Python编程中,创建一个通讯录管理系统是一个常见的练习项目,它可以帮助初学者熟悉面向对象编程、文件操作以及用户交互。在这个系统中,我们通常会涉及以下核心知识点: 1. **...

    python简单通讯录程序

    用python编写,实现简单的通讯录功能,如:新建、删除、修改、查询、显示所有用户等,比较适合初学者(本程序在python2.7运行成功,且解决cmd中文乱码情况),如有问题可共同讨论。

    python实现学生通讯录管理系统.docx

    - **项目名称**:Python实现的学生通讯录管理系统。 - **项目目标**:开发一个基于Python的简单学生通讯录管理系统,方便用户对学生的相关信息进行管理。 ### 二、系统功能模块分析 #### 首页(菜单功能) - **...

    python通讯录(含数据库)

    【Python通讯录(含数据库)】是一个基于Python编程语言实现的简单通讯录系统,它集成了数据库技术,方便用户存储、检索和管理联系人信息。这个项目非常适合初学者作为学习Python编程以及数据库操作的实践案例。 在...

    python实现简易通讯录修改版

    在本篇博客中,作者分享了对之前Python实现的简易通讯录程序的改进版本,主要针对以下几个方面进行了优化: 1. **自增ID**:在原版通讯录中,用户需要手动输入ID,而在修改版中,作者通过SQLite的`INTEGER PRIMARY ...

    打开通讯录界面

    微信充值功能的实现,涉及到如何打开系统通讯录界面,以便用户能够选择联系人进行操作,如充值等。这里我们主要讨论的是"ABPeople"标签所代表的iOS平台上的联系人框架,以及如何在实际应用中调用这个框架来实现类似...

    Python编程好友通讯录管理程序

    简单的好友通讯录管理程序,实训内容如下: (1)创建字典对象保存已有的好友通讯信息。 (2)使用input函数提示用户选择操作方式。 (3)使用字符串方法split函数将字符串按传入的分隔符进行拆分。 (4)使用if-...

    python通讯录

    '''简单通讯录程序 Version 5.0 具有'查看'、'查找'、'修改'、'添加'、'删除'、'打开'、'新建'、'另存为'等基本功能 还可以将通讯录的记录保存为磁盘文件,将数据永久保存和调用修改添加 以及能导出记录...

    简单的PYTHON存储联系人

    简单的PYTHON存储联系人,涉及到文件读写等。

    python案例面向对象、文件版学生管理系统

    在本案例中,"python案例面向对象、文件版学生管理系统"是一个使用Python编程语言实现的教育管理应用程序。这个系统利用了面向对象编程的概念,以及Python的文件操作功能,以存储和管理学生信息。以下是该系统涉及到...

    python实现的简单通讯录小作业(利用text记录数据)

    总的来说,这个Python实现的简单通讯录小作业涵盖了文件操作、数据结构、输入输出以及异常处理等多个核心知识点,对于初学者来说是一个很好的实践项目。通过完成这个作业,你可以深入理解Python的基本语法和常用功能...

    用python完成的通讯录管理系统

    用python完成,带mysql数据库。 比较简单,有注释,实在不行可以看文档。 具体功能和内容看文档。 是我大学的python课考试内容之一,可以借鉴一下嘛(已经过了٩(๑❛ᴗ❛๑)۶(^_−)☆)。

    python程序通讯录V1.1

    在Python中,构建用户界面(UI)通常有两种常见的方式:一是使用Tkinter库,它是Python的标准GUI库,适合快速开发简单的图形界面;二是使用更高级的库如PyQt或wxPython,它们能提供更为复杂和美观的界面。考虑到...

    简单通讯录程序,可增删改查

    利用python,写的一个简单的通讯录程序,可以进行增删改查。

    python程序通讯录

    《Python程序通讯录详解》 Python作为一种强大的编程语言,因其简洁明了的语法特性而深受开发者...通过这个项目,开发者不仅可以提升编程技能,还能了解如何组织和管理数据,以及如何设计和实现简单但实用的程序功能。

Global site tag (gtag.js) - Google Analytics