0

0

怎样开发通讯录管理程序 vector容器存储联系人信息

P粉602998670

P粉602998670

发布时间:2025-08-12 15:53:01

|

874人浏览过

|

来源于php中文网

原创

该通讯录管理程序使用c++++的vector容器存储联系人信息,能够实现添加、删除、查找、修改和显示联系人功能,通过contact类封装联系人信息,addressbook类管理vector并提供增删改查方法,结合find_if与lambda表达式实现按姓名查找或删除,利用emplace_back高效插入对象,所有显示函数标记为const确保不修改状态,主函数通过菜单驱动用户交互,支持持续操作直至退出,程序结构清晰,适合初学者掌握类设计、stl容器与算法的综合应用,可进一步扩展文件持久化、模糊搜索、排序等特性,是一个完整的c++面向对象编程实践案例。

怎样开发通讯录管理程序 vector容器存储联系人信息

开发一个通讯录管理程序,使用

vector
容器来存储联系人信息,是C++中常见的练习项目。它结合了类的设计、容器操作和基本的增删改查功能。下面是一个实用、清晰的实现思路和代码结构,适合初学者理解和扩展。


一、明确需求和功能

一个基础的通讯录程序应具备以下功能:

  • 添加联系人
  • 删除联系人
  • 查找联系人
  • 修改联系人
  • 显示所有联系人
  • 退出程序

数据结构上,每个联系人包含:姓名、电话、邮箱等信息。

Endel.io
Endel.io

Endel是一款可以创造个性化舒缓声音的应用程序,可帮助您集中注意力、放松身心和入睡。

下载

二、使用 vector 存储联系人

在 C++ 中,

std::vector
是动态数组,适合频繁增删的场景。我们将定义一个
Contact
类来表示单个联系人,然后用
vector
来统一管理。


三、代码实现结构

#include 
#include 
#include 
#include 
using namespace std;

// 联系人类
class Contact {
public:
    string name;
    string phone;
    string email;

    // 构造函数
    Contact(const string& n, const string& p, const string& e)
        : name(n), phone(p), email(e) {}

    // 显示联系人信息
    void display() const {
        cout << "姓名: " << name
             << " | 电话: " << phone
             << " | 邮箱: " << email << endl;
    }
};

// 通讯录管理类
class AddressBook {
private:
    vector contacts;

public:
    // 添加联系人
    void addContact(const string& name, const string& phone, const string& email) {
        contacts.emplace_back(name, phone, email);
        cout << "联系人 " << name << " 已添加。\n";
    }

    // 删除联系人(按姓名)
    void deleteContact(const string& name) {
        auto it = find_if(contacts.begin(), contacts.end(),
                          [&name](const Contact& c) { return c.name == name; });
        if (it != contacts.end()) {
            contacts.erase(it);
            cout << "联系人 " << name << " 已删除。\n";
        } else {
            cout << "未找到联系人: " << name << endl;
        }
    }

    // 查找联系人
    void searchContact(const string& name) const {
        auto it = find_if(contacts.begin(), contacts.end(),
                          [&name](const Contact& c) { return c.name == name; });
        if (it != contacts.end()) {
            cout << "找到联系人:\n";
            it->display();
        } else {
            cout << "未找到联系人: " << name << endl;
        }
    }

    // 修改联系人信息
    void updateContact(const string& name, const string& newPhone, const string& newEmail) {
        auto it = find_if(contacts.begin(), contacts.end(),
                          [&name](const Contact& c) { return c.name == name; });
        if (it != contacts.end()) {
            it->phone = newPhone;
            it->email = newEmail;
            cout << "联系人 " << name << " 信息已更新。\n";
        } else {
            cout << "未找到联系人: " << name << endl;
        }
    }

    // 显示所有联系人
    void displayAll() const {
        if (contacts.empty()) {
            cout << "通讯录为空。\n";
            return;
        }
        cout << "\n=== 所有联系人 ===\n";
        for (const auto& contact : contacts) {
            contact.display();
        }
        cout << "==================\n";
    }
};

四、主函数交互逻辑

int main() {
    AddressBook book;
    int choice;
    string name, phone, email;

    while (true) {
        cout << "\n--- 通讯录管理系统 ---\n";
        cout << "1. 添加联系人\n";
        cout << "2. 删除联系人\n";
        cout << "3. 查找联系人\n";
        cout << "4. 修改联系人\n";
        cout << "5. 显示所有联系人\n";
        cout << "6. 退出\n";
        cout << "请选择操作: ";
        cin >> choice;

        switch (choice) {
            case 1:
                cout << "姓名: ";
                cin >> name;
                cout << "电话: ";
                cin >> phone;
                cout << "邮箱: ";
                cin >> email;
                book.addContact(name, phone, email);
                break;

            case 2:
                cout << "输入要删除的姓名: ";
                cin >> name;
                book.deleteContact(name);
                break;

            case 3:
                cout << "输入要查找的姓名: ";
                cin >> name;
                book.searchContact(name);
                break;

            case 4:
                cout << "输入要修改的姓名: ";
                cin >> name;
                cout << "新电话: ";
                cin >> phone;
                cout << "新邮箱: ";
                cin >> email;
                book.updateContact(name, phone, email);
                break;

            case 5:
                book.displayAll();
                break;

            case 6:
                cout << "再见!\n";
                return 0;

            default:
                cout << "无效选择,请重试。\n";
        }
    }

    return 0;
}

五、关键点说明

  • vector 的优势:自动扩容,支持随机访问,
    push_back
    erase
    操作方便。
  • emplace_back:直接在 vector 尾部构造对象,比
    push_back(Contact(...))
    更高效。
  • find_if + lambda:用于按条件查找,比如按姓名匹配。
  • const 成员函数:如
    display()
    displayAll()
    ,保证不修改对象状态。
  • 输入处理:本例未处理空格问题(如姓名带空格),若需支持,可用
    getline(cin, name)
    并注意缓冲区。

六、可扩展方向

  • 支持从文件读取/保存通讯录(如 txt 或 csv)
  • 增加分组功能(家庭、工作等)
  • 支持模糊搜索
  • 使用指针或智能指针管理大量数据
  • 添加排序功能(按姓名字母排序)

基本上就这些。这个程序结构清晰,适合学习类、vector、STL算法的结合使用。不复杂但涵盖了实际开发中的常见模式。

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

54

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

46

2025.11.27

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

519

2023.09.20

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

202

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

187

2025.11.08

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

529

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

5

2025.12.22

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

387

2023.08.14

vlookup函数使用大全
vlookup函数使用大全

本专题整合了vlookup函数相关 教程,阅读专题下面的文章了解更多详细内容。

28

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号