通讯录管理系统
1、添加联系人
2、显示联系人
3、删除联系人
4、查找联系人
5、修改联系人
6、清空联系人
0、退出通讯录
以下内容分为两个部分,一是 具体实现步骤 ,二是 完整程序
目录
一、具体实现步骤
1、系统需求
2、创建项目
3、菜单功能
功能描述:用户选择功能的界面
步骤 :
- 封装函数显示该界面 如 void showMenu()
- 在main函数中调用封装好的函数
4、退出功能实现
功能描述:退出通讯录系统
步骤 :
- 根据用户不同的选择,进入不同的功能,可以选择switch分支结构,将整个架构进行搭建。当用户选择0时候,执行退出,选择其他先不做操作,也不会退出程序
5、添加联系人
功能描述:实添加现联系人功能,联系人上限1000人,联系人信息包括(姓名、性别、年龄、联系电话、住址)
步骤
- 设计联系人结构体
- 设计通讯录结构体
- main函数中创建通讯录
- 封装添加联系人函数
- 测试添加联系人功能
5.1 设计联系人结构体
- 联系人信息包括(姓名、性别、年龄、联系电话、住址)
5.2 设计通讯录结构体
- 设计时候可以在通讯录结构体中,维护一个容量为1000的存放联系人的数组,并记录当前通讯录中联系人数量
5.3 main函数中创建通讯录
6、显示联系人
功能描述 : 显示通讯录中已有的联系人信息
步骤 :
- 封装显示联系人函数
- 测试显示联系人功能
6.1 封装显示联系人函数
思路 :判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录信息
6.1 测试显示联系人功能
思路 :使用switch case 语句
7、删除联系人
功能描述:按照姓名进行删除指定联系人
步骤 :
- 封装检测联系人是否存在
- 封装删除联系人函数
- 测试删除联系人功能
7.1 删除检测联系人是否存在
思路:
7.2 封装删除联系人函数
思路:
查找成功-删除
查找失败-查无此人
8、查找联系人
功能描述: 按照姓名查看指定联系人信息
步骤 :
- 封装查找联系人函数
- 测试查找指定联系人
8.1 封装查找联系人函数
思路:判断用户指定联系人是否存在,如果存在显示信息,不存在则提示查无此人
8.2 测试查找指定联系人
9、修改联系人
功能描述:按照姓名重新修改指定联系人
步骤 :
- 封装修改联系人函数
- 测试修改联系人功能
9.1 封装修改联系人函数
思路:查找用户输入的联系人,如果查找成功进行修改,查找失败提示查无此人
9.2 测试修改联系人功能
思路:使用switch case 语句
10、清空通讯录
功能描述:清空通讯录中所有信息
步骤 :
- 封装清空联系人函数
- 测试清空联系人
10.1 封装清空联系人函数
思路:将通讯录中联系人所有信息清除掉,只要将通讯录记录的联系人数量置为0,做逻辑清空即可
10.2 测试清空联系人
思路:使用switch case 语句
二、完整程序
#include<iostream>
using namespace std;
#include<string>
#define MAX 1000//最大人数
//1-3、菜单界面
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;
}
//1-5、添加联系人结构体
struct Person
{
string p_Nmae;//姓名
int p_Sex;//性别:1-男,2-女
int p_Age;//年龄
string p_Phone;//电话
string p_Addr;//住址
};
//设计通讯录结构体
struct Addressbooks
{
struct Person personArray[MAX];//通讯录保存的联系人数组
int p_size;//通讯录中人员个数
};
//添加联系人
void addperson(struct Addressbooks * addrs)
{
//判断通讯录人数是否已满,若满了就不在添加
if (addrs->p_size == 1000)
{
cout << "抱歉,通讯录已满,无法添加联系人了" << endl;
return;
}
else
{
//添加具体联系人
//姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
addrs->personArray[addrs->p_size].p_Nmae = name;
//性别
int sex;
cout << "请输入性别:" << endl;
cout << "1 --- 男" << endl;
cout << "2 --- 女" << endl;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)//输入正确则退出循环
{
addrs->personArray[addrs->p_size].p_Sex = sex;
break;
}
cout << "性别输入有误,请重新输入" << endl;
}
//年龄
int age;
cout << "请输入年龄:" << endl;
while (true)
{
cin >> age;
if ( age < 150)//输入正确则退出循环
{
addrs->personArray[addrs->p_size].p_Age = age;
break;
}
cout << "年龄输入有误,请重新输入" << endl;
}
//电话
string phone;
cout << "请输入电话:" << endl;
cin >> phone;
addrs->personArray[addrs->p_size].p_Phone = phone;
//地址
string addr;
cout << "请输入家庭地址:" << endl;
cin >> addr;
addrs->personArray[addrs->p_size].p_Addr = addr;
//更新通讯录人数
addrs->p_size++;
cout << "添加成功" << endl;
system("pause");//请按任意键继续
system("cls");//清屏操作
}
}
//2-6、显示联系人
void showPerson(Addressbooks* addrs)
{
//判断:若通讯录人数为0,提示记录为空
//若不为0,则显示记录人信息
if (addrs->p_size == 0 )
{
cout << "当前记录为空" << endl;
}
else
{
for (int i = 0; i < addrs->p_size; i++)
{
cout << "姓名:" << addrs->personArray[i].p_Nmae << "\t";
cout << "性别:" << (addrs->personArray[i].p_Sex == 1 ? "男" : "女" ) << "\t";
cout << "年龄:" << addrs->personArray[i].p_Age << "\t";
cout << "电话:" << addrs->personArray[i].p_Phone << "\t";
cout << "地址:" << addrs->personArray[i].p_Addr << endl;
}
}
system("pause");//请按任意键继续
system("cls");//清屏操作
}
//3-1检测联系人是否存在,若存在,返回联系人所在数组的具体位置,不存在返回-1
//3-2参数1 通讯录 参数2 对比姓名
int isExist(Addressbooks * addrs, string name)
{
for (int i = 0; i < addrs->p_size; i++)
{
//找到用户输入的姓名
if (addrs->personArray[i].p_Nmae == name)
{
return i;//找到了,返回此人在数组中的下标编号
}
}
return -1;//若遍历结束没有,则返回-1
}
//3-3、删除指定联系人
void deletePerson(Addressbooks* addrs)
{
cout << "请输入您要删除的联系人:" << endl;
string name;
cin >> name;
//ret =-1 未查到
//ret!=-1 查到了
int ret = isExist(addrs, name);
if(ret==-1)
{
cout << "查无此人" << endl;
}
else
{
for (int i = ret; i < addrs->p_size; i++)
{
//数据迁移--即删除
addrs->personArray[i] = addrs->personArray[i + 1];
}
addrs->p_size-- ;//更新联系人数量
cout << "删除成功" << endl;
}
system("pause");
system("cls");
}
//4、查找联系人
void findPerson(Addressbooks * addrs)
{
cout << "请输入您要查找的联系人:" << endl;
string name;
cin >> name;
//判断指定联系人是否存在通讯录中
int ret = isExist(addrs, name);
if (ret != -1)
{
cout << "姓名:" << addrs->personArray[ret].p_Nmae << "\t";
cout << "性别:" << (addrs->personArray[ret].p_Sex == 1 ? "男" : "女") << "\t";
cout << "年龄:" << addrs->personArray[ret].p_Age << "\t";
cout << "电话:" << addrs->personArray[ret].p_Phone << "\t";
cout << "地址:" << addrs->personArray[ret].p_Addr << endl;
}
else//未找到联系人
{
cout << "查无此人" << endl;
}
//按任意键 清屏
system("pause");
system("cls");
}
//5、修改联系人信息
void modifyPerson(Addressbooks * addrs)
{
cout << "请输入要修改的联系人:" << endl;
string name;
cin >> name;
int ret = isExist(addrs, name);
if (ret != -1)
{
addrs->personArray[ret].p_Nmae = name;
//性别
int sex;
cout << "请输入性别:" << endl;
cout << "1 --- 男" << endl;
cout << "2 --- 女" << endl;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)//输入正确则退出循环
{
addrs->personArray[ret].p_Sex = sex;
break;
}
cout << "性别输入有误,请重新输入" << endl;
}
//年龄
int age;
cout << "请输入年龄:" << endl;
while (true)
{
cin >> age;
if (age < 150)//输入正确则退出循环
{
addrs->personArray[ret].p_Age = age;
break;
}
cout << "年龄输入有误,请重新输入" << endl;
}
//电话
string phone;
cout << "请输入电话:" << endl;
cin >> phone;
addrs->personArray[ret].p_Phone = phone;
//地址
string addr;
cout << "请输入家庭地址:" << endl;
cin >> addr;
addrs->personArray[ret].p_Addr = addr;
cout << "修改成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//6、清空所有联系人
void clearPerson(Addressbooks* addrs)
{
cout << "请问是否确定清空,是请按“1”,否请按“2”" << endl;
int sure;
while (true)
{
cin >> sure;
if (sure == 1||sure == 2)
{
if (sure == 1)
{
addrs->p_size = 0;//将当期记录联系人数量置为0,做逻辑清空操作-》清空联系人
cout << "通讯录已清空" << endl;
break;
}
cout << "通讯录未进行清空操作嗷" << endl;
break;
}
cout << "输入有误,请重新输入" << endl;
}
//按任意键 清空
system("pause");
system("cls");
}
int main()
{
//创建结构体变量
Addressbooks addrs;
//初始化通讯录当前人员个数
addrs.p_size = 0;
int select = 0;//创建用户选择输入的变量
while(true)
{
//菜单调用
showMenu();
cin >> select;
switch (select)
{
case 1: //1、添加联系人
addperson(&addrs);//利用地址传递修饰实参
break;
case 2: //2、显示联系人
showPerson(&addrs);
break;
case 3: //3、删除联系人
deletePerson(&addrs);
/*
{
cout << "请输入删除联系人的姓名:" << endl;
string name;
cin >> name;
if (isExist(&addrs, name) == -1)
{
cout << "查无此人" << endl;
}
else
{
cout << "找到此人" << endl;
}
}
*/
break;
case 4: //4、查找联系人
findPerson(&addrs);
break;
case 5: //5、修改联系人
modifyPerson(&addrs);
break;
case 6: //6、清空通讯录
clearPerson(&addrs);
break;
case 0: //0、退出通讯录
cout << "欢迎下次使用!" << endl;
system("pause");
return 0;
default:
cout << "输入有误,请重新输入" << endl;
break;
}
}
system("pause");
return 0;
}
以上均为学习笔记,仅供参考
于2021.10.7凌晨