[c/c++]程序设计经典作业:通讯录管理系统

#1、程序简介

***该程序为c++,如果需要c版本,可以查看我的下一个文章,有完整代码哦。***

写一个可以满足添加、修改、删除、查找、遍历联系人身份信息(包括年龄、性别、手机号码等信息)的小程序已经成为不少学校的结课作业,这里介绍一下鄙人的代码思路,并提供码源。

#2、程序思路

首先要明确程序的主体是联系人,因此需要建立一个通讯录的类,通讯录中包括所有的联系人,这里要用到结构体嵌套结构体。

在者,要考虑所要实现的功能,例如:添加、查看、修改、查找、删除、清空联系人。逐个编写函数完成对应功能。(在此之前要先完成主函数框架)

最后,通过调试修改程序细节。

#3、码源分享+代码解析

const int my_max = 1000;
struct Contact_person
{
    string name;
    string gender;
    int age;
    string phone_number;
    string address;
};

struct Communicator
{
    struct Contact_person peopleArray[my_max];
    int people_number = 0;
}num;

·首先创建人的类,包括年龄等属性,在创建通讯录类,记录存储的人数(数组内存有限,不能无限添加)。

void Main_menu()
{
    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()
{
    int choose = 0;
    num.people_number = 0; //初始化人数
    while (1)
    {
        Main_menu();
        cin >> choose;
        switch (choose)
        {
        case 1:
            addperson(&num);
            break;
        case 2:
            showpeople(&num);
            break;
        case 3:
            changepeople(&num);
            break;
        case 4:
            queryperson(&num);
            break;
        case 5:
            deleteperson(&num);
            break;
        case 6:
            clearpeople(&num);
            break;
        case 0:
            cout << "欢迎下次使用" << endl;
            
            return 0;
            break;
        default:
            cout << "输入有误" << endl;
            system("pause");
            system("cls");
            break;
        }
    }
    
    system("pause");
    return 0;
}

·这里进行主框架的搭建,记得在主函数循环外初始化人数。

void addperson(Communicator *num)
{
    if (num->people_number >= 1000)
    {
        cout << "人数已满" << endl;
    }
    else
    {
        string name;
        string sex;
        int age = 0;
        string phone;
        string adds;

        //1、输入姓名
        cout << "请输入联系人姓名" << endl;
        cin >> name;
        num->peopleArray[num->people_number].name = name;
        //2、输入性别
        cout << "请输入联系人性别" << endl;
        cout << "1、男" << endl;
        cout << "2、女" << endl;
        while (1)
        {
            cin >> sex;
            if (sex == "1")
            {
                num->peopleArray[num->people_number].gender = "男";
                break;
            }
            if (sex == "2")
            {
                num->peopleArray[num->people_number].gender = "女";
                break;
            }
            else
            {
                cout << "输入有误" << endl;
                continue;
            }
        }
        //3、输入年龄
        cout << "请输入联系人年龄" << endl;
        cin >> age;
        num->peopleArray[num->people_number].age = age;
        //4、输入号码
        cout << "请输入联系人电话号码" << endl;
        cin >> phone;
        num->peopleArray[num->people_number].phone_number = phone;
        //5、输入地址
        cout << "请输入联系人住址" << endl;
        cin >> adds;
        num->peopleArray[num->people_number].address = adds;

        //记录人数
        num->people_number++;

        cout << "添加成功" << endl;
    }
    system("pause");
    system("cls");
}

·这里实现第一个功能,添加联系人。需注意细节:使用地址传参,记录人数,使用system("cls")清屏。

void showpeople(Communicator* num)
{
    if(!num->people_number)
    {
        cout << "暂无联系人" << endl;
    }
    else
    {
        for (int i = 0; i < num->people_number; i++)
        {
            cout << "姓名是: " << num->peopleArray[i].name << "\t";
            cout << "性别是: " << num->peopleArray[i].gender << "\t";
            cout << "年龄是: " << num->peopleArray[i].age << "\t";
            cout << "号码是: " << num->peopleArray[i].phone_number << "\t";
            cout << "住址是: " << num->peopleArray[i].address << endl;
        }
    }
    system("pause");
    system("cls");
}

·这里是第二个功能,遍历所有的联系人。注意:判断如果没有人输出“暂无人可查”

int findpeople(Communicator * num , string name)
{
    for (int i = 0; i < num->people_number; i++)
    {
        if (num->peopleArray[i].name == name)
        {
            return i;
        }
        return -1;
    }
}

*这个函数是以下几个功能的中心函数,可以查看通讯录中有无你所输入的人的名字,如果有返回所在位置,不存在则返回-1提示。

void deleteperson(Communicator * abs)
{
    string name;
    if(abs->people_number == 0)
    {
        cout << "暂无人可删" << endl;
    }
    else
    {
        cout << "请输入要删除的联系人姓名" << endl;
        cin >> name;
        int a = findpeople(abs, name);
        if (a == -1)
        {
            cout << "查无此人" << endl;
        }
        else
        {
            for (int i = a; i < abs->people_number; i++)
            {
                abs->peopleArray[i] = abs->peopleArray[i + 1];
            }
            cout << "删除成功" << endl;
            abs->people_number--;
        }
    }
    system("pause");
    system("cls");
}

·这里是删除联系人功能,删除思路:用后面人的信息覆盖要删除的人的信息(依次覆盖),可看作删除。

扫描二维码关注公众号,回复: 16965905 查看本文章
void clearpeople(Communicator* num)
{
    string choose;
    cout << "是否要清除?“是” 或 “否”" << endl;
    cin >> choose;
    while (true)
    {
      if(choose == "是")
      {
          num->people_number = 0;
          cout << "清除完成" << endl;
          break;
      }
      else if (choose == "否")
      {
          cout << "重新选择" << endl;
          break;
      }
      else
      {
          cout << "请按规定输入" << endl;
          continue;
      }
    }
    system("pause");
    system("cls");
}

·因查找和修改联系人代码雷同,故不在赘述。这里展示清空功能,实际上可以直接将联系人人数置0即可(添加即覆盖,查找也会屏蔽范围外的信息).

#4、结语

这就是全部介绍了,如果需要完整可直接应用的代码可以联系我哦。

猜你喜欢

转载自blog.csdn.net/m0_73747975/article/details/128738026
今日推荐