首页 > 编程语言 ><简易>通讯录管理系统(C++)

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

时间:2023-02-14 11:13:13浏览次数:52  
标签:cout 管理系统 联系人 C++ abs 通讯录 personArray Size ret

#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:一个人的第二十三年,期待下一个二十三年!)

标签:cout,管理系统,联系人,C++,abs,通讯录,personArray,Size,ret
From: https://www.cnblogs.com/yeluozhiqiumax/p/17118945.html

相关文章

  • C++奥赛一本通递推题解
    title:C++奥赛一本通刷题记录(递推)date:2017-11-08tags:一本通openjudegecategories:OIC++奥赛一本通刷题记录(递推)2017.11.8Bygwj1139177410斐波那契数列​​op......
  • C++奥赛一本通排序题解
    title:C++奥赛一本通刷题记录(排序)date:2017-11-16tags:一本通openjudegecategories:OIC++奥赛一本通刷题记录(排序)2017.11.16Bygwj1139177410都是拿STL水的…别......
  • C++奥赛一本通刷题高精度题解
    title:C++奥赛一本通刷题记录(高精度)date:2017-11-15tags:一本通openjudegecategories:OIC++奥赛一本通刷题记录(高精度)2017.11.15Bygwj1139177410大整数加法​......
  • C++ dll实例
    动态链接库的制作:Windows桌面向导-应用程序类型:动态链接库(.dll)空项目 MyDynamicLib头文件声明函数时,在前面加上extern"C"__declspec(dllexport)1//MyDynami......
  • C++ Lib实例
    Lib文件的调用:1.生成的Lib文件和对应的头文件[MyStaticLib.h StaticLib.lib]复制到工程目录2.将2个文件[MyStaticLib.h StaticLib.lib]导入工程1#include<iost......
  • C++开发原生WIN32程序
    VS2019文件-新建-项目-Windows桌面向导(C++)-桌面应用程序 空项目项目属性-高级-字符集未设置程序内所有字符串用TEXT宏包裹1#include<windows.h>23LONGWI......
  • Making a Plugin System with c++
      cplusplus.comTUTORIALS REFERENCE ARTICLES FORUM signup login[Legacyversion]C++TutorialsReferenceArticlesForum......
  • 【C++复习】运算符重载中的特殊运算符
    无法被重载类属关系运算符 .成员指针运算符 .*作用域分辨符 ::三目运算符 ?:只能通过成员函数重载赋值运算符=方括号[]圆括号()指向结构体成员运算符->......
  • 【C++复习】同名函数判断条件(重载,隐藏,覆盖)
    1、重载以下条件要全部满足:函数名相同以下条件满足其1:函数形参数目不同函数形参类型不同注意:不看返回值调用形式要不同//下面两个函数不能重载fun(inta,......
  • C/C++多线程实现龟兔赛跑
    题⽬:⻳兔赛跑跑道距离50⽶乌⻳(⼀个线程)每秒3⽶不睡觉;兔⼦(⼀个线程)每秒5⽶每跑15⽶睡2秒钟。请模拟⽐赛情况:#include<iostream>#include<thread>#include<......