Day 07 C++入门 之实践例子-----通讯录管理系统的设计与构建

一、系统需求
  1. 添加联系人:向通讯录中添加新人,信息人(姓名、性别、年龄、联系电话、家庭住址),最多记录1000人;
  2. 显示联系人:显示通讯录中所有联系人的方式;若没有就显示当前记录为空
  3. 删除联系人:按照姓名进行删除指定方式,若没有这个人就会输出查无此人;
  4. 查找联系人:按照姓名查看指定联系人的信息,若没有这个人就会输出查无此人;
  5. 修改联系人:按照姓名重新修改信息,检索进行之后,对信息进行一次修改;
  6. 清空联系人:清空当前的联系人,操作之前添加一次提醒
  7. 退出通讯录:退出当前使用的通讯录

对每一个功能设置对饮的索引,输入索引时就进入对应的功能进行操作,结束后按任意键回到初始界面(相当于手机的首页),然后可以继续进行下一个功能的使用。

二、创建项目

创建新项目,添加文件

打开VS,创建新项目,添加文件,右键源文件,添加新建项

三、菜单功能

用户选择功能界面。有如下步骤:

封装函数显示该界面,在main函数中调用封装好的函数

在main函数中写好基本的框架

#include<iostream>
using namespace std;
#include <string>

int main()
{
    system("pause");
    return 0;

}

菜单界面函数

void showMenu()
{
    cout << "1. 添加联系人" << endl;
    cout << "2. 显示联系人" << endl;
    cout << "3. 删除联系人" << endl;
    cout << "4. 查找联系人" << endl;
    cout << "5. 修改联系人" << endl;
    cout << "6. 清空联系人" << endl;
    cout << "0. 退出通讯录" << endl;

}

在这里插入图片描述

四、退出功能

退出通讯录系统。根据用户不同的选择,进入不同的功能,可以选择Switch分支结构进行搭建,用户选择0时,执行退出操作

int select = 7;//创建一个变量用来接收用户的选项输入。数字随意
    while (true)//想要他一直显示菜单,直到用户输入0才退出,所以放入循环
    {
        showMenu();//展示菜单
        cout << "请输入操作选项:" << endl;
        cin >> select;//接收用户输入的选项

        switch (select)//根据用户的输入进行功能的跳转
        {
        case 0:     //0. 退出通讯录
            cout << "欢迎下次使用" << endl;
            system("pause");//表示输入任意键继续,退出系统
            return 0;
            break;
        case 1://1. 添加联系人
            break;
        case 2:     //2. 显示联系人
            break;
        case 3:     //3. 删除联系人
            break;
        case 4:     // 4. 查找联系人
            break;
        case 5:     //5. 修改联系人
            break;
        case 6:     //6. 清空联系人
            break;
        }
    }

在这里插入图片描述

五、添加联系人

向通讯录中添加新人,信息人(姓名、性别、年龄、联系电话、家庭住址),最多记录1000人;步骤如下:

  • 设计联系人结构体;
  • 设计通讯录结构体;
  • main函数中创建通讯录;
  • 封装添加联系人函数;
  • 测试添加功能。
