C++实现初级通讯录管理系统(与学生管理系统等类似)

C++实现初级通讯录管理系统(与学生管理系统等类似)

系统中需要实现的功能如下:

  • 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
  • 显示联系人:显示通讯录中所有联系人信息
  • 删除联系人:按照姓名进行删除指定联系人
  • 查找联系人:按照姓名查看指定联系人信息
  • 修改联系人:按照姓名重新修改指定联系人
  • 清空联系人:清空通讯录中所有信息
  • 退出通讯录:退出当前使用的通讯录

笔者通过视频学习后独立码完一遍代码,其中的一些小坑还是需要注意的(注释有详细讲解~,欢迎三连!)


#include <iostream>
#include <string>
#include <regex>
using namespace std;
#define MAX 1000

//创建联系人结构体
struct Contact {
    string c_Name;
    int c_Sex;
    int c_Age;
    string c_Tel;
    string c_Address;
};

//创建通讯录结构体
struct MailList {
	//坑 !!  在创建通讯录结构体的时候就指定联系人的存储容量MAX
    struct Contact personArray[MAX];     
    int MailSize;
};

//显示菜单
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;
}

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

//按任意键继续
void pressToContinue() {
    system("pause");
}

//查找通讯录中联系人的位置,有则返回索引,无则返回-1
int isExist(MailList* list, string personName) {
    for (int i = 0; i < list->MailSize; i++) {
        if (list->personArray[i].c_Name == personName) {
            return i;
        }
    }
    return -1;
}

//添加联系人
void addPerson(MailList* list) {

    //判断通讯录是否已满
    if (list->MailSize >= MAX) {
        cout << "通讯录已满!!!" << endl;
        return;
    }
    else {
        string name;
        cout << "请输入用户姓名 : " << endl;
        cin >> name;
        list->personArray[list->MailSize].c_Name = name;

        int sex;
        while (true) {
            cout << "请输入用户性别 : " << endl;
            cout << " 1 --- 男" << endl;
            cout << " 2 --- 女" << endl;
            cin >> sex;
            if (sex == 1 || sex == 2) {
                list->personArray[list->MailSize].c_Sex = sex;
                break;
            }
            else {
                cout << "输入格式错误!!!,请输入对应编号 1 或 2" << endl;
            }

        }


        int age;
        while (true) {
            cout << "请输入用户年龄 : " << endl;
            cin >> age;
            if (age > 0 && age <= 150) {
                list->personArray[list->MailSize].c_Age = age;
                break;
            }
            else {
                cout << "您输入的年龄不合法!!!" << endl;
            }
        }



        string tel;
        while (true) {
            cout << "请输入用户联系电话 : " << endl;
            cin >> tel;
            regex check("^1(3\\d|47|5([0-3]|[5-9])|8(0|2|[5-9]))\\d{8}$");
            if (regex_match(tel, check)) {
                list->personArray[list->MailSize].c_Tel = tel;
                break;
            }
            else {
                cout << "您输入的电话号码不合法,请重新输入!" << endl;
            }
        }


        string address;
        cout << "请输入用户住址 : " << endl;
        cin >> address;
        list->personArray[list->MailSize].c_Address = address;

        //人数加一
        list->MailSize++;

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

    }
}

//显示所有联系人
void showPerson(MailList* list) {
    //查看通讯录中有无联系人,利用MailSize
    if (list->MailSize != 0) {
        cout << "------------------------------ 所有联系人 ------------------------------" << endl;
        for (int i = 0; i < list->MailSize; i++) {
            cout << "NAME    : " << list->personArray[i].c_Name << "\t\t";
            //坑 :  ? : 要括起来
            cout << "SEX     : " << (list->personArray[i].c_Sex == 1 ? "男" : "女") << "\t\t";
            cout << "AGE     : " << list->personArray[i].c_Age << "\t\t";
            cout << "TEL     : " << list->personArray[i].c_Tel << "\t\t";
            cout << "ADDRESS : " << list->personArray[i].c_Address << endl;
        }
    }
    else {
        cout << "联系人空!!!" << endl;
    }
}

//删除指定联系人
void deletePerson(MailList* list) {
    //用户输入要查找的联系人
    cout << "请输入您要删除联系人的姓名 : ";

    string personName;

    cin >> personName;

    //系统判断通讯录里是否有此联系人,有的话删除,确认删除?返回提示信息,没有的话写出提示信息
    //**************************
    //**************************
    //***********坑*************
    //**************************
    //**************************
    //在这儿要找出用书要删除的联系人的具体位置,并执行操作
    //操作 : 即把当前删除的位置给了下一个数组元素,[i] = [i + 1]

    //在这儿的list前不用加 &
    if (isExist(list, personName) == -1) {
        cout << "您要删除的联系人不存在!" << endl;
    }
    else {
        cout << "您确认要删除此联系人吗 ? " << endl;
        cout << "1 --- YES!" << endl;
        cout << "2 --- NO !" << endl;
        int check;
        cin >> check;
        if (check == 1) {
            for (int i = isExist(list, personName); i < list->MailSize; i++) {
                list->personArray[i] = list->personArray[i + 1];
            }
            cout << "删除联系人 '" << personName << "' 成功!" << endl;
            list->MailSize--;
        }
        else {
            cout << "删除失败!!" << endl;
        }
    }
}

