C++通讯录系统(含完整代码和详细注释)

功能说明

含有以下几个主要功能:

  • 添加联系人,包括联系人姓名、性别、年龄、电话和家庭住址,上限2000人
  • 显示通讯录中所有联系人的信息
  • 按照姓名删除指定联系人
  • 按照姓名查找指定联系人信息
  • 按照姓名修改指定联系人信息
  • 清空通信录中所有信息(逻辑清除)
  • 退出通信录

代码

/*
 * File name:main.cpp
 * Author:ORI
 * Versio:V1.0
 * Description:通讯录管理系统。含有菜单、退出、添加联系人、显示联系人
 *              删除联系人、查找联系人、修改联系人和清空联系人的功能。
 * Others:
 * Log:初版 2021/1/30 ori创建
 */

#include 
#include 
using namespace std;

#define MAX 2000    /* 通讯录最大人数 */

/* 定义联系人结构体 */
struct Person{

    string m_Name;  /* 姓名 */
    int m_Sex;      /* 性别 1_男 2_女 */
    int m_Age;      /* 年龄 */
    string m_Phone; /* 电话 */
    string m_Addr;  /* 地址 */
};

/* 定义通讯录结构体 */
struct Addressbooks{
    struct Person personArray[MAX]; /* 通讯录中保存联系人数组 */
    int m_size;                     /* 当前记录联系人个数 */
};



/*
 * @Description : 实现菜单页面
 * @param 		: 无
 * @return 		: 无
 */
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;

}

/*
 * @Description : 添加联系人
 * @param - abe : 通讯录结构体变量
 * @return 		: 若通讯录已满,返回0
 */
void addPerson(Addressbooks *abs)
{
    /* 判断人数是否已满 */
    if(abs->m_size == MAX){
        cout << "通讯录已满,无法添加!" << endl;
        return;
    }
    else{
        /* 添加联系人 */
        /* 添加姓名 */
        string name1;
        cout << "请输入姓名:" << endl;
        cin >> name1;
        abs->personArray[abs->m_size].m_Name = name1;

        /* 添加性别 */
        int sex = 0;
        cout << "请输入性别:" << endl;
        cout << "1 --- 男" << endl;
        cout << "2 --- 女:" << endl;
        while (true) {
            /* 判断输入是否有误,若有错误则重新输入 */
            cin >> sex;
            if (sex == 1 || sex == 2) {
                abs->personArray[abs->m_size].m_Sex = sex;
                break;
            } else {
                cout << "输入格式不正确!" << endl;
            }
        }

        /* 添加年龄 */
        int age = 0;
        cout << "请输入年龄:" << endl;
        while (true) {
            /* 判断输入是否有误,若有错误则重新输入 */
            cin >> age;
            if (age > 0 && age <= 120) {
                abs->personArray[abs->m_size].m_Age = age;
                break;
            } else {
                cout << "输入数值不正确!" << endl;
            }
        }

        /* 添加电话 */
        string phone;
        cout << "请输入联系电话:" << endl;
        cin >> phone;
        abs->personArray[abs->m_size].m_Phone = phone;

        /* 添加住址 */
        string address;
        cout << "请输入住址:" << endl;
        cin >> address;
        abs->personArray[abs->m_size].m_Addr = address;

        /* 更新通讯录人数 */
        abs->m_size++;

        cout << "添加成功" << endl;

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

    }

}

/*
 * @Description : 显示联系人
 * @param - abs	: 通讯录结构体变量
 * @return 		: 无
 */
void showPerson(Addressbooks *abs)
{
    /* 判断通讯录是否为空 */
    if (abs->m_size == 0){
        cout << "当前记录为空" << endl;
    }
    else{
        for (int i = 0; i < abs->m_size; i++) {
            cout << "姓名:" << abs->personArray[i].m_Name << endl;
            cout << "性别:" << (abs->personArray[i].m_Sex == 1 ? "男" : "女")
                 << endl;
            cout << "年龄:" << abs->personArray[i].m_Age << endl;
            cout << "电话:" << abs->personArray[i].m_Phone << endl;
            cout << "住址:" << abs->personArray[i].m_Addr << endl;
            cout << endl;
        }
    }

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

}

/*
 * @Description : 检测联系人是否存在
 * @param - abs : 通讯录
 * @param - name : 对比名字
 * @return 		: 如果存在,返回联系人所在数组中的具体位置;
 *                如果不存在,返回 -1
 */
int isExist(Addressbooks *abs, string name)
{
    for (int i = 0; i < abs->m_size; i++){
        /* 如果找到了一样的用户 */
        if (abs->personArray[i].m_Name == name){
            return i;
        }
    }
    return -1;

}

/*
 * @Description : 删除指定联系人
 * @param - abs	: 通讯录结构体变量
 * @return 		: 无
 */
