溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++如何實現通訊錄管理系統項目

發布時間:2022-06-21 09:40:23 來源:億速云 閱讀:143 作者:iii 欄目:開發技術

C++如何實現通訊錄管理系統項目

通訊錄管理系統是一個常見的編程練習項目,適合初學者學習和掌握C++的基本語法、數據結構、文件操作等知識。本文將介紹如何使用C++實現一個簡單的通訊錄管理系統。

1. 項目需求分析

通訊錄管理系統的主要功能包括:

  • 添加聯系人:用戶可以輸入聯系人的姓名、電話號碼、電子郵件等信息,并將其保存到系統中。
  • 刪除聯系人:用戶可以通過姓名或電話號碼刪除指定的聯系人。
  • 修改聯系人:用戶可以修改已存在聯系人的信息。
  • 查找聯系人:用戶可以通過姓名或電話號碼查找聯系人。
  • 顯示所有聯系人:系統可以顯示所有已保存的聯系人信息。
  • 保存和加載數據:系統可以將聯系人信息保存到文件中,并在啟動時從文件中加載數據。

2. 數據結構設計

為了實現上述功能,我們需要設計一個合適的數據結構來存儲聯系人信息。每個聯系人可以表示為一個結構體,包含姓名、電話號碼、電子郵件等字段。

struct Contact {
    std::string name;
    std::string phoneNumber;
    std::string email;
};

為了管理多個聯系人,我們可以使用std::vector來存儲所有聯系人信息。

std::vector<Contact> contacts;

3. 功能實現

3.1 添加聯系人

添加聯系人的功能可以通過向contacts向量中插入一個新的Contact對象來實現。

void addContact() {
    Contact newContact;
    std::cout << "Enter name: ";
    std::cin >> newContact.name;
    std::cout << "Enter phone number: ";
    std::cin >> newContact.phoneNumber;
    std::cout << "Enter email: ";
    std::cin >> newContact.email;

    contacts.push_back(newContact);
    std::cout << "Contact added successfully!\n";
}

3.2 刪除聯系人

刪除聯系人可以通過查找指定姓名或電話號碼的聯系人,并將其從contacts向量中移除。

void deleteContact() {
    std::string searchTerm;
    std::cout << "Enter name or phone number to delete: ";
    std::cin >> searchTerm;

    auto it = std::remove_if(contacts.begin(), contacts.end(), [&](const Contact& contact) {
        return contact.name == searchTerm || contact.phoneNumber == searchTerm;
    });

    if (it != contacts.end()) {
        contacts.erase(it, contacts.end());
        std::cout << "Contact deleted successfully!\n";
    } else {
        std::cout << "Contact not found.\n";
    }
}

3.3 修改聯系人

修改聯系人可以通過查找指定姓名或電話號碼的聯系人,并允許用戶修改其信息。

void modifyContact() {
    std::string searchTerm;
    std::cout << "Enter name or phone number to modify: ";
    std::cin >> searchTerm;

    for (auto& contact : contacts) {
        if (contact.name == searchTerm || contact.phoneNumber == searchTerm) {
            std::cout << "Enter new name: ";
            std::cin >> contact.name;
            std::cout << "Enter new phone number: ";
            std::cin >> contact.phoneNumber;
            std::cout << "Enter new email: ";
            std::cin >> contact.email;
            std::cout << "Contact modified successfully!\n";
            return;
        }
    }

    std::cout << "Contact not found.\n";
}

3.4 查找聯系人

查找聯系人可以通過遍歷contacts向量,找到與用戶輸入匹配的聯系人。

void searchContact() {
    std::string searchTerm;
    std::cout << "Enter name or phone number to search: ";
    std::cin >> searchTerm;

    for (const auto& contact : contacts) {
        if (contact.name == searchTerm || contact.phoneNumber == searchTerm) {
            std::cout << "Name: " << contact.name << "\n";
            std::cout << "Phone: " << contact.phoneNumber << "\n";
            std::cout << "Email: " << contact.email << "\n";
            return;
        }
    }

    std::cout << "Contact not found.\n";
}

3.5 顯示所有聯系人

顯示所有聯系人可以通過遍歷contacts向量,并輸出每個聯系人的信息。

void displayAllContacts() {
    if (contacts.empty()) {
        std::cout << "No contacts found.\n";
        return;
    }

    for (const auto& contact : contacts) {
        std::cout << "Name: " << contact.name << "\n";
        std::cout << "Phone: " << contact.phoneNumber << "\n";
        std::cout << "Email: " << contact.email << "\n";
        std::cout << "-------------------\n";
    }
}

3.6 保存和加載數據

為了持久化存儲聯系人信息,我們可以將contacts向量中的數據保存到文件中,并在程序啟動時從文件中加載數據。

void saveContactsToFile(const std::string& filename) {
    std::ofstream file(filename);
    if (file.is_open()) {
        for (const auto& contact : contacts) {
            file << contact.name << "," << contact.phoneNumber << "," << contact.email << "\n";
        }
        file.close();
        std::cout << "Contacts saved to file.\n";
    } else {
        std::cerr << "Unable to open file for saving.\n";
    }
}

void loadContactsFromFile(const std::string& filename) {
    std::ifstream file(filename);
    if (file.is_open()) {
        contacts.clear();
        std::string line;
        while (std::getline(file, line)) {
            Contact contact;
            size_t pos1 = line.find(',');
            size_t pos2 = line.find(',', pos1 + 1);
            contact.name = line.substr(0, pos1);
            contact.phoneNumber = line.substr(pos1 + 1, pos2 - pos1 - 1);
            contact.email = line.substr(pos2 + 1);
            contacts.push_back(contact);
        }
        file.close();
        std::cout << "Contacts loaded from file.\n";
    } else {
        std::cerr << "Unable to open file for loading.\n";
    }
}

4. 主菜單設計

為了方便用戶操作,我們可以設計一個簡單的文本菜單,允許用戶選擇不同的功能。

void displayMenu() {
    std::cout << "1. Add Contact\n";
    std::cout << "2. Delete Contact\n";
    std::cout << "3. Modify Contact\n";
    std::cout << "4. Search Contact\n";
    std::cout << "5. Display All Contacts\n";
    std::cout << "6. Save Contacts to File\n";
    std::cout << "7. Load Contacts from File\n";
    std::cout << "8. Exit\n";
}

int main() {
    int choice;
    std::string filename = "contacts.txt";

    while (true) {
        displayMenu();
        std::cout << "Enter your choice: ";
        std::cin >> choice;

        switch (choice) {
            case 1:
                addContact();
                break;
            case 2:
                deleteContact();
                break;
            case 3:
                modifyContact();
                break;
            case 4:
                searchContact();
                break;
            case 5:
                displayAllContacts();
                break;
            case 6:
                saveContactsToFile(filename);
                break;
            case 7:
                loadContactsFromFile(filename);
                break;
            case 8:
                return 0;
            default:
                std::cout << "Invalid choice. Please try again.\n";
        }
    }

    return 0;
}

5. 總結

通過以上步驟,我們實現了一個簡單的通訊錄管理系統。這個項目涵蓋了C++的基本語法、數據結構、文件操作等知識點,適合初學者練習和鞏固所學內容。當然,這個系統還可以進一步擴展,例如增加分組功能、支持更多字段、優化用戶界面等。希望本文能對你理解和實現通訊錄管理系統有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女