C++简易通讯录

一、本文采用c++语言实现的简易通讯录,具体功能包括添加、删除,查找和修改联系人信息,显示和清空联系人列表,以及实时显示通讯录的记录人数,具体操作根据对应提示输入即可。

二、该通讯录人数上限设置为1000,可以修改代码中main函数的NUMBER变量数值来自行修改。

三、一些问题及解决方法:

1.初始化大量结构体数组:由于结构体数组过大,没办法一一初始化,本文采用在最初定义结构体时初始化,将字符串赋值为空,将整型赋值为0。

2.可能的栈溢出:数组的变量所使用的空间在栈上,每个程序的占用空间是有限的,系统会提示将一些数据移动到堆,可以用new来分配内存存放结构体,需要人数上限过大者自行修改。

四、代码:

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

struct linkman
{
    string name="";
    string sex = "";
    int age=0;
    int phonenumber=0;
    string address = "";
};

void add(struct linkman arr[], int len)
{
    int i = 0;
    for (i = 0; i < len; i++)
    {
        if (arr[i].name == "")
        {
            break;
        }

    }
    cout << "请输入联系人的姓名:";
    cin >> arr[i].name;

    cout << "请输入联系人的性别:";
    cin >> arr[i].sex;

    cout << "请输入联系人的年龄:";
    cin >> arr[i].age;

    cout << "请输入联系人的联系电话:";
    cin >> arr[i].phonenumber;
    
    cout << "请输入联系人的家庭住址:";
    cin >> arr[i].address;
    cout << "添加成功" << endl;
    system("pause");
    system("cls");
}

void display(struct linkman arr[], int len)
    {
        for (int i = 0; i < len; i++)
        {
            if (arr[i].name == "")
            {
                break;
            }
            cout << "姓名:" << "\t\t" << arr[i].name << endl;
            cout << "性别:" << "\t\t" << arr[i].sex << endl;
            cout << "年龄:" << "\t\t" << arr[i].age << endl;
            cout << "联系电话:" << "\t" << arr[i].phonenumber << endl;
            cout << "家庭住址:" << "\t" << arr[i].address << endl;
            cout << endl;

        }
        system("pause");
        system("cls");
    }