//查找指定联系人(精确搜索)
void findPerson(MailList* list) {
    //获取到用户搜索的联系人
    cout << "请输入您要查找的联系人 : ";
    string personName;
    cin >> personName;
    //判断是否在通讯录里,查到后返回
    if (isExist(list, personName) == -1) {
        cout << "您要查找的联系人不存在!" << endl;
    }
    else {
        cout << "NAME    : " << list->personArray[isExist(list, personName)].c_Name << "\t\t";
        //坑 :  ? : 要括起来
        cout << "SEX     : " << (list->personArray[isExist(list, personName)].c_Sex == 1 ? "男" : "女") << "\t\t";
        cout << "AGE     : " << list->personArray[isExist(list, personName)].c_Age << "\t\t";
        cout << "TEL     : " << list->personArray[isExist(list, personName)].c_Tel << "\t\t";
        cout << "ADDRESS : " << list->personArray[isExist(list, personName)].c_Address << endl;
    }

}

//模糊搜索(未实现)
void fuzzySearch(MailList* list) {
    //    //获取到用户输入的关键字
    //    cout<<"请输入用户姓名关键字 : ";
    //
    //     name;
    //
    //    cin>>name;
    //    //用strstr()函数获取到范围内符合条件的值
    //
    //    for(int i = 0 ; i < list->MailSize ; i++){
    //        if(strstr(char ))
    //    }
}

//修改联系人
void editPerson(MailList* list) {
    cout << "请输入您要修改的联系人 : ";
    string personName;
    cin >> personName;
    if (isExist(list, personName) == -1) {
        cout << "您要修改的联系人不存在!" << endl;
    }
    else {
        //这儿的一个大大大大大大坑
        //在判断isExist这个函数时必须在最开始判断并把索引保存到一个变量中
        //如果在下面都使用isExist的话,当第一个姓名改变后,函数返回值就会改变成-1,会出现数组下标越界的情况!!!
        int result = isExist(list, personName);

        string name = "";
        cout << "请输入您要修改的用户姓名 : ";
        cin >> name;
        list->personArray[result].c_Name = name;

        int sex;
        while (true) {
            cout << "请输入用户性别 : " << endl;
            cout << " 1 --- 男" << endl;
            cout << " 2 --- 女" << endl;
            cin >> sex;
            if (sex == 1 || sex == 2) {
                list->personArray[result].c_Sex = sex;
                break;
            }
            else {
                cout << "输入格式错误!!!,请输入对应编号 1 或 2" << endl;
            }

        }


        int age = 0;
        while (true) {
            cout << "请输入用户年龄 : " << endl;
            cin >> age;
            if (age > 0 && age <= 150) {
                list->personArray[result].c_Age = age;
                break;
            }
            else {
                cout << "您输入的年龄不合法!!" << endl;
            }
        }



        string tel = "";
        while (true) {
            cout << "请输入用户联系电话 : " << endl;
            cin >> tel;
            regex check("^1(3\\d|47|5([0-3]|[5-9])|8(0|2|[5-9]))\\d{8}$");
            if (regex_match(tel, check)) {
                list->personArray[result].c_Tel = tel;
                break;
            }
            else {
                cout << "您输入的电话号码不合法,请重新输入!" << endl;
            }
        }


        string address = "";
        cout << "请输入用户住址 : " << endl;
        cin >> address;
        list->personArray[result].c_Address = address;


        cout << "修改成功!" << endl;
    }
}

//清空联系人
void clearPerson(MailList* list) {
    cout << "您确认要清空此通讯录吗 ? " << endl;
    cout << "1 --- YES!" << endl;
    cout << "2 --- NO !" << endl;
    int check;
    cin >> check;
    if (check == 1) {
        list->MailSize = 0;
        cout << "通讯录已清空!!" << endl;
    }
    else {
        cout << "清空失败!!" << endl;
    }
}

int main() {

    MailList list;

    list.MailSize = 0;

    int order;


    while (true) {

        //显示菜单
        showMenu();
        //得到输入指令
        cin >> order;

        switch (order) {

            //1.添加联系人
            case 1:
                addPerson(&list);
                pressToContinue();
                clearScreen();
                break;

            //2.显示联系人
            case 2:
                showPerson(&list);
                pressToContinue();
                clearScreen();
                break;

            //3.删除联系人
            case 3:
                deletePerson(&list);
                pressToContinue();
                clearScreen();
                break;

            //4.查找联系人
            case 4:
                findPerson(&list);
                pressToContinue();
                clearScreen();
                break;

            //5.修改联系人
            case 5:
                editPerson(&list);
                pressToContinue();
                clearScreen();
                break;

            //6.清空联系人
            case 6:
                clearPerson(&list);
                pressToContinue();
                clearScreen();
                break;

            //0.退出通讯录
            case 0:
                cout << "-----退出通讯录,欢迎下次使用-----" << endl;
                pressToContinue();
                return 0;
                break;

            //!!!!!指令输入错误!!!!!
            default:
                cout << "指令输入错误!!!" << endl;
                pressToContinue();
                clearScreen();
                break;
        }
    }
    return 0;
}

这是通讯录管理系统最初级的版本,后续还会更新 中级高级 版本
代码在vs上就可以跑起来,有问题欢迎在评论区滴滴


参考资料 :

https://www.bilibili.com/video/BV1et411b73Z

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值