C++通讯录管理系统
目的以及要求
1.编写一个程序来实现通讯录管理系统,在系统中可以以下实现:
添加联系人
显示联系人
删除联系人
查找联系人
修改联系人
清空联系人
退出通讯录
步骤:
2.1.编写菜单,解释怎么使用该程序:
void menu()
{
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;
}
通过调用函数,可以让使用者了解如何按照指示去操作该系统。
2.2接下来我们要编写一个联系人的结构体,还有一个通讯录的结构体,用来储存数据,方便执行接下来的操作。
struct person
{
string m_Name;
int m_Sex;
int m_Age;
string m_Phone;
string m_Adr;
};
struct AdressBooks
{
struct person personArr[Max];//创建联系人数组
int m_Size = 0;//当前通讯录里的联系人
};
在这里我们用了string 所有要加上头文件声明#include
然后定义一个MAX的变量定义大小为1000,代表我们最多可以储存1000个联系人。
2.3 接下来分析我们需要多步分步来实现程序,这里我们就要想到用学过的知识来解决问题,可以用switch来实现,在其中让使用者手动选择一个数字来选择要执行的程序,依照输入的数字分多步来执行,再写一个while循环加以控制,用case 来进行分类,然后在每一个case下面调用一个函数来实现相应的功能,必要时再跳出循环,然后再一步步编写我们所需要的程序即可。
while (true)
{
menu();
cin >> select;
switch (select)
{
case 1:
Addperson(&abs);//调用函数实现添加联系人
break;
case 2:
show(&abs);//调用函数实现显示联系人
break;
case 3:
Deleate(&abs);
break;
case 4:
Seek(&abs);
break;
case 5:
Gai(&abs);
break;
case 6:
Qing(&abs);
break;
case 0:
cout << "欢迎下次使用!" << endl;
system("pause");
return 0;
break;
}
}
2.4 接下来我们就一步步编写我们需要的函数即可
2.4.1 添加联系人的函数
解析:在该函数中,首先我们要传入一个通讯录,然后判断该通讯录里面是否有联系人,如果联系人达到上限,则可以提醒用户:“通讯录已满,无法添加!”,若通讯里面的人没有满,则可以添加,可以手动输入给其赋值,注意这里传的是指针,所以指向时要用“ ——>” ,在输入性别时我们要求输入1或者2,所以我们可以写一个循环,直至输入正确为止,输入错误时提示用户:“输入错误,请重新输入”。在最后我们要更新通讯录里面的人员的人数,然后输入按任意键继续,然后清理屏幕,这样我们的第一个函数就编写完成了,在case1下面调用此函数即可。
void Addperson(AdressBooks* abs)
{
if (abs->m_Size == Max)
{
cout << "通讯录已满,无法添加!" << endl;
}
else
{ //添加姓名
cout << "请输入名字:" << endl;
string name;
cin >> name;
abs->personArr[abs->m_Size].m_Name = name;
//添加性别
cout << "请输入性别:1--男 , 2--女" << endl;
int sex=0;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
abs->personArr[abs->m_Size].m_Sex = sex;
}
else
{
cout << "输入错误,请重新输入" << endl;
}
break;
}
//添加年龄
cout << "请输入年龄:" << endl;
int age;
cin >> age;
abs->personArr[abs->m_Size].m_Age = age;
//添加号码
cout << "请输入号码:" << endl;
string phone;
cin >> phone;
abs->personArr[abs->m_Size].m_Phone = phone;
//添加住址
cout << "请输入住址:" << endl;
string adr;
cin >> adr;
abs->personArr[abs->m_Size].m_Adr = adr;
abs->m_Size++;
cout << "添加成功" << endl;
system("system");
system("cls");
}
}
2.4.2 显示联系人的函数
解析:这个函数编写依旧需要我们传入一个通讯录,然后再判断里面是否有联系人,如果里面人数为0,则提示:“联系人为空,请先添加联系人!” ,如果不为0,则可以写一个for循环,来实现输出。在输出联系人的性别时我们输入的是数字,可以用一个判断表达式来返回 “男女” 两个字(abs->personArr[i].m_Sex==1?“男”:“女”
就可以实现输出男女两个字,最后依旧要输入按任意键继续,然后清理屏幕,这样我们的第二个函数就编写完成了,在case2下面调用此函数即可。
void show( AdressBooks* abs)
{
if (abs->m_Size == 0)
{
cout << "联系人为空,请先添加联系人!" << endl;
}
else
{
for (int i = 0; i < abs->m_Size; i++)
{
cout << "姓名:" << abs->personArr[i].m_Name << "\t";
cout << "性别:" << (abs->personArr[i].m_Sex==1?"男":"女") << "\t";
cout << "年龄:" << abs->personArr[i].m_Age << "\t";
cout << "号码:" << abs->personArr[i].m_Phone << "\t";
cout << "住址:" << abs->personArr[i].m_Adr << "\t";
cout << "\n";
}
}
system("pause");
system("cls");
}
2.4.3 删除联系人的函数
解析:首先如果我们要删除某个人,我们就要查看这个人是否存在。包括我们后面的修改联系人等也要用到此函数,为了避免代码的繁琐,我们可以提前定义一个函数,来判断这个联系人是否存在。而删除一个联系人我们只需要,找到这个人的下标,然后用后面一个覆盖这个人的信息,就可以实现这个人的信息删除,后面的依次向前移动一位。最后依旧要输入按任意键继续,然后清理屏幕,这样我们的第三个函数就编写完成了,在case3下面调用此函数即可。
判断一个人是否存在的函数
int isExist(AdressBooks* abs, string name)
{
for (int i = 0; i < abs->m_Size; i++)
{
if (abs->personArr[i].m_Name == name)
{
return i;
}
}
return -1;
}
删除联系人的代码
void Deleate(AdressBooks * abs)
{
cout << "请输入你要删除的人的名字" << endl;
string name;
cin >> name;
int ret=isExist(abs, name);
if (ret != -1)
{
for (int i = ret; i < abs->m_Size; i++)
{
abs->personArr[i] = abs->personArr[i + 1];
abs->m_Size--;
}
cout << "删除成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
2.4.4 查找联系人的函数
解析:和上面一样需要先判断这个联系人是否存在手动输入一个名字进行判断,如果不存在则输出:“查无此人” 如果存在,输出其信息即可。最后依旧要输入按任意键继续,然后清理屏幕,这样我们的第四个函数就编写完成了,在case4下面调用此函数即可。
void Seek(AdressBooks* abs)
{
cout << "请输入你要查找的人的名字" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1)
{
cout << "姓名:" << abs->personArr[ret].m_Name << "\t";
cout << "性别:" << (abs->personArr[ret].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->personArr[ret].m_Age << "\t";
cout << "号码:" << abs->personArr[ret].m_Phone << "\t";
cout << "住址:" << abs->personArr[ret].m_Adr << "\t";
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
2.4.5 修改联系人的函数
解析:和前面一样这里依旧要找到一个人,才能修改,所以要手动输入一个名字,判断这个人是否存在,如果存在则可以修改,修改可以采用赋值的方式来进行,即用新的数据来覆盖原本的数据。一样的,若这个人不存在则提示用户输出: “查无此人” 最后依旧要输入按任意键继续,然后清理屏幕,这样我们的第五个函数就编写完成了,在case5下面调用此函数即可。
void Gai(AdressBooks* abs)
{
cout << "请输入要修改名字:" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1)
{
//修改姓名
string name;
cout << "请输入要修改名字:" << endl;
cin >> name;
abs->personArr[ret].m_Name = name;
//修改性别
cout << "请输入性别:1--男 , 2--女" << endl;
int sex = 0;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
abs->personArr[ret].m_Sex = sex;
}
else
{
cout << "输入错误,请重新输入" << endl;
}
break;
}
//修改年龄
cout << "请输入年龄:" << endl;
int age;
cin >> age;
abs->personArr[ret].m_Age = age;
//修改号码
cout << "请输入号码:" << endl;
string phone;
cin >> phone;
abs->personArr[ret].m_Phone = phone;
//修改住址
cout << "请输入住址:" << endl;
string adr;
cin >> adr;
abs->personArr[ret].m_Adr = adr;
abs->m_Size++;
cout << "添加成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("system");
system("cls");
}
2.4.6 清空联系人的函数
解析:最后这一步其实是最简单的,这里我们只需要将通讯录里面的人数赋值为0.让其他函数访问不到即可。最后依旧要输入按任意键继续,然后清理屏幕,这样我们的第六个函数就编写完成了,在case6下面调用此函数即可。
void Qing(AdressBooks* abs)
{
abs->m_Size = 0;
cout << "通讯录已经清空" << endl;
system("system");
system("cls");
}
最后附上总代码一份,供大家参考:
#include<iostream>
#include<string>
#define Max 500
using namespace std;
struct person
{
string m_Name;
int m_Sex;
int m_Age;
string m_Phone;
string m_Adr;
};
struct AdressBooks
{
struct person personArr[Max];//创建联系人数组
int m_Size = 0;//当前通讯录里的联系人
};
void menu()
{
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;
}
//1,添加联系人
void Addperson(AdressBooks* abs)
{
if (abs->m_Size == Max)
{
cout << "通讯录已满,无法添加!" << endl;
}
else
{ //添加姓名
cout << "请输入名字:" << endl;
string name;
cin >> name;
abs->personArr[abs->m_Size].m_Name = name;
//添加性别
cout << "请输入性别:1--男 , 2--女" << endl;
int sex=0;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
abs->personArr[abs->m_Size].m_Sex = sex;
}
else
{
cout << "输入错误,请重新输入" << endl;
}
break;
}
//添加年龄
cout << "请输入年龄:" << endl;
int age;
cin >> age;
abs->personArr[abs->m_Size].m_Age = age;
//添加号码
cout << "请输入号码:" << endl;
string phone;
cin >> phone;
abs->personArr[abs->m_Size].m_Phone = phone;
//添加住址
cout << "请输入住址:" << endl;
string adr;
cin >> adr;
abs->personArr[abs->m_Size].m_Adr = adr;
abs->m_Size++;
cout << "添加成功" << endl;
system("system");
system("cls");
}
}
//2,显示联系人
void show( AdressBooks* abs)
{
if (abs->m_Size == 0)
{
cout << "联系人为空,请先添加联系人!" << endl;
}
else
{
for (int i = 0; i < abs->m_Size; i++)
{
cout << "姓名:" << abs->personArr[i].m_Name << "\t";
cout << "性别:" << (abs->personArr[i].m_Sex==1?"男":"女") << "\t";
cout << "年龄:" << abs->personArr[i].m_Age << "\t";
cout << "号码:" << abs->personArr[i].m_Phone << "\t";
cout << "住址:" << abs->personArr[i].m_Adr << "\t";
cout << "\n";
}
}
system("pause");
system("cls");
}
//判断一个人是否存在
int isExist(AdressBooks* abs, string name)
{
for (int i = 0; i < abs->m_Size; i++)
{
if (abs->personArr[i].m_Name == name)
{
return i;
}
}
return -1;
}
//3删除联系人
void Deleate(AdressBooks * abs)
{
cout << "请输入你要删除的人的名字" << endl;
string name;
cin >> name;
int ret=isExist(abs, name);
if (ret != -1)
{
for (int i = ret; i < abs->m_Size; i++)
{
abs->personArr[i] = abs->personArr[i + 1];
abs->m_Size--;
}
cout << "删除成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//4,查找联系人
void Seek(AdressBooks* abs)
{
cout << "请输入你要查找的人的名字" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1)
{
cout << "姓名:" << abs->personArr[ret].m_Name << "\t";
cout << "性别:" << (abs->personArr[ret].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->personArr[ret].m_Age << "\t";
cout << "号码:" << abs->personArr[ret].m_Phone << "\t";
cout << "住址:" << abs->personArr[ret].m_Adr << "\t";
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//5,修改联系人
void Gai(AdressBooks* abs)
{
cout << "请输入要修改名字:" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1)
{
//修改姓名
string name;
cout << "请输入要修改名字:" << endl;
cin >> name;
abs->personArr[ret].m_Name = name;
//修改性别
cout << "请输入性别:1--男 , 2--女" << endl;
int sex = 0;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
abs->personArr[ret].m_Sex = sex;
}
else
{
cout << "输入错误,请重新输入" << endl;
}
break;
}
//修改年龄
cout << "请输入年龄:" << endl;
int age;
cin >> age;
abs->personArr[ret].m_Age = age;
//修改号码
cout << "请输入号码:" << endl;
string phone;
cin >> phone;
abs->personArr[ret].m_Phone = phone;
//修改住址
cout << "请输入住址:" << endl;
string adr;
cin >> adr;
abs->personArr[ret].m_Adr = adr;
abs->m_Size++;
cout << "添加成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("system");
system("cls");
}
//6,清空联系人
void Qing(AdressBooks* abs)
{
abs->m_Size = 0;
cout << "通讯录已经清空" << endl;
system("system");
system("cls");
}
int main()
{
//创建通讯录结构体变量
struct AdressBooks abs;
int select = 0;
while (true)
{
menu();
cin >> select;
switch (select)
{
case 1:
Addperson(&abs);//调用函数实现添加联系人
break;
case 2:
show(&abs);//调用函数实现显示联系人
break;
case 3:
Deleate(&abs);
break;
case 4:
Seek(&abs);
break;
case 5:
Gai(&abs);
break;
case 6:
Qing(&abs);
break;
case 0:
cout << "欢迎下次使用!" << endl;
system("pause");
return 0;
break;
}
}
}
这就是关于我们通讯录管理系统的程序代码讲解,若大家有问题可以在评论区问哦,最后,记得每天加油哦!