#include <iostream>
#include <string>
#define MAX 1000//千万不要加分号
using namespace std;
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个联系人结构体
struct Person
{//成员
//姓名,性别,年龄,联系电话,家庭住址
string name;
int sex;
int age;
string phone;
string address;
};
//设计通讯录结构体
struct books
{
struct Person arr[MAX];//通讯录中保存的人的数据的数组
int size;//通讯录中保存人的个数
};
void addbooks(books*s)
{
if (s->size == MAX)
{
cout << "抱歉,通讯录已满" << endl;
return;//相当于退出了
}
else
{
cout << "请输入姓名" << endl;
string name;
cin >> name;
s->arr[s->size].name = name;
cout << "请输入性别" << endl;
cout << "1.男" << endl;
cout << "2.女" << endl;
int sex = 0;
cin >> sex;
s->arr[s->size].sex = sex;
cout << "请输入年龄" << endl;
int age;
cin >> age;
s->arr[s->size].age = age;
cout << "请输入电话号码" << endl;
string phone;
cin >> phone;
s->arr[s->size].phone = phone;
cout << "请输入家庭地址" << endl;
string address;
cin >> address;
s->arr[s->size].address = address;
(*s).size++;//更新通讯录人数
cout << "添加成功" << endl;
system("pause");//按任意键继续
system("cls");//清屏
}
}
void showpersons(books*s)//显示所有的联系人
{
if (s->size == 0)
{
cout << "通讯录是空的,请添加联系人" << endl;
}
else
{
int i = 0;
for (i = 0; i < s->size; i++)//相当于遍历每一个联系人
{
cout << "姓名:" << s->arr[i].name << "\t";
cout << "性别:" << (s->arr[i].age == 1 ? "男" : "女") << "\t";
cout << "年龄:" << s->arr[i].age << "\t";
cout << "电话号码:" << s->arr[i].phone << "\t";
cout << "家庭住址:" << s->arr[i].address << endl;
}
}
system("pause");
system("cls");
}
int isExist(books*s,string name)
{
for (int i = 0; i < s->size; i++)//遍历每一个数组
{
if (s->arr[i].name != name)
{
return -1;//说明没有此人
}
return i;//否则,返回它的下标值
}
}
void Deleteperson(books*s)
{
cout << "请输入你要删除的联系人:" << endl;
string name;
cin >> name;
int ret = isExist(s,name);//下面有调用case3在这里s本身就是一个地址
if (ret !=1)
{
for (int i = ret; i < s->size; i++)
{
s->arr[i] = s->arr[i + 1];//数据前移
}
(*s).size--;//更新通讯录中的元素
cout << "删除成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
void findperson(books*s)
{
cout << "请输出你要查找人的姓名" << endl;
string name;
cin >> name;
int i = isExist(s, name);
if (i != -1)
{
cout << "姓名:" << s->arr[i].name << "\t";
cout << "性别:" << (s->arr[i].age == 1 ? "男" : "女") << "\t";
cout << "年龄:" << s->arr[i].age << "\t";
cout << "电话号码:" << s->arr[i].phone << "\t";
cout << "家庭住址:" << s->arr[i].address << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
void changeperson(books*s)
{
cout << "请输入要修改的联系人" << endl;
string name;
cin >> name;
int i = isExist(s, name);
if (i != -1)
{
cout << "请输入姓名" << endl;
string name2;
cin >> name;
s->arr[s->size].name = name2;
cout << "请输入性别" << endl;
cout << "1.男" << endl;
cout << "2.女" << endl;
int sex = 0;
cin >> sex;
s->arr[s->size].sex = sex;
cout << "请输入年龄" << endl;
int age;
cin >> age;
s->arr[s->size].age = age;
cout << "请输入电话号码" << endl;
string phone;
cin >> phone;
s->arr[s->size].phone = phone;
cout << "请输入家庭地址" << endl;
string address;
cin >> address;
s->arr[s->size].address = address;
cout << "修改成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
void cleanperson(books*s)
{
s->size = 0;
cout << "清空成功" << endl;
system("pause");
system("cls");
}
int main()
{//第一步:实现一个菜单功能
//1.封装函数显示该菜单界面,叫做void showMenu()
//2.调用菜单函数,打印出菜单
//第二步:实现每一个功能
//用户有很多个选择,搭建一个Switch分支语句,而且要循环
//创建通讯录
books s;//books已经创建过了,所以不用再加struct,定义一个变量persons
s.size = 0;//初始化通讯录中的人数
int select = 0;
while (1)//有一个0的情况,不算死循环
{
showMenu();
cin >> select;
switch (select)
{
case 1://添加联系人
{//功能描述:实现添加联系人功能,联系人的上限是1000人,联系人信息包括
//(姓名,性别,年龄,联系电话,家庭住址)
addbooks(&s);//传递地址进去,对实参进行改变
break;
}
case 2://显示联系人
{
showpersons(&s);
break;
}
case 3://删除联系人
{//1.判断这个要删除的联系人是不是存在在这个通讯录中(根据姓名)写一个函数
//2.然后再写一个函数对这个联系人进行删除
Deleteperson(&s);
break;
}
case 4://查找联系人
{
findperson(&s);
break;
}
case 5://修改联系人
{
changeperson(&s);
break;
}
case 6://清空联系人
{
cleanperson(&s);
break;
}
case 0://退出通讯录
{
cout << "欢迎下次使用通讯录" << endl;
system("pause");
return 0;//退出系统
break;
}
default:
{
break;
}
}
}
//system("pause");
return 0;
}