【C语言-53】实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址

2023-10-30

目录

 

题目要求:

解题代码:

结构体定义和组织:

菜单函数:

通讯录初始化函数:

新增联系人:

删除联系人:

查找联系人:

修改联系人:

打印全部联系人:

排序联系人:

清空联系人:

全部代码:

 

 


题目要求:

  1. 实现一个通讯录;  
  2. 通讯录可以用来存储1000个人的信息,
  3. 每个人的信息包括:  姓名、性别、年龄、电话、住址 ;
  4. //实现一个通讯录程序,完成联系人信息的存储
    //1.新增记录
    //2.删除记录
    //3,修改记录
    //4.查找记录
    //5.打印全部记录
    //6.排序记录
    //7.清空全部记录
    //管理: 
    //1.基本信息抽象并描述出来(结构体)
    //2.需要管理许多数据.需要组织起来

    解题代码:

  5. 结构体定义和组织:

  6. //定义一个结构体.描述数据
    typedef struct PersonInfo {
    	char name[1024];  //谈到结构体占几个字节,要说几字节对齐
    	char phone[1024]; //数组是最简单最常见的数据结构
    
    }PersonInfo;
    
    //组织数据
    typedef struct AddressBook {
    	PersonInfo persons[MAX_PERSONINFO_SIZE];
    	//[0,size)表示有效元素
    	int size;
    
    }AddressBook;

    菜单函数:

int  Menu() {
	printf("=======================\n");
	printf("1.新增联系人\n");
	printf("2.删除联系人\n"); 
	printf("3.查找联系人\n");
	printf("4.修改联系人\n");
	printf("5.打印全部联系人\n");
	printf("6.排序联系人\n");
	printf("7.清空联系人\n");
	printf("0.退出\n");
	printf("=======================\n");
	printf("请输入你的选择:   ");
	int choice = 0;
	scanf("%d", &choice);
	return  choice;


}

通讯录初始化函数:

//通讯录初始化
void Init() {
	g_address_book.size = 0;
	for (int i = 0; i < MAX_PERSONINFO_SIZE; i++) {
		g_address_book.persons[i].name[0] = '\0';
		g_address_book.persons[i].phone[0] = '\0';

	}
}

新增联系人:

//1.新增联系人
void AddPersonInfo() {
	printf("新增联系人;\n");
	if (g_address_book.size >= MAX_PERSONINFO_SIZE) {
		printf("新增联系人失败!\n");
		return;
	}
	printf("请输入联系人姓名:  \n");
	//获取一个指针,修改的内容是一个预期的指针
	PersonInfo* person_info =& g_address_book.persons[g_address_book.size];
	scanf("%s",person_info->name);

	printf("请输入联系人电话:  \n");
	scanf("%s", person_info->phone);

	++g_address_book.size;

	printf("新增联系人成功;\n");

}

删除联系人:

//2.删除联系人
void DelPersonInfo() {
	printf("删除联系人:\n");
	if (g_address_book.size <= 0) {
		printf("通讯录为空,删除失败;\n");
		return;
	}
	printf("请输入要删除的序号:\n");
	int id = 0;
	scanf("%d", &id);

	if (id < 0 || id >= g_address_book.size) {
		printf("删除失败,输入的序号有误!");
		return;

    }

	g_address_book.persons[id]
		= g_address_book.persons[g_address_book.size - 1];
	    --g_address_book.size;

	printf("删除联系人成功:\n");

}

查找联系人:

//3.查找联系人
void FindPersonInfo() {
	printf("查找联系人\n");
	if (g_address_book.size = 0) {
		printf("通讯录为空,查找失败!\n");
		return;
	}
	//根据项目查找电话
	printf("请输入要查找的姓名: ");
	char name[1024] = { 0 };
	scanf("%s", name);
	for (int i = 0; i < g_address_book.size; ++i) {
		PersonInfo* info =& g_address_book.persons[i];
		if (strcmp(info->name, name) == 0) {
			printf("[%d]%s\t%s\n", i, info->name, info->phone);
		}

	}


}

修改联系人:

