<简易>通讯录管理系统(C++)

#include<iostream>
using namespace std;
#include<string>
#define MAX 1000

//* 封装函数显示该界面  如 `void showMenu()`
//* 在main函数中调用封装好的函数


//菜单界面
void showMenu() {

    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;

}

//联系人结构体
struct Person {

    string m_Name;//姓名
    int m_Sex;//性别:1男 2女
    int m_Age;//年龄
    string m_Phone;//电话号码
    string m_Adress;//家庭住址
};

//通讯录结构体
struct Adressbooks {

    struct Person personArray[MAX];
    int m_Size;
};

//1.添加联系人
void addPerson(Adressbooks * abs) {

    //首先判断通讯录是否达到最大值,用户还能否继续添加联系人
    if (abs->m_Size == MAX) {

        cout << "通讯录已满,请删除一些联系人后再尝试添加!" << endl;
    }
    else {

        //添加具体联系人

        //姓名
        string name;
        cout << "请输入一个姓名:" << endl;
        cin >> name;
        abs->personArray[abs->m_Size].m_Name = name;

        //性别
        int sex = 0;//1男2女
        cout << "请输入性别:" << endl;
        cout << "1代表男" << endl;
        cout << "2代表女" << endl;

        
        while (true) {

            //如果输入的性别是1或2可以退出循环,因为输入的是正确值
            //如果输入有误,重新输入
            cin >> sex;
            if (sex == 1 || sex == 2) {

                abs->personArray[abs->m_Size].m_Sex = sex;
                break;
            }
            else {

                cout << "您输入的性别有误,请重新输入" << endl;
            }
        }
        

        //年龄
        int age = 0;
        cout << "请输入年龄:" << endl;
        cin >> age;
        abs->personArray[abs->m_Size].m_Age = age;


        //联系电话
        string num;
        cout << "请输入联系电话:" << endl;
        cin >> num;
        abs->personArray[abs->m_Size].m_Phone = num;


        //家庭住址
        string adress;
        cout << "请输入家庭住址:" << endl;
        cin >> adress;
        abs->personArray[abs->m_Size].m_Adress = adress;

        //所有信息录入后,及时更新通讯录人数
        abs->m_Size++;

        cout << "添加新联系人成功" << endl;

        system("pause");//请按任意键继续
        system("cls");//清屏操作
    }
}

//2.显示所有联系人
void showPerson(Adressbooks * abs) {

    //首先判断联系人是否为空
    if (abs->m_Size == 0) {

        cout << "当前通讯录中没有联系人!" << endl;

    }
    else {

        for (int i = 0; i < abs->m_Size; i++) {

            //依次输出联系人信息
            cout << "姓名:  " << abs->personArray[i].m_Name << "\t";
            cout << "性别:  " << (abs->personArray[i].m_Sex == 1 ? "" : "") << "\t";
            cout << "年龄:  " << abs->personArray[i].m_Age << "\t";
            cout << "联系电话:  " << abs->personArray[i].m_Phone << "\t";
            cout << "家庭住址:  " << abs->personArray[i].m_Adress << endl;
        }

    }

    system("pause");
    system("cls");
}

//3.删除联系人
//3.1.检测联系人是否存在
//如果存在,返回该联系人在数组中的具体位置,不存在返回-1;
int isExist(Adressbooks* abs, string name) {

    //遍历通讯录
    for (int i = 0; i < abs->m_Size; i++) {

        if (abs->personArray[i].m_Name == name) {

            return i;//找到了,返回联系人所在数组位置
        }
    }
    return -1;//没找到,返回-1
}

//3.2
void deletePerson(Adressbooks * abs) {

    cout << "请输入您要删除的联系人" << endl;
    string name;
    cin >> name;

    int ret = isExist(abs, name);//接收关于查找联系人的判断值
    if (ret == -1) {

        cout << "查无此人" << endl;
    }
    else {

        //从查找到联系人的位置开始
        //将后一个联系人的信息覆盖掉前一个联系人的信息
        //依次实现删除某个联系人的操作
        for (int i = ret; i < abs->m_Size;i++) {

            abs->personArray[i] = abs->personArray[i + 1];

        }

        //删除后及时更新通讯录
        abs->m_Size--;
        cout << "删除成功" << endl;

    }

    system("pause");
    system("cls");
}

