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

开发一个通讯录管理程序,使用
vector容器来存储联系人信息,是C++中常见的练习项目。它结合了类的设计、容器操作和基本的增删改查功能。下面是一个实用、清晰的实现思路和代码结构,适合初学者理解和扩展。
一、明确需求和功能
一个基础的通讯录程序应具备以下功能:
- 添加联系人
- 删除联系人
- 查找联系人
- 修改联系人
- 显示所有联系人
- 退出程序
数据结构上,每个联系人包含:姓名、电话、邮箱等信息。
二、使用 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算法的结合使用。不复杂但涵盖了实际开发中的常见模式。










