006 C++ 通讯录项目系统

说明:
通讯录项目系统为之前所有知识的阶段性汇总

系统需求

通讯录是一个课记录亲人,好友信息的工具。我们利用C++来完成一个通讯录管理系统:

系统中主要实现以下功能:

  1. 添加联系人:想通讯录中添加新人,信息包括(姓名,性别,年龄,联系电话,家庭住址)最多记录1000人
  2. 显示联系人:显示通讯录中所有联系人信息
  3. 删除联系人:按照姓名进行删除指定联系人
  4. 查找联系人:按照姓名查看指定联系人信息
  5. 修改联系人:按照姓名重新修改指定联系人
  6. 情况联系人:情况通讯录中所有信息
  7. 退出通讯录:退出当前使用的通讯录

菜单功能

用户悬着功能的界面

步骤:

  1. 创建封装函数:showMenu()
  2. 在main函数中调用这个showMenu函数

代码:

#include <iostream>
using namespace std;

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;
}

int main()
{
    showMenu();

    system("pause");
    return 0;
}

清空屏幕

代码:

// 清屏函数
void cleanScreen()
{
    system("pause");
    system("cls");
}

退出功能

功能描述:退出通讯录系统

思路:

根据用户不同的选择,进入不同的功能,可以选择switch分支结构,将整个架构进行搭建,当用户选择 0 时,直接退出,选择其他先不做操作,而不会退出程序

代码:

#include <iostream>
using namespace std;

int main()
{
    // 保存程序一直运行,除了输入 0 
    while (true)
    {
        // 打印菜单,并提醒用户输入
        showMenu();     // 打印菜单
        cout << "请输入选择的操作:";
        int select = 0;
        cin >> select;
        switch (select)
        {
            case 1:     // 1  添加联系人
                break;
            case 2:     // 2  显示联系人
                break;
            case 3:     // 3  删除联系人
                break;
            case 4:     // 4  查找联系人 
                break;
            case 5:     // 5  修改联系人
                break;
            case 6:     // 6  清空联系人
                break;
            case 0:     // 0  退出通讯录
                cout << "还原下次使用" << endl;
                return 0;
                break;
            default:
                cout << "输入错误,请从新选择" << endl;
        }
    }

    system("pause");
    return 0;
}

添加联系人

实现添加联系人功能,联系人上线为1000人,联系人信息包括(姓名,性别,年龄,联系电话,家庭地址)

实现添加联系人的步骤:

  1. 设计联系人结构体
  2. 设计通讯录结构体
  3. main函数中创建通讯录
  4. 封装联系人添加函数
  5. 测试添加联系人功能

设计联系人结构体

代码:

//联系人结构体
struct Person
{
    string p_Name;      // 姓名
    int p_Age;          // 年龄
    int p_Gender;       // 1 男; 2女
    string p_Phone;     // 电话
    string p_Addr;      // 地址 
};

设计通讯录结构体

代码:

// 通讯录结构体
struct AddressBooks
{
    // 通讯录中保存联系人数组
    struct Person personArry[MAX];

    // 通讯录中当前联系人人数
    int bookSize = 0;

};

main中初始化通讯录

代码:

// 初始化通讯录
    struct AddressBooks abs;    // 当用户选择了添加联系人,需要调用通讯录
    // 初始化通讯录中的人数
    abs.bookSize = 0;

封装联系人添加函数

代码:

// 添加联系人
void addPerson(struct AddressBooks* abs)
{
    // 判断通讯录当前人数是否达到最大
    if (abs->bookSize == MAX)
    {
        cout << "通讯录已达最大人数,无法添加!!!" << endl;
        return;
    }
    else
    {
        // 添加具体联系人
        // 添加姓名
        cout << "请输入联系人姓名:";
        string name;
        cin >> name;
        abs->personArry[abs->bookSize].p_Name = name;

        // 添加性别     
        int gender = 0;
        while (true)
        {
            cout << "请输入性别( 1-男 | 2-女 ):" ;
            cin >> gender;
            if (gender == 1 || gender == 2)
            {
                abs->personArry[abs->bookSize].p_Gender = gender;
                break;
            }
            else
            {
                cout << "输入有误,请重新输入!!!" << endl;
            }
        }

        //添加年龄
        int age = 0;        
        while (true)
        {
            cout << "请输入年龄:";
            cin >> age;
            if (0 <= age && age< 130)
            {
                abs->personArry[abs->bookSize].p_Age = age;
                break;
            }
            else
            {
                cout << "年龄不合法,请重新输入!!!" << endl;
            }
        }

        // 添加电话
        string phone = "";
        while (true)
        {
            cout << "请输入联系人手机:";
            string phone = "";
            cin >> phone;
            int a = phone.length();
            if (phone.length() != 12)
            {
                abs->personArry[abs->bookSize].p_Phone = phone;
                break;
            }
            else
            {
                cout << "手机号码格式不对,请重新输入!!!" << endl;
            }

        }

        // 添加地址
        string addr = "";
        cout << "请输入联系人地址:";
        cin >> addr;
        abs->personArry[abs->bookSize].p_Addr = addr;

        // 添加联系人成功人数自增
        abs->bookSize++;
        cout << "添加联系人成功!!!" << endl;
    }
    //添加联系人成功后,程序暂停,并清空屏幕
    cleanScreen();
}

