专栏首页数据分析与挖掘c++实例之通讯录管理系统之删除联系人功能(四)

c++实例之通讯录管理系统之删除联系人功能(四)

#include<iostream>
using namespace std;
constexpr auto MAX = 1000;

//联系人结构体
struct Person
{
    string m_name;
    int m_sex;
    int m_age;
    string m_phone;
    string m_address;

};
//通讯录结构体
struct AddressBooks
{
    //联系人数组
    struct Person personArray[MAX];
    //记录联系人个数
    int m_size;
};

//添加人员
void addPerson(AddressBooks* abs) {
    //判断通讯录是否已满,已满就不再添加
    if (abs->m_size == MAX) {
        cout << "通讯录已满" << endl;
    }
    else{
        string name;
        int sex;
        int age;
        string phone;
        string address;
        cout << "请输入姓名:";
        cin >> name;
        while (true) {
            cout << "请输入性别(0代表男,1代表女):";
            cin >> sex;
            if (sex == 0 || sex == 1) {
                break;
            }else{
                cout << "您输入有误,请重新输入!" << endl;
            }
        }
        cout << "请输入年龄:";
        cin >> age;
        cout << "请输入电话:";
        cin >> phone;
        cout << "请输入地址:";
        cin >> address;
        abs->personArray[abs->m_size].m_name = name;
        abs->personArray[abs->m_size].m_sex = sex;
        abs->personArray[abs->m_size].m_age = age;
        abs->personArray[abs->m_size].m_phone = phone;
        abs->personArray[abs->m_size].m_address = address;
        abs->m_size++;
        cout << "添加成功!" << endl;
        //请按任意键继续
        system("pause");
        //清屏
        system("cls");
    }
}
//显示联系人
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 << "\t"
                << "性别:" << (abs->personArray[i].m_sex == 0 ? "男" : "女") << "\t"
                << "年龄:" << abs->personArray[i].m_age << "\t"
                << "电话:" << abs->personArray[i].m_phone << "\t"
                << "地址:" << abs->personArray[i].m_address << endl;
        }
    }
    system("pause");
    system("cls");
}
//判断联系人是否存在,若存在,则返回所在下标,否则返回-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;
}

//真正的删除操作
void del(AddressBooks* abs, int id) {
    for (int i = id; i < abs->m_size; i++) 
    {
        abs->personArray[i] = abs->personArray[i + 1];
    }
    abs->m_size--;
}

//查找并删除
void deletePerson(AddressBooks* abs) {
    string name;
    cout << "请输入要删除的名字:";
    cin >> name;
    int tmp;
    tmp = isExist(abs, name);
    if (tmp != -1){
        del(abs, tmp);
        cout << "删除成功"<<endl;
    }else{
        cout << "查无此人"<<endl;
    }
    system("pause");
    system("cls");
}

//菜单界面
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() {
    //创建通讯录结构体变量
    AddressBooks abs;
    abs.m_size = 0;
    int select = 0;
    while(true){
        showMenu();
        cout << "请输入相应的选项:" << endl;
        cin >> select;
        switch (select){
        case 1://添加
            addPerson(&abs);
            break;
        case 2://显示
            showPerson(&abs);
            break;
        case 3://删除
            deletePerson(&abs);
            break;
        case 4://修改
            break;
        case 5://查找
            break;
        case 6://清空
            break;
        case 0://退出
            cout << "欢迎下次使用" << endl;
            system("pause");
            return 0;
            break;
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • c++实例之通讯录管理系统之显示联系人功能(三)

    绝命生
  • c++实例之通讯录管理系统之查找联系人功能(五)

    绝命生
  • c++实例之通讯录管理系统之修改联系人功能(六)

    绝命生
  • c++实例之通讯录管理系统之显示联系人功能(三)

    绝命生
  • c++实例之通讯录管理系统之查找联系人功能(五)

    绝命生
  • 前端入门9-JavaScript语法之运算符声明正文-运算符

    作为一个前端小白,入门跟着这几个来源学习,感谢作者的分享,在其基础上,通过自己的理解,梳理出的知识点,或许有遗漏,或许有些理解是错误的,如有发现,欢迎指点下。

    请叫我大苏
  • 学以致用C++设计模式 “模板方法模式”

    我那位朋友,果然是有雄心壮志的人,这不,最近要开拓汉堡业务,想要有一条流水线生产,又不想太死板,正发愁呢。 正好这天我又到他的店里吃饭,看他眉头紧锁,我便给丫...

    看、未来
  • 这8种保证线程安全的技术你都知道吗?

    并发情况下如何保证数据安全,一直都是开发人员每天都要面对的问题,稍不注意就会出现数据异常,造成不可挽回的结果。笔者根据自己的实际开发经验,总结了下面几种保证数据...

    苏三说技术
  • Android设计模式应用-责任链模式

    有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发 出者并不清楚到底最终那个对象会处理该请求...

    wust小吴
  • 外观模式(Facade Pattern) - 最易懂的设计模式解析

    定义了一个高层、统一的接口,外部与通过这个统一的接口对子系统中的一群接口进行访问。

    Carson.Ho

扫码关注云+社区

领取腾讯云代金券