//4.更新联系人
void UpdatePersonInfo() {
	printf("更新联系人\n");
	if (g_address_book.size = 0) {
		printf("通讯录为空,修改失败!\n");
		return;
	}
	printf("请输入要修改的序号:\n");
	int id = 0;
	scanf("%d", &id);
	if (id<0 || id>-g_address_book.size) {
		printf("修改失败,输入的序号有误!\n");
		return;
	}
	PersonInfo * info = &g_address_book.persons[id];
	printf("请输入新的姓名:     (%s)\n",info->name);
	char name[1024] = { 0 };

	scanf("%s", name);
	if (strcmp(name, "") != 0) {
		strcmp(info->name, name);
	}


	char phone[1024] = { 0 };
	printf("请输入新的电话:    (%s)\n",info->phone);
	scanf("%s",phone);
	if (strcmp(phone, "") != 0) {
		strcmp(info->phone, phone);
	}
	printf("更新联系人成功!\n");

}

打印全部联系人:

//5.打印全部联系人
void PrintfAllPersonInfo() {
	printf("打印全部联系人: \n");
	for (int i = 0; i < g_address_book.size; ++i) {
		PersonInfo *info = &g_address_book.persons[i];
		printf("[%d]  %s\t%s\n",i,info->name,info->phone);
	}

	printf("共打印了%d条数据! \n",g_address_book.size);

	printf("打印全部联系人成功! \n");


}

排序联系人:

//6.排序联系人
void SortPersonInfo() {
	//按照字节序排序,取结构体中的姓名字段
	char name[1024] = { '\0' };
	char phone[1024] = { '\0' };
	int bound;
	int i;
	int size;
	for (i = 0; i < g_address_book.size; i++) {
		for (bound = 0; bound < g_address_book.size; bound++) {
			for (size = bound; size < g_address_book.size - 1; size++) {
				if (strcmp(g_address_book.persons[size].name,
					g_address_book.persons[size + 1].name) > 0) {
					strcpy(name, g_address_book.persons[size].name);
					strcpy(g_address_book.persons[size].name,
						g_address_book.persons[size + 1].name);
					strcpy(g_address_book.persons[size + 1].name, name);
					//copy 电话号码
					strcpy(phone, g_address_book.persons[size].phone);
					strcpy(g_address_book.persons[size].phone,
						g_address_book.persons[size + 1].phone);
					strcpy(g_address_book.persons[size + 1].phone, phone);
				}
			}
		}
	}
	printf("排序所有联系人:\n");
	printf("排序成功!\n");
	system("pause");
	system("cls");
}

清空联系人:

//7.清空联系人
void ClearAllPersonInfo() {
	printf("清空全部数据\n");
	printf("你真的要清空全部数据吗? Y/N \n");
	char choice[1024] = { 0 };
	scanf("%s", choice);
	if (strcmp(choice, "Y") == 0) {
		g_address_book.size = 0;
		printf("清空全部数据成功!\n");

	}
	else {
		printf("清空操作取消!\n");
	}


}

全部代码:

#define  _CRT_SECURE_NO_WARNINGS
//实现一个通讯录程序,完成联系人信息的存储
//1.新增记录
//2.删除记录
//3,修改记录
//4.查找记录
//5.打印全部记录
//6.排序记录
//7.清空全部记录
//管理: 
//1.基本信息抽象并描述出来(结构体)
//2.需要管理许多数据.需要组织起来

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_PERSONINFO_SIZE 300
//定义一个结构体.描述数据
typedef struct PersonInfo {
	char name[1024];  //谈到结构体占几个字节,要说几字节对齐
	char phone[1024]; //数组是最简单最常见的数据结构

}PersonInfo;

//组织数据
typedef struct AddressBook {
	PersonInfo persons[MAX_PERSONINFO_SIZE];
	//[0,size)表示有效元素
	int size;

}AddressBook;

AddressBook  g_address_book;

//通讯录初始化
void Init() {
	g_address_book.size = 0;
	for (int i = 0; i < MAX_PERSONINFO_SIZE; i++) {
		g_address_book.persons[i].name[0] = '\0';
		g_address_book.persons[i].phone[0] = '\0';

	}
}

int  Menu() {
	printf("=======================\n");
	printf("1.新增联系人\n");
	printf("2.删除联系人\n"); 
	printf("3.查找联系人\n");
	printf("4.修改联系人\n");
	printf("5.打印全部联系人\n");
	printf("6.排序联系人\n");
	printf("7.清空联系人\n");
	printf("0.退出\n");
	printf("=======================\n");
	printf("请输入你的选择:   ");
	int choice = 0;
	scanf("%d", &choice);
	return  choice;


}

