一、系统需求
- 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址) 最多记录1000人
- 显示联系人:显示通讯录中所有联系人信息
- 删除联系人:按照姓名进行删除指定联系人
- 查找联系人:按照姓名查看指定联系人信息
- 修改联系人:按照姓名重新修改指定联系人
- 清空联系人:清空通讯录中所有信息
- 退出通讯录:退出当前使用的通讯录
二、退出功能
思路:
- 根据用户的不同选择,进入不同的功能,可以用switch分支结构,将整个架构进行搭建
三、添加联系人
步骤:
- 设计联系人结构体
- 设计通讯录结构体
- main函数中创建通讯录
- 封装添加联系人函数
- 测试添加联系人功能
四、显示联系人
思路:
- 判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录中信息
步骤:
- 封装显示联系人函数
- 测试显示联系人功能
五、删除联系人
步骤:
- 封装检测联系人是否存在
- 封装删除联系人函数
- 测试删除联系人功能
六、查找联系人
步骤:
- 封装查找联系人函数
- 测试查找联系人功能
七、修改联系人
步骤:
- 封装修改联系人函数
- 测试修改联系人功能
八、清空联系人
步骤:
- 封装清空联系人函数
- 测试修改联系人功能
#include<iostream>
#include<string>
using namespace std;
#define MAX 1000
//菜单函数
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;
}
//联系人结构体
struct Person
{
string m_Name;
int m_Sex;
int m_Age;
string m_Phone;
string m_Adder;
};
//通讯录结构体
struct Addressbooks
{
struct Person perArray[MAX];//通讯录中保存的联系人数组
int m_Size;//通讯录中人员个数
};
//添加
void addPer(struct Addressbooks * abs)
{
//判断通讯录是否已满
if (abs->m_Size == MAX)
{
cout << "通讯录已满,无法添加!" << endl;
return;
}
else
{
//姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->perArray[abs->m_Size].m_Name = name;
//性别
int sex = 0;
cout << "请输入性别:" << endl;
cout << "1--男" << endl;
cout << "0--女" << endl;
while (true) //若用户输入不为0/1,将直到输入正确为止
{
cin >> sex;
if (sex == 1 || sex == 0)
{
abs->perArray[abs->m_Size].m_Sex = sex;
break; //输入正确,退出循环
}
else
cout << "输入有误,重新输入" << endl;
}
//年龄
int age;
cout << "请输入年龄:" << endl;
cin >> age;
abs->perArray[abs->m_Size].m_Age = age;
//号码
string number;
cout << "请输入号码:" << endl;
cin >> number;
abs->perArray[abs->m_Size].m_Phone = number;
//地址
string address;
cout << "请输入地址:" << endl;
cin >> address;
abs->perArray[abs->m_Size].m_Adder = address;
//更新通讯录人数
abs->m_Size++;
cout << "已添加成功" << endl;
system("pause"); //请按任意键继续
system("cls"); //清屏
}
}
//显示
void showPer(struct Addressbooks * abs)
{
if (abs->m_Size == 0)
cout << "记录为空" << endl;
else
{
for (int i = 0; i < abs->m_Size; i++)
{
cout << "姓名: " << abs->perArray[i].m_Name << "\t";
cout << "性别: " << (abs->perArray[i].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年龄: " << abs->perArray[i].m_Age << "\t";
cout << "号码: " << abs->perArray[i].m_Phone << "\t";
cout << "地址: " << abs->perArray[i].m_Adder << endl;
}
}
system("pause");
system("cls");
}
//检测联系人是否存在.若存在:返回联系人所在数组具体位置,不存在返回-1
int isExist(Addressbooks * abs, string name)
{
for (int i = 0; i < abs->m_Size; i++)
{
if (abs->perArray[i].m_Name == name)
{
return i;
}
}
return -1;
}
//删除
void deletePer(Addressbooks * abs)
{
string name;
cout << "请输入要删除联系人的姓名:" << endl;
cin >> name;
int ret = isExist(abs, name); //这里是abs是delete里的abs,所以不加&
if (ret != -1)
{
for (int i = ret; i < abs->m_Size; i++) //若i < abs->m_Size-1 最后一个数据向前移后,自己却没有清空,会重复两个数据,所以不减1
{
abs->perArray[ret] = abs->perArray[ret + 1];
}
abs->m_Size--;
cout << "删除成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//查找
void findPer(Addressbooks * abs)
{
string name;
cout << "请输入你要查找的联系人姓名:" << endl;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1)
{
cout << "姓名: " << abs->perArray[ret].m_Name << "\t";
cout << "性别: " << (abs->perArray[ret].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年龄: " << abs->perArray[ret].m_Age << "\t";
cout << "号码: " << abs->perArray[ret].m_Phone << "\t";
cout << "地址: " << abs->perArray[ret].m_Adder << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//修改
void modifyPer(Addressbooks * abs)
{
string name;
cout << "请输入要修改的联系人的姓名:" << endl;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1)
{
//姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->perArray[ret].m_Name = name;
//性别
int sex = 0;
cout << "请输入性别:" << endl;
cout << "1--男" << endl;
cout << "0--女" << endl;
while (true) //若用户输入不为0/1,将直到输入正确为止
{
cin >> sex;
if (sex == 1 || sex == 0)
{
abs->perArray[ret].m_Sex = sex;
break; //输入正确,退出循环
}
else
cout << "输入有误,重新输入" << endl;
}
//年龄
int age;
cout << "请输入年龄:" << endl;
cin >> age;
abs->perArray[ret].m_Age = age;
//号码
string number;
cout << "请输入号码:" << endl;
cin >> number;
abs->perArray[ret].m_Phone = number;
//地址
string address;
cout << "请输入地址:" << endl;
cin >> address;
abs->perArray[ret].m_Adder = address;
cout << "修改成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//清空
void cleanPer(Addressbooks* abs)
{
abs->m_Size = 0;
cout << "通讯录已清空" << endl;
system("pause");
system("cls");
}
int main()
{
int select = 0; //创建用户选择输入的变量
Addressbooks abs; //创建通讯录结构体变量
abs.m_Size = 0; //初始化通讯录中当前人员个数
while (true) //可以反复的调用菜单,且不完全是死循环。如:0可以退出
{
//菜单调用
showMenu();
cin >> select;
switch (select)
{
case 1://添加
addPer(&abs); //利用地址传递,修饰形参
break;
case 2://显示
showPer(&abs);
break;
case 3://删除
deletePer(&abs);
break;
case 4://查找
findPer(&abs);
break;
case 5://修改
modifyPer(&abs);
break;
case 6://清空
cleanPer(&abs);
break;
case 0://退出
cout << "欢迎下次使用" << endl;
system("pause");
return 0;
break;
default:
break;
}
}
system("pause");
return 0;
}