//封装函数显示该界面,如void showMenu()

//在main函数中调用封装好的函数

#include<iostream>

using namespace std;

#include<string>

#define MAX 1000

//菜单界面

void showMenu() {

cout << "***** 1,添加联系人 *****"  << endl;

cout << "***** 2,显示联系人***** " << endl;

cout << "***** 3,删除联系人***** " << endl;

cout << "***** 4,查找联系人*****" << endl;

cout << "***** 5,修改联系人***** " << endl;

cout << "***** 6,清空联系人***** " << endl;

cout << "***** 0,退出通讯录*****"  << endl;


}

//设计联系人结构体

struct person {

string m_Name;

int m_Sex;

int m_Age;

string m_Phone;//电话

string m_Adder;//家庭住址

};

struct Addressbooks {

//通讯录中保存的联系人数组

struct person personArray[MAX];

//通讯录中当前记录联系人的个数

int m_Size;

};

//添加联系人函数实现  

void addperson(Addressbooks *abs) {

//判读通讯录是否已满,如果满了  就不再添加

if (abs->m_Size == MAX) {

 cout << "通讯系统已满,无法添加!" << endl;

 return;

}

else {

 //添加具体联系人

 //姓名

 string name;

 cout << "请输入姓名" << endl;

 cin >> name;

 abs->personArray[abs->m_Size].m_Name = name;

 

 //性别

 /*string sex;

 cout << "请输入性别:" << endl;

 cin >> sex;

 abs->personArray[abs->m_Size].m_Sex = sex;*/

 cout << "请输入性别:" << endl;

 cout << "1----男" << endl;

 cout << "2----女" << endl;

 int sex = 0;

 while (true) {

  cin >> sex;

  if (sex == 1 || sex == 2) {

   abs->personArray[abs->m_Size].m_Sex = sex;

   break;

  }

  cout << "输入有误,请重新输入:" << endl;

 }

 

 

 //年龄

 cout << "请输入年龄:" << endl;

  int age;


   while (true) {

    cin >> age;

    if(age>0&&age<100){

     abs->personArray[abs->m_Size].m_Age = age;

     break;

    }

    cout << "您输入的年龄错误" << endl;

   }

   


 //电话

   cout << "请输入联系电话:" << endl;

   

   string phone;

   cin >> phone;

    abs->personArray[abs->m_Size].m_Phone = phone;


    //地址

    cout << "请输入家庭住址:" << endl;

    string adder;

    cin >> adder;

    abs->personArray[abs->m_Size].m_Adder = adder;

    //更新通讯录人数

    abs->m_Size++;

    cout << "添加成功" << endl;

    system("pause");

    system("cls");//清屏操作

}


}

//显示所有联系人函数实现

void showperson(Addressbooks *abs) {

//

//

if (abs->m_Size == 0) {

 cout << "当前记录为空" << endl;

}

else {

 for (int i = 0; i < abs->m_Size; i++) {

  cout << "姓名:  " << abs->personArray[i].m_Name << "\t";

  cout << "性别" << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t";

  cout << "年龄" << abs->personArray[i].m_Age <<"\t";

  cout << "电话" << abs->personArray[i].m_Phone << "\t";

  cout << "地址" << abs->personArray[i].m_Adder << "endl";

 }

}

system("pause");

system("cls");

}

//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1

//参数1  通讯录  参数2   对比姓名

int isExist(Addressbooks *abs,string name ) {

for (int i = 0; i < abs->m_Size; i++) {

 if (abs->personArray[i].m_Name == name) {

  return i;

 }

}

return -1;//如果便利结束都没有找到,返回-1

}

//删除指定的联系人

void deleteperson(Addressbooks *abs) {

cout << "请输入您要删除的联系人:" << endl;

string name;

cin >> name;

  //ret==-1 未查到

//ret !=-1  查到了

int ret = isExist(abs, name);

 if (ret != -1) {

  //查到此人,做删除处理

  for (int i = ret; i < abs->m_Size; i++) {

   abs->personArray[i] = abs->personArray[i + 1];

  }

  abs->m_Size--;//更新通讯录中的人数

  cout << "删除成功" << endl;

 }


}//查找联系人