//1.新增联系人
void AddPersonInfo() {
	printf("新增联系人;\n");
	if (g_address_book.size >= MAX_PERSONINFO_SIZE) {
		printf("新增联系人失败!\n");
		return;
	}
	printf("请输入联系人姓名:  \n");
	//获取一个指针,修改的内容是一个预期的指针
	PersonInfo* person_info =& g_address_book.persons[g_address_book.size];
	scanf("%s",person_info->name);

	printf("请输入联系人电话:  \n");
	scanf("%s", person_info->phone);

	++g_address_book.size;

	printf("新增联系人成功;\n");

}


//2.删除联系人
void DelPersonInfo() {
	printf("删除联系人:\n");
	if (g_address_book.size <= 0) {
		printf("通讯录为空,删除失败;\n");
		return;
	}
	printf("请输入要删除的序号:\n");
	int id = 0;
	scanf("%d", &id);

	if (id < 0 || id >= g_address_book.size) {
		printf("删除失败,输入的序号有误!");
		return;

    }

	g_address_book.persons[id]
		= g_address_book.persons[g_address_book.size - 1];
	    --g_address_book.size;

	printf("删除联系人成功:\n");

}

//3.查找联系人
void FindPersonInfo() {
	printf("查找联系人\n");
	if (g_address_book.size = 0) {
		printf("通讯录为空,查找失败!\n");
		return;
	}
	//根据项目查找电话
	printf("请输入要查找的姓名: ");
	char name[1024] = { 0 };
	scanf("%s", name);
	for (int i = 0; i < g_address_book.size; ++i) {
		PersonInfo* info =& g_address_book.persons[i];
		if (strcmp(info->name, name) == 0) {
			printf("[%d]%s\t%s\n", i, info->name, info->phone);
		}

	}


}
//4.更新联系人
void UpdatePersonInfo() {
	printf("更新联系人\n");
	if (g_address_book.size = 0) {
		printf("通讯录为空,修改失败!\n");
		return;
	}
	printf("请输入要修改的序号:\n");
	int id = 0;
	scanf("%d", &id);
	if (id<0 || id>-g_address_book.size) {
		printf("修改失败,输入的序号有误!\n");
		return;
	}
	PersonInfo * info = &g_address_book.persons[id];
	printf("请输入新的姓名:     (%s)\n",info->name);
	char name[1024] = { 0 };

	scanf("%s", name);
	if (strcmp(name, "") != 0) {
		strcmp(info->name, name);
	}


	char phone[1024] = { 0 };
	printf("请输入新的电话:    (%s)\n",info->phone);
	scanf("%s",phone);
	if (strcmp(phone, "") != 0) {
		strcmp(info->phone, phone);
	}
	printf("更新联系人成功!\n");

}

//5.打印全部联系人
void PrintfAllPersonInfo() {
	printf("打印全部联系人: \n");
	for (int i = 0; i < g_address_book.size; ++i) {
		PersonInfo *info = &g_address_book.persons[i];
		printf("[%d]  %s\t%s\n",i,info->name,info->phone);
	}

	printf("共打印了%d条数据! \n",g_address_book.size);

	printf("打印全部联系人成功! \n");


}

//6.排序联系人
void SortPersonInfo() {
	//按照字节序排序,取结构体中的姓名字段
	char name[1024] = { '\0' };
	char phone[1024] = { '\0' };
	int bound;
	int i;
	int size;
	for (i = 0; i < g_address_book.size; i++) {
		for (bound = 0; bound < g_address_book.size; bound++) {
			for (size = bound; size < g_address_book.size - 1; size++) {
				if (strcmp(g_address_book.persons[size].name,
					g_address_book.persons[size + 1].name) > 0) {
					strcpy(name, g_address_book.persons[size].name);
					strcpy(g_address_book.persons[size].name,
						g_address_book.persons[size + 1].name);
					strcpy(g_address_book.persons[size + 1].name, name);
					//copy 电话号码
					strcpy(phone, g_address_book.persons[size].phone);
					strcpy(g_address_book.persons[size].phone,
						g_address_book.persons[size + 1].phone);
					strcpy(g_address_book.persons[size + 1].phone, phone);
				}
			}
		}
	}
	printf("排序所有联系人:\n");
	printf("排序成功!\n");
	system("pause");
	system("cls");
}