拼接联系人信息函数

由于多次用到打印用户信息,顾抽离出来一个单独的函数

代码:

// 显示用户信息
void showInfo(struct AddressBooks * abs, int user_id)
{

    cout << "姓名:" << abs->personArry[user_id].p_Name << "\t"
        << "性别:" << (abs->personArry[user_id].p_Gender == 1 ? "男" : "女") << "\t"       // 三目运算,将添加 数字1转换为男,2转换为女
        << "年龄:" << abs->personArry[user_id].p_Age << "\t"
        << "电话:" << abs->personArry[user_id].p_Phone << "\t"
        << "地址:" << abs->personArry[user_id].p_Addr << endl;

显示所有联系人

代码:

void showPerson(struct AddressBooks* abs)
{
    // 判断通讯录人数是否为0,如果为0提示记录为空
    if (abs->bookSize == 0)
    {
        cout << "通讯录中无记录" << endl;
    }
    else
    {
        for (int i = 0; i < abs->bookSize; i++)
        {
            showInfo(abs, i);       // 调用拼接联系人信息函数
        }
    }
    cleanScreen();
}

检测联系人是不是在通讯录中

代码:

// 检测联系人是否存在通讯录中
int isPersonExist(struct AddressBooks* abs, string name)
{
    // 检测联系人是否存在,如果存在,返回联系人在数组中的具体位置,不存在返回 -1
    for (int i = 0; i < abs->bookSize; i++)
    {
        if (abs->personArry[i].p_Name == name)       // 找到了该联系人,返回下标
        {
            return i;
        }
    }
    return -1;
}

删除联系人

代码:

// 删除联系人
void delPerson(struct AddressBooks* abs)
{
    // 先判断通讯录是否为空,如果为空,直接返回
    if (abs->bookSize == 0)
    {
        cout << "通讯录为空无联系人,不能删除!!!" << endl;
        cleanScreen();
        return;
    }
    cout << "请输入要删除的联系人姓名:";
    string name;
    cin >> name;

    // 调用方法查询输入的姓名是否在通讯录中
    int checkRet = isPersonExist(abs, name);
    if (checkRet != -1)
    {
        for (int i = checkRet; i < abs->bookSize; i++)
        {
            abs->personArry[i] = abs->personArry[i + 1];
        }
        cout << "删除联系人【 " << name << " 】成功!!!" << endl;
        abs->bookSize--;
    }
    else
    {
        cout << "查无此人" << endl;
    }
    cleanScreen();
}

查找联系人

代码:

// 查找联系人
void searchPerson(struct AddressBooks* abs)
{
    cout << "请输入要查找的联系人姓名:";
    string name;
    cin >> name;
    int searchRet = isPersonExist(abs, name);
    if (searchRet != -1) 
    {
        showInfo(abs, searchRet);
    }
    else
    {
        cout << "查无此人" << endl;
    }
    cleanScreen();
}

修改联系人

代码:

// 修改联系人
void modifyPerson(struct AddressBooks* abs)
{
    cout << "请输入要修改的联系人姓名:";
    string name;
    cin >> name;
    int checkRet = isPersonExist(abs, name);
    if (checkRet != -1)
    {
        // 重新打印联系人未更改前信息
        showInfo(abs, checkRet);

        //修改姓名
        cout << "请输入联系人新姓名:";
        string newName = "";
        cin >> newName;
        abs->personArry[checkRet].p_Name = newName;

        // 修改性别
        cout << "请输入联系人新性别( 1-男 | 2-女 ):";
        int newGender;
        cin >> newGender;
        abs->personArry[checkRet].p_Gender = newGender;

        // 修改年龄
        cout << "请输入联系人新年龄:";
        int newAge;
        cin >> newAge;
        abs->personArry[checkRet].p_Age = newAge;
        // 修改手机号
        cout << "请输入联系人新手机号:";
        string newPhone;
        cin >> newPhone;
        abs->personArry[checkRet].p_Phone = newPhone;
        // 修改地址
        cout << "请输入联系人新地址:";
        string newAddr;
        cin >> newAddr;
        abs->personArry[checkRet].p_Addr = newAddr;
    }
    else
    {
        cout << "查无此人!!!" << endl;
    }
    cleanScreen();
}

清空联系人

代码:

// 清空联系人
void cleanPerson(struct AddressBooks* abs)
{
    abs->bookSize = 0;
    cout << "清空通讯录联系人成功!!!" << endl;
    cleanScreen();
}

主函数

代码:

int main()
{
    // 初始化通讯录
    struct AddressBooks abs;    // 当用户选择了添加联系人,需要调用通讯录
    // 初始化通讯录中的人数
    abs.bookSize = 0;

    // 打印菜单,并提醒用户输入
    while (true)
    {
        showMenu();
        cout << "请输入选择的操作:";
        int select = 0;
        cin >> select;
        switch (select)
        {
            case 1:     // 1  添加联系人
                addPerson(&abs);
                break;
            case 2:     // 2  显示联系人
                showPerson(&abs);
                break;
            case 3:     // 3  删除联系人
                delPerson(&abs);
                break;
            case 4:     // 4  查找联系人
                searchPerson(&abs);
                break;
            case 5:     // 5  修改联系人
                modifyPerson(&abs);
                break;
            case 6:     // 6  清空联系人
                cleanPerson(&abs);
                break;
            case 0:     // 0  退出通讯录
                cout << "欢迎下次使用" << endl;
                return 0;
                break;
            default:
                cout << "输入错误,请从新选择" << endl;
        }
    }

    //system("pause");
    return 0;
}

全部代码:

#include <iostream>
using namespace std;
#define MAX 100             // 宏变量设置通讯录最大人数

// 显示菜单
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 p_Name;      // 姓名
    int p_Age;          // 年龄
    int p_Gender;       // 1 男; 2女
    string p_Phone;     // 电话
    string p_Addr;      // 地址 
};

