如何使用 C++ 实现通讯录管理系统

在日常开发中,通讯录管理系统是一个很常见的功能,尤其是在管理联系人时,可以通过一些简单的操作增删查改联系人信息。本文将带你逐步了解如何使用 C++ 实现一个基本的通讯录管理系统,主要分为两个核心模块:联系人管理类用户菜单操作

1. 项目结构

我们将通讯录管理系统分为三个主要文件:

  • phone_book.h:声明联系人管理类 Contact 及其成员函数。
  • phone_book.cpp:实现 Contact 类的各个成员函数。
  • main.cpp:包含主函数,提供用户操作菜单,调用 Contact 类来实现通讯录管理。
2. Contact 类的定义

首先,我们需要定义一个联系人管理类 Contact,负责管理联系人信息(如姓名、性别、电话号码)及相关操作功能(如增加、删除、查找联系人等)。我们在 phone_book.h 文件中声明类,并在 phone_book.cpp 文件中实现它的具体逻辑。

phone_book.h
#ifndef PHONE_BOOK_H
#define PHONE_BOOK_H

#include <string>
#include <vector>

class Contact 
{
    std::string name;
    std::string gender;
    std::string phone;
public:
    // 增加联系人
    void add_Contact();
    // 按名字删除联系人
    void delete_ContactByName();
    // 按名字修改联系人信息
    void modify_ContactByName();
    // 查找联系人,按姓名或电话,支持模糊查找
    void search_Contact();
    // 显示所有联系人信息
    void display_AllContacts();
};

#endif

在上面的声明中,Contact 类包含了联系人信息的三个私有属性:姓名 (name)、性别 (gender) 和电话号码 (phone)。同时,它定义了五个公有的成员函数,用于管理联系人操作。

phone_book.cpp
#include<iostream>
#include "phone_book.h"

std::vector<Contact> contacts; // 用于存储联系人

// 增加联系人
void Contact::add_Contact() 
{
    if (contacts.size() >= 50) {
        std::cout << "通讯录已满,无法添加新联系人。" << std::endl;
        return;
    }
    Contact newContact;
    std::cout << "请输入联系人姓名、性别和电话:" << std::endl;
    std::cin >> newContact.name >> newContact.gender >> newContact.phone;
    contacts.push_back(newContact);
    std::cout << "联系人添加成功。" << std::endl;
}

// 按名字删除联系人
void Contact::delete_ContactByName()
{
    std::string nameToDelete;
    std::cout << "请输入要删除的联系人的姓名:" << std::endl;
    std::cin >> nameToDelete;
    bool found = false;
    for (auto it = contacts.begin(); it != contacts.end(); ++it) {
        if (it->name == nameToDelete) {
            found = true;
            contacts.erase(it);
            std::cout << "联系人删除成功。" << std::endl;
            break;
        }
    }
    if (!found) {
        std::cout << "未找到该联系人。" << std::endl;
    }
}

// 按名字修改联系人信息
void Contact::modify_ContactByName()
{
    std::string nameToModify;
    std::cout << "请输入要修改的联系人的姓名:" << std::endl;
    std::cin >> nameToModify;
    bool found = false;
    for (auto& contact : contacts) {
        if (contact.name == nameToModify) {
            found = true;
            std::cout << "请输入新的姓名、性别和电话:" << std::endl;
            std::cin >> contact.name >> contact.gender >> contact.phone;
            std::cout << "联系人信息修改成功。" << std::endl;
            break;
        }
    }
    if (!found) {
        std::cout << "未找到该联系人。" << std::endl;
    }
}

// 查找联系人
void Contact::search_Contact()
{
    std::string query;
    std::cout << "请输入要查找的姓名或电话:" << std::endl;
    std::cin >> query;
    bool found = false;
    for (const auto& contact : contacts) {
        if (contact.name.find(query) != std::string::npos || contact.phone.find(query) != std::string::npos) {
            found = true;
            std::cout << "姓名:" << contact.name << " 性别:" << contact.gender << " 电话:" << contact.phone << std::endl;
        }
    }
    if (!found) {
        std::cout << "未找到相关联系人。" << std::endl;
    }
}

// 显示所有联系人信息
void Contact::display_AllContacts()
{
    if (contacts.empty()) {
        std::cout << "通讯录为空。" << std::endl;
        return;
    }
    std::cout << "所有联系人信息:" << std::endl;
    for (const auto& contact : contacts) {
        std::cout << "姓名:" << contact.name << " 性别:" << contact.gender << " 电话:" << contact.phone << std::endl;
    }
}
3. 用户菜单操作

