通讯录管理系统(个人学习笔记黑马学习)
1、系统需求
通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++来实现一个通讯录管理系统系统中需要实现的功能如下:
- 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
- 显示联系人:显示通讯录中所有联系人信息
- 删除联系人:按照姓名进行删除指定联系人
- 查找联系人:按照姓名查看指定联系人信息
- 修改联系人:按照姓名重新修改指定联系人
- 清空联系人:清空通讯录中所有信息
- 退出通讯录:退出当前使用的通讯录
2、菜单功能
#include <iostream> 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;}int main() {//菜单的调用 showMenu();system("pause");return 0; }
3、退出功能
#include <iostream> 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;}int main() {int select = 0;//创建用户选择输入的变量while (true) {//菜单的调用 showMenu();cin >> select;switch (select) {case 1://1、添加联系人break;case 2://2、显示联系人break;case 3://3、删除联系人break;case 4://4、查找联系人break;case 5://5、修改联系人break;case 6://6、清空联系人break;case 0://0、退出通讯录cout << "欢迎下次使用" << endl;system("pause");return 0;break;default:break;}}system("pause");return 0; }
4、添加联系人
#include <iostream> using namespace std; #include <string> #define MAX 1000//联系人的结构体 struct Person {//姓名string m_Name;//性别 1、男 2、女int m_Sex;//年龄int m_Age;//电话string m_Phone;//住址string m_Addr; };//通讯录的结构体 struct Addressbooks {//通讯录中保存的联系人数组struct Person personArray[MAX];//通讯录中当前记录联系人个数int m_Size; };//添加联系人 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;}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;system("pause");//按任意键继续system("cls");//清屏} }//菜单界面 void showMenu() {cout << "***** 1、添加联系人 *****" << endl;cout << "***** 2、显示联系人 *****" << endl;cout << "***** 3、删除联系人 *****" << endl;cout << "***** 4、查找联系人 *****" << endl;cout << "***** 5、修改联系人 *****" << endl;cout << "***** 6、清空联系人 *****" << endl;cout << "***** 0、退出通讯录 *****" << endl;}int main() {Addressbooks abs;//初始化通讯录中当前人员个数abs.m_Size = 0;int select = 0;//创建用户选择输入的变量while (true) {//菜单的调用 showMenu();cin >> select;switch (select) {case 1://1、添加联系人addPerson(&abs);//利用地址传递可以修饰实参break;case 2://2、显示联系人break;case 3://3、删除联系人break;case 4://4、查找联系人break;case 5://5、修改联系人break;case 6://6、清空联系人break;case 0://0、退出通讯录cout << "欢迎下次使用" << endl;system("pause");return 0;break;default:break;}}system("pause");return 0; }
5、显示联系人
//2、显示联系人 void showPerson(Addressbooks * abs) {//判断通讯录中人数是否为0if (abs->m_Size == 0) { cout << "当前记录为空" << endl;}else {for (int i = 0; i < abs->m_Size; i++) {cout << "姓名:" << abs->personArray[i].m_Name << " 性别:" << (abs->personArray[i].m_Sex == 1?"男":"女")<< " 年龄:" << abs->personArray[i].m_Age << " 电话:" << abs->personArray[i].m_Phone<< " 地址:" << abs->personArray[i].m_Addr << endl;}}system("pause");//按任意键继续system("cls");//清屏 }
6、删除联系人
//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1 //参数1 通讯录 参数2 对比姓名 int isExist(Addressbooks* abs,string name) {for (int i = 0; i < abs->m_Size; i++) {//找到用户输入的姓名if (abs->personArray[i].m_Name == name) {return 1;}}return -1; }//3、删除指定联系人 void deletePerson(Addressbooks* abs) {cout << "请输入您要删除的联系人" << endl;string name;cin >> name;//ret==-1 未查到 //ret!=-1 查到了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;}system("pause");//按任意键继续system("cls");//清屏 }
7、查找联系人
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";cout << "性别:" << abs->personArray[ret].m_Sex << "\t";cout << "年龄:" << abs->personArray[ret].m_Age << "\t";cout << "电话:" << abs->personArray[ret].m_Phone << "\t";cout << "地址:" << abs->personArray[ret].m_Addr << endl;}else {cout << "查无此人" << endl;}system("pause");//按任意键继续system("cls");//清屏 }
8、修改联系人
//5、修改指定联系人信息 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;//性别int sex=0;cout << "请输入性别:" << endl;cout << "1 --- 男" << endl;cout << "2 --- 女" << endl;while (true) {cin >> sex;if (sex == 1 || sex == 2) {abs->personArray[ret].m_Sex = sex;break;}cout << "输入有误,重新输入" << endl;}//年龄int age;cout << "请输入年龄:" << endl;cin >> age;abs->personArray[ret].m_Age = age;//电话string Phone;cout << "请输入联系电话:" << endl;cin >> Phone;abs->personArray[ret].m_Phone = Phone;//地址string address;cout << "请输入地址:" << endl;cin >> address;abs->personArray[ret].m_Addr = address;cout << "修改成功" << endl;}else {cout << "查无此人" << endl;}system("pause");//按任意键继续system("cls");//清屏 }
9、清空通讯录
//6、清空所有联系人 void cleanPerson(Addressbooks* abs) {abs->m_Size = 0;cout << "清空成功" << endl;system("pause");//按任意键继续system("cls");//清屏 }
10、总结
#include <iostream> using namespace std; #include <string> #define MAX 1000//联系人的结构体 struct Person {//姓名string m_Name;//性别 1、男 2、女int m_Sex;//年龄int m_Age;//电话string m_Phone;//住址string m_Addr; };//通讯录的结构体 struct Addressbooks {//通讯录中保存的联系人数组struct Person personArray[MAX];//通讯录中当前记录联系人个数int m_Size; };//1、添加联系人 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;}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;system("pause");//按任意键继续system("cls");//清屏} }//2、显示联系人 void showPerson(Addressbooks * abs) {//判断通讯录中人数是否为0if (abs->m_Size == 0) { cout << "当前记录为空" << endl;}else {for (int i = 0; i < abs->m_Size; i++) {cout << "姓名:" << abs->personArray[i].m_Name << " 性别:" << (abs->personArray[i].m_Sex == 1?"男":"女")<< " 年龄:" << abs->personArray[i].m_Age << " 电话:" << abs->personArray[i].m_Phone<< " 地址:" << abs->personArray[i].m_Addr << endl;}}system("pause");//按任意键继续system("cls");//清屏 }//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1 //参数1 通讯录 参数2 对比姓名 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; }//3、删除指定联系人 void deletePerson(Addressbooks* abs) {cout << "请输入您要删除的联系人" << endl;string name;cin >> name;//ret==-1 未查到 //ret!=-1 查到了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;}system("pause");//按任意键继续system("cls");//清屏 }//4、查找联系人 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";cout << "性别:" << abs->personArray[ret].m_Sex << "\t";cout << "年龄:" << abs->personArray[ret].m_Age << "\t";cout << "电话:" << abs->personArray[ret].m_Phone << "\t";cout << "地址:" << abs->personArray[ret].m_Addr << endl;}else {cout << "查无此人" << endl;}system("pause");//按任意键继续system("cls");//清屏 }//5、修改指定联系人信息 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;//性别int sex=0;cout << "请输入性别:" << endl;cout << "1 --- 男" << endl;cout << "2 --- 女" << endl;while (true) {cin >> sex;if (sex == 1 || sex == 2) {abs->personArray[ret].m_Sex = sex;break;}cout << "输入有误,重新输入" << endl;}//年龄int age;cout << "请输入年龄:" << endl;cin >> age;abs->personArray[ret].m_Age = age;//电话string Phone;cout << "请输入联系电话:" << endl;cin >> Phone;abs->personArray[ret].m_Phone = Phone;//地址string address;cout << "请输入地址:" << endl;cin >> address;abs->personArray[ret].m_Addr = address;cout << "修改成功" << endl;}else {cout << "查无此人" << endl;}system("pause");//按任意键继续system("cls");//清屏 }//6、清空所有联系人 void cleanPerson(Addressbooks* abs) {abs->m_Size = 0;cout << "清空成功" << endl;system("pause");//按任意键继续system("cls");//清屏 }//菜单界面 void showMenu() {cout << "***** 1、添加联系人 *****" << endl;cout << "***** 2、显示联系人 *****" << endl;cout << "***** 3、删除联系人 *****" << endl;cout << "***** 4、查找联系人 *****" << endl;cout << "***** 5、修改联系人 *****" << endl;cout << "***** 6、清空联系人 *****" << endl;cout << "***** 0、退出通讯录 *****" << endl;}int main() {Addressbooks abs;//初始化通讯录中当前人员个数abs.m_Size = 0;int select = 0;//创建用户选择输入的变量while (true) {//菜单的调用 showMenu();cin >> select;switch (select) {case 1://1、添加联系人addPerson(&abs);//利用地址传递可以修饰实参break;case 2://2、显示联系人showPerson(&abs);break;case 3://3、删除联系人 //测试代码// //switch中case里语句过多需要将case中用{}括起来,否则会报错//{// cout << "请输入删除联系人姓名:" << endl;// string name;// cin >> name;// if (isExist(&abs, name) == -1) {// cout << "查无此人" << endl;// }// else {// cout << "找到此人" << endl;// }//}deletePerson(&abs);break;case 4://4、查找联系人findPerson(&abs);break;case 5://5、修改联系人modifyPerson(&abs);break;case 6://6、清空联系人cleanPerson(&abs);break;case 0://0、退出通讯录cout << "欢迎下次使用" << endl;system("pause");return 0;break;default:break;}}system("pause");return 0; }
相关文章:
通讯录管理系统(个人学习笔记黑马学习)
1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C来实现一个通讯录管理系统系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人显示联系人:显示通讯录中所有联系人信…...
[SpringBoot3]远程访问@HttpExchange
六、远程访问HttpExchange[SpringBoot3] 远程访问是开发的常用技术,一个应用能够访问其他应用的功能。SpringBoot提供了多种远程访问的技术。基于HTTP协议的远程访问是最广泛的。SpringBoot中定义接口提供HTTP服务。生成的代理对象实现此接口,代理对象实…...
Linux安装ntp并使用阿里云配置ntp服务器
安装 NTP 客户端: 打开终端,以 root 权限执行以下命令来安装 NTP 客户端: sudo zypper install ntp 编辑 NTP 配置文件: 使用文本编辑器打开 NTP 的配置文件 /etc/ntp.conf,例如使用 nano 编辑器: sudo v…...
js常用方法总结
1、slice 和 splice slice表示截取,slice(start,end),不改变原数组,返回新数组。 splice表示删除,splice(start,length,item),会改变原数组,从某个位置开始删除多个元素,并可以插入新的元素。…...
在PHP中安装Composer并管理Vue前端依赖包
系列文章目录 文章目录 系列文章目录前言一、安装Composer二、使用Composer管理PHP依赖包三、使用npm管理Vue前端依赖包总结 前言 在开发Web应用程序时,使用Composer来管理PHP的依赖包和Vue前端的依赖包是一种很常见的做法。Composer是PHP的包管理工具,…...
03-前端基础CSS-第一天
01-CSS层叠样式表导读 目标: 能够说出什么是CSS能够使用CSS基础选择器能够设置字体样式能够设置文本样式能够说出CSS的三种引入方式能够使用Chrome调试工具调试样式 目录: 1.CSS简介2.CSS基础选择器3.CSS字体属性4.CSS文本属性5.CSS引入方式6.综合案…...
多张图片转为pdf怎么弄?
多张图片转为pdf怎么弄?在网络传输过程中,为了避免图片格式文件出现差错,并确保图片的清晰度和色彩不因不同设备而有所改变,常见的做法是将图片转换为PDF格式。然而,当涉及到多张图片时,逐一转换将会变得相…...
jdk新版本特性
JDK8,JDK11,JDK17,JDK21及中间版本主要更新特性_jdk重要版本_ycsdn10的博客-CSDN博客 Java 20 新特性概览 | JavaGuide(Java面试 学习指南)...
进程Start
Linux中的命令解释器和Windows的程序管理器explorer.exe一样地位,都是在用户态下运行的进程 共享变量发生不同进程间的指令交错,就可能会数据出错 进程只作为除CPU之外系统资源的分配单位 CPU的分配单位是线程 每个进程都有自己的独立用户空间 内核空间是OS内核的…...
SpringCloud学习笔记(六)_Ribbon服务调用
Ribbon介绍 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具 Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时、重试等。简单的说,就是…...
系统架构设计师考试论文:论无服务器架构及其应用
近年来,随着信息技术的迅猛发展和应用需求的快速更迭,传统的多层企业应用系统架构面临越来越多的挑战,已经难以适应这种变化。在这一背景下,无服务器架构(ServliessArchitecture)逐渐流行,它强调业务逻辑由事件触发&am…...
linux下安装Mycat
1 官网下载mycat 官方网站: 上海云业网络科技有限公司http://www.mycat.org.cn/ github地址: MyCATApache GitHubMyCATApache has 34 repositories available. Follow their code on GitHub.https://github.com/MyCATApache 2 Mycat安装 1 把MyCat…...
OpenCV(八):图像二值化
目录 1.固定值二值化 2.自适应阈值二值化 3.Android JNI完整代码 1.固定值二值化 固定阈值二值化是OpenCV中一种简单而常用的图像处理技术,用于将图像转换为二值图像。在固定阈值二值化中,像素值根据一个预定义的阈值进行分类,大于阈值的…...
《Flink学习笔记》——第十一章 Flink Table API和 Flink SQL
Table API和SQL是最上层的API,在Flink中这两种API被集成在一起,SQL执行的对象也是Flink中的表(Table),所以我们一般会认为它们是一体的。Flink是批流统一的处理框架,无论是批处理(DataSet API&a…...
电脑提示缺少d3dx9_43.dll的问题及5个解决方法
大家好!今天,我将和大家分享一个电脑提示缺少d3dx9_43.dll的问题及其解决方法。这个问题可能会影响到我们在使用电脑时的一些功能,所以掌握这个解决方法对我们来说是非常有帮助的。 首先,我们来了解一下什么是d3dx9_43.dll。d3dx9…...
Linux stat 命令及示例
介绍 该stat命令打印有关文件和文件系统的详细信息。该工具提供有关所有者是谁、修改日期、访问权限、大小、类型等信息。 该实用程序对于故障排除、在更改文件之前获取有关文件的信息以及例行文件和系统管理任务至关重要。 本文stat通过实际示例解释了有关 Linux 命令的所有…...
06-基础例程6
基础例程6 01、WIFI实验—WebServer 实验介绍 连接路由器上网是我们每天都做的事情,日常生活中只需要知道路由器的账号和密码,就可以使用手机或电脑连接到路由器,然后上网。 连接路由器,将ESP32的IP地址等信息通过shell…...
【附安装包】Eplan2022安装教程
软件下载 软件:Eplan版本:2022语言:简体中文大小:1.52G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.5GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.baidu.co…...
大数据-玩转数据-Flink窗口
一、Flink 窗口 理解 在流处理应用中,数据是连续不断的,因此我们不可能等到所有数据都到了才开始处理。当然我们可以每来一个消息就处理一次,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击…...
【python爬虫】—豆瓣电影Top250
豆瓣电影Top250 豆瓣榜单简介需求描述Python实现 豆瓣榜单简介 豆瓣电影 Top 250 榜单是豆瓣网站上列出的评分最高、受观众喜爱的电影作品。这个榜单包含了一系列优秀的影片,涵盖了各种类型、不同国家和时期的电影。 需求描述 使用python爬取top250电影ÿ…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
