C++通讯录管理系统:结构体数组实现增删改查

小鹿同学
小鹿同学
发布时间:2026-10-15| 6人浏览过
原创

本文提供一份完整的 C++ 控制台应用程序源码,通过结构体和数组模拟一个基础通讯录系统。代码覆盖了从用户交互菜单到具体的数据增删改查逻辑,适合学习 C++ 基础语法及面向过程编程思想的读者参考。

程序运行效果与目标

本程序旨在构建一个纯文本控制的通讯录,支持以下功能操作:

  • 添加联系人:输入姓名、电话、邮箱和地址。
  • 删除/修改/查找:按姓名定位指定联系人并进行对应操作。
  • 显示/清空:浏览所有现有记录或重置数据结构。

由于是本地文件系统中的内存演示,程序关闭后数据会丢失,实际业务中需结合文件读取与写入模块进行持久化存储改造。

核心逻辑解析

第1步:定义数据结构

程序定义了两种关键结构体。`person`用于承载单个联系人的四要素信息,而 `contacts` 则作为容器,利用静态数组维护多条记录并跟踪当前数量。

#include <iostream>
using namespace std;
#define MAX 200 // 最大存储容量

// 1. 联系人信息结构体
struct person {
    string name;
    string number;
    string Email;
    string address;
};

// 2. 通讯录容器结构体
struct contacts {
    int people_num; // 当前已录入的人数
    struct person personarr[MAX]; // 包含联系人的数组
};

第2步:设计与展示菜单栏

为了提升命令行交互体验,首先编写一个专门输出导航菜单的控制台函数。它负责在每次循环前刷新显示可选的操作项。

void menu() {
    cout << "——————————————————" << endl;
    cout << "*********** 1.添加联系人 ***********" << endl;
    cout << "*********** 2.删除联系人 ***********" << endl;
    cout << "*********** 3.修改联系人 ***********" << endl;
    cout << "*********** 4.查找联系人 ***********" << endl;
    cout << "*********** 5.显示通讯录 ***********" << endl;
    cout << "*********** 6.清空联系人 ***********" << endl;
    cout << "*********** 0.退出通讯录 ***********" << endl;
    cout << "——————————————————" << endl;
}

第3步:实现人员信息的增删改查核心函数

这一部分是系统的基石。为了保证后续主流程调用的便捷性,我们将具体动作封装为独立函数,并将通讯录实例以指针形式传入以便直接修改内存状态。

添加功能:检查当前容量是否已满,若未满则逐个接收用户输入并追加至数组末尾。

void addperson(struct contacts* p) {
    if (p->people_num == MAX) {
        cout << "通讯录已满" << endl;
    } else {
        string name, number, Email, address;
        cout << "请输入姓名:" << endl;
        cin >> name;
        cout << "请输入电话:" << endl;
        cin >> number;
        cout << "请输入邮箱:" << endl;
        cin >> Email;
        cout << "请输入地址:" << endl;
        cin >> address;
        
        // 赋值并累加计数
        p->personarr[p->people_num].name = name;
        p->personarr[p->people_num].number = number;
        p->personarr[p->people_num].Email = Email;
        p->personarr[p->people_num].address = address;
        p->people_num++;
        cout << "添加成功!" << endl;
    }
}

查找辅助:在执行任何涉及单条记录的命令前,必须确认该名字是否存在。此方法返回匹配的下标索引,找不到则返回 -1。

int existperson(struct contacts* p, string name) {
    for (int i = 0; i < p->people_num; i++) {
        if (p->personarr[i].name == name) {
            return i;
        }
    }
    return -1;
}

删除机制:一旦获得目标位置,便利用 C/C++ 数组特性,将目标后的所有元素向前平移一位覆盖原值,最后计数器减一。

void delperson(struct contacts* p, int position) {
    while (position < (p->people_num)) {
        p->personarr[position] = p->personarr[position + 1];
        position++;
    }
    p->people_num--;
    cout << "删除成功!" << endl;
}

第4步:整合业务逻辑并执行主循环

最后编写 main 入口函数,负责初始化内存环境,并通过 while(1) 持续捕获键盘指令,分发至相应的子进程处理。

int main() {
    struct contacts c;
    c.people_num = 0; // 初始化空状态
    int select = 0;
    string name;
    
    while (1) {
        menu();
        cin >> select;
        switch (select) {
            case 1:
                addperson(&c);
                system("pause");
                break;
            case 2: // 示例:删除流程
                cout << "请输入要删除的联系人姓名:";
                cin >> name;
                if (existperson(&c, name) == -1) {
                    cout << "该联系人不存在!";
                } else {
                    delperson(&c, existperson(&c, name));
                }
                system("pause");
                break;
            // ... 此处省略其他相似分支的逻辑...
            case 0:
                cout << "欢迎下次使用" << endl;
                system("pause");
                return 0;
                break;
        }
        system("cls"); // 清除屏幕以保持整洁
    }
    return 0;
}

总结与扩展建议

上述内容展示了一个典型的 C++ 结构体应用案例,其特点是不依赖外部类库,能够清晰展现数据流转的过程。对于希望深入优化的开发者,可以考虑以下几点改进:一是引入文件读写接口(如 fstream)以防止程序退出导致数据清零;二是将线性查找替换为哈希映射(std::unordered_map)以提升大数据量下的搜索效率。以上就是对 C++ 实现通讯录功能的详细内容介绍,更多关于 C++ 算法与数据结构优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。