目录
一、设计要求
添加联系人:向通讯录中添加联系人,信息包括(姓名、性别、年龄、联系方式、住址)以及通讯录的最大值。
显示联系人:显示通讯录中所有联系人信息。
删除联系人:按照用户需求进行删除指定联系人。
查找联系人:按照用户需求查看指定联系人信息。
修改联系人:按照用户需求重新修改指定联系人。
清空通讯录:将通讯录数据全部清空。
二、设计思路
1.先设计一个结构体包含联系人的各项信息,在设计一个结构体包含联系人信息的数组,以及数组的下标。
2.分模块实现各部分所需要的功能。
三、各模块功能实现
1、主函数
函数所要实现的功能较多,所以使用switch语句进行功能选择,同时在switch之外用一个死循环,防止程序在运行一次switch之后结束。
int main()
{
int select = 0;
Mail abs;
while (1)//不添加此循环,程序会在执行一次switch之后结束
{
Showpage();
cin >> select;
switch (select)
{
case 0:
cout << "欢迎下次使用" << endl;
case 1:
Add(&abs);
break;
case 2:
Show(&abs);
break;
case 3:
Delect(&abs);
break;
case 4:
Seek(&abs);
break;
case 5:
Revise(&abs);
break;
case 6:
Clear(&abs);
break;
default:
cout << "您输入的有误,请重新输入" << endl;
break;
}
}
return 0;
}
2、添加联系人
先判断通讯录是否满了,若是满了直接退出。若是没满将对应的信息存储到对应的位置,最后更新一下数组的数量。
void Add(Mail *abs)//添加联系人
{
if (abs->value == MAX)
cout << "通讯录已满" << endl;
else
{
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->quantity[abs->value].P_name = name;
int sexual=3;
cout << "请选择性别:1.男 2.女:" << endl;
cin >> sexual;
abs->quantity[abs->value].P_sexual = sexual;
int age;
cout << "请输入年龄:" << endl;
cin >> age;
abs->quantity[abs->value].P_age = age;
long long number;
cout << "请输入电话号码:" << endl;
cin >> number;
abs->quantity[abs->value].P_number = number;
string addr;
cout << "请输入地址:" << endl;
cin >> addr;
abs->quantity[abs->value].P_addr = addr;
}
abs->value++;//更新数组内的个数
cout << "添加成功" << endl;
system("pause");//按任意键继续
system("cls");
}
3、显示联系人
先判断是否为空,若是空直接结束,若不是通过for循环将书主内的信息输出。
void Show(Mail *abs)//显示联系人
{
if (abs->value == 0)//通讯录为空时直接返回
cout << "通讯录为空,请添加联系人" << endl;
else
for (int i = 0; i < abs->value; i++)//利用for循环输出联系人的信息
{
cout << "姓名:" <<abs->quantity [i].P_name << "\t";
cout << "性别:" << (abs->quantity[i].P_sexual== 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->quantity[i].P_age << "\t";
cout << "电话号码:" << abs->quantity[i].P_number << "\t";
cout << "地址:" << abs->quantity[i].P_addr << endl;
}
system("pause");
system("cls");
}
4、删除联系人
先找到对应联系人的位置并返回数组下标,再将之后所有纤细人数组下标前移一位覆盖度所要删除联系人的信息。
void Delect(Mail *abs)//删除联系人
{
if (abs->value == 0)
cout << "通讯录为空" << endl;
else
{
cout << "请输入要删除联系人的姓名:" << endl;
int ret = isExist(abs);
if (ret != -1)
{
for (int i = ret; i < abs->value; ++i)//将所要删除的联系人之后的所有数据向前移动一位,也可以通过链表来实现
{
abs->quantity[i] = abs->quantity[i + 1];
}
cout << "删除成功" << endl;
abs->value--;//更新数据
}
else
cout << "通讯录内没有该联系人,请重新输入" << endl;
}
system("pause");
system("cls");
}
5、查找联系人
找到要查找到的联系人并返回其所对应的数组下标,然后输出数组内此下标的所有信息。
void Seek(Mail* abs)//查找联系人
{
if (abs->value == 0)
cout << "通讯录为空" << endl;
else
{
cout << "请输入要查找联系人的姓名:" << endl;
int ret = isExist(abs);
if (ret != -1)
{
cout << "姓名:" << abs->quantity[ret].P_name << "\t";
cout << "性别:" << (abs->quantity[ret].P_sexual == 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->quantity[ret].P_age << "\t";
cout << "电话号码:" << abs->quantity[ret].P_number << "\t";
cout << "地址:" << abs->quantity[ret].P_addr << endl;
}
else
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
6、修改联系人
先找到所 要修改联系人的数组下标,并将对应的信息输入对应位置
void Revise(Mail* abs)//修改联系人
{
if (abs->value == 0)
cout << "通讯录为空" << endl;
else
{
cout << "请输入要修改联系人的姓名:" << endl;
int ret = isExist(abs);
if (ret != -1)
{
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->quantity[ret].P_name = name;
int sexual = 3;
cout << "请选择性别:1.男 2.女:" << endl;
cin >> sexual;
abs->quantity[ret].P_sexual = sexual;
int age;
cout << "请输入年龄:" << endl;
cin >> age;
abs->quantity[ret].P_age = age;
long long number;
cout << "请输入电话号码:" << endl;
cin >> number;
abs->quantity[ret].P_number = number;
string addr;
cout << "请输入地址:" << endl;
cin >> addr;
abs->quantity[ret].P_addr = addr;
cout << "修改成功" << endl;
}
else
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
7、清空联系人
将数组下标赋值为一
void Clear(Mail* abs)//清空联系人
{
abs->value = 0;
cout << "已清空通讯录" << endl;
system("pause");
system("cls");
}
四、源代码
using namespace std;
#include<iostream>
#include<string>
#define MAX 1000//主要是限制通讯录的最大值,预处理是为了最大值修改简单
void Showpage()//菜单
{
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 P_name;//姓名
int P_sexual;//性别
int P_age;//年龄
long long P_number;//电话号码
string P_addr;//地址
};
struct Mail//通讯录结构体
{
Person quantity[MAX];//此数组内存放联系人相关信息
int value=0;//数组所存放最后一个值的下表
};
void Add(Mail *abs)//添加联系人
{
if (abs->value == MAX)
cout << "通讯录已满" << endl;
else
{
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->quantity[abs->value].P_name = name;
int sexual=3;
cout << "请选择性别:1.男 2.女:" << endl;
cin >> sexual;
abs->quantity[abs->value].P_sexual = sexual;
int age;
cout << "请输入年龄:" << endl;
cin >> age;
abs->quantity[abs->value].P_age = age;
long long number;
cout << "请输入电话号码:" << endl;
cin >> number;
abs->quantity[abs->value].P_number = number;
string addr;
cout << "请输入地址:" << endl;
cin >> addr;
abs->quantity[abs->value].P_addr = addr;
}
abs->value++;//更新数组内的个数
cout << "添加成功" << endl;
system("pause");//按任意键继续
system("cls");
}
void Show(Mail *abs)//显示联系人
{
if (abs->value == 0)//通讯录为空时直接返回
cout << "通讯录为空,请添加联系人" << endl;
else
for (int i = 0; i < abs->value; i++)//利用for循环输出联系人的信息
{
cout << "姓名:" <<abs->quantity [i].P_name << "\t";
cout << "性别:" << (abs->quantity[i].P_sexual== 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->quantity[i].P_age << "\t";
cout << "电话号码:" << abs->quantity[i].P_number << "\t";
cout << "地址:" << abs->quantity[i].P_addr << endl;
}
system("pause");
system("cls");
}
int isExist(Mail* abs)//通过姓名查找联系人
{
string name;
cin >> name;
for (int i = 0; i < abs->value; i++)
{
if (abs->quantity [i].P_name == name)
{
return i;
}
}
return -1;
}
void Delect(Mail *abs)//删除联系人
{
if (abs->value == 0)
cout << "通讯录为空" << endl;
else
{
cout << "请输入要删除联系人的姓名:" << endl;
int ret = isExist(abs);
if (ret != -1)
{
for (int i = ret; i < abs->value; ++i)//将所要删除的联系人之后的所有数据向前移动一位,也可以通过链表来实现
{
abs->quantity[i] = abs->quantity[i + 1];
}
cout << "删除成功" << endl;
abs->value--;//更新数据
}
else
cout << "通讯录内没有该联系人,请重新输入" << endl;
}
system("pause");
system("cls");
}
void Seek(Mail* abs)//查找联系人
{
if (abs->value == 0)
cout << "通讯录为空" << endl;
else
{
cout << "请输入要查找联系人的姓名:" << endl;
int ret = isExist(abs);
if (ret != -1)
{
cout << "姓名:" << abs->quantity[ret].P_name << "\t";
cout << "性别:" << (abs->quantity[ret].P_sexual == 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->quantity[ret].P_age << "\t";
cout << "电话号码:" << abs->quantity[ret].P_number << "\t";
cout << "地址:" << abs->quantity[ret].P_addr << endl;
}
else
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
void Revise(Mail* abs)//修改联系人
{
if (abs->value == 0)
cout << "通讯录为空" << endl;
else
{
cout << "请输入要修改联系人的姓名:" << endl;
int ret = isExist(abs);
if (ret != -1)
{
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->quantity[ret].P_name = name;
int sexual = 3;
cout << "请选择性别:1.男 2.女:" << endl;
cin >> sexual;
abs->quantity[ret].P_sexual = sexual;
int age;
cout << "请输入年龄:" << endl;
cin >> age;
abs->quantity[ret].P_age = age;
long long number;
cout << "请输入电话号码:" << endl;
cin >> number;
abs->quantity[ret].P_number = number;
string addr;
cout << "请输入地址:" << endl;
cin >> addr;
abs->quantity[ret].P_addr = addr;
cout << "修改成功" << endl;
}
else
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
void Clear(Mail* abs)//清空联系人
{
abs->value = 0;
cout << "已清空通讯录" << endl;
system("pause");
system("cls");
}
int main()
{
int select = 0;
Mail abs;
while (1)//不添加此循环,程序会在执行一次switch之后结束
{
Showpage();
cin >> select;
switch (select)
{
case 0:
cout << "欢迎下次使用" << endl;
case 1:
Add(&abs);
break;
case 2:
Show(&abs);
break;
case 3:
Delect(&abs);
break;
case 4:
Seek(&abs);
break;
case 5:
Revise(&abs);
break;
case 6:
Clear(&abs);
break;
default:
cout << "您输入的有误,请重新输入" << endl;
break;
}
}
return 0;
}