C++简易通讯录系统实现流程详解

下面是C++简易通讯录系统实现流程的详细攻略:

1. 设计思路

本通讯录系统主要由以下几个部分组成:

  1. 联系人信息类ContactPerson:
  2. 包含联系人姓名、性别、电话号码、住址等属性。
  3. 实现获取、设置各属性值的方法。
  4. 通讯录类Contacts:
  5. 包含多个联系人对象,可以进行联系人的添加、删除、修改、遍历等操作。
  6. 通过文件操作实现通讯录的存储和读取。
  7. 主函数menu:
  8. 提供用户菜单,实现用户和通讯录的交互。
  9. 主要功能包括添加联系人、显示所有联系人、删除联系人、修改联系人、查找联系人、清空所有联系人、退出程序等。

2. 代码实现

2.1 ContactPerson类

class ContactPerson {
protected:
    std::string name_     = "";  // 姓名
    std::string gender_   = "";  // 性别
    std::string phone_    = "";  // 电话号码
    std::string address_  = "";  // 住址

public:
    ContactPerson() = default;

    ContactPerson(const std::string& name, const std::string& gender, const std::string& phone, const std::string& address)
        : name_(name), gender_(gender), phone_(phone), address_(address)
    {}

    // 获取联系人信息
    std::string getName() const {
        return name_;
    }

    std::string getGender() const {
        return gender_;
    }

    std::string getPhone() const {
        return phone_;
    }

    std::string getAddress() const {
        return address_;
    }

    // 设置联系人信息
    void setName(const std::string& name) {
        name_ = name;
    }

    void setGender(const std::string& gender) {
        gender_ = gender;
    }

    void setPhone(const std::string& phone) {
        phone_ = phone;
    }

    void setAddress(const std::string& address) {
        address_ = address;
    }
};

2.2 Contacts类

class Contacts {
protected:
    std::vector<ContactPerson> contact_list_;  // 联系人列表

public:
    // 添加联系人
    void addContact(const ContactPerson& contact_person) {
        contact_list_.push_back(contact_person);
    }

    // 删除联系人
    void deleteContact(int index) {
        if (index >= contact_list_.size()) {
            return;
        }
        contact_list_.erase(contact_list_.begin() + index);
    }

    // 修改联系人
    void modifyContact(int index, const ContactPerson& contact_person) {
        if (index >= contact_list_.size()) {
            return;
        }
        contact_list_[index] = contact_person;
    }

    // 查找联系人
    int findContact(const std::string& name) {
        for (int i = 0; i < contact_list_.size(); i++) {
            if (contact_list_[i].getName() == name) {
                return i;
            }
        }
        return -1;
    }

    // 获取联系人列表
    std::vector<ContactPerson> getContactList() const {
        return contact_list_;
    }

    // 清空所有联系人
    void clearAllContacts() {
        contact_list_.clear();
    }

    // 读取通讯录
    void load(const std::string& filename) {
        std::ifstream fin(filename);
        while (fin) {
            std::string name, gender, phone, address;
            fin >> name >> gender >> phone >> address;
            if (name.length() > 0) {
                ContactPerson cp(name, gender, phone, address);
                contact_list_.push_back(cp);
            }
        }
        fin.close();
    }

    // 存储通讯录
    void save(const std::string& filename) {
        std::ofstream fout(filename);
        for (auto cp : contact_list_) {
            fout << cp.getName() << " " << cp.getGender() << " " << cp.getPhone() << " " << cp.getAddress() << std::endl;
        }
        fout.close();
    }
};

2.3 主函数menu