1. 创建联系人结构体
struct Person
{
    string name;//姓名
    int sex;//性别,1表示女,2表示男
    int age;//年龄
    string phone;//电话
    string addr;//住址
};
2. 创建通讯录结构体
#define MAX 1000
struct Addressbooks
{
    struct Person A[MAX];//MAX是未知的,要对其进行宏常量定义define
    int size;
};
3. 在main中创建通讯录
struct Addressbooks B;
B.size = 0;
4. 添加联系人的函数
void addPerson(struct Addressbooks* B)
{
    //判断通讯录是否已满,如果满了要删除才能添加
    if (B->size == MAX)
    {
        cout << "通讯录人员已达上限,无法添加,若添加,请删除一些" << endl;
        return;
    }
    else
    {
        string name;
        cout << "请输入添加人员的姓名" << endl;
        cin >> name;
        B->A[B->size].name = name;

        int sex=0;
        cout << "请选择添加人员的性别" << endl;
        cout << "1表示女,2表示男" << endl;      
        while (true)
        {
            cin >> sex;
            //必须输入1或者2
            if (sex == 1 || sex == 2)
            {
                B->A[B->size].sex = sex;
                break;
            }
            else
            {
                cout << "请输入正确是性别" << endl;
            }
        }

        int age=0;
        cout << "请输入添加人员的年龄" << endl;
        cin >> age;
        B->A[B->size].age = age;

        string phone;
        cout << "请输入添加人员的电话" << endl;
        cin >> phone;
        B->A[B->size].phone = phone;

        string addr;
        cout << "请输入添加人员的住址" << endl;
        cin >> addr;
        B->A[B->size].addr = addr;
//更新当前联系人的个数
        B->size++;
        cout << "添加成功" << endl;

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

在这里插入图片描述

六、显示联系人

显示联系人的函数

void viewPerson(struct Addressbooks* B)
{
    //判断通讯录中有没有人
    if (B->size == 0)
    {
        cout << "现在没有任何联系人" << endl;
    }
    else
    {
        for (int i = 0; i < B->size; i++)
        {
            cout << "姓名:" << B->A[i].name << "\t";//这里不换行,用空格
            if (B->A[i].sex == 1)
            {
                cout << "性别:女" << "\t";
            }
            else
            {
                cout << "性别:男" << "\t";
            }
            //三目运算符  B->A[i].sex == 1?"女":"男"
            cout << "年龄:" << B->A[i].age << "\t";
            cout << "电话:" << B->A[i].phone << "\t";
            cout << "地址:" << B->A[i].addr << endl;
        }
    }
    system("pause");
    system("cls");
    
}

在这里插入图片描述

七、删除联系人
1. 判断联系人是否存在
int isExist(struct Addressbooks* B,string name)
{
    for (int i = 0; i < B->size; i++)
    {
        if (B->A[i].name == name)
        {
            return i;//找到
        }
    }
    return -1;//没有找到
    
}
2. 删除联系人函数
void delPerson(struct Addressbooks* B)
{
    cout << "输入删除联系人姓名" << endl;
    string name;
    cin >> name;
    int ret = isExist(B, name);
    if (ret != -1)
    {
        for (int i = ret; i < B->size; i++)
        {
            B->A[i] = B->A[i + 1];
        }
        B->size--;
        cout << "删除成功" << endl;
    }
    else
    {
        cout << "没有这个人" << endl;
    }
    system("pause");
    system("cls");
}

在这里插入图片描述

八、查找联系人

查找人函数

void serchPerson(struct Addressbooks* B)
{
    cout << "输入要找的联系人姓名" << endl;
    string name;
    cin >> name;
    int ret = isExist(B, name);
    if (ret != -1)
    {
        cout << "姓名:" << B->A[ret].name << "\t";//这里不换行,用空格
        if (B->A[ret].sex == 1)
        {
            cout << "性别:女" << "\t";
        }
        else
        {
            cout << "性别:男" << "\t";
        }
        cout << "年龄:" << B->A[ret].age << "\t";
        cout << "电话:" << B->A[ret].phone << "\t";
        cout << "地址:" << B->A[ret].addr << endl;
    }
    else
    {
        cout << "没有这个人" << endl;
    }
    system("pause");
    system("cls");
}

在这里插入图片描述

九、修改联系人

修改联系人函数

void rePerson(struct Addressbooks* B)
{
    cout << "输入修改的联系人姓名" << endl;
    string name;
    cin >> name;
    int ret = isExist(B, name);
    if (ret != -1)
    {
        string name;
        cout << "请输入修改后人员的姓名" << endl;
        cin >> name;
        B->A[ret].name = name;

        int sex = 0;
        cout << "请选择修改后人员的性别" << endl;
        cout << "1表示女,2表示男" << endl;
        while (true)
        {
            cin >> sex;
            //必须输入1或者2
            if (sex == 1 || sex == 2)
            {
                B->A[ret].sex = sex;
                break;
            }
            else
            {
                cout << "请输入正确是性别" << endl;
            }
        }

        int age = 0;
        cout << "请输入修改后人员的年龄" << endl;
        cin >> age;
        B->A[ret].age = age;

        string phone;
        cout << "请输入修改后人员的电话" << endl;
        cin >> phone;
        B->A[ret].phone = phone;

        string addr;
        cout << "请输入修改后人员的住址" << endl;
        cin >> addr;
        B->A[ret].addr = addr;

        cout << "修改成功" << endl;
    }
    else
    {
        cout << "没有这个人" << endl;
    }
    system("pause");
    system("cls");
}

在这里插入图片描述

十、清空联系人

清空联系人函数

void cleanPerson(struct Addressbooks* B)
{
    B->size = 0;//所有的访问都是通过size的ret进行访问的,所以将size=0,逻辑清空即可
    cout << "通讯录已清空" << endl;
    system("pause");
    system("cls");
}

所有的访问都是通过size的ret进行访问的,所以将size=0,逻辑清空即可
在这里插入图片描述

十一、主函数
int main()
{
    int select = 7;
    
    //创建通讯录的结构体变量
    struct Addressbooks B;
    B.size = 0;

    while (true)
    {
        showMenu();
        cout << "请输入操作选项:" << endl;
        cin >> select;

        switch (select)
        {
        case 0:     //0. 退出通讯录
            cout << "欢迎下次使用" << endl;
            system("pause");//表示输入任意键继续
            return 0;
            break;
        case 1://1. 添加联系人
            addPerson(&B);//通讯录变量是一个变量,不是数组,所以要对其进行修改的话,一定要传地址
            break;
        case 2:     //2. 显示联系人
            viewPerson(&B);
            break;
        case 3:     //3. 删除联系人
            delPerson(&B);
            break;
        case 4:     // 4. 查找联系人
            serchPerson(&B);
            break;
        case 5:     //5. 修改联系人
            rePerson(&B);
            break;
        case 6:     //6. 清空联系人
            cleanPerson(&B);
            break;
        }
    }
  
    system("pause");
    return 0;

}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