C++实现通讯录管理系统设计

yizhihongxing

C++实现通讯录管理系统设计

通讯录管理系统是一个简单的应用程序,它允许用户存储和管理联系人的信息。该应用程序以简单的控制台界面为用户提供了添加、删除、修改和搜索联系人的功能。

设计思路

设计一个通讯录管理系统,我们需要考虑以下三个关键点:

  1. 数据结构:我们需要选择合适的数据结构来存储联系人的信息,并提供相应的操作,例如添加、删除和搜索。

  2. 用户界面:我们需要为用户提供一个易于使用的界面,用户可以使用一组简单的命令来执行预定义的操作。

  3. 操作实现:我们需要实现一些函数来管理通讯录中的联系人信息,包括添加、删除、修改和搜索功能。这些功能需要访问和修改通讯录的数据结构。

数据结构设计

在本案例中,我们选择vector作为存储通讯录联系人信息的数据结构。vector是C++ STL库中的标准容器,可以实现动态数组。

vector可用于存储所有类型元素,因此我们可以创建一个Contact结构体,该结构体包含联系人姓名、电话号码和电子邮件地址等信息。

struct Contact {
    string Name;
    string PhoneNumber;
    string Email;
};

我们将创建一个全局vector变量contacts,该变量将保存所有联系人的信息。

vector<Contact> contacts;

用户界面设计

我们将用户界面实现为一个控制台应用程序,它将接受用户输入,并通过调用通讯录管理函数来执行操作。 所有与用户的交互都是通过控制台界面实现的。

我们为用户提供以下命令:

  1. add: 添加一个联系人到通讯录。
  2. delete: 删除一个联系人从通讯录。
  3. search: 通过联系人姓名搜索通讯录。
  4. update: 更新现有联系人的信息。
  5. list: 列出所有联系人在通讯录。

函数实现

下面是通讯录管理函数的完整代码:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Contact {
    string Name;
    string PhoneNumber;
    string Email;
};

vector<Contact> contacts;

void addContact() {
    Contact contact;
    cout << endl << "Enter contact name: ";
    getline(cin, contact.Name);
    cout << "Enter phone number: ";
    getline(cin, contact.PhoneNumber);
    cout << "Enter email: ";
    getline(cin, contact.Email);
    contacts.push_back(contact);
    cout << endl << "Contact added!" << endl << endl;
}

void deleteContact() {
    int index;

    cout << endl << "Enter index of contact to delete: ";
    cin >> index;
    cin.ignore();

    if (index >= 0 && index < contacts.size()) {
        contacts.erase(contacts.begin() + index);
        cout << endl << "Contact deleted!" << endl << endl;
    } else {
        cout << endl << "Invalid index!" << endl << endl;
    }
}

void searchContact() {
    string name;
    cout << endl << "Enter contact name to search for: ";
    getline(cin, name);

    bool found = false;
    for (int i = 0; i < contacts.size(); i++) {
        if (contacts[i].Name == name) {
            cout << endl << "Contact found:" << endl;
            cout << "Name: " << contacts[i].Name << endl;
            cout << "Phone: " << contacts[i].PhoneNumber << endl;
            cout << "Email: " << contacts[i].Email << endl << endl;
            found = true;
            break;
        }
    }

    if (!found) {
        cout << endl << "Contact not found!" << endl << endl;
    }
}

void updateContact() {
    int index;

    cout << endl << "Enter index of contact to update: ";
    cin >> index;
    cin.ignore();

    if (index >= 0 && index < contacts.size()) {
        Contact& contact = contacts[index];
        cout << endl << "Enter new contact name (or press enter to keep current name): ";
        string name;
        getline(cin, name);
        if (!name.empty()) {
            contact.Name = name;
        }

        cout << "Enter new phone number (or press enter to keep current phone number): ";
        string phoneNumber;
        getline(cin, phoneNumber);
        if (!phoneNumber.empty()) {
            contact.PhoneNumber = phoneNumber;
        }

        cout << "Enter new email (or press enter to keep current email): ";
        string email;
        getline(cin, email);
        if (!email.empty()) {
            contact.Email = email;
        }
        cout << endl << "Contact updated!" << endl << endl;
    } else {
        cout << endl << "Invalid index!" << endl << endl;
    }
}

void listContacts() {
    if (contacts.empty()) {
        cout << endl << "Your address book is empty!" << endl << endl;
    } else {
        cout << endl << "Your address book contains the following contacts:" << endl << endl;
        for (int i = 0; i < contacts.size(); i++) {
            cout << "Index: " << i << endl;
            cout << "Name: " << contacts[i].Name << endl;
            cout << "Phone: " << contacts[i].PhoneNumber << endl;
            cout << "Email: " << contacts[i].Email << endl << endl;
        }
    }
}

void printMenu() {
    cout << "****Address Book****" << endl << endl;
    cout << "1. Add Contact" << endl;
    cout << "2. Delete Contact" << endl;
    cout << "3. Search Contacts" << endl;
    cout << "4. Update Contact" << endl;
    cout << "5. List All Contacts" << endl;
    cout << "6. Quit" << endl << endl;
    cout << "Please select an option: ";
}

int main() {
    int choice;

    do {
        printMenu();
        cin >> choice;
        cin.ignore();

        switch (choice) {
        case 1:
            addContact();
            break;
        case 2:
            deleteContact();
            break;
        case 3:
            searchContact();
            break;
        case 4:
            updateContact();
            break;
        case 5:
            listContacts();
            break;
        case 6:
            cout << endl << "Goodbye!" << endl << endl;
            break;
        default:
            cout << endl << "Invalid choice!" << endl << endl;
            break;
        }
    } while (choice != 6);

    return 0;
}

