利用C++制作简易的通讯录管理系统

利用C++制作一个通讯录管理系统。

每一个联系人信息包括:姓名 性别 年龄 电话 住址。 

功能包括:按1、添加联系人 按2、显示联系人 按3、删除联系人 按4、查找联系人 按5、修改联系人 按6、清空联系人 按0、退出通讯录。

要求利用数组,指针,不使用#include <vector>, 可以做到按任意键后合理化清屏。

#include <iostream>
#include <string>
#include <iomanip>
#include <cstdlib>

using namespace std;

const int MAX_CONTACTS = 100; // 最大联系人数量

struct Contact {
    string name;    // 姓名
    string gender;  // 性别
    int age;        // 年龄
    string phone;   // 电话
    string address; // 住址
};

class AddressBook {
private:
    Contact contacts[MAX_CONTACTS]; // 保存联系人信息的数组
    int contactCount;                // 当前联系人数量

public:
    AddressBook() : contactCount(0) {} // 初始化联系人数量为0

    // 添加联系人
    void addContact() {
        if (contactCount >= MAX_CONTACTS) {
            cout << "通讯录已满,无法添加更多联系人!" << endl;
            return;
        }
        
        Contact &contact = contacts[contactCount];
        cout << "请输入联系人姓名: ";
        cin >> contact.name;
        cout << "请输入联系人性别: ";
        cin >> contact.gender;
        cout << "请输入联系人年龄: ";
        cin >> contact.age;
        cout << "请输入联系人电话: ";
        cin >> contact.phone;
        cout << "请输入联系人住址: ";
        cin.ignore(); // 清除换行符
        getline(cin, contact.address);
        contactCount++;
        cout << "联系人添加成功!" << endl;
    }

    // 显示所有联系人
    void displayContacts() {
        if (contactCount == 0) {
            cout << "通讯录为空!" << endl;
            return;
        }
        
        cout << left << setw(20) << "姓名" << setw(10) << "性别" 
             << setw(10) << "年龄" << setw(20) << "电话" << "住址" << endl;
        for (int i = 0; i < contactCount; ++i) {
            cout << left << setw(20) << contacts[i].name 
                 << setw(10) << contacts[i].gender 
                 << setw(10) << contacts[i].age 
                 << setw(20) << contacts[i].phone 
                 << contacts[i].address << endl;
        }
    }

    // 删除联系人
    void deleteContact() {
        string name;
        cout << "请输入要删除的联系人姓名: ";
        cin >> name;

        for (int i = 0; i < contactCount; ++i) {
            if (contacts[i].name == name) {
                // 将最后一个联系人移到当前位置,形成"挤压"效果
                contacts[i] = contacts[--contactCount];
                cout << "联系人删除成功!" << endl;
                return;
            }
        }
        cout << "未找到联系人!" << endl;
    }

    // 查找联系人
    void findContact() {
        string name;
        cout << "请输入要查找的联系人姓名: ";
        cin >> name;

        for (int i = 0; i < contactCount; ++i) {
            if (contacts[i].name == name) {
                cout << "姓名: " << contacts[i].name 
                     << ", 性别: " << contacts[i].gender 
                     << ", 年龄: " << contacts[i].age 
                     << ", 电话: " << contacts[i].phone 
                     << ", 住址: " << contacts[i].address << endl;
                return;
            }
        }
        cout << "未找到联系人!" << endl;
    }

    // 修改联系人信息
    void modifyContact() {
        string name;
        cout << "请输入要修改的联系人姓名: ";
        cin >> name;

        for (int i = 0; i < contactCount; ++i) {
            if (contacts[i].name == name) {
                cout << "请输入新的性别: ";
                cin >> contacts[i].gender;
                cout << "请输入新的年龄: ";
                cin >> contacts[i].age;
                cout << "请输入新的电话: ";
                cin >> contacts[i].phone;
                cout << "请输入新的住址: ";
                cin.ignore(); // 清除换行符
                getline(cin, contacts[i].address);
                cout << "联系人修改成功!" << endl;
                return;
            }
        }
        cout << "未找到联系人!" << endl;
    }

    // 清空所有联系人
    void clearContacts() {
        contactCount = 0; // 重置联系人数量
        cout << "通讯录已清空!" << endl;
    }
};

// 清屏函数
void clearScreen() {
#ifdef _WIN32
    system("cls");  // Windows系统
#else
    system("clear"); // Linux/macOS系统
#endif
}

// 等待用户按任意键继续
void waitForKeyPress() {
    system("pause");
}

int main() {
    AddressBook addressBook; // 创建地址簿对象
    int choice; // 用户选择

    do {
        clearScreen(); // 每次循环清屏
        cout << "==========通讯录管理系统=========" << endl;
        cout << "*********************************" << endl;
        cout << "********* 1. 添加联系人 *********" << endl;
        cout << "********* 2. 显示联系人 *********" << endl;
        cout << "********* 3. 删除联系人 *********" << endl;
        cout << "********* 4. 查找联系人 *********" << endl;
        cout << "********* 5. 修改联系人 *********" << endl;
        cout << "********* 6. 清空联系人 *********" << endl;
        cout << "********* 0. 退出系统   *********" << endl;
        cout << "*********************************" << endl;
        cout << "请输入选择: ";
        cin >> choice;

        switch (choice) {
            case 1:
                addressBook.addContact();
                waitForKeyPress();
                break;
            case 2:
                addressBook.displayContacts();
                waitForKeyPress();
                break;
            case 3:
                addressBook.deleteContact();
                waitForKeyPress();
                break;
            case 4:
                addressBook.findContact();
                waitForKeyPress();
                break;
            case 5:
                addressBook.modifyContact();
                waitForKeyPress();
                break;
            case 6:
                addressBook.clearContacts();
                waitForKeyPress();
                break;
            case 0:
                cout << "退出通讯录管理系统!" << endl;
                break;
            default:
                cout << "无效选择,请重新输入!" << endl;
                waitForKeyPress();
        }

    } while (choice != 0); // 继续循环,直到用户选择退出

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值