//4.查找联系人
void findPerson(Adressbooks * abs) {

    //判断所查找联系人是否存在
    //若存在则输出其详细信息
    //若不存在则输出查无此人
    cout << "请输入您要查找的联系人" << endl;
    string name;
    cin >> name;

    int ret = isExist(abs, name);
    if (ret == -1) {

        cout << "查无此人" << endl;
    }
    else {

        cout << "姓名:  " << abs->personArray[ret].m_Name << endl;
        cout << "性别:  " << (abs->personArray[ret].m_Sex==1?"":"") << endl;
        cout << "年龄:  " << abs->personArray[ret].m_Age << endl;
        cout << "电话:  " << abs->personArray[ret].m_Phone << endl;
        cout << "住址:  " << abs->personArray[ret].m_Adress << endl;
    }

    system("pause");
    system("cls");
}

//5.修改联系人
void modifyPerson(Adressbooks * abs) {

    //判断是否存在该联系人
    cout << "请输出您要修改的联系人" << endl;
    string name;
    cin >> name;
    int ret = isExist(abs, name);

    //不存在则显示查无此人
    if (ret == -1) {

        cout << "查无此人" << endl;
    }
    else {//存在则进行修改

        //姓名
        string name;
        cout << "请输入姓名:" << endl;
        cin >> name;
        abs->personArray[ret].m_Name = name;

        //性别
        int sex = 0;//1男2女
        cout << "请输入性别:" << endl;
        cout << "1代表男" << endl;
        cout << "2代表女" << endl;


        while (true) {

            //如果输入的性别是1或2可以退出循环,因为输入的是正确值
            //如果输入有误,重新输入
            cin >> sex;
            if (sex == 1 || sex == 2) {

                abs->personArray[ret].m_Sex = sex;
                break;
            }
            else {

                cout << "您输入的性别有误,请重新输入" << endl;
            }
        }


        //年龄
        int age = 0;
        cout << "请输入年龄:" << endl;
        cin >> age;
        abs->personArray[ret].m_Age = age;


        //联系电话
        string num;
        cout << "请输入联系电话:" << endl;
        cin >> num;
        abs->personArray[ret].m_Phone = num;


        //家庭住址
        string adress;
        cout << "请输入家庭住址:" << endl;
        cin >> adress;
        abs->personArray[ret].m_Adress = adress;
    }

    system("pause");
    system("cls");
    
}


//6.清空联系人
void cleanPerson(Adressbooks* abs) {

    //首先添加判断,确认用户是否真的想清空联系人
    //防止误操作
    cout << "您确认要清空所有用户吗?" << endl;
    cout << "输入1确认" << endl;
    cout << "输入其他则取消" << endl;

    string num;
    cin >> num;
    
    if (num == "1") {//确认删除

        //接着将通讯录用户数设为0
        //实现逻辑清空
        abs->m_Size = 0;
        cout << "通讯录已清空" << endl;
        
    }
    else {//取消删除

        cout << "取消当前操作" << endl;
    }

    system("pause");
    system("cls");
    
}

//主函数
int main() {

    //创建通讯录结构体变量
    Adressbooks abs;
    //初始化通讯录中当前人员个数
    abs.m_Size = 0;

    int select = 0;

    while (true) {

        showMenu();

        cin >> select;

        switch (select) {

        case 1://添加联系人
            addPerson(&abs);//利用地址传递,可以修饰实参
            break;

        case 2://显示联系人
            showPerson(&abs);
            break;

        case 3://删除联系人
            deletePerson(&abs);
            break;

        case 4://查找联系人
            findPerson(&abs);
            break;

        case 5://修改联系人
            modifyPerson(&abs);
            break;

        case 6://清空联系人
            cleanPerson(&abs);
            break;

        case 0://退出通讯录
            cout << "欢迎下次使用" << endl;
            system("pause");
            return 0;
            break;

        default:
            cout << "输入命令数字有误,请输入0-6间的整数"<<endl;
            break;

        }


    }

    system("pause");

    return 0;
}
View Code

效果图:

首页:

 

 

1.添加联系人

 

 

 2.显示联系人

 

 3.删除联系人

 

 

 

 

4.查找联系人

 

 5.修改联系人

 

 

 

 6.清空联系人

 

 

 

 

---------------------------------------------------------------------------------------

JAVA转C++了,还是个菜鸟,继续加油吧!!!!!

(PS:一个人的第二十三年,期待下一个二十三年!)

posted @ 2023-02-14 11:00  叶落知秋max  阅读(26)  评论(0编辑  收藏  举报