C++项目实战:通讯录管理系统

引言

菜单功能

功能描述:用户选择功能的界面
菜单功能效果如下所示:
 步骤:

1. 封装一个函数显示该界面,如:void showMenu()
2. 在main函数中调用此函数。

//菜单界面
void showMenu()
{
    cout << "*******************************" << endl;
    cout << "+++++\t"<< "1.添加联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "2.显示联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "3.删除联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "4.查找联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "5.修改联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "6.清空联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "0.退出通讯录\t" << "+++++" << endl;
    cout << "*******************************" << endl;
}

退出功能

功能描述:退出通讯录系统
思路:根据用户不同的选择,做不同的操作,可以选择switch分支结构,将整个架构进行搭建
当用户选择0时,执行退出。

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

//菜单界面
void showMenu()
{
    cout << "*******************************" << endl;
    cout << "+++++\t"<< "1.添加联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "2.显示联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "3.删除联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "4.查找联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "5.修改联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "6.清空联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "0.退出通讯录\t" << "+++++" << endl;
    cout << "*******************************" << endl;
}
int main()
{
    while (true){
        showMenu();
        int operation;
        cout << "请选择一个操作 ";
        cin >> operation;
        if(operation == 0)
        {
            cout << "再见,欢迎下次光临" << endl;
            break;
        }
    }
    return 0;
}
#include <iostream>
#include <string>
using namespace std;

//菜单界面
void showMenu()
{
    cout << "*******************************" << endl;
    cout << "+++++\t"<< "1.添加联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "2.显示联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "3.删除联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "4.查找联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "5.修改联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "6.清空联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "0.退出通讯录\t" << "+++++" << endl;
    cout << "*******************************" << endl;
}
int main()
{
    while (true){
        showMenu();
        int operation;
        cout << "请选择一个操作 ";
        cin >> operation;
        switch(operation){
        case 1:
            cout << "添加联系人" <<endl;
            break;
        case 2:
            cout << "显示联系人" <<endl;
            break;
        case 3:
            cout << "删除联系人" <<endl;
            break;
        case 4:
            cout << "查找联系人" <<endl;
            break;
        case 5:
            cout << "修改联系人" <<endl;
            break;
        case 6:
            cout << "清空联系人" <<endl;
            break;
        case 0:
            cout << "欢迎下次光临" <<endl;
//            system("pause");
            return 0;
            break;
        default:
            break;
        }
    }


    return 0;
}

添加联系人

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

 设计联系人结构体

联系人结构体包括:姓名,性别,年龄,家庭电话,住址
设置如下:

#include <iostream>
#include <string>
using namespace std;
#define MAX 1000 //宏常量,不需要加分号
//菜单界面
void showMenu()
{
    cout << "*******************************" << endl;
    cout << "+++++\t"<< "1.添加联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "2.显示联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "3.删除联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "4.查找联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "5.修改联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "6.清空联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "0.退出通讯录\t" << "+++++" << endl;
    cout << "*******************************" << endl;
}

// 联系人结构体
struct Persion
{
    string name;
    int sex; //1男 2女
    int age;
    string phone;
    string addr;

};

// 通讯录结构体
struct Addressbooks
{
    //通讯录中保存的联系人的数组
    struct Persion persionarray[MAX]; //MAX代表一个宏常量
    // 通讯录中当前的联系人个数
    int size;
};

int main()
{
    while (true){
        showMenu();
        int operation;
        cout << "请选择一个操作 ";
        cin >> operation;
        switch(operation){
        case 1:
            cout << "添加联系人" <<endl;
            break;
        case 2:
            cout << "显示联系人" <<endl;
            break;
        case 3:
            cout << "删除联系人" <<endl;
            break;
        case 4:
            cout << "查找联系人" <<endl;
            break;
        case 5:
            cout << "修改联系人" <<endl;
            break;
        case 6:
            cout << "清空联系人" <<endl;
            break;
        case 0:
            cout << "欢迎下次光临" <<endl;
//            system("pause");
            return 0;
            break;
        default:
            break;
        }
    }


    return 0;
}