int main()
{
    Contacts contacts;
    contacts.load("contacts.txt");

    while (true) {
        std::cout << "***** 通讯录程序 *****" << std::endl;
        std::cout << "1 添加联系人" << std::endl;
        std::cout << "2 显示所有联系人" << std::endl;
        std::cout << "3 删除联系人" << std::endl;
        std::cout << "4 修改联系人" << std::endl;
        std::cout << "5 查找联系人" << std::endl;
        std::cout << "6 清空所有联系人" << std::endl;
        std::cout << "0 退出程序" << std::endl;

        int choice;
        std::cout << "请输入您的选择:";
        std::cin >> choice;

        if (choice == 1) {
            std::string name, gender, phone, address;
            std::cout << "请输入姓名:";
            std::cin >> name;
            std::cout << "请输入性别:";
            std::cin >> gender;
            std::cout << "请输入电话:";
            std::cin >> phone;
            std::cout << "请输入住址:";
            std::cin >> address;
            ContactPerson cp(name, gender, phone, address);
            contacts.addContact(cp);
            std::cout << "添加联系人成功!" << std::endl;
        }
        else if (choice == 2) {
            std::vector<ContactPerson> contact_list = contacts.getContactList();
            int index = 1;
            for (auto cp : contact_list) {
                std::cout << "编号:" << index++ << std::endl;
                std::cout << "姓名:" << cp.getName() << std::endl;
                std::cout << "性别:" << cp.getGender() << std::endl;
                std::cout << "电话:" << cp.getPhone() << std::endl;
                std::cout << "住址:" << cp.getAddress() << std::endl << std::endl;
            }
        }
        else if (choice == 3) {
            std::cout << "请输入要删除的联系人编号:";
            int index;
            std::cin >> index;
            contacts.deleteContact(index - 1);
            std::cout << "删除联系人成功!" << std::endl;
        }
        else if (choice == 4) {
            std::cout << "请输入要修改的联系人编号:";
            int index;
            std::cin >> index;
            std::string name, gender, phone, address;
            std::cout << "请输入姓名:";
            std::cin >> name;
            std::cout << "请输入性别:";
            std::cin >> gender;
            std::cout << "请输入电话:";
            std::cin >> phone;
            std::cout << "请输入住址:";
            std::cin >> address;
            ContactPerson cp(name, gender, phone, address);
            contacts.modifyContact(index - 1, cp);
            std::cout << "修改联系人成功!" << std::endl;
        }
        else if (choice == 5) {
            std::cout << "请输入要查找的联系人姓名:";
            std::string name;
            std::cin >> name;
            int index = contacts.findContact(name);
            if (index == -1) {
                std::cout << "找不到该联系人!" << std::endl;
            }
            else {
                std::cout << "找到联系人:" << std::endl;
                ContactPerson cp = contacts.getContactList()[index];
                std::cout << "姓名:" << cp.getName() << std::endl;
                std::cout << "性别:" << cp.getGender() << std::endl;
                std::cout << "电话:" << cp.getPhone() << std::endl;
                std::cout << "住址:" << cp.getAddress() << std::endl;
            }
        }
        else if (choice == 6) {
            contacts.clearAllContacts();
            std::cout << "所有联系人已清空!" << std::endl;
        }
        else if (choice == 0) {
            contacts.save("contacts.txt");
            std::cout << "程序已退出!" << std::endl;
            break;
        }
        else {
            std::cout << "输入错误,请重新输入!" << std::endl;
        }
    }

    return 0;
}

3. 示例说明

3.1 示例1

在通讯录中添加一个联系人,其中姓名为"张三",性别为"男",电话为"123456789",住址为"新华路1号"。

运行程序,在菜单中选择"1 添加联系人",按照提示输入联系人信息,输入完毕后程序会输出"添加联系人成功!"。

3.2 示例2

在通讯录中查找一个联系人,其中姓名为"王五"。