//7.清空联系人
void ClearAllPersonInfo() {
	printf("清空全部数据\n");
	printf("你真的要清空全部数据吗? Y/N \n");
	char choice[1024] = { 0 };
	scanf("%s", choice);
	if (strcmp(choice, "Y") == 0) {
		g_address_book.size = 0;
		printf("清空全部数据成功!\n");

	}
	else {
		printf("清空操作取消!\n");
	}


}

Empty() {

}

typedef void(*Func)();//定义了一个函数指针;




int main() {
	Func arr[] = {
		Empty,
		AddPersonInfo,
		DelPersonInfo,
		FindPersonInfo,
		UpdatePersonInfo,
		PrintfAllPersonInfo,
		SortPersonInfo,
		ClearAllPersonInfo
	};

	Init();

	while (1) {
		int choice = Menu();
		if (choice < 0 || choice >= sizeof(arr) / sizeof(arr[0])) {
			printf("您的输入有误,清重新输入!");
			continue;
		}

		if (choice == 0) {
			printf("再见!\n");
			break;

		}
		arr[choice]();//转移表,简化代码,通过下标取得函数指针
	}
	system("pause");
	return 0;
}

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C语言-53】实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 的相关文章

  • stable diffusion实践操作-大模型介绍-SDXL1大模型

    系列文章目录 大家移步下面链接中 里面详细介绍了stable diffusion的原理 操作等 本文只是下面系列文章的一个写作模板 stable diffusion实践操作 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档
  • 在Unity中使用OOP

    以Main Camera 为例 所有组件 Transform Camera Audio Listener Scirpts 在Unity中都是类 单击Play按钮时 这些组件都会成为内存中的对象 1 获取组件 使用GameObject类的Ge
  • Scala简介与安装

    目录 一 Scala简介 一 Scala概述 二 函数式编程 三 Scala特性 1 一切都是对象 2 一切都是函数 3 一切都是表达式 四 在线运行Scala 二 选择Scala版本 三 Windows上安装Scala 一 到Scala官
  • /var/run/yum.pid 已被锁定,PID 为 xxxx 的另一个程序正在运行的问题解决

    问题 解决 root localhost rm f var run yum pid
  • openGL阴影实现(软阴影)

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 现实世界中的柔和阴影 二 生成柔和阴影 百分比邻近滤波 PCF 1 引入库 代码 运行效果 源码下载 前言 目前我们所展示的阴影生成方法都仅限于生成硬阴影 即带锐边的阴
  • R语言绘制箱线图并添加相关显著性

    箱线图 又称盒须图 通过绘制连续型变量的五数总括 即最小值 下四分位数 第25百分位数 中位数 第50百分位数 上四分位数 第75百分位数 以及最大值 描述了连续型变量 的分布 它主要用于反映原始数据分布的特征 还可以进行多组数据分布特征的
  • 网络爬虫CSS选择器详细讲解

    网络爬虫CSS选择器详细讲解 前言 使用步骤 1 解析的HTML代码 2 逐层选择节点 3 获取文本 string和get text 4 获取节点的属性值 5 选择单个和多个节点 6 通过class和id选择节点 class id 7 选择
  • PLY 模型文件简析

    PLY 模型文件简析 参考链接 wiki需要FFFQQQ TIPS 主要是一些英文的简析 但是一句话 网上讲的不清楚 特此说明property list uchar int vertex indices 应该是面的顶点数量使用 uchar
  • 苹果 / Apple iCloud 教育版 200GB 云盘账号自助注册教程

    因为教育机构的管理式 Apple ID 可以单点登录 SSO 登录 因此自助注册苹果 Apple iCloud 教育版 200GB 云盘账号就可以顺利进行了 自助注册苹果 Apple iCloud 教育版 200GB 云盘账号分为两步 自助
  • STM32速成笔记—IWDG

    文章目录 一 IWDG简介 二 STM32的IWDG 2 1 STM32的IWDG简介 2 2 喂狗 2 3 IWDG框图 三 IWDG配置步骤 四 IWDG配置程序 4 1 IWDG初始化程序 4 2 喂狗 五 应用实例 一 IWDG简介
  • 恶意代码的分类

    计算机病毒 注意这是狭义上的定义 和网络蠕虫都可以进行自我传播 那他们的本质区别是什么 计算机病毒 一组能进行自我传播 需要用户干预来触发执行的破坏性程序或代码 网络蠕虫 一组能进行自我传播 不需要用户干预即可触发执行的破坏性程序或代码 1
  • [007]爬虫系列

    一 找到首次加载的js 用源码面板打开 二 第一行打断点 格式化 三 刷新网页 成功断点 执行hook 代码如下 function use strict var cookieTemp Object defineProperty docume
  • 前端实现流程图效果_微前端在58商业的探索实践

    导读 商业FE部门分四个业务组 每个组内迭代着多个中后台应用 其中有跨组协作项目 这些项目的特点是UI UE相似 有较多的组件 逻辑复用场景 技术栈统一为VUE 且项目在不断迭代中 实践微前端架构能提高业务复用性 让各团队更高效的分治项目
  • npm,webpack学习中遇到的各种问题

    问题 打包的时候报错 Uncaught ReferenceError regeneratorRuntime is not defined 解决 详见babel plugin transform runtime babel pollyfill
  • Python字典操作方法--items()

    d items 返回字典中的所有键值对信息 返回结果是Python的一种内部数据类型dict items 如果希望更好的使用返回结果 可以将其转换为列表类型 键值对以元组类型 即括号形式 表示 gt gt gt d 2018 小明 2019
  • Flutter与Native通信原理剖析与实践

    通信原理 我们分几种场景来介绍Flutter和Native之间的通信 Native发送数据给Flutter Flutter发送数据给Native Flutter发送数据给Native 然后Native回传数据给Flutter Flutter
  • 系统服务器有哪几种,服务器的操作系统有哪几种

    服务器的操作系统有哪几种 内容精选 换一换 切换操作系统是为您的云服务器重新切换一个系统盘 切换完成后云服务器的系统盘ID会发生改变 并删除原有系统盘 如果云服务器当前使用的操作系统不能满足业务需求 如软件要求的操作系统版本较高 您可以选择
  • 【yarn】yarn RMContainer 状态机正常执行流程

    1 概述 上一篇文章 Yarn Yarn Service端如何处理客户端提交的任务 在上一篇文章中 我们知道服务器接收到客户端提交的任务之后 会启动多个状态机进行联合操作 最终来解决任务提交之后的全流程 多个状态机合作完成任务 然后我们看了
  • 工业相机SDK二次开发

    1 工业相机编程模型和流程 2 工业相机SDK接口使用总结 3 Basler Pylon工业相机SDK的使用 4 Pylon 以实时图像采集讲解PylonC SDK使用流程 5 关于使用维视工业相机 SDK 采集图像的问题 6 工业相机SD

