boxmoe_header_banner_img

Hello! 欢迎来到悠悠畅享网!

文章导读

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


avatar
站长 2025年8月12日 2

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

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

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

vector

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


一、明确需求和功能

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

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

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


二、使用 vector 存储联系人

在 C++ 中,

std::vector

是动态数组,适合频繁增删的场景。我们将定义一个

Contact

类来表示单个联系人,然后用

vector<Contact>

来统一管理。


三、代码实现结构

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



评论(已关闭)

评论已关闭