1.系统需求
需要实现的功能:1添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
2.显示联系人:显示通讯录中所有联系人信息
3.删除联系人:按照姓名进行删除指定联系人
4.查找联系人:按照姓名查看指定联系人信息
5.修改联系人:按照姓名重新修改指定联系人
6.清空联系人:清空通讯录中所有信息
7.退出通讯录:退出当前使用的通讯录
2.菜单功能
封装函数显示菜单界面
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;
}
3.退出功能
思路:根据用户的不同选择,进入不同的功能,可以选择switch分支结构,将整个架构进行搭建 。当用户选择0的时候,执行退出,选择其它先不做操作,也不会退出程序
int main()
{
//1.创建通讯录结构体变量
Addressbooks abs;
//2.初始化结构体变量中当前的人员数
abs.size = 0;
int select = 0;
while (true)
{
showmenu();
cin >> select;
switch (select)
{
case 1://1、添加联系人
addperson(&abs);//利用地址传递,可以修饰实参
break;
case 2://2、显示联系人
break;
case 3://3、删除联系人
break;
case 4://4、查找联系人
break;
case 5://5、修改联系人
break;
case 6://6、清空联系人
break;
case 0://0、退出通讯录
cout << "欢迎下次使用" << endl;
system("pause");//按任意键继续
return 0;//退出系统
break;
default:
break;
}
}
system("pause");
return 0;
}
4.添加联系人
实现步骤:
1.设计联系人结构体
联系人信息包括:姓名、性别、年龄、联系电话、家庭住址
struct person {
//添加联系人结构体
string name;
int sex;
int age;
string phone;
string addr;
};
2.设计通讯录结构体
在通讯录的结构体中,要维护一个容量为1000的存放联系人的数组,并记录当前通讯录中联系人数量设计如下
#define MAX 1000
//设计通讯录结构体,维护一个容量为1000的存放联系人的数组,并记录当前通讯录中联系人数量
struct Addressbooks {
struct person personarray [MAX];//通讯录中保存的联系人数组
int size;//通讯录中当前记录的联系人个数
};
3.main函数中创建通讯录
int main()
{
//1.创建通讯录结构体变量
Addressbooks abs;
//2.初始化结构体变量中当前的人员数
abs.size = 0;
4.封装添加联系人函数
//添加联系人
void addperson( Addressbooks*abs) {
//判断人数是否满1000
if (abs->size == MAX)
{
cout << "通讯录已满,无法添加!" << endl;
return;
}
else
{//1.添加联系人姓名
string xname;
cout << "请输入姓名: " << endl;
cin >> xname;
abs->personarray[abs->size].name = xname;
//2.添加联系人性别
int xsex=0;
cout << "请输入性别:" << endl;
cout << "1--女" << endl;
cout << "2--男" << endl;
while (true)
{
cin >> xsex;
if (xsex == 1 || xsex == 2)
{
abs->personarray[abs->size].sex = xsex;
break;
}
cout << "输入有误,请重新输入" << endl;
}
}
//3.年龄
int xage = 0;
cout << "请输入年龄: " << endl;
while (true)
{
cin >> xage;
if (xage >= 10 && xage <= 120)
{
abs->personarray[abs->size].age = xage;
break;
}
cout << "输入有误,请重新输入" << endl;
}
//4.电话
string xphone ;
cout << "请输入电话:" << endl;
cin >> xphone;
abs->personarray[abs->size].phone = xphone;
//5.地址
string xaddress;
cout << "请输入地址:" << endl;
cin >> xaddress;
abs->personarray[abs->size].addr = xaddress;
//更新通讯录人数
abs->size++;
cout << "添加成功" << endl;
system("pause");//按任意键继续
system("cls");//清屏
}
5. 测试添加联系人功能
switch (select)
{
case 1://1、添加联系人
addperson(&abs);//利用地址传递,可以修饰实参
break;
5.显示联系人
功能描述:显示通讯录中已有的联系人信息
实现步骤:
5.1封装显示联系人函数
思路:如果当前通讯录没有人员,就提示为空,人数大于0,显示通讯录信息
//显示联系人
void showperson(Addressbooks* abs)
{
//判断通讯录中人数是否为0,若为0,显示当前记录为空;如果不为0,显示记录的联系人信息
if (abs->size == 0) {
cout << "当前记录为空" << endl;
}
else
{
for (int i = 0; i < abs->size; i++)
{
cout << "姓名:" << abs->personarray[i].name << "\t";//"/t"代表空8个字符
cout << "性别:" << (abs->personarray[i].sex==1?"男":"女") << "\t";
cout << "年龄:" << abs->personarray[i].age<< "\t";
cout << "电话:" << abs->personarray[i].phone << "\t";
cout << "住址:" << abs->personarray[i].addr<< "\t";
}
}
system("pause");
system("cls");
}
5.2测试显示联系人功能
case 2://2、显示联系人
showperson(&abs);
break;
6.删除联系人
实现步骤:
6.1封装检测联系人是否存在
设计思路:删除前判断联系人是否存在,如果存在,返回联系人在通讯录中的位置,不存在返回-1
//检测联系人是否存在,若存在,返回联系人所在数组中的具体位置,不存在返回-1
//参数1 通讯录 参数2 名字
int isexist(Addressbooks* abs, string name)
{
for (int i = 0; i < abs->size; i++)
{
if (abs->personarray[i].name == name)
{
return i;//找到了,返回这个人在数组中的下标编号
}
}
return -1;//如果遍历结束都没有找到,返回-1
}
6.2封装删除联系人函数
根据用户输入的联系人判断该通讯录是否有此人
查找到进行删除,并提示删除成功
查不到提示查无此人
//3.删除指定联系人
void deleteperson(Addressbooks* abs)
{
cout << "请输入要删除的联系人的名字" << endl;
string name;
cin>> name;
int ret = isexist(abs, name);
if (ret == -1)
{
cout << "查无此人" << endl;
}
if (ret != -1) {
for (int i = ret; i <=abs->size; i++)
{
abs->personarray[i].name = abs->personarray[i + 1].name;
}
abs->size--;
cout << "删除成功" << endl;
}
}
6.3测试删除联系人功能
case 3://3、删除联系人
deleteperson(&abs);
break;
7.查找联系人
实现步骤:
7.1 封装查找联系人函数
//4.查找指定联系人信息
void findperson(Addressbooks* abs)
{
cout << "请输入要查找的联系人的名字" << endl;
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret == -1)
{
cout << "查无此人" << endl;
}
if (ret != -1) //找到联系人
{
cout << "姓名:" << abs->personarray[ret].name << "\t";// "/t"代表空8个字符
cout << "年龄:" << abs->personarray[ret].age << "\t";
cout << "性别:" << abs->personarray[ret].sex << "\t";
cout << "电话:" << abs->personarray[ret].phone << "\t";
cout << "地址:" << abs->personarray[ret].addr << "\t";
}
//任意键按下后清屏
system("pause");//暂停执行程序,摁下任意键继续
system("cls");//清屏
}
7.2测试查找指定联系人
case 4://4、查找联系人
findperson(&abs);
break;
8.修改联系人
实现步骤:
8.1封装修改联系人函数
//5.修改指定联系人信息
void modifyperson(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;
//性别
cout << "请输入性别:" << endl;
cout << "1--男" << endl;
cout << "2--女" << endl;
int sex = 0;//设置初始值
while (true)//无条件循环
{
cin >> sex;
if (sex == 1 || sex == 2)
{
//输入正确 退出循环输入
abs->personarray[ret].sex = sex;
break;//跳出while循环,break的作用是立刻终止最近的包含它的循环体
}
cout << "输入有误,请重新输入" << endl;
}
//年龄
cout << "请输入年龄:" << endl;
int age = 0;
cin >> age;
abs->personarray[ret].age = age;
//电话
cout << "请输入电话:" << endl;
string phone;
cin >> phone;
abs->personarray[ret].phone = phone;
//住址
cout << "请输入住址:" << endl;
string addr;
cin >> addr;
abs->personarray[ret].addr = addr;
}
else
{
cout << "查无此人" << endl;
}
//任意键按下后清屏
system("pause");//暂停执行程序,摁下任意键继续
system("cls");//清屏
}
8.2测试修改指定联系人
case 5://5、修改联系人
modifyperson(&abs);
break;
9.清空联系人
9.1封装清空联系人函数
//6.清空所有联系人
void cleanperson(Addressbooks*abs){
abs->size = 0;
cout << "通讯录已清空" << endl;
system("pause");
system("cls");
}
9.2 测试清空所有联系人
case 6://6、清空联系人
cleanperson(&abs);
break;
int main()
{
//1.创建通讯录结构体变量
Addressbooks abs;
//2.初始化结构体变量中当前的人员数
abs.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、删除联系人
deleteperson(&abs);
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;
}