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

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日

相关文章

  • 学习C++编程的必备软件

    下面我将为您详细讲解“学习C++编程的必备软件”的完整攻略。 学习C++编程的必备软件 1. C++编译器 C++编译器是你学习编程时必备的工具之一。编译器负责将写好的C++程序翻译成机器可以理解的语言,让计算机可以运行它。以下是几个常用的C++编译器: Visual Studio:Visual Studio是一个非常强大的开发环境,附带了C++编译器和许多…

    C 2023年5月23日
    00
  • C语言零基础入门(2)

    当学习C语言的时候,需要掌握很多基础知识,掌握这些知识才能正常地写出代码。本文将解释C语言的入门知识。 变量 变量指代内存数据。变量有多个类型,包括整数、浮点数、字符等等。编程时必须考虑变量的类型,这会对程序产生不同的影响。 声明变量 在C语言中,需要先声明一个变量,然后才能使用它,如下所示: int num; float x; char letter; 这…

    C 2023年5月23日
    00
  • 写给菜鸟—可逆和不可逆加解密算法原理

    写给菜鸟—可逆和不可逆加解密算法原理 随着信息技术的发展,数据安全问题越来越受到人们的关注。加密算法是一种重要的数据安全手段。本文将详细介绍可逆和不可逆加解密算法的原理和应用。 可逆加解密算法 可逆加解密算法即加密和解密使用同一种算法,在经过一定的处理后,原明文可以恢复。流行的可逆加解密算法包括DES(Data Encryption Standard)和AE…

    C 2023年5月23日
    00
  • C 标准库 float.h

    C 标准库的 float.h 头文件包含了浮点型数值的一些有用的常量和宏定义。这些常量和宏定义可以帮助我们在程序中进行更精确的浮点数计算。 下面是一些 float.h 头文件中常用的常量和宏定义: 常量 FLT_RADIX:浮点数基数,即底数的数值。 FLT_MANT_DIG:最大二进制位数,通常是23。 DBL_MANT_DIG:一个 double 类型变…

    C 2023年5月10日
    00
  • json简单介绍

    下面我来为你详细讲解关于“JSON简单介绍”的完整攻略。 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它采用类似于 JavaScript 对象字面量的语法,易于人阅读和编写,同时也易于机器解析和生成。JSON是一种文本格式,可以被任何编程语言解析和生成,不依赖于任何语言环境。 JSON的语法规…

    C 2023年5月23日
    00
  • C语言如何计算字符串长度

    计算字符串长度是一种常见的字符串操作。在C语言中,字符串是以null字符 (‘\0’) 作为结束符的字符数组,因此计算字符串长度可以通过统计数组中的字符数来实现。下面是计算字符串长度的完整攻略: 方法一:使用标准库函数strlen() C语言标准库提供了一个函数strlen(),它可以非常方便地计算字符串的长度。该函数的定义如下: size_t strlen…

    C 2023年5月23日
    00
  • C++实现大数相乘算法

    C++ 实现大数相乘算法 当我们需要计算两个超出计算机整数范围的大数相乘时,传统的计算方法已经无法满足需求,因此需要寻找一种适合大数相乘的算法。本文将介绍一种针对大数相乘的算法 – Karatsuba乘法,并使用C++语言进行实现。 Karatsuba 乘法的原理 Karatsuba 乘法的基本思想是将两个大数a和b分别划分为高位和低位,进而利用递归的方法将…

    C 2023年5月22日
    00
  • 详解C++编程中的析构函数

    详解C++编程中的析构函数 在C++编程中,类的析构函数是很重要的一部分。它用于在对象的生命周期结束时执行清理工作,比如释放内存或关闭文件。本篇文章将详细讲解C++编程中的析构函数,包括如何定义析构函数、析构函数的执行顺序、析构函数的调用方式以及一些使用析构函数的示例。 定义析构函数 类的析构函数是在对象销毁时自动调用的函数,因此不需要手动调用。析构函数必须…

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