随机推荐

  • 【快速上手系列】使用七牛云+webuploader实现对象云存储(OSS)

    快速上手系列 使用七牛云 webuploader实现对象云存储 OSS 步骤 一 七牛云配置 1 新建存储空间 进入七牛云 注册登录 进入控制台 选择对象存储 Kodo 选择空间管理 新建空间 免费30天 写好了之后点击确定 2 获取 Ac
  • es--基础--9.2--SpringBoot注解--Field--介绍

    es 基础 9 2 SpringBoot注解 Field 介绍 内容 Retention RetentionPolicy RUNTIME Target ElementType FIELD Documented Inherited publi
  • node笔记01——Nodejs学习之fs模块、最齐全的node.js学习,包含练习案例整理

    Nodejs学习之fs模块 初始node js 浏览的中的JavaScript主要是有JavaScript核心语法和webAPI组成 浏览器中因为使用了JavaScript解析引擎 所以JavaScript代码才可以再浏览器中被执行 不同浏
  • log4j2漏洞复现

    一 漏洞描述 apache log4j通过定义每一条日志信息的级别能够更加细致地控制日志生成地过程 受影响地版本中纯在JNDI注入漏洞 导致日志在记录用户输入地数据时 触发了注入漏洞 该漏洞可导致远程代码执行 且利用条件低 影响范围广 小到
  • python is和==的区别

    python 中 is和 的区别 在 Python 中会用到对象之间比较 可以用 也可以用 is 但是它们的区别是什么呢 is 比较的是两个实例对象是不是完全相同 它们是不是同一个对象 占用的内存地址是否相同 莱布尼茨说过 世界上没有两片完
  • Webpack中常见的Loader?解决了什么问题?

    一 是什么 loader 用于对模块的源代码进行转换 在 import 或 加载 模块时预处理文件 webpack做的事情 仅仅是分析出各种模块的依赖关系 然后形成资源列表 最终打包生成到指定的文件中 如下图所示 在webpack内部中 任
  • JetBrains IDE Support Chrome 安装的正确姿势

    文章目录 1 准备 2 步骤 2 1 解压 2 2 修改为 rar后缀名 2 3 再次解压 2 4 找到扩展程序 2 5 移动文件夹 2 6 安装效果 3 结束语 1 准备 Chrome浏览器 JetBrains IDE Support插件
  • DIY多快充协议太阳能充电器!----锂电池充电电路

    上一篇文章介绍了项目硬件框图中的三个主要部分 分别为BUCK降压拓扑为锂电池充电 BOOST升压拓扑将锂电池电压升至手机充电电压 LDO线性电源为单片机提供稳定3 3V电源 这篇文章主要来介绍BUCK降压拓扑和锂电池充电电路设计 在说明锂电
  • 【CSS】Less/sass(css预处理器)

    Less sass css预处理器 作用 1 嵌套2 变量3 传参4 计算 可以嵌套标签属性设置 如在less中写 css文件中可以生成 css中变量写为 格式较为繁琐 在less中可以写作 操作较为简单 而且less支持加减乘除的计算 这
  • linux gcc __attribute__

    attribute 1 函数属性 1 1 attribute noreturn 1 2 attribute format 1 3 attribute const 2 变量属性 2 1 attribute aligned 2 2 attrib
  • Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建(菜鸟的经验)

    自己在研究驱动开发 第一步就是开发环境的搭建 网上已有很多的教程一 我也是按着教程一步一步搭建的 但在搭建过程的过程当中遇到一些问题 也花了我不少时间 第一个难题就是 我是Windows7 VS2010 WDK的开发环境 首先我参考了网上的
  • 逻辑回归及其数学推导

    本文只讨论二分类的情况 一 逻辑回归 P Y
  • DML和DDL的区别

    SQL语言共分为四大类 数据查询语言DQL 数据操纵语言DML 数据定义语言DDL 数据控制语言DCL DML Data Manipulation Language 数据操纵语言 适用范围 对数据库中的数据进行一些简单操作 如insert
  • 什么是“堆”,"栈","堆栈","队列",它们的区别?

    一 堆 什么是堆 又该怎么理解呢 堆通常是一个可以被看做一棵树的数组对象 堆总是满足下列性质 堆中某个节点的值总是不大于或不小于其父节点的值 堆总是一棵完全二叉树 将根节点最大的堆叫做最大堆或大根堆 根节点最小的堆叫做最小堆或小根堆 常见的
  • IDEA连接Redis

    IDEA连接Redis 第一步 创建项目 导入依赖 第二步 连接服务器 方案一 单实例连接 方案二 连接池 第一步 创建项目 导入依赖
  • (附源码)springboot大学生创新创业管理 毕业设计 041557

    springboot大学生创新创业管理 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化 电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用 信息时代的到来已成为不可阻挡的时尚潮流 人类发展的历史正进入一个新时代
  • Linux系统下安装 Elasticsearch 6.XX 外网无法访问的问题

    修改配置文件elasticsearch yml wys elk2 elasticsearch 6 2 2 vim config elasticsearch yml 放开下面的注解 然后配置相应的内容 network host 172 16
  • C语言,A国发生命案,警察把嫌疑人确定在4人当中(a,b,c,d)

    A国发生命案 警察把嫌疑人确定在4人当中 a b c d 审讯结果 两个人说的真话 两个人说的假话 a 罪犯在其他三个当中 B 人不是我杀的 是c杀的 c a和d之间有一个是罪犯 d b说的是事实 写一个代码 判断谁是罪犯 include
  • LPDDR4协议规范之 (一)地址映射和容量计算

    文章目录 LPDDR4协议规范之 一 地址映射和容量计算 LPDDR4 结构 LPDDR4 地址映射 LPDDR4协议规范之 一 地址映射和容量计算 LPDDR4 结构 LPDDR4采用了全新的双通道设计 每个裸片包含两个Channnel
  • 【C语言-53】实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址

    目录 题目要求 解题代码 结构体定义和组织 菜单函数 通讯录初始化函数 新增联系人 删除联系人 查找联系人 修改联系人 打印全部联系人 排序联系人 清空联系人 全部代码 题目要求 实现一个通讯录 通讯录可以用来存储1000个人的信息 每个人