// 通讯录结构体
struct AddressBooks
{
    // 通讯录中保存联系人数组
    struct Person personArry[MAX];

    // 通讯录中当前联系人人数
    int bookSize = 0;

};

// 显示用户信息
void showInfo(struct AddressBooks * abs, int user_id)
{

    cout << "姓名:" << abs->personArry[user_id].p_Name << "\t"
        << "性别:" << (abs->personArry[user_id].p_Gender == 1 ? "男" : "女") << "\t"       // 三目运算,将添加 数字1转换为男,2转换为女
        << "年龄:" << abs->personArry[user_id].p_Age << "\t"
        << "电话:" << abs->personArry[user_id].p_Phone << "\t"
        << "地址:" << abs->personArry[user_id].p_Addr << endl;
}

// 清屏函数
void cleanScreen()
{
    system("pause");
    system("cls");
}


// 添加联系人
void addPerson(struct AddressBooks* abs)
{
    // 判断通讯录当前人数是否达到最大
    if (abs->bookSize == MAX)
    {
        cout << "通讯录已达最大人数,无法添加!!!" << endl;
        return;
    }
    else
    {
        // 添加具体联系人
        // 添加姓名
        cout << "请输入联系人姓名:";
        string name;
        cin >> name;
        abs->personArry[abs->bookSize].p_Name = name;

        // 添加性别     
        int gender = 0;
        while (true)
        {
            cout << "请输入性别( 1-男 | 2-女 ):" ;
            cin >> gender;
            if (gender == 1 || gender == 2)
            {
                abs->personArry[abs->bookSize].p_Gender = gender;
                break;
            }
            else
            {
                cout << "输入有误,请重新输入!!!" << endl;
            }
        }

        //添加年龄
        int age = 0;        
        while (true)
        {
            cout << "请输入年龄:";
            cin >> age;
            if (0 <= age && age< 130)
            {
                abs->personArry[abs->bookSize].p_Age = age;
                break;
            }
            else
            {
                cout << "年龄不合法,请重新输入!!!" << endl;
            }
        }

        // 添加电话
        string phone = "";
        while (true)
        {
            cout << "请输入联系人手机:";
            string phone = "";
            cin >> phone;
            int a = phone.length();
            if (phone.length() != 12)
            {
                abs->personArry[abs->bookSize].p_Phone = phone;
                break;
            }
            else
            {
                cout << "手机号码格式不对,请重新输入!!!" << endl;
            }

        }

        // 添加地址
        string addr = "";
        cout << "请输入联系人地址:";
        cin >> addr;
        abs->personArry[abs->bookSize].p_Addr = addr;

        // 添加联系人成功人数自增
        abs->bookSize++;
        cout << "添加联系人成功!!!" << endl;
    }
    //添加联系人成功后,程序暂停,并清空屏幕
    cleanScreen();
}