显示联系人

  

#include <iostream>
#include <string>
using namespace std;
#define MAX 1000 //宏常量,不需要加分号
//菜单界面
void showMenu()
{
    cout << "*******************************" << endl;
    cout << "+++++\t"<< "1.添加联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "2.显示联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "3.删除联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "4.查找联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "5.修改联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "6.清空联系人\t" << "+++++" << endl;
    cout << "+++++\t"<< "0.退出通讯录\t" << "+++++" << endl;
    cout << "*******************************" << endl;
}

// 联系人结构体
struct Persion
{
    string name;
    int sex; //1男 2女
    int age;
    string phone;
    string addr;

};

// 通讯录结构体
struct Addressbooks
{
    //通讯录中保存的联系人的数组
    struct Persion persionarray[MAX]; //MAX代表一个宏常量
    // 通讯录中当前的联系人个数
    int size;
};

//1.添加联系人
void addPersion(Addressbooks * abs)
{
    if(abs->size ==MAX)
    {
        cout << "通讯录满了" << endl;
    }
    else
    {
        //添加联系人

        //姓名
        string name;
        cout << "输入姓名" << endl;
        cin >> name;
        abs->persionarray[abs->size].name = name;

        // 性别
        cout << "输入性别" << endl;
        cout << "输入1代表男,输入2代码女" << endl;
        int sex;
        while(true){
            cin >> sex;
            if(sex ==1 || sex== 2)
            {
                abs->persionarray[abs->size].sex = sex;
                break;
            }
            else{
                cout << "你输入的不正确,请重新输入" <<endl;
                cout << "输入1代表男,输入2代码女" << endl;
            }
        }
        // 年龄
        cout << "请输入年龄" << endl;
        int age;
        cin >> age;
        abs->persionarray[abs->size].age = age;

        // 电话
        cout << "请输入电话" << endl;
        string phone;
        cin >> phone;
        abs->persionarray[abs->size].phone = phone;
        // 地址
        cout << "请输入地址" << endl;
        string addr;
        cin >> addr;
        abs->persionarray[abs->size].addr = addr;
    }
    //更新通讯录人数
    abs->size++;
    cout << "添加成功"<< endl;
        system("pause"); //按任意键继续
    system("cls"); //清除屏幕
}

// 2.显示联系人
void show_persion(Addressbooks abs ,Addressbooks *a)
{
    if(abs.size==0)
    {
        cout << "通讯录中没有联系人,请添加" <<endl;
        return;
    }
    for(int i=0;i<abs.size;i++){


        cout << "联系人" << i << "\t";
        cout   << "姓名 " << abs.persionarray[i].name << "\t";
//        cout << "性别 " << (abs.persionarray[i].sex) << "\t";
        cout << "性别" <<(abs.persionarray[i].sex ==1 ? "男":"女") << "\t"; //要用字符串,不能是字符
        cout << "年龄 " << abs.persionarray[i].age << "\t";
        cout << "电话 " << abs.persionarray[i].phone <<"\t";
        cout    << "地址 " << abs.persionarray[i].addr << endl;
    }
    system("pause"); //按任意键继续
    system("cls"); //清除屏幕
}

int main()
{
    // 创建结构体变量
    Addressbooks abs;
    //初始化通讯录数据
    abs.size = 0;

    while (true){
        showMenu();
        int operation;
        cout << "请选择一个操作 ";
        cin >> operation;
        switch(operation){
        case 1:
            addPersion(&abs); //利用地址传递,可以修改实参
            cout << "添加联系人" <<endl;
            break;
        case 2:
            cout << "显示联系人" <<endl;
            show_persion(abs,&abs);
            break;
        case 3:
            cout << "删除联系人" <<endl;
            break;
        case 4:
            cout << "查找联系人" <<endl;
            break;
        case 5:
            cout << "修改联系人" <<endl;
            break;
        case 6:
            cout << "清空联系人" <<endl;
            break;
        case 0:
            cout << "欢迎下次光临" <<endl;
            //            system("pause");
            return 0;
            break;
        default:
            break;
        }
    }


    return 0;
}

 删除联系人

