c++基础编程3-通讯录管理系统
- @Author: _oufen
- @Date: 2022-11-16 12:54:00
- @LastEditTime: 2022-11-16 23:04:33
- @Description: 通讯录管理系统
1. 系统需求
使用c++来实现一个通讯录管理系统
实现功能如下:
- 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、练习电话、家庭住址)最多记录1000人
- 显示联系人:显示通讯录中所有联系人信息
- 删除联系人:按照姓名进行删除指定联系人
- 查找联系人:按照姓名查看指定联系人信息
- 修改联系人:按照姓名重新修改指定联系人
- 清空联系人:清除通讯录中所有信息
- 退出通讯录:退出当前使用的通讯录
2. 系统菜单
void showMenu()
{
cout << "***************************" << endl;
cout << "***** 1. 添加联系人 *****" << endl;
cout << "***** 2. 显示联系人 *****" << endl;
cout << "***** 3. 删除联系人 *****" << endl;
cout << "***** 4. 查找联系人 *****" << endl;
cout << "***** 5. 修改联系人 *****" << endl;
cout << "***** 6. 清空联系人 *****" << endl;
cout << "***** 7. 退出通讯录 *****" << endl;
cout << "***************************" << endl;
}
3. 退出功能
根据用户不同的选择,进入不同的功能,选择switch分支结构,搭建整个框架
当用户选择0时,执行退出,选择其他先不做操作,也不会退出程序
int select = 0;
while (true)
{
showMenu();
cin >> select;
switch (select)
{
case 1:
/*添加联系人 */
break;
case 2:
/*显示联系人*/
break;
case 3:
/*删除联系人*/
break;
case 4:
/*查找联系人*/
break;
case 5:
/*修改联系人*/
break;
case 6:
/*清空联系人*/
break;
case 0:
/*退出通讯录*/
cout << "欢迎下次使用!" << endl;
system("pause"); //按任意键退出
return 0; //结束这个函数
break;
default:
cout << "请选择正确的编号对应的功能!" << endl;
break;
}
}
4. 添加联系人
实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)
实现添加联系人步骤
- 设计联系人结构体
- 设计通讯录结构体
- main函数中创建通讯录
- 封装添加联系人函数
- 测试添加联系人功能
相关结构体
struct people
{
string name;
char sex; // 1. 表示男 2. 表示女
int age;
string num;
string address;
};
struct AddressBook
{
people peopleArray[MAX]; //通讯录中保存的联系人数组
int Add_Size; //通讯录中人员的个数
};
添加联系人
/**
* @description: 添加联系人
* @param {AddressBook} *addBook 传入的通讯录结构体
* @return {*} 无
*/
void addPeople(AddressBook *addBook)
{
if (addBook->Add_Size == MAX) //通讯录中添加人数已满
{
cout << "通讯录已满,添加失败!";
return;
}
else
{
string name;
cout << "请输入姓名:" << endl;
cin >> name;
addBook->peopleArray[addBook->Add_Size].name = name;
int sex = 0;
cout << "请输入性别" << endl;
cout << "1. 男" << endl;
cout << "2. 女" << endl;
while (true)
{
cin >> sex;
//用户输入的性别是 1或者2 就可以退出循环
//输入有误 重新输入
if (sex == 1 || sex == 2)
{
addBook->peopleArray[addBook->Add_Size].sex = sex;
break;
}
cin.clear();
cin.ignore();
cout << "输入有误,请重新输入" << endl;
}
int age = 0;
cout << "请输入年龄:" << endl;
cin >> age;
addBook->peopleArray[addBook->Add_Size].age = age;
string num;
cout << "请输入联系电话:" << endl;
cin >> num;
addBook->peopleArray[addBook->Add_Size].num = num;
string address;
cout << "请输入家庭住址:" << endl;
cin >> address;
addBook->peopleArray[addBook->Add_Size].address = address;
addBook->Add_Size++; //更新通讯录人数
cout << "添加成功!" << endl;
system("pause"); //请按任意键继续
system("cls"); //清屏操作
}
}
5. 显示联系人
显示联系人中已有的联系人信息
显示联系人实现步骤:
- 封装显示联系人函数
- 测试显示联系人功能
思路:判断如果通讯录中没有人员,就提示记录为空,人数大于0,就显示通讯录中的信息。
/**
* @description: 显示联系人
* @param {AddressBook} *addBook 传入的通讯录结构体
* @return {*} 无
*/
void showPeople(AddressBook *addBook)
{
if (addBook->Add_Size == 0)
{
cout << "通讯录为空,请添加联系人后再查询!" << endl;
}
else
{
for (int i = 0; i < addBook->Add_Size; i++)
{
cout << "姓名:" << addBook->peopleArray[i].name << "\t";
cout << "年龄:" << addBook->peopleArray[i].age << "\t";
cout << "性别:" << (addBook->peopleArray[i].sex == 1 ? "男" : "女")
<< "\t";
cout << "电话号码:" << addBook->peopleArray[i].num << "\t";
cout << "家庭住址:" << addBook->peopleArray[i].address << endl;
}
}
system("pause"); //按任意键继续
system("cls"); //清屏
}
6. 删除联系人
按照姓名指定删除联系人
删除联系人的实现步骤:
- 封装联系人是否存在
- 封装删除联系人函数
- 测试封装联系人功能
实现思路:
删除联系人前,判断联系人是否存在,如果存在则删除。不存在则提示用户没有要删除的联系人。
- 封装检测联系人是否存在
以把检测联系人是否存在封装在函数中,如果存在,返回联系人在通讯录中的位置,不存在则返回-1
/**
* @description: 通过姓名查询判断联系人是否存在
* @param {AddressBook} *addBook 传入的通讯录结构体
* @param {string} name 传入查找的联系人姓名
* @return {*} index -1 联系人不存在
* @return {*} index i 联系人在通讯录中的位置
*/
int isPeopleExist(AddressBook *addBook, string name)
{
int index = -1;
for (int i = 0; i < addBook->Add_Size; i++)
{
if (addBook->peopleArray[i].name == name)
{ /*联系人存在,返回联系人在通讯录中的位置*/
index = i;
}
}
return index;
}
- 封装删除联系人函数
根据用户输入的联系人判断该通讯录中是否有此人
查找进行删除,并提示删除成功
查不到则提示查无此人
/**
* @description: 删除联系人
* @param {AddressBook} *addBook 传入的通讯录结构体
* @return {*} 无
*/
void DeletePeople(AddressBook *addBook)
{
cout << "请输入您要删除的联系人:";
string name;
cin >> name;
int ret = isPeopleExist(addBook, name); //记录联系人在结构体中的位置
if (ret != -1)
{
for (int i = ret; ret < addBook->Add_Size; ret++)
{
//数据前移
addBook->peopleArray[ret] = addBook->peopleArray[ret + 1];
}
addBook->Add_Size--;
cout << "联系人已删除!" << endl;
}
else
{
cout << "联系人不存在" << endl;
}
system("pause");
system("cls");
}
7. 查找联系人
按照姓名查找联系人信息
/**
* @description: 查找联系人
* @param {AddressBook} *addBook 传入的通讯录结构体
* @return {*} 无
*/
void findPeople(AddressBook *addBook)
{
cout << "请输入您要查找的联系人:";
string name;
cin >> name;
int ret = isPeopleExist(addBook, name);
if (ret != -1)
{
cout << "姓名:" << addBook->peopleArray[ret].name << "\t";
cout << "年龄:" << addBook->peopleArray[ret].age << "\t";
cout << "性别:" << (addBook->peopleArray[ret].sex == 1 ? "男" : "女")
<< "\t";
cout << "电话号码:" << addBook->peopleArray[ret].num << "\t";
cout << "家庭住址:" << addBook->peopleArray[ret].address << endl;
}
else
{
cout << "联系人不存在" << endl;
}
system("pause");
system("cls");
}
8. 修改联系人
根据姓名修改联系人,和上面几个差不多。
/**
* @description: 修改联系人
* @param {AddressBook} *addBook 传入的通讯录结构体
* @return {*} 无
*/
void modifyPeople(AddressBook *addBook)
{
cout << "请输入您要修改的联系人:" << endl;
string name;
cin >> name;
int ret = isPeopleExist(addBook, name);
if (ret != -1)
{
cout << "请输入你要修改的年龄:" << endl;
int age;
cin >> age;
cout << "请输入你要修改的性别:" << endl;
int sex;
while (true)
{
cin >> sex;
//用户输入的性别是 1或者2 就可以退出循环
//输入有误 重新输入
if (sex == 1 || sex == 2)
{
addBook->peopleArray[addBook->Add_Size].sex = sex;
break;
}
cin.clear();
cin.ignore();
cout << "输入有误,请重新输入" << endl;
}
cout << "请输入你要修改的电话号码:" << endl;
string num;
cin >> num;
cout << "请输入你要修改的地址:" << endl;
string address;
cin >> address;
addBook->peopleArray[ret].name = name;
addBook->peopleArray[ret].age = age;
(addBook->peopleArray[ret].sex == sex ? "男" : "女");
addBook->peopleArray[ret].num = num;
addBook->peopleArray[ret].address = address;
cout << "修改成功!" << endl;
}
else
{
cout << "联系人不存在" << endl;
}
system("pause");
system("cls");
}
9.清空通讯录
清空通讯录的信息,其实就是直接清零通讯录的长度。
/**
* @description: 清空联系人
* @param {AddressBook} *addBook 传入的通讯录结构体
* @return {*} 无
*/
void clearPeople(AddressBook *addBook)
{
if (addBook->Add_Size == 0)
{
cout << "通讯录为空,有误!" << endl;
}
else
{
addBook->Add_Size = 0;
cout << "清空通讯录成功!" << endl;
}
system("pause");
system("cls");
}
主程序
main函数,用于用户的选择和操作页面。
int main()
{
AddressBook addBook;
addBook.Add_Size = 0; //通讯录中初始人员个数为0
int select = 0; //选择实验
while (true)
{
showMenu();
cin >> select;
switch (select)
{
case 1:
/*添加联系人 */
addPeople(&addBook); //利用地址传递,可以修改实参
break;
case 2:
/*显示联系人*/
showPeople(&addBook);
break;
case 3:
/*删除联系人*/
DeletePeople(&addBook);
break;
case 4:
/*查找联系人*/
findPeople(&addBook);
break;
case 5:
/*修改联系人*/
modifyPeople(&addBook);
break;
case 6:
/*清空联系人*/
clearPeople(&addBook);
break;
case 0:
/*退出通讯录*/
cout << "欢迎下次使用!" << endl;
system("pause"); //按任意键退出
return 0; //结束这个函数
break;
default:
cout << "请选择正确的编号对应的功能!" << endl;
break;
}
}
system("pause");
return 0;
}
总结
很不错的一个案例,但是还是存在不足。
主要是指针结构体的结合使用
很适合入门编程选手练手
行文仓促,如有错误,欢迎指正!