void findperson(Addressbooks *abs){

cout << "请输入您要查找的联系人" << endl;

string name;

cin >> name;

//判断联系人是否存在通讯录中

int cha= isExist(abs, name);

if (cha != -1) {   //找到了

 cout << "姓名:  " << abs->personArray[cha].m_Name << "\t";

 cout << "性别" << (abs->personArray[cha].m_Sex == 1 ? "男" : "女") << "\t";

 cout << "年龄" << abs->personArray[cha].m_Age << "\t";

 cout << "电话" << abs->personArray[cha].m_Phone << "\t";

 cout << "地址" << abs->personArray[cha].m_Adder << "endl";

}

else {

 cout << "查无此人" << endl;


}

system("pause");

system("cls");

}

void modifyperson(Addressbooks *abs) {

//修改联系人名字

cout << "请输入一下您要修改的联系人" << endl;

string name;

cin >> name;

int xiu=isExist(abs, name);

abs->personArray[xiu].m_Name = name;

if (xiu != -1) {   //找到指定联系人

 string name;

 cout << "请输入一个姓名" << endl;

 cin >>name;

 abs->personArray[xiu].m_Name = name;

//修改联系人性别

 cout << "请输入性别:" << endl;

 cout << "1,---男" << endl;

 cout << "2,---女" << endl;

 int sex = 0;

 cin >> sex;


 while (true) {

  if (sex == 1 || sex == 2) {

   abs->personArray[xiu].m_Sex = sex;

   break;

  }

  cout << "输入错误" << endl;

 }

 //  修改年龄

 cout << "请输入你的年龄" << endl;

 int age = 0;

 cin >> age;

 abs->personArray[xiu].m_Age = age;

 cout << "修改成功" << endl;

 //修改手机号

 cout << "请输入手机号" << endl;

 string phone;

 cin >> phone;

 abs->personArray[xiu].m_Phone = phone;

 cout << "修改成功" << endl;

 //修改地址

 cout << "输入地址" << endl;

 string adder;

 cin >> adder;

 abs->personArray[xiu].m_Adder = adder;

 cout << "修改成功" << endl;

 system("pause");

 system("cls");

 

}  

else {

 cout << "查无此人" << endl;

}

 

 

}

void cleanperson(Addressbooks *abs) {

abs->m_Size = 0; //将当前记录联系人数量置为0,做逻辑清空操作

cout << "联系人已经清空" << endl;

system("pause");

system("cls");

}

int main() {

//创建函数结构体变量

Addressbooks abs;  

//设置初始联系人个数    

abs.m_Size = 0;

int select = 0;  //创建用户选择输入的变量

while (true) {

 //菜单调用

 showMenu();

 cin >> select;

 switch (select) {

 case 1:     //1,添加联系人

  addperson(&abs);//利用地址传递,可以修饰实参。

  break;

 case 2:  //2,显示联系人

  showperson(&abs);

  break;

 case 3:  //3, 删除联系人


/* 查看联系人是否存在

 

{ cout << "请输入删除联系人的姓名:" << endl;

 string name;

 cin >> name;

 if (isExist(&abs, name) == -1) {

  cout << "查无此人" << endl;


 }

 else {

  cout << "找到此人" << endl;

 }

 }*/

  deleteperson(&abs);

  system("pause");

  system("cls");

  break;

 case 4:   //4, 查找联系人

  findperson(&abs);

  break;

 case 5:  //5,修改联系人

  modifyperson(&abs);

  break;

 case 6: //6,清空联系人

  cleanperson(&abs);

  break;

 case 0: //0,退出通讯录

  cout << "欢迎下次使用" << endl;

  system("pause");

  return 0;

  break;

 default:

  break;

 }

 

}

 

 system("pause");

 return 0;


}