首页 > 后端开发 > C++ > 正文

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

P粉602998670
发布: 2025-08-12 15:53:01
原创
870人浏览过

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

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

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

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


一、明确需求和功能

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

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

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

落笔AI
落笔AI

AI写作,AI写网文、AI写长篇小说、短篇小说

落笔AI 41
查看详情 落笔AI

二、使用 vector 存储联系人

在 C++ 中,

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


三、代码实现结构

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
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<Contact> 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算法的结合使用。不复杂但涵盖了实际开发中的常见模式。

以上就是怎样开发通讯录管理程序 vector容器存储联系人信息的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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