void shanchu(struct linkman arr[], int len)
{
    string name_1 = "";
    cout << "请输入你想删除联系人的名字:";
    cin >> name_1;
    cout << endl;
    int k = 0;//次数
    for (int i = 0; i < len; i++)
    {
        if (arr[i].name == name_1)
        {
            for (int j = i; j < len - i; j++)
            {
                arr[j].name = arr[j + 1].name;
                arr[j].sex = arr[j + 1].sex;
                arr[j].age = arr[j + 1].age;
                arr[j].phonenumber = arr[j + 1].phonenumber;
                arr[j].address = arr[j + 1].address;
                if (arr[j].name == "")
                {
                    break;
                }
            }
            arr[len-1].name = "";
            arr[len - 1].sex = "";
            arr[len - 1].age = 0;
            arr[len - 1].phonenumber = 0;
            arr[len - 1].address = "";
            k++;
        }
    }
    if (k != 0)
    {
        cout << "删除完成" << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
    system("pause");
    system("cls");
}

void search(struct linkman arr[], int len)
{
    string name_2 = "";
    cout << "请输入你想查找联系人的名字:";
    cin >> name_2;
    int j = 0;
    for (int i = 0; i < len; i++)
    {
        if (arr[i].name == name_2)
        {
            cout << "姓名:" << "\t\t" << arr[i].name << endl;
            cout << "性别:" << "\t\t" << arr[i].sex << endl;
            cout << "年龄:" << "\t\t" << arr[i].age << endl;
            cout << "联系电话:" << "\t" << arr[i].phonenumber << endl;
            cout << "家庭住址:" << "\t" << arr[i].address << endl;
            cout << endl;
            j++;
        }
    }
    if (j == 0)
    {
        cout << "查无此人" << endl;
    }
    system("pause");
    system("cls");

}

void change(struct linkman arr[], int len)
{
    string name_3 = "";
    cout << "请输入你想更改联系人的名字:";
    cin >> name_3;
    cout << endl;
    int number_3 = 0;
    int j = 0;
    for (int i = 0; i < len; i++)
    {
        if (arr[i].name == name_3)
        {
            cout << "联系人原姓名:" << "\t\t" << arr[i].name << endl;
            cout << "联系人原性别:" << "\t\t" << arr[i].sex << endl;
            cout << "联系人原年龄:" << "\t\t" << arr[i].age << endl;
            cout << "联系人原联系电话:" << "\t" << arr[i].phonenumber << endl;
            cout << "联系人原家庭住址:" << "\t" << arr[i].address << endl;
            cout << endl;
            while (1)
            {
                cout << "请输入你想更改联系人的信息:" << endl;
                cout << "1.姓名 \n2.性别 \n3.年龄  \n4.联系电话  \n5.家庭住址  \n0.退出" << endl;
                cin >> number_3;
                if (number_3 == 0)
                {
                    break;
                }
                switch (number_3)
                {
                case 1:cout << "请输入你想更改联系人的姓名:";
                    cin >> arr[i].name; break;
                case 2:cout << "请输入你想更改联系人的性别:";
                    cin >> arr[i].sex; break;
                case 3:cout << "请输入你想更改联系人的年龄:";
                    cin >> arr[i].age; break;
                case 4:cout << "请输入你想更改联系人的联系电话:";
                    cin >> arr[i].phonenumber; break;
                case 5:cout << "请输入你想更改联系人的家庭住址:";
                    cin >> arr[i].address; break;
                default:
                    break;
                }
            }
            cout << "修改后的联系人信息如下:"<<endl;
            cout << "姓名:" << "\t\t" << arr[i].name << endl;
            cout << "性别:" << "\t\t" << arr[i].sex << endl;
            cout << "年龄:" << "\t\t" << arr[i].age << endl;
            cout << "联系电话:" << "\t" << arr[i].phonenumber << endl;
            cout << "家庭住址:" << "\t" << arr[i].address << endl;
            j++;
        }
    }
    if (j == 0)
    {
        cout << "查无此人" << endl;
    }
    system("pause");
    system("cls");
}

void qingkong(struct linkman arr[], int len)
{
    for (int i = 0; i < len; i++)
    {
        arr[i].name = "";
        arr[i].sex = "";
        arr[i].age = 0;
        arr[i].phonenumber = 0;
        arr[i].address = "";
    }
    cout << "通讯录已清空" << endl;
    system("pause");
    system("cls");
}

int main()
{
    const int NUMBER = 1000;
    linkman l[NUMBER] ;
    int len = sizeof(l) / sizeof(l[0]);
    int number = 0;
    int i = 0;
    while (1)
    {
        
        for (i = 0; i < NUMBER; i++)
        {
            if (l[i].name == "")
            {
                break;
            }

        }
        len = i;
        cout << "当前通讯录人数:" << len<<endl;
        cout << "1.添加联系人" << endl;
        cout << "2.显示联系人" << endl;
        cout << "3.删除联系人" << endl;

        cout << "4.查找联系人" << endl;
        cout << "5.修改联系人" << endl;
        cout << "6.清空联系人" << endl;
        cout << "0.退出通讯录" << endl;
        cout << endl;
        cout << "请输入你需要进入的功能其对应数字" << endl;
        cin >> number;
        if (number == 0)
        {
            break;
        }
        switch (number)
        {
        case 1:add(l, len); break;
        case 2:display(l, len); break;
        case 3:shanchu(l, len); break;
        case 4:search(l, len); break;
        case 5:change(l, len); break;
        case 6:qingkong(l, len); break;
        default:
            break;
        }
    }
    system("pause");
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值