该通讯录管理程序使用c++++的vector容器存储联系人信息,能够实现添加、删除、查找、修改和显示联系人功能,通过contact类封装联系人信息,addressbook类管理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算法的结合使用。不复杂但涵盖了实际开发中的常见模式。
评论(已关闭)
评论已关闭