0

0

C++如何实现通讯录程序 容器类和基本CRUD功能开发

P粉602998670

P粉602998670

发布时间:2025-08-26 11:33:01

|

565人浏览过

|

来源于php中文网

原创

要实现一个简单的c++++通讯录程序,需关注类设计、容器选择与crud功能。1. 设计contact类表示联系人,包含姓名、电话和邮箱,并用addressbook类管理多个联系人;2. 使用vector适合顺序访问或允许重名,使用map则便于通过姓名快速查找;3. 实现crud操作:添加时检查是否重名,查看时显示信息,修改时更新字段,删除时移除条目;4. 注意问题包括处理重名、数据持久化、控制台交互、异常处理等。掌握这些核心点有助于初学者理解面向对象编程与基础数据结构的应用。

C++如何实现通讯录程序 容器类和基本CRUD功能开发

通讯录程序是很多初学者练习C++面向对象编程时的入门项目。它涉及类的设计、容器(如vector或map)的使用,以及基本的增删改查(CRUD)操作。如果你刚接触这些内容,可能会觉得有点绕,但其实只要理清结构和逻辑,实现起来并不难。

C++如何实现通讯录程序 容器类和基本CRUD功能开发

下面我们就从几个关键点来聊聊怎么用C++实现一个简单的通讯录程序。

C++如何实现通讯录程序 容器类和基本CRUD功能开发

1. 类设计:联系人与通讯录类

要实现通讯录程序,通常需要两个类:

立即学习C++免费学习笔记(深入)”;

  • Contact
    :表示单个联系人,包含姓名、电话、邮箱等信息。
  • AddressBook
    :管理多个联系人,提供添加、删除、修改、查找等功能。

例如,

Contact
类可以这样设计:

C++如何实现通讯录程序 容器类和基本CRUD功能开发
class Contact {
public:
    string name;
    string phone;
    string email;

    Contact(string n, string p, string e) : name(n), phone(p), email(e) {}
};

AddressBook
类则持有
vector
作为数据容器,并封装各种操作方法。


2. 使用vector还是map?选对容器更方便

在选择容器时,常见的两种方式是

vector
map

  • vector 更适合按索引访问,或者顺序遍历所有联系人。
  • map 更适合通过姓名快速查找联系人。

如果你希望用户输入姓名就能快速定位联系人,建议用

map
,以姓名为键。但要注意,如果允许重名联系人,map就不合适了,这时候还是用vector更好。

举个例子,用map存储联系人:

map contacts;

添加联系人的时候就可以这样:

Revid AI
Revid AI

AI短视频生成平台

下载
contacts[name] = Contact(name, phone, email);

3. 实现基本的CRUD功能

添加联系人(Create)

判断是否已存在同名联系人,不存在就添加。如果是用map,可以直接检查key是否存在。

if (contacts.find(name) == contacts.end()) {
    contacts[name] = Contact(name, phone, email);
} else {
    cout << "该姓名已存在!" << endl;
}

查看联系人(Read)

根据姓名查找并显示信息:

auto it = contacts.find(name);
if (it != contacts.end()) {
    cout << "姓名:" << it->second.name << endl;
    cout << "电话:" << it->second.phone << endl;
    cout << "邮箱:" << it->second.email << endl;
} else {
    cout << "未找到联系人" << endl;
}

修改联系人(Update)

先查找是否存在,存在的话更新信息:

auto it = contacts.find(name);
if (it != contacts.end()) {
    it->second.phone = newPhone;
    it->second.email = newEmail;
}

删除联系人(Delete)

同样先查找,再删除:

auto it = contacts.find(name);
if (it != contacts.end()) {
    contacts.erase(it);
}

4. 可能遇到的问题和优化点

  • 重复姓名问题:如果允许重名,就不能用map,得用vector + 遍历查找。

  • 数据持久化:目前的数据只保存在内存中,重启程序会丢失。可以考虑写入文件或读取文件。

  • 界面交互:可以用简单的控制台菜单让用户选择操作,比如:

    cout << "1. 添加联系人" << endl;
    cout << "2. 查看联系人" << endl;
    cout << "3. 修改联系人" << endl;
    cout << "4. 删除联系人" << endl;
  • 异常处理:比如输入错误、空值等情况要做判断,避免程序崩溃。


基本上就这些内容了。虽然只是一个基础版本的通讯录程序,但已经涵盖了C++类设计、容器使用、基本算法等多个核心知识点。实现过程中可能会遇到一些细节问题,比如迭代器的使用、容器的选择等,多调试几次就会熟悉了。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

312

2023.08.02

go语言 面向对象
go语言 面向对象

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

54

2025.09.05

java面向对象
java面向对象

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

46

2025.11.27

treenode的用法
treenode的用法

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

529

2023.12.01

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

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

6

2025.12.22

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

73

2025.09.05

golang map相关教程
golang map相关教程

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

25

2025.11.16

golang map原理
golang map原理

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

36

2025.11.17

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

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

精品课程

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

共1课时 | 0.1万人学习

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

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

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

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