void deletePerson(Addressbooks *abs)
{
    cout << "请输入您要删除的联系人" << endl;

    string name;
    cin >> name;

    /*
     * ret == -1 未查到
     * ret != -1 查到
     */
    int ret = isExist(abs, name);

    if (ret != -1){
        /* 查找到此人,进行删除操作 */
        for (int i = ret; i < abs->m_size; i++){
            /* 从此人开始,将后一个数据覆盖到前一个数据的位置上,从而实现删除功能 */
            abs->personArray[i] = abs->personArray[i+1];
        }

        /* 更细通讯录人数 */
        abs->m_size--;

        cout << "删除联系人成功" << endl;

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

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

}

/*
 * @Description : 查找指定联系人信息
 * @param - abs	: 通讯录结构体变量
 * @return 		: 无
 */
void findPerson(Addressbooks *abs)
{
    cout << "请输入您要查找的联系人" << endl;

    string name;
    cin >> name;

    /*
     * 判断指定的联系人是狗存在通讯录中
     * ret == -1 未查到
     * ret != -1 查到
     */
    int ret = isExist(abs, name);

    if (ret != -1){
        /* 查找到此人,进行操作 */
        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_Addr << endl;
        cout << endl;

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

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

}

/*
 * @Description : 修改指定联系人信息
 * @param - abs	: 通讯录结构体变量
 * @return 		: 无
 */
void modifyPerson(Addressbooks *abs)
{
    cout << "请输入您要修改的联系人" << endl;

    string name;
    cin >> name;

    /*
     * 判断指定的联系人是狗存在通讯录中
     * ret == -1 未查到
     * ret != -1 查到
     */
    int ret = isExist(abs, name);

    if (ret != -1){
        /* 查找到此人,进行操作 */
        /* 修改姓名 */
        string name1;
        cout << "请输入姓名:" << endl;
        cin >> name1;
        abs->personArray[ret].m_Name = name1;

        /* 修改性别 */
        int sex = 0;
        cout << "请输入性别:" << endl;
        cout << "1 --- 男" << endl;
        cout << "2 --- 女:" << endl;
        while (true) {
            /* 判断输入是否有误,若有错误则重新输入 */
            cin >> sex;
            if (sex == 1 || sex == 2) {
                abs->personArray[ret].m_Sex = sex;
                break;
            } else {
                cout << "输入格式不正确!" << endl;
            }
        }

        /* 修改年龄 */
        int age = 0;
        cout << "请输入年龄:" << endl;
        while (true) {
            /* 判断输入是否有误,若有错误则重新输入 */
            cin >> age;
            if (age > 0 && age <= 120) {
                abs->personArray[ret].m_Age = age;
                break;
            } else {
                cout << "输入数值不正确!" << endl;
            }
        }

        /* 修改电话 */
        string phone;
        cout << "请输入练习电话:" << endl;
        cin >> phone;
        abs->personArray[ret].m_Phone = phone;

        /* 修改住址 */
        string address;
        cout << "请输入住址:" << endl;
        cin >> address;
        abs->personArray[ret].m_Addr = address;

        cout << "修改联系人成功" << endl;

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

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

}

/*
 * @Description : 清空联系人
 * @param - abs	: 通讯录结构体变量
 * @return 		: 无
 */
void cleanPerson(Addressbooks *abs)
{
    abs->m_size = 0;
    cout << "通讯录已清空" << endl;

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

/*
 * @Description: main函数
 * @param 		: 无
 * @return 		: 无
 */
int main()
{
    //system("chcp 65001 > nul");     /* 在不同编码环境下得以正常显示中文汉字 */

    int select = 0;     /* 用户选择变量 */

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


    while (true) {
        showMenu();     /* 菜单调用 */

        cout << "请输入你要使用的功能序号:" << endl;
        cin >> select;      /* 用户输入 */

        /* 用户选择 */
        switch (select) {
            case 1:     /* 1、添加联系人 */
                addPerson(&abs);
                break;
            case 2:     /* 2、显示联系人 */
                showPerson(&abs);
                break;
            case 3:     /* 3、删除联系人 */
                deletePerson(&abs);
                break;
            case 4:     /* 4、查找联系人 */
                findPerson(&abs);
                break;
            case 5:     /* 5、修改联系人 */
                modifyPerson(&abs);
                break;
            case 6:     /* 6、清空联系人 */
                cleanPerson(&abs);
                break;
            case 0:      /* 0、退出通讯录 */
                cout << "欢迎下次使用" << endl;
                system("pause");    /* 按任意键键结束 */
                return 0;

        }
    }

}

界面

C++通讯录系统(含完整代码和详细注释)_第1张图片

最后

个人练习写的,主要用来复习巩固C++基础语法知识,以及规范自己的代码结构和注释。

你可能感兴趣的:(C++,小制作,c++,编程语言)