//封装函数,然后在main里调用
#include <iostream>
#include <string>
#define MAX 1000
using namespace std;
//菜单界面
void showmenu()
{
cout << "1,添加" << endl;
cout << "2,显示" << endl;
cout << "3,删除" << endl;
cout << "4,查找" << endl;
cout << "5,修改" << endl;
cout << "6,清空" << endl;
cout << "0,退出" << endl;
}
//添加联系人结构体>添加通讯录结构>main中创建通讯录>封装联系人>测试添加联系人功能
struct person
{
int age;
string name;
int sex;
string phone;
string address;
};
struct addressbook
{
struct person personarray[MAX];
int m_size;
};
void addperson(addressbook* addressbs)
{
//判断通讯录是否已满,如果满了就不添加
if (addressbs->m_size==MAX)
{
cout << "FULL" << endl;
}
else
{
string name;
cout << "输入姓名" << endl;
cin >> name;
addressbs->personarray[addressbs->m_size].name = name;
cout << "性别1男2女" << endl;
int sex = 0;
while (true)
{
cin >> sex;
//如果输入的是1或者2可以退出循环,如果是别的就要重新输入
if (sex==1||sex==2)
{
addressbs->personarray[addressbs->m_size].sex = sex;
break;
}
else {
cout << "非法操作" << endl;
break;
}
}
int age = 0;
cout << "press age年龄" << endl;
cin >> age;
addressbs->personarray[addressbs->m_size].age = age;
string phonenumber;
cout << "press number手机" << endl;
cin >> phonenumber;
addressbs->personarray[addressbs->m_size].phone = phonenumber;
string address;
cout << "press adress地址" << endl;
cin >> address;
addressbs->personarray[addressbs->m_size].address = address;
addressbs->m_size++;
//更新通讯录人数
cout << "successed成功" << endl;
system("pause");
system("cls");
//清屏操作
}
}
//显示联系人:封装+测试,没有人显示记录为空,有人显示具体信息
void showperson(addressbook* addressbs)
{
//判断通讯录中人数是否为0.如果为0提示empty,不为0显示联系人信息
if (addressbs->m_size==0)
{
cout << "当前记录为空!" << endl;
}
else
{
for (int i = 0; i < addressbs->m_size; i++)
{
cout << "姓名" << addressbs->personarray[i].name << endl;
cout << "性别" << (addressbs->personarray[i].sex==1 ?"男":"女")<< endl;
cout << "年龄" << addressbs->personarray[i].age << endl;
cout << "电话" << addressbs->personarray[i].phone << endl;
cout << "地址" << addressbs->personarray[i].address << endl;
}
}
system("pause");
system("cls");
}
//检验是否存在
int checkexist(addressbook* addressbs, string name)//参数1通讯录 参数2对比姓名
{
//原理:遍历所有人名和所查找人名是否一致
for (int i = 0; i < addressbs->m_size; i++)
{
if (addressbs->personarray[i].name == name)
{
return i;
}
}
return -1;
system("pause");
system("cls");
}
//删除联系人
//检测联系人是否存在,删除联系人函数,测试删除联系功能
//按照姓名来查信息
void deleteperson(addressbook* addressbs, string name)
{
cout << "请输入要删除的联系人" << endl;
string name3;
cin >> name3;
int ret=checkexist(addressbs, name3);
if (ret==-1)
{
cout << "没有这个人" << endl;
}
else
{
//delete the people that found
for (int i = ret; i < addressbs->m_size; i++)
{
addressbs->personarray[i] = addressbs->personarray[i + 1];
}
addressbs->m_size--;
cout << "删除" << name << "成功" << endl;
}
system("pause");
system("cls");
}
//查找
int findperson(addressbook* addressbs)
{
string name;
cout << "输入查找姓名";
cin >> name;
int ret = checkexist(addressbs, name);
if (ret == -1)
{
cout << "没有这个人" << endl;
}
else
{
cout << "name姓名" << addressbs->personarray[ret].name << endl;
cout << "sex性别" << addressbs->personarray[ret].sex << endl;
cout << "age年龄" << addressbs->personarray[ret].age << endl;
cout << "phone手机" << addressbs->personarray[ret].phone << endl;
cout << "address住址" << addressbs->personarray[ret].address << endl;
}
return 0;
system("pause");
system("cls");
}
//修改
void modifyperson(addressbook* addressbs)
{
cout << "输入姓名" << endl;
string name5;
cin >> name5;
int ret=checkexist(addressbs, name5);
if (ret!=-1)
{
string name;
cout << "输入修改后的姓名" << endl;
cin >> name;
addressbs->personarray[ret].name = name;
int sex;
cout << "输入修改后的sex,1男2女" << endl;
cin >> sex;
addressbs->personarray[ret].sex= sex;
int age;
cout << "输入修改后的age" << endl;
cin >> age;
addressbs->personarray[ret].age = age;
string phone;
cout << "输入修改后的phone" << endl;
cin >> phone;
addressbs->personarray[ret].phone = phone;
string address;
cout << "输入修改后的address" << endl;
cin >> address;
addressbs->personarray[ret].address = address;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//清空
void clearperson(addressbook* addressbs)
{
addressbs->m_size = 0;
cout << "清空成功" << endl;
system("pause");
system("cls");
}
int main()
{
//创建通讯录结构体变量
addressbook addressbs;
addressbs.m_size = 0;
int select = 0;
while (true)
{
showmenu();
cin >> select;
switch (select)
{
case 1://add
addperson(&addressbs);//调用添加函数
break;
case 2://show
showperson(&addressbs);
break;
case 3://delete
{
cout << "请输入姓名" << endl;
string name3;
cin >> name3;
deleteperson(&addressbs, name3);
}
break;
case 4://find
{
findperson(&addressbs);
}
break;
case 5://correct
modifyperson(&addressbs);
break;
case 6://clear
clearperson(&addressbs);
break;
case 0://quit
cout << "欢迎下次使用" << endl;
return 0;
break;
default:
break;
}
}
system("pause");
return 0;
}
可能会遇到的问题
代码逻辑:main函数里switch选择语句,根据你输入的东西调用不同的功能函数;在main之前写不同功能。
所有对addressbook结构体之下的addressbs指针,都指向数组里存储的每一项“联系人”,其中联系人的结构体、通讯录的结构体、通讯录数组的内存变动是本项目的基础,在此之上实现所有功能函数。
可能会出现errorC4716“必须返回一个值”,这个报错针对int型函数而非void函数,int函数因为自身数据类型必须有return ()。
switch函数调用&addressbs反指针的值。
system pause/cls的作用是“停止运行”和“清屏”,即清除以上所有的显示,只保留本步操作,为了整洁美观用,不是必须。