//实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)
//添加联系人实现步骤:设计联系人结构体
// 设计通讯录结构体 main函数中创建通讯录 封装添加联系人函数 测试添加联系人功能
#include<iostream>
#include<string>
#define max 1000
using namespace std;
//封装函数显示界面 void show() 在main函数中调用封装好的函数
void show()
{
for (int i = 0; i < 23; i++) {cout << "*";}
cout << endl;
cout << "*****" << "1、添加联系人" << "*****" << endl;
cout << "*****" << "2、显示联系人" << "*****" << endl;
cout << "*****" << "3、删除联系人" << "*****" << endl;
cout << "*****" << "4、查找联系人" << "*****" << endl;
cout << "*****" << "5、修改联系人" << "*****" << endl;
cout << "*****" << "6、清空联系人" << "*****" << endl;
cout << "*****" << "0、退出通讯录" << "*****" << endl;
for (int i = 0; i < 23; i++) {cout << "*";}
cout << endl;
cout << "请输入相应命令使用通讯录"<< endl;
}
//联系人结构体
struct lxr
{
string name, sex;
int age;
string tele;
string address;
};
struct txl//通讯录结构体
{
struct lxr lxr[max];
int number;
};
//1、添加联系人
void addlxr( txl *txl)//封装添加联系人函数
{
//判断通讯录是否已满
if (txl->number == max)
{
cout << "通讯录已满无法继续添加" << endl;
}
else
{
string name;
string sex;
int age;
string tele;
string address;
cout << "请输入联系人姓名" << endl;
cin >> name;
txl->lxr[txl->number].name = name;//利用当前通讯录中人员个数添加姓名 很巧妙 txl->lxr[txl->number]
cout << "请输入联系人性别" << endl;
cout << "1---男" << endl;
cout << "2---女" << endl;
int shuru;
while(true)
{
cin >> shuru;
switch (shuru)
{
case 1:
{
txl->lxr[txl->number].sex = "男";
break;
}
case 2:
{
txl->lxr[txl->number].sex = "女";
break;
}
default:
{
cout << "输入有误请重新输入" << endl;
continue;
}
}
break;
}
cout << "请输入联系人年龄" << endl;
while (true)
{
cin >> age;
if ( 0 < age < 120)
{
txl->lxr[txl->number].age = age;
break;
}
cout << "输入有误请重新输入" << endl;
continue;
}
cout << "请输入联系人电话" << endl;
cin >> tele;
txl->lxr[txl->number].tele = tele;
cout << "请输入联系人地址" << endl;
cin >> address;
txl->lxr[txl->number].address = address;
txl->number++;
cout << "通讯录更新成功" << endl;
system("pause"); //请按任意键继续
//system("cls"); //清屏操作
}
}
//2、显示联系人
void showpeople(txl *txl)//封装显示联系人函数
{
if (txl->number == 0)
{
cout << "当前通讯录为空" << endl;
}
else
{
for (int i = 0; i < txl->number; i++)
{
cout << "姓名:" << txl->lxr[i].name << " 性别:" << txl->lxr[i].sex << " 年龄:" << txl->lxr[i].age
<< " 电话:" << txl->lxr[i].tele << " 地址:" << txl->lxr[i].address << endl;
}
}
system("pause");
//system("cls");
}
//3、删除联系人
//3.1查找的联系人是否存在
int peopleexist(txl *txl,string name)//查找联系人是否存在函数 如果存在返回联系人所在数组所在位置 不存在返回-1
{
for (int i = 0; i < txl->number; i++)
{
if (txl->lxr[i].name == name)
{
return i; //打印出姓名代号
}
}
return -1;//不存在
}
//3.2删除联系人
void deletepeople(txl *txl)
{
if (txl->number == 0)
{
cout << "当前通讯录为空" << endl;
}else
{
cout << "请输入您要删除的联系人" << endl;
string name;
cin >> name;
int sure;
int ret = peopleexist(txl, name);
if (ret == -1)
{
cout << "查无此人" << endl;
//system("pause");
//system("cls");
}
else
{
cout << "找到" << name << endl;
cout << "确定删除吗?" << endl;
cout << "1---确定删除" << endl;
cout << "2---取消删除" << endl;
cin >> sure;
switch (sure)
{
case 1:
{
for (int i = ret; i < txl->number; i++)
{
//数据前移
txl->lxr[i] = txl->lxr[i + 1];
}
txl->number--;
cout << "删除成功" << endl;
break;
}
case 2:
cout << "删除操作取消" << endl;
break;
default:
cout << "输入错误请重新输入" << endl;
break;
}
}
}
system("pause");
//system("cls");
}
//4、查找联系人
void findpeople(txl *txl)
{
if (txl->number == 0)
{
cout << "当前通讯录为空" << endl;
}
else
{
cout << "请输入您要查找的联系人" << endl;
string name;
cin >> name;
int ret = peopleexist(txl, name);
if (ret == -1)
{
cout << "查无此人" << endl;
system("pause");
//system("cls");
}
else
{
cout << "找到" << name << endl;
cout << "具体信息为" << endl;
cout << "姓名:" << txl->lxr[ret].name << " 性别:" << txl->lxr[ret].sex << " 年龄:" << txl->lxr[ret].age
<< " 电话:" << txl->lxr[ret].tele << " 地址:" << txl->lxr[ret].address << endl;
}
}
}
//5、修改联系人
//5.1全部信息修改
void changeall(txl* txl)
{
string name;
string sex;
int age;
string tele;
string address;
int ret = peopleexist(txl, name);
cout << "请输入联系人姓名" << endl;
cin >> name;
txl->lxr[ret].name = name;//利用当前通讯录中人员个数添加姓名 很巧妙 txl->lxr[txl->number]
cout << "请输入联系人性别" << endl;
cout << "1---男" << endl;
cout << "2---女" << endl;
int shuru;
while (true)
{
cin >> shuru;
switch (shuru)
{
case 1:
{
txl->lxr[ret].sex = "男";
break;
}
case 2:
{
txl->lxr[ret].sex = "女";
break;
}
default:
{
cout << "输入有误请重新输入" << endl;
continue;
}
}
break;
}
cout << "请输入联系人年龄" << endl;
while (true)
{
cin >> age;
if (0 < age < 120)
{
txl->lxr[ret].age = age;
break;
}
cout << "输入有误请重新输入" << endl;
continue;
}
cout << "请输入联系人电话" << endl;
cin >> tele;
txl->lxr[ret].tele = tele;
cout << "请输入联系人地址" << endl;
cin >> address;
txl->lxr[ret].address = address;
}
//5.2修改后输出地址
void changelate(txl *txl,string name)
{
cout << "修改后联系人信息为" << endl;
int ret = peopleexist(txl, name);
cout << "姓名:" << txl->lxr[ret].name << " 性别:" << txl->lxr[ret].sex << " 年龄:" << txl->lxr[ret].age
<< " 电话:" << txl->lxr[ret].tele << " 地址:" << txl->lxr[ret].address << endl;
}
//5.3修改联系人函数封装
void changepeople(txl *txl)
{
if (txl->number == 0)
{
cout << "当前通讯录为空" << endl;
}
else
{
cout << "请输入您要修改的联系人" << endl;
string name;
int xiugai;
cin >> name;
int ret = peopleexist(txl, name);
if (ret == -1)
{
cout << "查无此人" << endl;
system("pause");
//system("cls");
}
else
{
cout << "找到" << name << "具体信息为" << endl;
cout << "姓名:" << txl->lxr[ret].name << " 性别:" << txl->lxr[ret].sex << " 年龄:" << txl->lxr[ret].age
<< " 电话:" << txl->lxr[ret].tele << " 地址:" << txl->lxr[ret].address << endl;
cout << "您要修改哪一项" << endl;
cout << "1.姓名 2.性别 3.年龄 4.电话 5.地址 6.全部修改" << endl;
cin >> xiugai;
switch (xiugai)
{
case 1://姓名
{
cout << "请输入修改后联系人姓名" << endl;
cin >> name;
txl->lxr[ret].name = name;
changelate(txl, name);
}break;
case 2://性别
{
cout << "请输入修改后联系人性别" << endl;
cout << "1---男" << endl;
cout << "2---女" << endl;
int shuru;
while (true)
{
cin >> shuru;
switch (shuru)
{
case 1:
{
txl->lxr[ret].sex = "男";
break;
}
case 2:
{
txl->lxr[ret].sex = "女";
break;
}
default:
{
cout << "输入有误请重新输入" << endl;
continue;
}
}
break;
}
changelate(txl, name);
}break;
case 3://年龄
{
int age;
cout << "请输入修改后联系人年龄" << endl;
while (true)
{
cin >> age;
if (0 < age < 120)
{
txl->lxr[ret].age = age;
break;
}
cout << "输入有误请重新输入" << endl;
continue;
}
changelate(txl, name);
}break;
case 4://电话
{
string tele;
cout << "请输入修改后联系人电话" << endl;
cin >> tele;
txl->lxr[ret].tele = tele;
changelate(txl, name);
}break;
case 5://地址
{
string address;
cout << "请输入修改后联系人地址" << endl;
cin >> address;
txl->lxr[ret].address = address;
changelate(txl, name);
}break;
case 6://全部修改
{
changeall (txl);
changelate(txl, name);
}break;
}
}
}
system("pause");
}
//6.清空联系人
void clean(txl *txl)
{
int qingkong;
if (txl->number == 0)
{
cout << "当前通讯录已经为空" << endl;
}
else
{
cout << "你确定要清空通讯录吗?" << endl;
cout << "1---确定清空" << endl;
cout << "2---取消清空" << endl;
cin >> qingkong;
switch (qingkong)
{
case 1:
{
txl->number = 0;//通过联系人数量置为0来实现清空
cout << "通讯录已清空" << endl;
system("pause");
break;
}
case 2:
cout << "清空操作取消" << endl;
break;
default:
cout << "输入错误请重新输入" << endl;
break;
}
}
system("pause");
}
int main ()
{
int select = 0;//用户选择变量
txl txl; //创建通讯录结构体变量
txl.number = 0; //初始化通讯录中当前人员个数
while(true)//搭建了一个框架
{
show();
cin >> select;
switch (select)
{
case 1://1、添加联系人
addlxr(&txl);//利用地值传递改变实参
continue;
case 2://2、显示联系人
showpeople(&txl);
continue;
case 3://3、删除联系人
{
deletepeople(&txl);
//cout << "请输入删除联系人姓名" << endl;
//string name;
//cin >> name;
/*if (peopleexist(&txl, name) == -1)
{
cout << "查无此人" << endl;
}
else
{
cout << "找到此人" << endl;
}*/
}continue;
case 4://4、查找联系人
findpeople(&txl);
continue;
case 5://5、修改联系人
changepeople(&txl);
continue;
case 6://6、清空联系人
clean(&txl);
continue;
case 0://0、退出通讯录
cout << "欢迎下次使用" << endl;
system ("pause");
return 0;
break;
default:
cout << "输入有误请重新输入" << endl;
continue;
}
system ("pause");
return 0;
}
}