// 显示所有联系人
void showPerson(struct AddressBooks* abs)
{
    // 判断通讯录人数是否为0,如果为0提示记录为空
    if (abs->bookSize == 0)
    {
        cout << "通讯录中无记录" << endl;
    }
    else
    {
        for (int i = 0; i < abs->bookSize; i++)
        {
            showInfo(abs, i);
        }
    }
    cleanScreen();
}

// 检测联系人是否存在通讯录中
int isPersonExist(struct AddressBooks* abs, string name)
{
    // 检测联系人是否存在,如果存在,返回联系人在数组中的具体位置,不存在返回 -1
    for (int i = 0; i < abs->bookSize; i++)
    {
        if (abs->personArry[i].p_Name == name)       // 找到了该联系人,返回下标
        {
            return i;
        }
    }
    return -1;
}

// 删除联系人
void delPerson(struct AddressBooks* abs)
{
    // 先判断通讯录是否为空,如果为空,直接返回
    if (abs->bookSize == 0)
    {
        cout << "通讯录为空无联系人,不能删除!!!" << endl;
        cleanScreen();
        return;
    }
    cout << "请输入要删除的联系人姓名:";
    string name;
    cin >> name;

    // 调用方法查询输入的姓名是否在通讯录中
    int checkRet = isPersonExist(abs, name);
    if (checkRet != -1)
    {
        for (int i = checkRet; i < abs->bookSize; i++)
        {
            abs->personArry[i] = abs->personArry[i + 1];
        }
        cout << "删除联系人【 " << name << " 】成功!!!" << endl;
        abs->bookSize--;
    }
    else
    {
        cout << "查无此人" << endl;
    }
    cleanScreen();
}

// 查找联系人
void searchPerson(struct AddressBooks* abs)
{
    cout << "请输入要查找的联系人姓名:";
    string name;
    cin >> name;
    int searchRet = isPersonExist(abs, name);
    if (searchRet != -1) 
    {
        showInfo(abs, searchRet);
    }
    else
    {
        cout << "查无此人" << endl;
    }
    cleanScreen();
}

// 修改联系人
void modifyPerson(struct AddressBooks* abs)
{
    cout << "请输入要修改的联系人姓名:";
    string name;
    cin >> name;
    int checkRet = isPersonExist(abs, name);
    if (checkRet != -1)
    {
        // 重新打印联系人未更改前信息
        showInfo(abs, checkRet);

        //修改姓名
        cout << "请输入联系人新姓名:";
        string newName = "";
        cin >> newName;
        abs->personArry[checkRet].p_Name = newName;

        // 修改性别
        cout << "请输入联系人新性别( 1-男 | 2-女 ):";
        int newGender;
        cin >> newGender;
        abs->personArry[checkRet].p_Gender = newGender;

        // 修改年龄
        cout << "请输入联系人新年龄:";
        int newAge;
        cin >> newAge;
        abs->personArry[checkRet].p_Age = newAge;
        // 修改手机号
        cout << "请输入联系人新手机号:";
        string newPhone;
        cin >> newPhone;
        abs->personArry[checkRet].p_Phone = newPhone;
        // 修改地址
        cout << "请输入联系人新地址:";
        string newAddr;
        cin >> newAddr;
        abs->personArry[checkRet].p_Addr = newAddr;
    }
    else
    {
        cout << "查无此人!!!" << endl;
    }
    cleanScreen();
}

// 清空联系人
void cleanPerson(struct AddressBooks* abs)
{
    abs->bookSize = 0;
    cout << "清空通讯录联系人成功!!!" << endl;
    cleanScreen();
}


int main()
{
    // 初始化通讯录
    struct AddressBooks abs;    // 当用户选择了添加联系人,需要调用通讯录
    // 初始化通讯录中的人数
    abs.bookSize = 0;

    // 打印菜单,并提醒用户输入
    while (true)
    {
        showMenu();
        cout << "请输入选择的操作:";
        int select = 0;
        cin >> select;
        switch (select)
        {
            case 1:     // 1  添加联系人
                addPerson(&abs);
                break;
            case 2:     // 2  显示联系人
                showPerson(&abs);
                break;
            case 3:     // 3  删除联系人
                delPerson(&abs);
                break;
            case 4:     // 4  查找联系人
                searchPerson(&abs);
                break;
            case 5:     // 5  修改联系人
                modifyPerson(&abs);
                break;
            case 6:     // 6  清空联系人
                cleanPerson(&abs);
                break;
            case 0:     // 0  退出通讯录
                cout << "欢迎下次使用" << endl;
                return 0;
                break;
            default:
                cout << "输入错误,请从新选择" << endl;
        }
    }

    //system("pause");
    return 0;
}

原文链接: https://www.cnblogs.com/zcf-blog/p/13283719.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    006 C++ 通讯录项目系统

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/364914

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午3:48
下一篇 2023年3月2日 下午3:49

相关推荐