#include
#include
using namespace std;
#define MAX 1000
//1.界面的展示
//2.整体的架构搭建和退出的实现
//3.添加联系人(结构体的一点小应用)( 结构体的嵌套定义于访问 )
//4.显示联系人
//5.删除联系人
//6.查找联系人
//7.修改联系人
//8.清空联系人
struct person//人的结构体
{
string m_name;
int m_sex;
int m_age;
string m_phone;
string m_Address;
};
struct Addressbooks//通讯录的结构体
{
struct person Arr[MAX];//使用宏 可以方便我们维护数据
int m_size=0;
};
void menu()
{
cout << "****1.添加联系人****" << endl;
cout << "****2.显示联系人****" << endl;
cout << "****3.删除联系人****" << endl;
cout << "****4.查找联系人****" << endl;
cout << "****5.修改联系人****" << endl;
cout << "****6.清空联系人****" << endl;
cout << "****0. 退出 ****" << endl;
}
void addperson(struct Addressbooks* abs)//也可以用引用(起别名)的方式
{
//添加前先看存满了吗
if (abs->m_size >= MAX)
{
cout << "存储已满,不能再添加";
return;
}
//添加:
//1.姓名
cout << "姓名:" << endl;
string name;
cin >> name;
abs->Arr[abs->m_size].m_name = name;//结构体的嵌套
//2.性别 1男 2女
while (1)
{
cout << "性别";
cout << "1.男 ";
cout << "2.女" << endl;
int x;
cin >> x;
if (x == 1 || x == 2)
{
abs->Arr[abs->m_size].m_age = x;
break;//退出这个循环的唯一方式(逼迫你输入正确)
}
}
//3.年龄
int age = 0;
cout << "年龄:";
cin >> age;
abs->Arr[abs->m_size].m_age = age;
//4.手机号
string phone;
cout << "手机号:";
cin >> phone;
abs->Arr[abs->m_size].m_phone = phone;
//5.家庭住址
string add;
cout << "家庭住址:" ;
cin >> add;
abs->Arr[abs->m_size].m_Address = add;
//6.更新通讯录人数
abs->m_size++;
//告知用户输入成功
cout << "添加成功" << endl;
system("pause");
system("cls");//清屏的操作
}
void showperson(Addressbooks *abs)
{
//判断通讯录中的人数是否为0
if (abs->m_size == 0)
{
cout << "当前记录为空" << endl;
system("pause");
system("cls");
return;
}
for (int i = 0; i < abs->m_size; i++)//遍历(结构体数组也是数组)
{
cout << abs->Arr[i].m_name<<" ";//先从最外面的结构体往里走
cout << (abs->Arr[i].m_sex==1?"男":"女") << " ";//利用三木运算符进行判断(简化)
cout << abs->Arr[i].m_age << " ";
cout << abs->Arr[i].m_Address << " ";
cout << abs->Arr[i].m_phone <m_size; i++)
{
if (abs->Arr[i].m_name==name)//判断两个字符串是否相同 调用函数去判断
return i;
}
return -1;
}
void deleteperson(Addressbooks*abs)//将通讯录传进来
{
string name;
cout << "请输入要删除的联系人:";
cin >> name;
int ret=isExit(abs,name);//调用函数 判断是否存在这个联系人
if (ret != -1)//找到时传回来的是所在下标
{
//将后面的数据前移,覆盖这个数据
for (int j = ret; ret < abs->m_size; j++)
{
abs->Arr[j] = abs->Arr[j + 1];
}
//删完后将通讯录中的人数减1(更新人数)
abs->m_size--;
}
else
cout << "查无此人";
system("pause");
system("cls");
}
//查找联系人
void findperson(Addressbooks* abs)
{
cout << "请输入您要查找的人:" << endl;
string name;
cin >> name;
int ret=isExit(abs,name);//为什么这里不加& :因为在这个函数中abs已经是指针了
//指向了本来的abs 只是我们把形参和实参设置成同一个名字了 就是*p=a,p=&a的意思
if (ret != -1)//找到了 返回的是所在地址 利用地址将结构体数组进行输出
{
cout << "姓名:" << abs->Arr[ret].m_name << endl;
cout << "性别: " << abs->Arr[ret].m_sex << endl;
cout << "年龄:" << abs->Arr[ret].m_age << endl;
cout << "家庭住址: " << abs->Arr[ret].m_Address << endl;
cout << "手机号:" << abs->Arr[ret].m_phone << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//修改联系人
void modifyperson(Addressbooks* abs)
{
cout << "请输入要修改的联系人:";
string name;
cin >> name;
int ret=isExit(abs,name);
if (ret != -1)
{
//姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->Arr[ret].m_name = name;
//性别
int sex;
cout << "请输入性别:" << endl;
cin >> sex;
abs->Arr[ret].m_sex = sex;
//年龄
int age;
cout << "请输入年龄:" << endl;
cin >> age;
abs->Arr[ret].m_age = age;
//电话
string phone;
cout << "请输入电话:" << endl;
cin >> phone;
abs->Arr[ret].m_phone = phone;
}
else
{
cout << "查无此人"<m_size = 0;//将当前的练习人置零,做逻辑上的清空
cout << "通讯录已清空"<> select;//输入不用换行
switch (select)
{
case 1://1.添加联系人
addperson(&abs);
break;
case 2://2.显示联系人
showperson(&abs);
break;
case 3://3.删除联系人 看这个人是否存在(查找 删除 修改都用到这一步) 再删
deleteperson(&abs);//abs才是实际的操作对象 addressbooks和address都是结构体,即框架
break;
case 4://4.查找联系人
findperson(&abs);
break;
case 5://5.修改联系人
modifyperson(&abs);
break;
case 6://6.清空联系人
cleanperson(&abs);
break;
case 0:
cout << "欢迎下次使用" << endl;
system("pause");//按任意键继续
return 0;
break;
}
}
return 0;
}