示例说明

示例1

在输入数字4后(选中“更新联系人”功能),系统会提示用户输入需要更新的联系人的下标。下标也称为索引,是标识vector容器中元素的数字。下标从零开始计数,因此如果用户输入0,则表示需要更新第一个联系人。如果用户输入2,则表示需要更新第三个联系人。

用户输入数字2,系统会显示以下消息:

Enter index of contact to update:

假设用户输入数字1作为下标值。系统会显示以下消息:

Enter new contact name (or press enter to keep current name):

用户可以根据需要更新联系人的姓名、电话号码和电子邮件地址。如果用户想保持任一字段不变,则可以按Enter键。在本例中,假设用户想更改电子邮件地址,因此他输入以下内容:

Enter new contact name (or press enter to keep current name):
Enter new phone number (or press enter to keep current phone number):
Enter new email (or press enter to keep current email): someoneelse@example.com

完成后系统会显示以下消息:

Contact updated!

现在用户可以选择其他选项,或者退出系统。

示例2

用户可以通过下标删除联系人。在输入数字2后(选中“删除联系人”功能),系统会提示用户输入需要删除的联系人的下标。

用户输入数字0,系统会显示以下消息:

Enter index of contact to delete:

该操作将删除第一个联系人。系统会显示以下消息:

Contact deleted!

在该联系人被从容器中删除后,用户可以选择其他选项,或者退出系统。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现通讯录管理系统设计 - Python技术站

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

相关文章

  • 如何通过UltraEdit解析BMP文件内部结构(BMP位图基础)

    下面我将详细讲解如何通过UltraEdit解析BMP文件内部结构。 准备工作 下载安装UltraEdit 准备一张BMP格式的图片 解析过程 打开UltraEdit软件 打开BMP文件:文件 > 打开 打开文件后,将光标移至字节流数据处,右键点击选择Hex/ASCII菜单,然后点击设置’#’注释符。 在弹出的对话框中,选择无作为注释符,点击确定按钮。 …

    C 2023年5月23日
    00
  • c语言可变参数实现示例

    当我们需要函数接受不定数量的参数时,我们可以使用可变参数函数。在C语言中,可变参数函数可以通过stdarg.h头文件中提供的va_list、va_start、va_arg和va_end这些函数实现。 1. 实现思路 可变参数函数的实现思路如下: 可变参数函数至少需要一个确定数量的参数和一个可变参数列表。 通过va_list类型定义一个变量来存储可变参数列表,…

    C 2023年5月23日
    00
  • C++ 关键字 inline详细介绍

    当编译器遇到 inline 关键字时,它会像宏一样展开代码。然而,inline 关键字与宏不同,因为编译器将方法调用直接替换成方法的内联代码。此附加信息提示编译器尝试内联代码,但它仍然可以在不允许内联的情况下编译成标准代码。 含义 inline 可以是优化程序效率的一种方式。在调用方法时,程序通常将返回地址、参数等转换为栈中的堆栈桢,再将数据复制到堆栈中。这…

    C 2023年5月30日
    00
  • C++实现简单通讯录管理系统

    C++实现简单通讯录管理系统攻略 目标 实现一个简单的通讯录管理系统,可以进行添加联系人、删除联系人、修改联系人和显示联系人等操作。程序的主要功能如下: 添加联系人:输入姓名、性别、年龄、电话及地址信息,添加一个联系人信息到通讯录中。 显示联系人:显示通讯录中的所有联系人信息。 删除联系人:输入要删除联系人的姓名,从通讯录中删除该联系人的信息。 查找联系人:…

    C 2023年5月23日
    00
  • C语言 动态内存分配的详解及实例

    C语言 动态内存分配的详解及示例 什么是动态内存分配 在编程中,有时我们需要根据实际情况动态地分配内存空间,而不是在编写时就预先分配好。这种内存分配方式被称为动态内存分配。动态内存分配可以避免预分配内存的浪费,同时还可以根据需要扩充内存。 C语言中提供了四个用于动态内存分配的库函数,分别是 malloc、calloc、realloc 和 free。 mall…

    C 2023年5月23日
    00
  • C程序 查找两个数字的最小公倍数

    首先,在你的网站上创建一个名为“C程序 查找两个数字的最小公倍数”的页面或文章,为其添加一个适当的标题。 在页面中,先简要介绍最小公倍数的概念和计算方法。可以引用一些相关的数学知识。 给出代码的具体说明。可以使用代码块标记,将代码复制到文本编辑器中然后添加到文章中。代码需要包含详细的注释,以便读者理解其逻辑。 给出一个简单示例,用于说明程序如何工作。比如,可…

    C 2023年5月9日
    00
  • Mysql基础之常见函数

    Mysql基础之常见函数 在Mysql中,除了基本的SQL语句外,还有很多内置函数可以方便我们进行数据操作。下面列举了一些常见的Mysql函数: 字符串函数 CONCAT(str1, str2, …) 将多个字符串拼接在一起,返回一个新的字符串。其参数可以是任意个字符串,拼接的顺序是按照参数顺序来的。 示例: SELECT CONCAT(‘Hello’,…

    C 2023年5月22日
    00
  • Win8.1系统开机蓝屏提示STOP:c0000221 unknown Hard Error的解决方法

    Win8.1系统开机蓝屏提示STOP:c0000221 unknown Hard Error可能是因为硬件故障、系统文件损坏或错误的硬件驱动等原因引起的。这个问题需要根据具体情况进行处理,下面是一些可能有用的解决方法: 一、检查硬件设备 硬件故障是导致Win8.1系统开机蓝屏提示STOP:c0000221 unknown Hard Error的一个常见原因。…

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