为了方便用户与系统交互,我们提供一个菜单,用户可以选择增加联系人、删除联系人、查找联系人等功能。以下是 main.cpp 文件的实现,它提供了一个简单的循环菜单。

main.cpp
#include<iostream>
#include "phone_book.h"

void menu()
{
    int choice;
    Contact contactBook;

    do {
        std::cout << "通讯录管理系统\n";
        std::cout << "1. 增加联系人\n";
        std::cout << "2. 按名字删除联系人\n";
        std::cout << "3. 按名字修改联系人信息\n";
        std::cout << "4. 查找联系人\n";
        std::cout << "5. 显示所有联系人信息\n";
        std::cout << "6. 退出系统\n";
        std::cout << "请输入您的选择:\n";
        std::cin >> choice;

        switch (choice) {
        case 1:
            contactBook.add_Contact();
            break;
        case 2:
            contactBook.delete_ContactByName();
            break;
        case 3:
            contactBook.modify_ContactByName();
            break;
        case 4:
            contactBook.search_Contact();
            break;
        case 5:
            contactBook.display_AllContacts();
            break;
        case 6:
            std::cout << "退出系统。\n";
            break;
        default:
            std::cout << "无效的选择,请重新输入。\n";
        }
    } while (choice != 6);
}

int main()
{
    menu();
    return 0;
}
4. 运行效果

用户通过该菜单系统,可以很方便地进行以下操作:

  • 增加联系人:输入姓名、性别、电话后,新联系人将会添加到通讯录中。
  • 删除联系人:通过输入联系人姓名,找到匹配项后即可删除联系人。
  • 修改联系人:通过输入要修改的联系人姓名,更新其信息。
  • 查找联系人:输入姓名或电话,系统支持模糊查找。
  • 显示所有联系人:显示通讯录中所有联系人的详细信息。
5. 总结

通过本文,你学习了如何使用 C++ 实现一个基本的通讯录管理系统。我们定义了一个 Contact 类用于管理联系人信息,并通过主菜单系统实现了对通讯录的增删查改功能。这是一个很好的练习项目,可以帮助你熟悉 C++ 类的设计和基本的 I/O 操作。

你可以在这个基础上进一步扩展功能,比如增加联系人分组、排序、数据持久化等功能,提升系统的实用性。

在通信感知一体化(ISAC)系统的设计中,实现通信感知功能之间的性能折衷是实现系统高效运作的关键。根据《通信感知一体化:信息理论极限与性能边界探索》一书的内容,可以通过以下几个方面来实现这种折衷: 参考资源链接:[通信感知一体化:信息理论极限与性能边界探索](https://wenku.youkuaiyun.com/doc/8662tj8cpi?spm=1055.2569.3001.10343) 首先,需明确ISAC系统中的通信感知任务在理论上存在的性能边界。这涉及理解信息理论极限,比如香农定理通信感知性能折衷(Communication-Sensing Performance Tradeoff)的概念,从而为系统设计提供指导。 其次,创新的信号处理技术是实现性能折衷的关键。可以通过多输入多输出(MIMO)技术、波束成形空时编码等方法来提高信号的传输效率感知精度,同时考虑如何在不同的通信感知任务之间合理分配频谱资源。 再次,编码方案的选择也十分关键。在ISAC系统中,设计能够同时满足通信感知需求的编码策略,如采用联合通信感知编码(Joint Communication-Sensing Coding, JCSC),可以在保证通信质量的同时,提升环境感知的准确性。 此外,资源分配策略同样影响性能折衷。系统设计者需要基于当前网络状况任务优先级,动态地调整资源分配,如功率、时间频率资源,确保通信感知任务之间获得最佳的性能平衡。 最后,考虑应用场景是实际部署ISAC系统时不可或缺的一步。在物联网、自动驾驶智能城市等不同应用中,性能折衷的目标方法可能有所不同。因此,根据具体应用场景来设计优化ISAC系统,将有助于实现最佳的性能折衷。 综上所述,通过理论研究与实际应用相结合,可以实现通信感知功能之间的有效性能折衷,进而优化ISAC系统的整体性能。《通信感知一体化:信息理论极限与性能边界探索》一书详细地探讨了这些问题,并提供了理论依据实用指导,对于从事无线通信信息科领域的研究人员工程师来说,这是一份宝贵的参考资料。 参考资源链接:[通信感知一体化:信息理论极限与性能边界探索](https://wenku.youkuaiyun.com/doc/8662tj8cpi?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值