当前位置:网站首页>8. 结构体
8. 结构体
2022-06-21 12:06:00 【我想要去航海】
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;
}
边栏推荐
- Redis里5种基本数据类型常用指令
- 20n10-asemi medium and low voltage MOS tube 20n10
- CPU、MPU、MCU、SoC、MCM介绍
- Typera free version, without cracking, can be installed and used directly
- STM32開發之 VS Code + gcc環境編譯
- 理解RESTful架构
- Use praise to improve performance 
- Summary of UART problems in stm32cubemx
- [deep learning] use deep learning to monitor your girlfriend's wechat chat?
- Corrigendum to 138 sets of reference solutions to the real problems of Higher Algebra in 2022
猜你喜欢

RPC(远程过程调用协议)

一文掌握SQLite3基本用法

Is 100W data table faster than 1000W data table query?

Sdcc compiler + vscode to develop 8-bit microcontroller

Typera free version, without cracking, can be installed and used directly

Ansible operating instructions for configuring SSH authentication free for the first time

2-zabbix automatically add hosts using autodiscover

External attention tensorflow (under update)

【云原生 | Devops篇】Jenkins安装与实战(二)

Brief discussion on four full bonding processes of oca\uv-oca loca\sloca
随机推荐
uniapp中常用到的方法(部分) - 时间戳问题及富文本解析图片问题
知识点:PCB电路板的几种特殊布线方法
南京大学 静态软件分析(static program analyzes)-- introduction 学习笔记
PWM (pulse width modulation) of STM32 notes
CPU、MPU、MCU、SoC、MCM介绍
Redis-bitmap 位图
HMS Core机器学习服务身份证识别功能,实现信息高效录入
STM32开发之 VS Code + gcc环境编译
Typera free version, without cracking, can be installed and used directly
Harmonyos training I
Is 100W data table faster than 1000W data table query?
为什么世界上只有13个根域名服务器
STL基本容器测试
i. MX - rt1052 SPI and I2C interfaces
华为云发布桌面IDE-CodeArts
【综合笔试题】剑指 Offer II 114. 外星文字典
Is it safe to hit new bonds with one click? Is it reliable?
浅论OCA\UV-OCA LOCA\SLOCA 四种全贴合工艺
动手学数据分析 数据重构
Related codes of findpanel