1.菜单栏的设置
(1)我么自定义了一个showmenu函数,用来打印输出我们的菜单栏;
(2)菜单栏里面设置一些我们的通讯录里面需要用到的功能,例如增加联系人,删除联系人等等
2.退出功能的实现
在我们的主函数里面,我们可以使用这个switch语句进行相应的判断,当用户的输入的数字是0的时候,我们就会直接返回,不会继续执行,但是我们肯定不能让用户输入0~6的时候还是退出呀,所以我们可以使用while循环语句,这样当我们输入0的时候,就会结束循环,当我们输入1~6的时候,程序就会继续显示菜单栏,让我们继续进行选择,我们后续可以继续进行设置;
3.添加联系人
添加的联系人的信息包括姓名,性别,年龄,联系电话,家庭地址;
(1)设计联系人的结构体
这个结构体的主要作用就是包含对应的联系人的相关的信息,是针对于联系人而创建的结构体;因为这个结构体涉及到了结构体的成员的姓名,电话,以及家庭住址,我们需要使用string关键字进行定义,这个时候要包含对应的头文件;
(2)生成通讯录结构体
这个结构体是把所有的联系人放进去,并且记录联系人的个数(使用的是int变量),我们可以设置通讯录里面的人数的上限,我们可以使用宏的方式进行定义,这样当通讯录的规模进行变动的时候,我们可以直接进行修改;
(3)主函数里面对应的参数的设置
这个里面我们首先要创建一个结构体的变量,初始化里面的size,也就是对应的通讯录里面的人数
(4)添加联系人的函数
因为我们的通讯录设置的最大的人数上限是1000,所以如果人数超过1000,就会显示通讯录已经满了的提示信息;
接下来我们分别输入对应的联系人的信息,并把我们输入的信息传到对应的结构体里面去,因为我们要往数组里面添加元素,所以我们可以使用结构体里面的size作为下标,每次添加联系人以后都要进行看加加操作;
在设置联系人的性别的时候,我们使用了一个循环,这个循环的作用就是进行判断,只有我们的输入是1,2才符合要求,如果输入其他的数字,就会显示提示信息,并且要求操作者知道输入正确才结束我们的循环;
因为形参的改变量不会影响实参,所以我们传递结构体变量的地址,我们使用结构体的指针进行接收就可以了;
如果我们不断的添加联系人的信息,显示屏就会很多信息,我们可以在每次添加完一个联系人的信息之后进行相应的清屏的操作;
4.显示联系人的信息
我们同样需要进行判断通讯录是否为空,否则我们无法显示联系人的信息;
我们当时是让1代表男性,2代表女性,我们这个时候不能让性别显示我们自己定义的1或者2,而是对应的男或者女,我们使用三目运算符就可以达到这样的目的;
我们为了让我们的每个联系人的信息在同一行进行显示,我们在每个信息的结尾使用制表符,只有最后一个才进行换行操作,这样就可以让我们的打印结果更加的美观;
5.删除联系人
首先我们要封装一个函数用来进行判断我们输入的姓名是否在通讯录里面存在,如果存在就返回对应的下标,如果不存在就直接-1;函数的实现如下:
相当于就是在通讯录里面进行遍历的操作,看看我们输入的姓名是否和通讯录里面一致的姓名符合,如果符合,就表明我们输入的联系人在通讯录里面是存在的,我们可以进行删除;
如果有这个联系人,我们应该如何进行删除呢?我们可以让后面的数据覆盖前面的联系人的信息,这样就可以删除我们要求的联系人的信息;为了防止覆盖,我们需要从前往后,挨个进行移动,最后把size进行减去1的操作;
6.查找联系人
查找联系人的主要思路就是先要进行判断这个联系人是否存在,如果存在就会打印输出对应的信息
如果并存在就会提示没有这个人
7.修改联系人
我们首先要判断修改的联系人是否存在,如果存在就重新进行输入并且进行赋值;
我们需要对每一项信息进修重新录入和赋值;
8.清除联系人
我们只是逻辑上面把size的数值变为0,就可以实现清除的目的;
9.通讯录完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#define MAX 1000
using namespace std;
struct person
{
string name;
int sex;
int age;
string phone;
string address;
};
struct addressbooks
{
struct person personarray[MAX];
int size;
};
void add(addressbooks *abs)
{
//判断是否满了
if (abs->size == MAX)
{
cout << "通讯录已满" << endl;
return;
}
else
{
string name;
cout << "请输入姓名 " << endl;
cin >> name;
abs->personarray[abs->size].name = name;
cout << "请输入性别 " << endl;
cout << "1---男" << endl;
cout << "2---女" << endl;
int sex;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
abs->personarray[abs->size].sex = sex;
break;
}
cout << "输入有误,请重新输入 " << endl;
}
cout << "请输入年龄 " << endl;
int age = 0;
cin >> age;
cout << "请输入电话 " << endl;
string phone;
cin >> phone;
abs->personarray[abs->size].phone = phone;
cout << "请输入地址 " << endl;
string address;
cin >> address;
abs->personarray[abs->size].address = address;
abs->size++;
cout << "添加成功 " << endl;
system("cls");
}
}
void show(addressbooks* abs)
{
if (abs->size == 0)
{
cout << "当前的联系人个数为空" << endl;
}
else
{
int i = 0;
for (i = 0; i < abs->size; i++)
{
cout << "姓名:" << abs->personarray[i].name << '\t';
cout << "性别:" << (abs->personarray[i].sex == 1 ? "男" : "女") << '\t';
cout << "年龄" << abs->personarray[i].age << '\t';
cout << "电话:" << abs->personarray[i].phone << '\t';
cout << "地址:" << abs->personarray[i].address << endl;
}
}
}
int isexist(addressbooks* abs, string name)
{
int i = 0;
for (i = 0; i < abs->size; i++)
{
if (abs->personarray[i].name == name)
{
return i;
}
}
return -1;
}
void deleteperson(addressbooks* abs)
{
cout << "请输入你想要删除的联系人 " << endl;
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret != -1)
{
int i = ret;
for (i = ret; i < abs->size; i++)
{
abs->personarray[i] = abs->personarray[i + 1];
}
abs->size--;
}
cout << "删除成功" << endl;
system("cls");
}
void find(addressbooks* abs)
{
cout << "请输入需要查找的联系人" << endl;
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret != -1)
{
cout << "姓名:" << abs->personarray[ret].name << '\t';
cout << "性别:" << (abs->personarray[ret].sex == 1 ? "男" : "女") << '\t';
cout << "年龄" << abs->personarray[ret].age << '\t';
cout << "电话:" << abs->personarray[ret].phone << '\t';
cout << "地址:" << abs->personarray[ret].address << endl;
}
else
{
cout << "没有这个联系人 " << endl;
}
system("pause");
system("cls");
}
void modify(addressbooks* abs)
{
cout << "请输入要修改的联系人: " << endl;
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret != -1)
{
string name;
cout << "请输入姓名 " << endl;
cin >> name;
abs->personarray[ret].name = name;
int sex;
cout << "请输入性别 " << endl;
cout << "1----男" << endl;
cout << "2---女" << endl;
cin >> sex;
abs->personarray[ret].sex = sex;
int age;
cout << "请输入年龄 " << endl;
cin >> age;
abs->personarray[ret].age = age;
int phone;
cout << "请输入号码 " << endl;
cin >> phone;
abs->personarray[ret].phone = phone;
string address;
cout << "请输入家庭地址: " << endl;
cin >> address;
abs->personarray[ret].address = address;
cout << "修改成功" << endl;
}
else
{
cout << "没找到这个联系人 " << endl;
}
system("pause");
system("cls");
}
void clear(addressbooks* abs)
{
abs->size = 0;
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 << "***********************" << endl;
}
int main()
{
//创建通讯录的结构体变量
addressbooks abs;
//初始化通讯录的人数
abs.size = 0;
while (true)
{
showmenu();
int input = 0;
cin >> input;
switch (input)
{
case 1:
add(&abs);
break;
case 2:
show(&abs);
break;
case 3:
deleteperson(&abs);
break;
case 4:
find(&abs);
break;
case 5:
modify(&abs);
break;
case 6:
clear(&abs);
break;
case 0:
cout << "欢迎下次使用" << endl;
return 0;
break;
default:
break;
}
}
return 0;
}