首先,我需要明确一点,什么是通讯录管理系统?所谓通讯录管理系统,即是一种可以记录并管理联系人信息的软件工具。在Python中实现通讯录管理系统,可以帮助个人或企业更好地管理自己的通讯录。
一、基于文件的通讯录管理系统
1.1 需求分析
(1)实现通讯录的增、删、改、查功能;
(2)支持数据的持久化,即在系统关闭或重新打开后,数据不会丢失;
(3)在增、删、改记录时,自动生成记录ID。
1.2 实现思路
(1)使用字典来存储每一条记录的信息,其中每个记录的key为记录的id,value为记录的详细信息;
(2)启动程序时,从文件中读取数据,并存到一个字典中;
(3)对于增、删、改操作,修改字典,并同步更新到文件中。
1.3 代码实现
class AddressBook:
def __init__(self, file_name):
self.file_name = file_name
# 从文件中读取数据到字典中
self.records = {}
with open(file_name, 'r', encoding='utf-8') as f:
for line in f:
id, name, phone, email = line.strip().split(',')
self.records[id] = {'name': name, 'phone': phone, 'email': email}
def add(self, name, phone, email):
# 自动生成记录id
id = str(uuid.uuid4())
self.records[id] = {'name': name, 'phone': phone, 'email': email}
# 将新增的记录写入文件中
with open(self.file_name, 'a', encoding='utf-8') as f:
f.write(f'{id},{name},{phone},{email}\n')
def remove(self, id):
# 删除字典中对应的记录
self.records.pop(id, None)
# 将删除的记录从文件中删除
with open(self.file_name, 'r', encoding='utf-8') as f:
lines = f.readlines()
with open(self.file_name, 'w', encoding='utf-8') as f:
for line in lines:
if not line.startswith(id):
f.write(line)
def update(self, id, name, phone, email):
# 更新字典中对应的记录
if id in self.records:
self.records[id]['name'] = name
self.records[id]['phone'] = phone
self.records[id]['email'] = email
# 将更新的记录写入文件中
with open(self.file_name, 'r', encoding='utf-8') as f:
lines = f.readlines()
with open(self.file_name, 'w', encoding='utf-8') as f:
for line in lines:
if line.startswith(id):
f.write(f'{id},{name},{phone},{email}\n')
else:
f.write(line)
def search(self, keyword):
# 根据关键词在字典中查找记录
results = []
for id, record in self.records.items():
if keyword in record['name'] or keyword in record['phone'] or keyword in record['email']:
results.append(record)
return results
二、基于数据库的通讯录管理系统
2.1 需求分析
(1)实现通讯录的增、删、改、查功能;
(2)支持数据的持久化,即在系统关闭或重新打开后,数据不会丢失;
(3)使用数据库来存储记录。
2.2 实现思路
(1)使用SQLite3作为数据库,每一条记录包含id、name、phone、email四个字段;
(2)启动程序时,连接到数据库并创建表;
(3)对于增、删、改操作,直接在数据库中进行。
2.3 代码实现
import sqlite3
class AddressBook:
def __init__(self, db_name):
self.db_name = db_name
# 连接到数据库,如果数据库不存在则新建
self.conn = sqlite3.connect(db_name)
self.cursor = self.conn.cursor()
# 创建表,如果表已存在则不再创建
self.cursor.execute('''CREATE TABLE IF NOT EXISTS records
(id TEXT PRIMARY KEY, name TEXT, phone TEXT, email TEXT)''')
def add(self, name, phone, email):
# 自动生成记录id
id = str(uuid.uuid4())
self.cursor.execute("INSERT INTO records VALUES (?, ?, ?, ?)", (id, name, phone, email))
self.conn.commit()
def remove(self, id):
self.cursor.execute("DELETE FROM records WHERE id=?", (id,))
self.conn.commit()
def update(self, id, name, phone, email):
self.cursor.execute("UPDATE records SET name=?, phone=?, email=? WHERE id=?", (name, phone, email, id))
self.conn.commit()
def search(self, keyword):
self.cursor.execute("SELECT * FROM records WHERE name LIKE ? OR phone LIKE ? OR email LIKE ?",
(f'%{keyword}%', f'%{keyword}%', f'%{keyword}%'))
return self.cursor.fetchall()
以上是基于文件和数据库的两种Python实现通讯录管理系统的攻略。其中,基于文件的通讯录管理系统实现简单,但文件操作的效率较低;而基于数据库的通讯录管理系统操作效率较高,但需要一定的数据库开发基础。因此,可以根据实际需求选择不同的实现方式。