//通讯录管理系统
#include<iostream>
using namespace std;
#include<string>
#define MAX 1000//最大人数
//联系人结构体
struct person
{
string m_name;
string m_sex;
int m_age;
string m_phone;//电话
string m_addr;//住址
};
//通讯录结构体
struct addressbooks
{
struct person presonArray[MAX];//通讯录中保存的联系人数组
int m_size;//通讯录中人员个数
};
//1显示菜单函数
void show_menu();
//2、添加联系人函数
void addperson(struct addressbooks* abs);
//3、显示联系人函数
void showperson(struct addressbooks* abs);
//4、删除联系人函数
void delete_person(struct addressbooks* abs);
//5、查找联系人函数
void find_person(struct addressbooks* abs);
//6、清空联系人函数
void clean_person(addressbooks* abs);
//7、二次判断函数,防止误操作
int judge();
//8、检测联系人在通讯录中是否存在,如果存在返回通讯录结构体下标,如果不存在就返回-1
//参数 1、abs通讯录结构体 2、输入的要查的人的姓名
int is_exist(struct addressbooks* abs, string name);
//5、修改联系人函数
void modify_preson(addressbooks* abs);
void show_menu()//显示菜单函数
{
cout << "----------------------------" << endl;
cout << "|\t" << "1、添加联系人 |" << endl;
cout << "|\t" << "2、显示联系人 |" << endl;
cout << "|\t" << "3、删除联系人 |" << endl;
cout << "|\t" << "4、查找联系人 |" << endl;
cout << "|\t" << "5、修改联系人 |" << endl;
cout << "|\t" << "6、清空联系人 |" << endl;
cout << "|\t" << "0、退出通讯录 |" << endl;
cout << "----------------------------" << endl;
}
void addperson(struct addressbooks * abs)//添加联系人函数
{
//先判断通讯录是否满了
if (abs->m_size == MAX)//满了
{
cout << "通讯录已满,无法继续添加" << endl;
system("pause");
return;
}
else//没满
{
//姓名
string name;
cout << "请输入添加人姓名:" << endl;
cin >> name;
abs->presonArray[abs->m_size].m_name = name;
//性别
string sex;
cout << "请输入添加人性别:" << endl;
cin >> sex;
abs->presonArray[abs->m_size].m_sex = sex;
//年龄
int age;
cout << "请输入添加人年龄:" << endl;
cin >> age;
abs->presonArray[abs->m_size].m_age = age;
//联系电话
string phone;
cout << "请输入添加人联系电话:" << endl;
cin >> phone;
abs->presonArray[abs->m_size].m_phone = phone;
//家庭住址
string addr;
cout << "请输入添加人住址:" << endl;
cin >> addr;
abs->presonArray[abs->m_size].m_addr = addr;
//更新通讯录中人数
abs->m_size++;
cout << "添加成功" << endl;
}
}
void showperson(struct addressbooks* abs)//显示联系人函数
{
//无记录时
if (abs->m_size == 0)
{
cout << "通讯录中无记录信息" << endl;
return;
}
//有记录时
else
{
//全部显示用一个循环
for (int i = 0; i < abs->m_size; i++)
{
cout << "第" << i+1 << "个人的信息" << endl;
//显示姓名
cout << "姓名:" << abs->presonArray[i].m_name<<"\t";
//显示性别
cout << "性别:" << abs->presonArray[i].m_sex<<"\t";
//显示年龄
cout << "年龄:" << abs->presonArray[i].m_age<<"\t";
//显示联系电话
cout << "联系电话:" << abs->presonArray[i].m_phone<<"\t";
//显示住址
cout << "住址:" << abs->presonArray[i].m_addr <<endl;
}
}
}
//检测联系人在通讯录中是否存在,如果存在返回通讯录结构体下标,如果不存在就返回-1
//参数 1、abs通讯录结构体 2、输入的要查的人的姓名
int is_exist(struct addressbooks * abs, string name)
{
for (int i = 0; i < abs->m_size; i++)
{
//不存在
if (abs->presonArray[i].m_name != name)
{
return -1;
}
//存在
else
{
return i;
}
}
}
//3、删除联系人函数
void delete_person(struct addressbooks * abs)
{
cout << "请输入要删除的联系人的姓名" << endl;
string name;
cin >> name;
int ret= is_exist(abs, name);
//ret==-1查无此人;ret!=-1查询到该人和数组下标,开始执行删除操作
if (ret == -1)
{
cout << "查无此人" << endl;
}
else
{
//数据前移
for (int i= ret; i < abs->m_size; i++)
{
abs->presonArray[i].m_name = abs->presonArray[i + 1].m_name;
}
abs->m_size--;//更新通讯录数组中的人数
}
}
//4、查找联系人函数
void find_person(struct addressbooks* abs)
{
cout << "请输入要查找联系人的姓名" << endl;
string name;
cin >> name;
int ret = is_exist(abs, name);
if (ret == -1)
{
cout << "查无此人" << endl;
}
else
{
cout << "查找成功,该联系人信息如下:" << endl;
//显示姓名
cout << "姓名:" << abs->presonArray[ret].m_name << "\t";
//显示性别
cout << "性别:" << abs->presonArray[ret].m_sex << "\t";
//显示年龄
cout << "年龄:" << abs->presonArray[ret].m_age << "\t";
//显示联系电话
cout << "联系电话:" << abs->presonArray[ret].m_phone << "\t";
//显示住址
cout << "住址:" << abs->presonArray[ret].m_addr << endl;
}
}
//5、修改联系人函数
void modify_preson(addressbooks* abs)
{
cout << "请输入要修改联系人的姓名:" << endl;
string name;
cin >> name;
int ret= is_exist(abs, name);
if (ret == -1)
{
cout << "查无此人" << endl;
}
else
{
cout << "查询到该联系人信息" << endl;
cout << "请输入修改后的姓名" << endl;
string name;
cin >> name;
abs->presonArray[ret].m_name = name;
cout << "请输入修改后的性别" << endl;
string sex;
cin >> sex;
abs->presonArray[ret].m_sex = sex;
cout << "请输入修改后的年龄" << endl;
int age;
cin >> age;
abs->presonArray[ret].m_age = age;
cout << "请输入修改后的联系电话" << endl;
string phone;
cin >> phone;
abs->presonArray[ret].m_phone = phone;
cout << "请输入修改后的住址" << endl;
string addr;
cin >> addr;
abs->presonArray[ret].m_addr = addr;
}
}
//6、清空联系人函数
void clean_person(addressbooks* abs)
{
int ret=judge();
if (ret == 1)
{
abs->m_size = 0;//将通讯录中的联系人数量归零实现清空的功能,做逻辑清空操作
cout << "通讯录中的联系人信息已成功清空" << endl;
}
else
{
return;
}
}
//7二次判断函数,防止误操作
//1-执行,2-不执行
int judge()
{
cout << "确定要清空全部联系人信息吗?请在考虑一下。" << endl;
cout << "确定执行请输入“是”,不执行请输入“否”" << endl;
string decide;
cin >> decide;
int ret;
if (decide == "是")
{
ret = 1;
}
else
{
ret = 0;
}
return ret;
}
int main()
{
struct addressbooks abs;
abs.m_size = 0;//初始化通讯录中的人员个数
while (true)//多次使用系统
{
show_menu();//显示菜单函数
int select;//输入数字进入不同功能
cin >> select;
switch (select)
{
case 1://1、添加联系人
addperson(&abs);//添加联系人 传递指针地址 可以改变实参
break;
case 2://2、显示联系人
showperson(&abs);
break;
case 3://3、删除联系人
/*{
cout << "请输入要删除联系人的姓名" << endl;
string name;
cin >> name;
if (is_exist(&abs, name) == -1)
{
cout << "查无此人" << endl;
}
else
{
cout << "查询到此人" << endl;
}
}*/
delete_person(&abs);
break;
case 4://4、查找联系人
find_person(&abs);
break;
case 5://5、修改联系人
modify_preson(&abs);
break;
case 6://6、清空联系人
clean_person(&abs);
break;
case 0://0、退出通讯录
cout << "已退出系统,欢迎下次使用" << endl;
system("pause");
return 0;
break;
default:
break;
}
system("pause");
system("cls");
}
system("pause");
return 0;
}
C++ 简单的通讯录管理系统
最新推荐文章于 2023-07-27 22:50:40 发布