用C++面向对象程序设计思想编写通讯录管理系统源码

用C++面向对象程序设计思想编写通讯录管理系统

问题描述:

编写一个简单的通讯录管理程序。

通讯录记录有姓名,地址(省、市(县)、街道),电话号码, 邮政编码等四项。

基本要求:

程序应提供的基本管理功能有:

1)添加:即增加一个人的记录到通信录中

2)显示:即在屏幕上显示所有通信录中的人员信息,应能分屏显示。

3)存储:即将通讯录信息保存在一个文件中。

4)装入:即将文件中的信息读入程序。

5)查询:可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码和邮政编码。

6)修改:可修改一个人的除姓名外其它信息。 测试数据:程序应输入不少于10个人员的通讯录信息,应考虑到人员可以同名的情况。

案例代码

以下是使用C++面向对象程序设计思想编写的通讯录管理程序:

#include<iostream>
#include<string>
#include<vector>
#include<fstream>

using namespace std;

// 定义通讯录记录类
class Contact {
private:
    string name;
    string province;
    string city;
    string street;
    string phoneNumber;
    string postalCode;

public:
    Contact(string name, string province, string city, string street, string phoneNumber, string postalCode) {
        this->name = name;
        this->province = province;
        this->city = city;
        this->street = street;
        this->phoneNumber = phoneNumber;
        this->postalCode = postalCode;
    }

    // 获取姓名
    string getName() {
        return name;
    }

    // 获取地址
    string getAddress() {
        return province + city + street;
    }

    // 获取电话号码
    string getPhoneNumber() {
        return phoneNumber;
    }

    // 获取邮政编码
    string getPostalCode() {
        return postalCode;
    }

    // 修改地址
    void setAddress(string province, string city, string street) {
        this->province = province;
        this->city = city;
        this->street = street;
    }

    // 修改电话号码
    void setPhoneNumber(string phoneNumber) {
        this->phoneNumber = phoneNumber;
    }

    // 修改邮政编码
    void setPostalCode(string postalCode) {
        this->postalCode = postalCode;
    }

    // 显示通讯录记录
    void display() {
        cout << "姓名:" << name << endl;
        cout << "地址:" << getAddress() << endl;
        cout << "电话号码:" << phoneNumber << endl;
        cout << "邮政编码:" << postalCode << endl;
    }

};

// 定义通讯录管理类
class ContactManager {
private:
    vector<Contact> contacts;

    // 根据姓名查找联系人
    Contact* findByName(string name) {
        for (int i = 0; i < contacts.size(); i++) {
            if (contacts[i].getName() == name) {
                return &contacts[i];
            }
        }
        return nullptr;
    }

public:
    // 添加联系人
    void addContact(Contact contact) {
        contacts.push_back(contact);
    }

    // 显示所有联系人
    void displayAllContacts() {
        for (int i = 0; i < contacts.size(); i++) {
            contacts[i].display();
            cout << endl;
        }
    }

    // 存储联系人信息到文件
    void saveToFile(string filename) {
        ofstream file(filename);

        if (file.is_open()) {
            for (int i = 0; i < contacts.size(); i++) {
                file << contacts[i].getName() << endl;
                file << contacts[i].getAddress() << endl;
                file << contacts[i].getPhoneNumber() << endl;
                file << contacts[i].getPostalCode() << endl;
            }
            file.close();
            cout << "通讯录信息已保存到文件:" << filename << endl;
        }
        else {
            cout << "无法打开文件:" << filename << endl;
        }
    }

    // 从文件中加载联系人信息
    void loadFromFile(string filename) {
        ifstream file(filename);

        if (file.is_open()) {
            contacts.clear();
            string name, province, city, street, phoneNumber, postalCode;

            while (getline(file, name)) {
                getline(file, province);
                getline(file, city);
                getline(file, street);
                getline(file, phoneNumber);
                getline(file, postalCode);

                Contact contact(name, province, city, street, phoneNumber, postalCode);
                contacts.push_back(contact);
            }

            file.close();
            cout << "从文件加载通讯录信息:" << filename << endl;
        }
        else {
            cout << "无法打开文件:" << filename << endl;
        }
    }

    // 根据姓名查询联系人信息
    void searchByName(string name) {
        Contact* contact = findByName(name);

        if (contact != nullptr) {
            contact->display();
        }
        else {
            cout << "未找到姓名为:" << name << " 的联系人" << endl;
        }
    }

    // 修改联系人信息
    void modifyContact(Contact contact, string name) {
        Contact* foundContact = findByName(name);

        if (foundContact != nullptr) {
            foundContact->setAddress(contact.getAddress());
            foundContact->setPhoneNumber(contact.getPhoneNumber());
            foundContact->setPostalCode(contact.getPostalCode());
            cout << "成功修改联系人信息" << endl;
        }
        else {
            cout << "未找到姓名为:" << name << " 的联系人" << endl;
        }
    }
};

int main() {
    ContactManager contactManager;
    string name, province, city, street, phoneNumber, postalCode;

    // 输入联系人信息
    for (int i = 0; i < 10; i++) {
        cout << "请输入联系人姓名:";
        cin >> name;
        cout << "请输入联系人地址:";
        cin >> province >> city >> street;
        cout << "请输入联系人电话号码:";
        cin >> phoneNumber;
        cout << "请输入联系人邮政编码:";
        cin >> postalCode;

        Contact contact(name, province, city, street, phoneNumber, postalCode);
        contactManager.addContact(contact);
    }

    // 显示所有联系人信息
    cout << "所有联系人信息:" << endl;
    contactManager.displayAllContacts();

    // 保存联系人信息到文件
    contactManager.saveToFile("contacts.txt");

    // 从文件加载联系人信息
    contactManager.loadFromFile("contacts.txt");

    // 根据姓名查询联系人信息
    cout << "请输入要查询的联系人姓名:";
    cin >> name;
    contactManager.searchByName(name);

    // 修改联系人信息
    cout << "请输入要修改的联系人姓名:";
    cin >> name;
    cout << "请输入新的联系人信息:" << endl;
    cout << "请输入联系人地址:";
    cin >> province >> city >> street;
    cout << "请输入联系人电话号码:";
    cin >> phoneNumber;
    cout << "请输入联系人邮政编码:";
    cin >> postalCode;
    Contact modifiedContact(name, province, city, street, phoneNumber, postalCode);
    contactManager.modifyContact(modifiedContact, name);

    return 0;
}

以上代码实现了基本的通讯录管理功能,可以添加、显示、存储、装入、查询和修改通讯录记录。用户可以输入不少于10个人员的通讯录信息,并且程序考虑了人员可以同名的情况。通讯录信息会被保存到文件中,用户也可以从文件中加载通讯录信息。用户可以根据姓名查询某人的相关信息,并且可以修改某人的除姓名外的其他信息。

© 版权声明
THE END
喜欢就支持一下吧
点赞7赞赏 分享