知识点复习 (13)—— 通讯录管理系统

1、系统需求

通讯录是一个可以记录亲人、好友信息的工具。

系统需求实现的功能如下:

  • 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
  • 显示联系人:显示通讯录中所有联系人信息
  • 删除联系人:按照姓名进行删除指定联系人
  • 查找联系人:按照姓名查看指定联系人信息
  • 修改联系人:按照姓名重新修改指定联系人
  • 清空联系人:清空通讯录中所有信息
  • 退出通讯录:退出当前使用的通讯录

2.实现功能

(1、菜单功能

步骤:

  • 封装函数显示该界面  如:void showMenu()
  • 在main函数中调用封装好的函数

(2、退出功能

思路:

  • 根据用户的不同选择,进入不同的功能,可以使用switch分支结构,将整个结构进行搭建
  • 当用户选择0时,执行退出,选择其他先不做操作,也不会退出程序

(3、添加联系人

功能描述:

实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)

步骤:

  • 设计联系人结构体
  • 设计通讯录结构体
  • main函数中创建通讯录
  • 封装添加联系人函数
  • 测试添加联系人功能

(4、显示联系人:

功能描述:

显示通讯录中已有的联系人信息

步骤:

  • 封装显示联系人函数
  • 测试显示联系人函数

思路:

判断如果当前通讯录中没有人员,就提示记录没空,人数大于0,就显示当前通讯录中的信息

 

 (5、删除联系人

功能描述:

按照姓名进行删除指定联系人

步骤:

  • 封装检测联系人是否存在
  • 封装删除联系人函数
  • 测试删除联系人功能

思路:

  • 删除联系人之前,先判断用户输入的联系人是否存在,如果存在进行删除,如果不存在提示用户没有要删除的联系人
  • 因此我们可以把检测联系人是否存在封装在一个函数中,如果存在,返回联系人在通讯录中的位置,不存在返回-1

 

(6、查找联系人

功能描述:

按照姓名查找指定的联系人

步骤:

  • 封装查找联系人函数
  • 测试查找指定联系人

思路:
先判断用户查找的联系人受否存在,如果存在则显示该联系人信息,如果不存在就提示查无此人

 

(7、修改联系人

功能描述:

按照姓名重新修改指定联系人

步骤:

  • 封装修改联系人函数
  • 测试修改联系人功能

思路:

查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人

 

(8、清空联系人

功能描述:

清空通讯录中的所有信息

步骤:

  • 封装清空联系人函数
  • 测试清空联系人

思路:

将通讯录中的所有人的信息清除掉,只要将通讯录中的联系人数量置0,做逻辑清空即可

 

eg:

#include <iostream>
#include <string>
using namespace std;
#define Max 1000
//- 封装函数显示该界面 如 void showMenu()
void showMenu();

//设计联系人结构体
struct Person
{
//姓名
string m_Name;
//性别 1 man 2 woman
int m_Sex;
//年龄
int m_Age;
//电话
string m_Phone;
//住址
string m_Addr;
};
//设计通讯录结构体
struct Addressbooks
{
//通讯录中保存的联系人数组
Person PerArray[Max];
//通讯录中当前记录联系人个数
int m_Size;
};
//声明添加联系人的函数
void addPerson(Addressbooks* abooks);
//声明显示联系人的 函数
void showPerson(Addressbooks* abooks);
//声明检测联系人是否存在的 函数 ,如果存在,返回联系人位置,不存在返回-1
//参数1 通讯录 参数2 对比姓名
int isExist(Addressbooks* abooks, string name);
//声明删除指定联系人的 函数
void deletePerson(Addressbooks* abooks);
//声明查找联系人的 函数
void findPerson(Addressbooks* abooks);
//声明修改联系人的 函数
void modfiyPerson(Addressbooks* abooks);
//清空通讯录的 函数
void clearPerson(Addressbooks* abooks);
int main()
{
cout << "通讯录管理系统练习:" << endl << endl;
//创建通讯录结构体变量
Addressbooks abooks;
//初始化通讯录中当前人员个数
abooks.m_Size = 0;

while (true) //循环执行
{
//- 在main函数中调用封装好的函数
showMenu();
//让用户进行选择,实现不同的逻辑

cout << "您的选择:";
int select = 0;

cin >> select;
getchar();
cout << endl;

switch (select)
{
case 1: // 1.添加联系人
//利用地址传递,可以修改实参
addPerson(&abooks);
break;
case 2: // 2.显示联系人
showPerson(&abooks);
break;
case 3: //3.删除联系人
deletePerson(&abooks);
break;
case 4: //4.查找联系人
findPerson(&abooks);
break;
case 5: //5.修改联系人
modfiyPerson(&abooks);
break;
case 6: //6.清空联系人
clearPerson(&abooks);
break;
case 0: //0.退出联系人
cout << "退出" << endl;
system("pause");
return 0;
break;
default:
break;
}
}
system("pause");
return 0;
}
void showMenu()
{
cout << "----------------- 菜单选择: --------------------" << endl<<endl;
cout << " --------------- 1.添加联系人 ---------------" << endl;
cout << " --------------- 2.显示联系人 ---------------" << endl;
cout << " --------------- 3.删除联系人 ---------------" << endl;
cout << " --------------- 4.查找联系人 ---------------" << endl;
cout << " --------------- 5.修改联系人 ---------------" << endl;
cout << " --------------- 6.清空联系人 ---------------" << endl;
cout << " --------------- 0.退出 ---------------" << endl;
}

void addPerson(Addressbooks* abooks)
{
if (abooks->m_Size == Max)
{
cout << "通讯录满了,无法继续添加!" << endl;
return;
}
else
{
cout << "---执行添加操作操作---" << endl;
//添加具体的联系人

//姓名
string name;
cout << endl << "请输入姓名:" << endl;
cin >> name;
abooks->PerArray[abooks->m_Size].m_Name = name;
//性别
//如果输入的是1或者2可以退出循环,因为输入的是正确的值
//如果输入错误,重新输入
cout << endl << "请输入性别:" << endl;
int sex = 0;
while (true)
{
cout << "1 ---男" << endl;
cout << "2 ---女" << endl;

cin >> sex;
cout << endl;
if (sex == 1 || sex == 2)
{
abooks->PerArray[abooks->m_Size].m_Sex = sex;
break;
}
else
{
cout << endl << "输入错误,请重新输入性别:" << endl;
}
}
//年龄
cout << "请输入年龄:" << endl;
int age = 0;
cin >> age;
abooks->PerArray[abooks->m_Size].m_Age = age;

//电话
cout << endl << "请输入电话:" << endl;
string pHong;
cin >> pHong;
abooks->PerArray[abooks->m_Size].m_Phone = pHong;

//住址
cout << endl << "请输入家庭住址:" << endl ;
string homes;
cin >> homes;
abooks->PerArray[abooks->m_Size].m_Addr = homes;

}
abooks->m_Size++;
cout << endl << "添加成功!" << endl;

system("pause");
system("cls");
//cout << "m_Size= " << abooks->m_Size << endl;

}
void showPerson(Addressbooks* abooks)
{
int len = abooks->m_Size;
if (len == 0) {
cout << "通讯录为空!" << endl << endl;
}
else
{
cout << "姓名\t" << "年龄\t" << "性别\t" << "电话\t\t" << "住址\t" << endl << endl;
for (int i = 0; i < len; i++)
{

cout << abooks->PerArray[i].m_Name
<< "\t" << abooks->PerArray[i].m_Age
<< "\t" << (abooks->PerArray[i].m_Sex == 1 ? "男" : "女");
cout<< "\t" << abooks->PerArray[i].m_Phone
<< "\t" << abooks->PerArray[i].m_Addr << endl << endl;
}
}

system("pause");
system("cls");

}
int isExist(Addressbooks* abooks, string name)
{
for (int i = 0; i <= abooks->m_Size; i++)
{
if (abooks->PerArray[i].m_Name == name)
{
//找到,返回此人在数组中的编号
return i;
}
}
//没有找到返回-1
return -1;
}
void deletePerson(Addressbooks* abooks)
{
cout << "请输入要删除的联系人姓名:" << endl;
//要删除的联系人姓名
string names;
cin >> names;

int a = isExist(abooks, names);
if (a != -1)
{

//查找到此人,进行删除操作
for (a; a <= abooks->m_Size; a++)
{
abooks->PerArray[a] = abooks->PerArray[a + 1];
}
abooks->m_Size--;
cout << "删除成功 !" << endl;
}
else
{
cout << "查无此人!" << endl;
}
system("pause");
system("cls");
}
void findPerson(Addressbooks* abooks)
{
cout << "请输入要查找的联系人姓名:" << endl;
//要删除的联系人姓名
string names;
cin >> names;
int a = isExist(abooks, names);
if (a != -1)
{
cout << "姓名\t" << "年龄\t" << "性别\t" << "电话\t\t" << "住址\t" << endl << endl;
//查找到此人,进行显示操作
cout << abooks->PerArray[a].m_Name
<< "\t" << abooks->PerArray[a].m_Age
<< "\t" << (abooks->PerArray[a].m_Sex == 1 ? "男" : "女");
cout << "\t" << abooks->PerArray[a].m_Phone
<< "\t" << abooks->PerArray[a].m_Addr << endl << endl;
cout << "成功显示 " << names << " !" << endl;
}
else
{
cout << "查无此人!" << endl;
}
system("pause");
system("cls");
}
void modfiyPerson(Addressbooks* abooks)
{
cout << "请输入要修改的联系人姓名:" << endl;
//要修改的联系人姓名
string names;
cin >> names;
getchar();
int a = isExist(abooks, names);
if (a != -1)
{
cout << endl << "当前:" << endl << endl;
cout << "姓名\t" << "年龄\t" << "性别\t" << "电话\t\t" << "住址\t" << endl << endl;
//查找到此人,进行显示操作
cout << abooks->PerArray[a].m_Name
<< "\t" << abooks->PerArray[a].m_Age
<< "\t" << (abooks->PerArray[a].m_Sex == 1 ? "男" : "女");
cout << "\t" << abooks->PerArray[a].m_Phone
<< "\t" << abooks->PerArray[a].m_Addr << endl << endl;

cout << "修改:" << endl << endl;
cout << endl << "输入姓名:" << endl;
string name;

cin >> name;
abooks->PerArray[a].m_Name = name;
cout << endl << "输入年龄:" << endl;
int age =0;
cin >> age;
abooks->PerArray[a].m_Age = age;
cout << endl << "输入性别:" << endl;
int sex = 0;
while (true)
{
cout << "1 ---男" << endl;
cout << "2 ---女" << endl;

cin >> sex;
cout << endl;
if (sex == 1 || sex == 2)
{
abooks->PerArray[a].m_Sex = sex;
break;
}
else
{
cout << endl << "输入错误,请重新输入性别:" << endl;
}
}
cout << endl << "输入电话:" << endl;
string phone;
cin >> phone;
abooks->PerArray[a].m_Phone = phone;
cout << endl << "输入地址:" << endl;
string address ;
cin >> address;
abooks->PerArray[a].m_Addr = address;
cout << endl << "修改成功!" << endl;
}
else
{
cout << "没有此人!" << endl;
}
system("pause");
system("cls");
}
void clearPerson(Addressbooks* abooks)
{
abooks->m_Size = 0;
cout << "通讯录已经清空!" << endl;
system("pause");
system("cls");
}

posted @ 2022-04-13 10:19  雾枫  阅读(577)  评论(0编辑  收藏  举报