#include<iostream>
#include<string>
using namespace std;
const int MAX=1000;
struct Person
{
string m_Name;//姓名
int m_Sex;//性别 1为男 2为女
int m_Age; //年龄
string m_Phone;//电话
string m_Adds;//地址
};
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;
//性别
int sex=0;
cout<<"请输入性别:"<<endl;
cout<<"1---男"<<endl;
cout<<"2---女"<<endl;
//如果输入的是1或者2可以退出循环,因为输入的是正确值;
//如果不是继续输入,直到是1或者2为止
while(true)
{
cin>>sex;
if(sex==1||sex==2){
abs->personArray[abs->m_Size].m_Sex=sex;
break;
}
cout<<"输入有误,重新输入"<<endl;
}
//年龄
int age=0;
cout<<"请输入年龄:"<<endl;
cin>>age;
abs->personArray[abs->m_Size].m_Age=age;
//电话
string phone;
cout<<"请输入电话:"<<endl;
while(true){
cin>>phone;
if(phone.size()==11||phone.size()==6){
abs->personArray[abs->m_Size].m_Phone=phone;
break;
}
}
//地址
string address;
cout<<"请输入家庭住址:"<<endl;
cin>>address;
abs->personArray[abs->m_Size].m_Adds=address;
//更新通讯录人数
abs->m_Size++;
cout<<"添加成功"<<endl;
system("pause");//请按任意键继续
system("cls");//清屏操作
}
}
//显示联系人
void showperson(Addressbooks *abs) {
if(abs->m_Size==0){
cout<<"当前联系人为空"<<endl;
return ;
}
else{
for(int i=0;i<abs->m_Size;i++){
cout<<"姓名: "<<abs->personArray[i].m_Name<<"\t";// \t是水平制表符,空出8个字符位
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_Adds<<endl;
}
}
system("pause");//按任意键结束
system("cls");//清屏
}
//检测该联系人是否存在
int insertperson(string a,Addressbooks *abs){
for(int i=0;i<abs->m_Size;i++){
if(a==abs->personArray[i].m_Name){
return i;
}
}
return -1;
}
//删除联系人
void deleteperson(Addressbooks *abs) {
cout<<"请输入您要删除的联系人: "<<endl;
string name;
cin>>name;
int t=insertperson(name,abs);
if(t==-1) cout<<"查无此人"<<endl;
else{
//查到此人要进行删除;
abs->personArray[t]=abs->personArray[t+1];
abs->m_Size--;
cout<<"删除成功"<<endl;
}
system("pause");
system("cls");
}
//查找指定联系人
void insertpersons(Addressbooks *abs){
cout<<"请输入您要查找的联系人: " <<endl;
string name;
cin>>name;
int t=insertperson(name,abs);
if(t==-1) cout<<"查无此人"<<endl;
else{
cout<<"姓名: "<<abs->personArray[t].m_Name<<"\t";// \t是水平制表符,空出8个字符位
cout<<"性别: "<<(abs->personArray[t].m_Sex==1?"男":"女")<< "\t";
cout<<"年龄: "<<abs->personArray[t].m_Age<< "\t";
cout<<"电话: "<<abs->personArray[t].m_Phone<< "\t";
cout<<"住址: "<<abs->personArray[t].m_Adds<<endl;
}
system("pause");
system("cls");
}
//修改联系人
void modifypersons(Addressbooks *abs){
cout<<"请输入您要修改的联系人: " <<endl;
string name;
cin>>name;
int t=insertperson(name,abs);
if(t==-1) cout<<"查无此人"<<endl;
else{
//姓名
string name;
cout<<"请输入姓名:"<<endl;
cin>>name;
abs->personArray[ t].m_Name=name;
//性别
int sex=0;
cout<<"请输入性别:"<<endl;
cout<<"1---男"<<endl;
cout<<"2---女"<<endl;
//如果输入的是1或者2可以退出循环,因为输入的是正确值;
//如果不是继续输入,直到是1或者2为止
while(true)
{
cin>>sex;
if(sex==1||sex==2){
abs->personArray[t].m_Sex=sex;
break;
}
cout<<"输入有误,重新输入"<<endl;
}
//年龄
int age=0;
cout<<"请输入年龄:"<<endl;
cin>>age;
abs->personArray[t].m_Age=age;
//电话
string phone;
cout<<"请输入电话:"<<endl;
while(true){
cin>>phone;
if(phone.size()==11||phone.size()==6){
abs->personArray[t].m_Phone=phone;
break;
}
}
//地址
string address;
cout<<"请输入家庭住址:"<<endl;
cin>>address;
abs->personArray[t].m_Adds=address;
cout<<"修改成功!"<<endl;
}
system("pause");
system("cls");
}
//清空联系人
void cleanperson(Addressbooks *abs)
{
abs->m_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<<"***** 0.退出通讯录 *****"<<endl;
cout<<"************************"<<endl;
}
int main()
{
//创建通讯录结构体变量
struct Addressbooks abs;
//初始化通讯录中的当前人员的个数
abs.m_Size=0;
int select;
while(true){
showMenu();//显示菜单
cin>>select;
string a;
switch(select)
{
case 1://添加联系人
addPerson(&abs);//值传递不修饰实参,传入的是地址才能修饰形参
break;
case 2://显示通讯录
showperson(&abs);
break;
case 3://删除联系人
deleteperson(&abs);
break;
case 4://查找联系人
insertpersons(&abs) ;
break;
case 5://修改联系人
modifypersons(&abs);
break;
case 6://清空联系人
cleanperson(&abs);
break;
case 0://退出通讯录
cout<<"欢迎下次使用"<<endl;
return 0;
break;
default :
break;
}
}
}