功能描述:按照姓名进行删除信息人

 

//检测联系人是否存在,如果存在返回所在数组中的位置,不存在返回-1
int isexist(Addressbooks* abs, string name)
{
    //参数1 通讯录 参数2 对比姓名
    for (int i = 0; i < abs->size; i++) {
        //找到了返回数组下标编号
        if (abs->persionarray[i].name == name) {
            return i;
        }
    }
    return -1; //没找到返回-1
}

// 3.删除联系人
void delete_persion(Addressbooks* abs)
{
    cout << "请输入要删除的联系人" << endl;
    string d_name;
    cin >> d_name;
    int ret;
    ret = isexist(abs, d_name);
    if (ret == -1) //没有查到
    {
        cout << "查无此人" << endl;
    } else //查到
    {
        //要删除一个数据,需要将数据进行整体前移,然后让通讯录中的人数减一
        cout << ret << endl;
        for (int i = ret; i < abs->size; i++) {
            //数据前移
            abs->persionarray[i] = abs->persionarray[i + 1];
        }
        //让abs数据减减
        abs->size--;
        cout << "删除成功" << endl;
    }
    system("pause");
    system("cls");
}

查找联系人

功能描述:按照姓名查找联系人的信息
查找联系人的步骤
- 封装查找联系人函数
- 测试查找指定联系人

 

//检测联系人是否存在,如果存在返回所在数组中的位置,不存在返回-1
int isexist(Addressbooks* abs, string name)
{
    //参数1 通讯录 参数2 对比姓名
    for (int i = 0; i < abs->size; i++) {
        //找到了返回数组下标编号
        if (abs->persionarray[i].name == name) {
            return i;
        }
    }
    return -1; //没找到返回-1
}

