python实现通讯录管理系统

  • Post category:Python

首先,我需要明确一点,什么是通讯录管理系统?所谓通讯录管理系统,即是一种可以记录并管理联系人信息的软件工具。在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实现通讯录管理系统的攻略。其中,基于文件的通讯录管理系统实现简单,但文件操作的效率较低;而基于数据库的通讯录管理系统操作效率较高,但需要一定的数据库开发基础。因此,可以根据实际需求选择不同的实现方式。