运行程序,在菜单中选择"5 查找联系人",按照提示输入联系人姓名,如果通讯录中存在该联系人,则会输出其详细信息;否则输出"找不到该联系人!"。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++简易通讯录系统实现流程详解 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • 软件测试面试题(小结)

    那么来详细讲解一下“软件测试面试题(小结)”的完整攻略。 简述 本文主要是对软件测试面试题(小结)的内容进行详细的讲解和讨论。软件测试作为软件开发流程中的一个重要环节,在面试过程中也是经常被问到的一个话题。在本文中,我们将从面试的准备、常见的面试题、回答技巧等几个方面展开讨论。 面试准备 在进行软件测试的面试之前,应该先认真准备。以下几个方面是需要注意的: …

    C 2023年5月22日
    00
  • JS循环遍历JSON数据的方法

    以下是详细的讲解”JS循环遍历JSON数据的方法”的完整攻略: 1. 解析JSON数据 在JS中,可以通过JSON.parse将字符串转换为JSON对象,也可以直接将JSON数据引入JS文件中,得到一个JSON对象。解析成功后,我们即可对JSON数据进行操作。 1.1 解析字符串为JSON对象 const jsonData = ‘{"name&qu…

    C 2023年5月23日
    00
  • PHP5与MySQL数据库操作常用代码 收集

    接下来我将为你详细讲解“PHP5与MySQL数据库操作常用代码 收集”的完整攻略,内容分为以下几部分: 概述 配置 数据库连接 数据库查询 数据库插入 指定数据库、表格、字段等 示例说明 注意事项 1. 概述 本攻略旨在介绍如何在PHP5中对MySQL数据库进行操作,并提供一些常用代码的收集,方便开发人员快速上手进行开发。MySQL是一款广泛应用于Web应用…

    C 2023年5月23日
    00
  • 教你分辨C++堆与栈的区别

    分辨C++堆与栈的区别是每个C++编程学习者在学习过程中都需要掌握的重要知识点。在这里,我将会给大家提供一份完整攻略,以帮助大家更好地学习和理解这个概念。 什么是堆和栈 在C++中,堆和栈都是存储数据的地方。其中,栈是由系统自动分配和释放的,它是一块用于临时存储数据的内存空间。而堆则是由开发人员手动分配和释放的用于存储数据的内存空间。 堆和栈的区别 内存释放…

    C 2023年5月22日
    00
  • FFmpeg开发笔记(一)搭建Linux系统的开发环境

    对于初学者来说,如何搭建FFmpeg的开发环境是个不小的拦路虎,因为FFmpeg用到了许多第三方开发包,所以要先编译这些第三方源码,之后才能给FFmpeg集成编译好的第三方库。不过考虑到刚开始仅仅调用FFmpeg的API,不会马上去改FFmpeg的源码,因此只要给系统安装编译好的FFmpeg动态库,即可着手编写简单的FFmpeg程序。比如这个网站https:…

    C语言 2023年4月17日
    00
  • C语言中如何进行网络编程?

    C语言中进行网络编程的步骤大致如下: 创建socket 绑定到一个IP地址和端口号 监听客户端请求 接受客户端连接 发送和接收数据 下面是详细的介绍: 创建socket 在C中使用socket函数来创建socket,语法如下: int socket(int domain, int type, int protocol); 其中,domain参数指定了协议域,…

    C 2023年4月27日
    00
  • C语言 strcoll()函数

    C语言 strcoll()函数使用攻略 一、简介 strcoll()函数是C语言中字符串比较函数之一,用于比较两个字符串的大小。不同于常用的strcmp()函数,strcoll()函数对于某些语言(如汉语、日语等)有更好的支持。 二、函数原型 int strcoll(const char *s1, const char *s2); s1和s2分别表示需要比较…

    C 2023年5月9日
    00
  • python代码实现备忘录案例讲解

    当我们想要记住某些事情时,备忘录是一个非常有用的工具。在这个案例中,我们将通过Python代码实现一个备忘录,方便用户随时记录和查看他们的备忘事项。 1. 创建备忘录类 首先,我们需要创建一个备忘录类,该类将具有添加备忘事项、查看备忘事项以及删除备忘事项的功能。以下是一个简单的备忘录类示例: class Memo: def __init__(self): s…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部