// 4.查找联系人
void find_persion(Addressbooks * abs)
{
    cout << "请输入你要查找的联系人" << endl;
    string name;
    cin >> name;
    //判断是否存在
    int ret;
    ret = isexist(abs,name);
    if(ret != -1)
    {
        //找到了
        cout << "姓名 " << abs->persionarray[ret].name << "\t";
        cout << "性别" << (abs->persionarray[ret].sex == 1 ? "男" : "女") << "\t"; //要用字符串,不能是字符
        cout << "年龄 " << abs->persionarray[ret].age << "\t";
        cout << "电话 " << abs->persionarray[ret].phone << "\t";
        cout << "地址 " << abs->persionarray[ret].addr << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
    system("pause");
    system("cls");
}


// 5.修改联系人
void modify_persion(Addressbooks* abs)
{
    cout << "输入你要修改的联系人" << endl;
    string name;
    cin >> name;
    int ret;
    ret = isexist(abs, name);
    if (ret != -1) {
        cout << "输入姓名" << endl;
        string name;
        cin >> name;
        abs->persionarray[ret].name = name;
        cout << "输入性别" << endl;
        cout << "1-男" << endl;
        cout << "2-女" << endl;
        int sex;
        cin >> sex;
        abs->persionarray[ret].sex = sex;
        cout << "输入年龄" << endl;
        int age;
        cin >> age;
        abs->persionarray[ret].age = age;
        cout << "输入电话" << endl;
        string phone;
        cin >> phone;
        abs->persionarray[ret].phone = phone;
        cout << "输入家庭住宅" << endl;
        string addr;
        cin >> addr;
        abs->persionarray[ret].addr = addr;
        cout << "修改成功" << endl;
    } else {
        cout << "查无此人" << endl;
    }
    system("pause");
    system("cls");
}

 

// 6.清空联系人
void clear_persion(Addressbooks * abs)
{
    abs->size = 0; //将当前联系人数量设置为0,做逻辑上清空
    system("pause");
    system("cls");
}

 

全部代码

#include <iostream>
#include <string>
using namespace std;
#define MAX 1000 //宏常量,不需要加分号
//菜单界面
void showMenu()
{
    cout << "*******************************" << endl;
    cout << "+++++\t"
         << "1.添加联系人\t"
         << "+++++" << endl;
    cout << "+++++\t"
         << "2.显示联系人\t"
         << "+++++" << endl;
    cout << "+++++\t"
         << "3.删除联系人\t"
         << "+++++" << endl;
    cout << "+++++\t"
         << "4.查找联系人\t"
         << "+++++" << endl;
    cout << "+++++\t"
         << "5.修改联系人\t"
         << "+++++" << endl;
    cout << "+++++\t"
         << "6.清空联系人\t"
         << "+++++" << endl;
    cout << "+++++\t"
         << "0.退出通讯录\t"
         << "+++++" << endl;
    cout << "*******************************" << endl;
}

// 联系人结构体
struct Persion {
    string name;
    int sex; // 1男 2女
    int age;
    string phone;
    string addr;
};

// 通讯录结构体
struct Addressbooks {
    //通讯录中保存的联系人的数组
    struct Persion persionarray[MAX]; // MAX代表一个宏常量
    // 通讯录中当前的联系人个数
    int size;
};

// 1.添加联系人
void addPersion(Addressbooks* abs)
{
    if (abs->size == MAX) {
        cout << "通讯录满了" << endl;
    } else {
        //添加联系人

        //姓名
        string name;
        cout << "输入姓名" << endl;
        cin >> name;
        abs->persionarray[abs->size].name = name;

        // 性别
        cout << "输入性别" << endl;
        cout << "输入1代表男,输入2代码女" << endl;
        int sex;
        while (true) {
            cin >> sex;
            if (sex == 1 || sex == 2) {
                abs->persionarray[abs->size].sex = sex;
                break;
            } else {
                cout << "你输入的不正确,请重新输入" << endl;
                cout << "输入1代表男,输入2代码女" << endl;
            }
        }
        // 年龄
        cout << "请输入年龄" << endl;
        int age;
        cin >> age;
        abs->persionarray[abs->size].age = age;

        // 电话
        cout << "请输入电话" << endl;
        string phone;
        cin >> phone;
        abs->persionarray[abs->size].phone = phone;
        // 地址
        cout << "请输入地址" << endl;
        string addr;
        cin >> addr;
        abs->persionarray[abs->size].addr = addr;
    }
    //更新通讯录人数
    abs->size++;
    cout << "添加成功" << endl;
    system("pause"); //按任意键继续
    system("cls"); //清除屏幕
}

// 2.显示联系人
void show_persion(Addressbooks abs, Addressbooks* a)
{
    cout << "查看长度" << a->size << endl;
    ;
    if (abs.size == 0) {
        cout << "通讯录中没有联系人,请添加" << endl;
        return;
    }
    for (int i = 0; i < abs.size; i++) {

        cout << "联系人" << i << "\t";
        cout << "姓名 " << abs.persionarray[i].name << "\t";
        //        cout << "性别 " << (abs.persionarray[i].sex) << "\t";
        cout << "性别" << (abs.persionarray[i].sex == 1 ? "男" : "女") << "\t"; //要用字符串,不能是字符
        cout << "年龄 " << abs.persionarray[i].age << "\t";
        cout << "电话 " << abs.persionarray[i].phone << "\t";
        cout << "地址 " << abs.persionarray[i].addr << endl;
    }
    system("pause"); //按任意键继续0
    system("cls"); //清除屏幕
}

//检测联系人是否存在,如果存在返回所在数组中的位置,不存在返回-1
int isexist(Addressbooks* abs, string name)
{
    //参数1 通讯录 参数2 对比姓名
    for (int i = 0; i < abs->size; i++) {
        //找到了返回数组下标编号
        if (abs->persionarray[i].name == name) {
            return i;
        }
    }
    return -1; //没找到返回-1
}

// 3.删除联系人
void delete_persion(Addressbooks* abs)
{
    cout << "请输入要删除的联系人" << endl;
    string d_name;
    cin >> d_name;
    int ret;
    ret = isexist(abs, d_name);
    if (ret == -1) //没有查到
    {
        cout << "查无此人" << endl;
    } else //查到
    {
        //要删除一个数据,需要将数据进行整体前移,然后让通讯录中的人数减一
        cout << ret << endl;
        for (int i = ret; i < abs->size; i++) {
            //数据前移
            abs->persionarray[i] = abs->persionarray[i + 1];
        }
        //让abs数据减减
        abs->size--;
        cout << "删除成功" << endl;
    }
    system("pause");
    system("cls");
}

// 4.查找联系人
void find_persion(Addressbooks* abs)
{
    cout << "请输入你要查找的联系人" << endl;
    string name;
    cin >> name;
    //判断是否存在
    int ret;
    ret = isexist(abs, name);
    if (ret != -1) {
        //找到了
        cout << "姓名 " << abs->persionarray[ret].name << "\t";
        cout << "性别" << (abs->persionarray[ret].sex == 1 ? "男" : "女") << "\t"; //要用字符串,不能是字符
        cout << "年龄 " << abs->persionarray[ret].age << "\t";
        cout << "电话 " << abs->persionarray[ret].phone << "\t";
        cout << "地址 " << abs->persionarray[ret].addr << endl;
    } else {
        cout << "查无此人" << endl;
    }
    system("pause");
    system("cls");
}

// 5.修改联系人
void modify_persion(Addressbooks* abs)
{
    cout << "输入你要修改的联系人" << endl;
    string name;
    cin >> name;
    int ret;
    ret = isexist(abs, name);
    if (ret != -1) {
        cout << "输入姓名" << endl;
        string name;
        cin >> name;
        abs->persionarray[ret].name = name;
        cout << "输入性别" << endl;
        cout << "1-男" << endl;
        cout << "2-女" << endl;
        int sex;
        cin >> sex;
        abs->persionarray[ret].sex = sex;
        cout << "输入年龄" << endl;
        int age;
        cin >> age;
        abs->persionarray[ret].age = age;
        cout << "输入电话" << endl;
        string phone;
        cin >> phone;
        abs->persionarray[ret].phone = phone;
        cout << "输入家庭住宅" << endl;
        string addr;
        cin >> addr;
        abs->persionarray[ret].addr = addr;
        cout << "修改成功" << endl;
    } else {
        cout << "查无此人" << endl;
    }
    system("pause");
    system("cls");
}
// 6.清空联系人
void clear_persion(Addressbooks* abs)
{
    abs->size = 0; //将当前联系人数量设置为0,做逻辑上清空
    cout << "清空成功" <<endl;
    system("pause");
    system("cls");
}
int main()
{

    // 创建结构体变量
    Addressbooks abs;
    //初始化通讯录数据
    abs.size = 0;

    while (true) {
        showMenu();
        int operation;
        cout << "请选择一个操作 ";
        cin >> operation;
        switch (operation) {
        case 1:
            addPersion(&abs); //利用地址传递,可以修改实参
            cout << "添加联系人" << endl;
            break;
        case 2:
            cout << "显示联系人" << endl;
            show_persion(abs, &abs);
            break;
        case 3: //注意:在case后是不能定义对象的,需要加对大括号才可以。
        {

            delete_persion(&abs);

            break;
        }
        case 4:
            find_persion(&abs);
            break;
        case 5:
            modify_persion(&abs);
            break;
        case 6:
            clear_persion(&abs);
            break;
        case 0:
            cout << "欢迎下次光临" << endl;
            //            system("pause");
            return 0;
            break;
        default:
            break;
        }
    }

    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值