8.1 结构体基本概念
结构体是属于用户自定义的数据类型,允许用户存储不同的数据类型。
8.2 结构体定义和使用
语法:struct 结构体名{结构体成员列表};
通过结构体创建变量的三种方式:
1. struct 结构体名 变量名
2. struct 结构体名 变量名 = {成员1值,成员2值,…}
3. 定义结构体时顺便创建变量
8.3 结构体数组
作用:将自定义的结构体放入到数组中方便维护。
语法:struct 结构体名 数组名[元素个数] = {{},{},…};
8.4 结构体指针
作用:通过指针访问结构体中的成员
利用操作符->可以通过结构体指针访问结构体属性。
8.5 结构体嵌套结构体
作用:结构体中的成员可以是另一个结构体。
8.6 结构体做函数参数
作用:将结构体作为参数向函数中传递。
传递方式有两种:值传递和地址传递。
8.7 结构体中const使用场景
作用:用const来防止误操作。
8.8 通讯录管理系统
#include<iostream>
using namespace std;
#include<string>
#define MAX 100 // 定义一个宏常量MAX,通讯录最大的存储人数
// 人结构体
struct Person
{
string m_Name;
int m_Sex;
int m_Age;
string m_Phone;
string m_Addr;
};
// 通讯录结构体
struct Addressbooks
{
Person personArray[MAX];
int m_Size;
};
void showMenu(); // 菜单界面
void addPerson(Addressbooks* abs); // 添加人员
void showPerson(Addressbooks* abs); // 显示通讯录
int isExist(Addressbooks* abs, string name); // 判断人名是否存在
void deletePerson(Addressbooks* abs); // 删除联系人
void findPerson(Addressbooks* abs); // 查找指定联系人信息
void modifyPerson(Addressbooks* abs); // 修改指定联系人信息
void clearAddressbooks(Addressbooks* abs); // 清空通讯录
int main()
{
Addressbooks abs;
abs.m_Size=0;
int select=0;
while(true)
{
showMenu();
cin>>select;
switch(select)
{
case 1:
addPerson(&abs);
break;
case 2:
showPerson(&abs);
break;
case 3:
deletePerson(&abs);
break;
case 4:
findPerson(&abs);
break;
case 5:
modifyPerson(&abs);
break;
case 6:
clearAddressbooks(&abs);
break;
case 0:
cout<<"欢迎下次使用!"<<endl;
return 0;
}
}
system("pause");
return 0;
}
void showMenu() // 菜单界面
{
cout<<"********************"<<endl;
cout<<"\t1. 添加联系人"<<endl;
cout<<"\t2. 显示联系人"<<endl;
cout<<"\t3. 删除联系人"<<endl;
cout<<"\t4. 查找联系人"<<endl;
cout<<"\t5. 修改联系人"<<endl;
cout<<"\t6. 清空联系人"<<endl;
cout<<"\t0. 退出通讯录"<<endl;
cout<<"********************"<<endl;
}
void addPerson(Addressbooks* abs) // 添加人员
{
if(abs->m_Size == MAX)
{
cout<<"通讯录已满,无法添加!"<<endl;
return;
}
else
{
string name;
cout<<"请输入姓名:"<<endl;
cin>>name;
abs->personArray[abs->m_Size].m_Name = name;
cout<<"请输入性别:"<<endl;
cout<<"1--男"<<endl;
cout<<"2--女"<<endl;
int sex=0;
while(true)
{
cin>>sex;
if(sex==1||sex==2)
{
abs->personArray[abs->m_Size].m_Sex = sex;
break;
}
else
{
cout<<"输入有误,请重新输入!"<<endl;
}
}
cout<<"请输入年龄:"<<endl;
int age=0;
cin>>age;
abs->personArray[abs->m_Size].m_Age = age;
cout<<"请输入联系电话:"<<endl;
string phone;
cin>>phone;
abs->personArray[abs->m_Size].m_Phone = phone;
cout<<"请输入家庭住址:"<<endl;
string address;
cin>>address;
abs->personArray[abs->m_Size].m_Addr = address;
abs->m_Size++;
cout<<"恭喜您添加成功!"<<endl;
}
}
void showPerson(Addressbooks* abs) // 显示通讯录
{
if(abs->m_Size==0)
{
cout<<"当前记录为空!"<<endl;
}
else
{
for(int i=0; i<abs->m_Size; i++)
{
cout<<"姓名:"<<abs->personArray[i].m_Name
<<"\t性别:"<<(abs->personArray[i].m_Sex==1?"男":"女")
<<"\t年龄:"<<abs->personArray[i].m_Age
<<"\t电话:"<<abs->personArray[i].m_Phone
<<"\t住址:"<<abs->personArray[i].m_Addr<<endl;
}
}
}
int isExist(Addressbooks* abs, string name) // 判断人名是否存在
{
for(int i=0; i<abs->m_Size; i++)
{
if(abs->personArray[i].m_Name == name)
return i;
}
return -1;
}
void deletePerson(Addressbooks* abs) // 删除联系人
{
cout<<"请输入您要删除的联系人:"<<endl;
string name;
cin>>name;
int ret=isExist(abs, name);
if(ret!=-1)
{
for(int i=ret; i<abs->m_Size; i++)
{
abs->personArray[i] = abs->personArray[i+1];
}
abs->m_Size--;
cout<<"删除成功!"<<endl;
}
else
{
cout<<"查无此人!"<<endl;
}
}
void findPerson(Addressbooks* abs) // 查找指定联系人信息
{
cout<<"请输入您要查找的联系人:"<<endl;
string name;
cin>>name;
int ret = isExist(abs, name);
if(ret!=-1)
{
cout<<"姓名:"<<abs->personArray[ret].m_Name
<<"\t性别:"<<(abs->personArray[ret].m_Sex==1?"男":"女")
<<"\t年龄:"<<abs->personArray[ret].m_Age
<<"\t电话:"<<abs->personArray[ret].m_Phone
<<"\t地址:"<<abs->personArray[ret].m_Addr<<endl;
}
else
{
cout<<"查无此人!"<<endl;
}
}
void modifyPerson(Addressbooks* abs) // 修改指定联系人信息
{
cout<<"请输入您要修改的联系人的姓名:"<<endl;
string name;
cin>>name;
int ret=isExist(abs, name);
if(ret!=-1)
{
string name;
cout<<"请输入姓名:"<<endl;
cin>>name;
abs->personArray[ret].m_Name = name;
cout<<"请输入性别:"<<endl;
cout<<"1--男"<<endl;
cout<<"2--女"<<endl;
int sex=0;
while(true)
{
cin>>sex;
if(sex==1||sex==2)
{
abs->personArray[ret].m_Sex = sex;
break;
}
else
{
cout<<"输入有误,请重新输入!"<<endl;
}
}
cout<<"请输入年龄:"<<endl;
int age=0;
cin>>age;
abs->personArray[ret].m_Age = age;
cout<<"请输入联系电话:"<<endl;
string phone;
cin>>phone;
abs->personArray[ret].m_Phone = phone;
cout<<"请输入家庭住址:"<<endl;
string address;
cin>>address;
abs->personArray[ret].m_Addr = address;
}
else
{
cout<<"查无此人!"<<endl;
}
}
void clearAddressbooks(Addressbooks* abs) // 清空通讯录
{
abs->m_Size = 0;
}