linuxC/C++单项链表实现学生信息管理

2023-11-02

操作界面:

结构定义:

typedef struct Pserson
{
	char Name[20];
	int  Age;
	int  Height;
}Per;

typedef struct List
{
	Per *per;
	int Count;
	int Len;
}PList;

头文件定义:

#ifndef _STRUCTMAIN_H
#define _STRUCTMAIN_H

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include"myExtern.h"
#define InitSize 5
#define IncreaseSize 2

typedef int Status;//方法执行结果状态OK:1\FAIL:-1

enum Opt
{
	EXIT=0,
	AppendOneInfo=1,
	AddFiveInfo,
	OutPutInfo,
	OutInfoByName,
	SortByHeight,
	SwapTwoInfo,
	DelByName,
	DelAllInfo,
	GetInfoTallest,
	GetInfoShortest,
	AppendSize,
	CheckStoreSize,
	InsertOneInfo
};

typedef struct Pserson
{
	char Name[20];
	int  Age;
	int  Height;
}Per;

typedef struct List
{
	Per *per;
	int Count;
	int Len;
}PList;


Status InitPersonList(PList *pHead);
void AppendInfo_One(PList *pHead);
void AddInfo_FIVE(PList *pHead);
Per *GetInfo_Tallest(PList pHead);
Per *GetInfo_Shortest(PList pHead);
Per *OutInfoBy_Name(PList pHead,char *N);
void OutPutInfo_ALL(PList pHead);
void SortBy_Height(PList pHead);//1212313
void SwapTwo_Info(Per *p1,Per *p2);
void AppendSize_Two(PList *pHead);
int CheckStore_Size();
void InsertInfo_One(PList *pHead);
void DelBy_Name(PList *pHead,char *N);
void DelAll_Info(PList *pHead);
void Destory(PList pHead);
void showMenu();


#endif

操作函数:

#include"ListMain.h"
/*
	功能:初始化一个长度为5的Person结构体储存空间
	参数1:指向新创建的结构体空间首地址
	返回值:初始化状态结果OK:1 FAIL:-1
*/
Status InitPersonList(PList *pHead)
{
	pHead->per = (Per*)malloc(InitSize*sizeof(Per));
	if(pHead->per==NULL)
	{
		perror("malloc error!\n");
		return -1;
	}
	pHead->Len = 5;
	pHead->Count = 0;
    //printf("%d  %d\n",pHead->Len,pHead->Count);
	return 1;
}
/*
	功能:追加一个人的信息到储存空间中
	参数:储存空间的首地址
	返回值:void
*/
void AppendInfo_One(PList *pHead)
{
	if(pHead->Count >= 0 && pHead->Count < pHead->Len)
	{		
		printf("请输入个人信息:\n");
		printf("姓名:");
		scanf("%s",(pHead->per+pHead->Count)->Name);
		printf("年龄:");
		scanf("%d",&(pHead->per+pHead->Count)->Age);
		printf("身高:");
		scanf("%d",&(pHead->per+pHead->Count)->Height);
		pHead->Count += 1;
		
	}else if(pHead->Count == pHead->Len)
	{	
		printf("人数已满,无法添加\n");
		return;
	}else
	{
		printf("出现未知错误,请重启程序!! %d\n",pHead->Count);	
		return;
	}
	  
    printf("请确认:\nNo.%-3d姓名:%-10s年龄:%-5d身高:%-5d\n",pHead->Count,(pHead->per+pHead->Count-1)->Name,(pHead->per+pHead->Count-1)->Age,(pHead->per+pHead->Count-1)->Height);
}
/*
	功能:添加五个人的信息
	参数1:5个储存空间的首地址
	返回值:void
*/
void AddInfo_FIVE(PList *pHead)
{
	int index=0;
	if(pHead->Count == 0)
	{		
		for(index=0;index<5;index++)
		{
			pHead->Count += 1;
			printf("请输入第 %d 个人信息:\n",pHead->Count);
			printf("姓名:");
			scanf("%s",(pHead->per+index)->Name);
			printf("年龄:");
			scanf("%d",&(pHead->per+index)->Age);
			printf("身高:");
			scanf("%d",&(pHead->per+index)->Height);
		}
	}else
	{	
		printf("当前已经储存 %d 个人物信息\n",pHead->Count);
		printf("储存空间已经不足以连续储存五个人信息!\n请选择其它操作\n");
		return ;
	}
}
/*
	功能:添加两个连续的储存空间
	参数1:原有储存空间的首地址
	返回值:void
*/
void AppendSize_Two(PList *pHead)
{
	Per *NewpHead=NULL;
	if(0<CheckStore_Size(*pHead))
	{
		printf("暂时不用再添加储存空间\n");
	}else
	{
		NewpHead = (Per *)realloc(pHead->per,(InitSize+IncreaseSize)*sizeof(Per));
		if(NewpHead == NULL)
		{
			return;
		}else
		{
			pHead->per = NewpHead;
			pHead->Len = pHead->Len+IncreaseSize;
			printf("当前总空间大小 %d\n",pHead->Len);
			printf("当前剩余空间 %d\n",CheckStore_Size(*pHead));
		}
	}
}
/*
	功能:查看储存空间
	返回值:剩余储存大小
*/
int CheckStore_Size(PList p)
{
	//printf("当前已经储存 %d 个人信息\n",p.Count);
	//printf("当前储存剩余 %d 个空间。\n",p.Len);
	return p.Len - p.Count;
}
/*
	功能:删除所有的人物信息
	返回值:void
*/
void DelAll_Info(PList *pHead)
{
	pHead->Count =0;
}
/*
	功能:根据姓名删除信息
	参数1:存储空间首地址
	参数2:指定的姓名
	返回值:void
*/
void DelBy_Name(PList *pHead,char *N)
{
	Per *tmpPer=pHead->per;
	int index=0,delNum=0;
	for(index=0;index<pHead->Count;index++)
	{
		if(0 != strcmp(N,(pHead->per+index)->Name))
		{
			*tmpPer=*(pHead->per+index);
			tmpPer++;
		}else
		{
			delNum++;
			printf("正在删除---->No.%-3d姓名:%-10s年龄:%-5d身高:%-5d\n",index+1,(pHead->per+index)->Name,(pHead->per+index)->Age,(pHead->per+index)->Height);
		}
	}

	if(index == pHead->Count && delNum==0)
	{
		printf("未找到 %s 的个人信息\n",N);
	}
	printf("完成!\n");
	pHead->Count = pHead->Count-delNum;
	N="";
}
/*
	功能:销毁储存空间
	参数1: 储存空间的首地址
	返回值:void
*/
void Destory(PList pHead)
{
	if(pHead.per==NULL)
	{
		printf("储存空间已经销毁。\n");
		return;
	}else
	{
		free(pHead.per);
		pHead.per=NULL;
	}
}
/*
	功能:获取最矮的那个人的信息
	参数1:储存空间的首地址
	返回值:最矮那个人信息的储存地址
*/
Per *GetInfo_Shortest(PList pHead)
{
	Per *pShortest=NULL;
	int index=0,num=0;
	if(pHead.Count == 1 && pHead.per != NULL)
	{
		pShortest=pHead.per;
		printf("身高最矮:\nNo.%-3d姓名:%-10s年龄:%-5d身高:%-5d\n",pHead.Count,pShortest->Name,pShortest->Age,pShortest->Height);
		return pShortest;
	}else if(pHead.Count > 1 && pHead.per != NULL)
	{
		pShortest = pHead.per;
		for(index = 1;index<pHead.Count;index++)
		{
			if(pShortest->Height > (pHead.per+index)->Height)
			{
				pShortest=(pHead.per+index);
				num = index+1;
			}
		}
		printf("身高最矮:\nNo.%-3d姓名:%-10s年龄:%-5d身高:%-5d\n",num,pShortest->Name,pShortest->Age,pShortest->Height);
	}else
	{
		printf("当前储存的人物信息为 %d\n",pHead.Count);
		return NULL;
	}
	return pShortest;

}
/*
    功能:获取最高的一个人的详细信息
	参数1:储存空间的首地址
	返回值:最高的一个人信息储存地址
*/
Per *GetInfo_Tallest(PList pHead)
{
	Per *pTallest=NULL;
	int index=0,num=0;
	if(pHead.Count == 1 && pHead.per != NULL)
	{
		printf("当前只有 %d 个人物信息\n",pHead.Count);
		pTallest=pHead.per;
		printf("身高最高:\nNo.%-3d姓名:%-10s年龄:%-5d身高:%-5d\n",pHead.Count,pTallest->Name,pTallest->Age,pTallest->Height);
		return pTallest;
	}else if(pHead.Count > 1 && pHead.per != NULL)
	{
		pTallest = pHead.per;
		for(index = 1;index<pHead.Count;index++)
		{
			if(pTallest->Height < (pHead.per+index)->Height)
			{
				pTallest=(pHead.per+index);
				num = index+1;
			}
		}
		printf("身高最高:\nNo.%-3d姓名:%-10s年龄:%-5d身高:%-5d\n",num,pTallest->Name,pTallest->Age,pTallest->Height);
	}else
	{
		printf("当前储存的人物信息为 %d\n",pHead.Count);
		return NULL;
	}
	return pTallest;
}
/*
	功能:向指定的位置插入一个人物的信心
	参数1:储存空间的首地址
	返回值:void
*/
void InsertInfo_One(PList *pHead)
{
	Per perTmp;
	int index=0,insert=0;
	printf("请输入你要插入的位置:");
	scanf("%d",&insert);
	if(insert<=0)
	{
		printf("请输入正确的插入位置\n");
		return;
	}else if(insert == (pHead->Count+1))
	{
		printf("APPEND\n");
		AppendInfo_One(pHead);
		return;
	}else if(insert > (pHead->Count+1))
	{
		printf("当前的储存人数为%d,请按照顺序插入人物信息。\n",pHead->Count);
		return;
	}
	if(pHead->Len >= (pHead->Count+1))
	{
		for(index=pHead->Count;index>=0;index--)
		{
			if(index==(insert-1))
			{				
				printf("请输入个人信息:\n");
				printf("姓名:");
				scanf("%s",perTmp.Name);
				printf("年龄:");
				scanf("%d",&perTmp.Age);
				printf("身高:");
				scanf("%d",&perTmp.Height);
				*(pHead->per+index)=perTmp;
				break;
			}			
			*(pHead->per+index) = *(pHead->per+index-1);
		}
		pHead->Count += 1;
	}else
	{
		printf("当前储存空间已经满员\n");		
	}
}
/*
	功能:输出指定姓名的人物信息
	参数1:储存空间首地址
	参数2:指定的人物姓名
	返回值:这个人信息储存单元地址
*/
Per *OutInfoBy_Name(PList pHead,char *N)
{
	Per *ThisGuy=NULL;
	int index=0,index_of_ThisGuy=0;
	for(index=0;index<pHead.Count;index++)
	{
		if(0==strcmp(N,(pHead.per+index)->Name))
		{
			ThisGuy = (pHead.per+index);
			index_of_ThisGuy=index;
			printf("No.%-3d姓名:%-10s年龄:%-5d身高:%-5d\n",index_of_ThisGuy+1,ThisGuy->Name,ThisGuy->Age,ThisGuy->Height);
		}
	}
	if(index == pHead.Count && ThisGuy == NULL)
	{
		printf("未找到 %s 的个人信息\n",N);
	}
	
	N="";
	return ThisGuy;
}
/*
	功能:输出所有的人物信息清单
	参数1:储存空间首地址
	返回值:void
*/
void OutPutInfo_ALL(PList pHead)
{
	int index=0;
	if(pHead.Count > 0)
	{			
		for(index=0;index<pHead.Count;index++)
		{
			printf("No.%-3d姓名:%-10s年龄:%-5d身高:%-5d\n",index+1,(pHead.per+index)->Name,(pHead.per+index)->Age,(pHead.per+index)->Height);
		}
	}else
	{
		printf("暂时没有任何人信息储存,请选择其它操作\n");
		return;
	}
}
/*
	功能:显示操作菜单
*/
void showMenu()
{
	printf("================Menu========================\n");
	printf("	1------添加 1 个人物信息\n");
	printf("	2------添加 5 个人物信息\n");
	printf("	3------输出全部人物信息\n");
	printf("	4------输出指定姓名的那个人物信息\n");
	printf("	5------按照身高增序重新排列人物信息列表\n");
	printf("	6------交换指定的人物信息储存位置\n");
	printf("	7------删除指定姓名的那个人储存信息\n");
	printf("	8------删除所有的人物信息\n");
	printf("	9------获取身高最高的 1 个人的信息\n");
	printf("	10-----获取身高最矮的 1 个人的信息\n");
	printf("	11-----添加额外的两个储存空间\n");
	printf("	12-----查看当前储存信息:\n");
	printf("	13-----插入一个人物信息\n");
	printf("	0------退出系统,并释放储存空间\n");
	printf("============================================\n");
}
/*
	功能:按照身高增序重新排列人物信息列表
	参数1:储存单元空间首地址
	返回值:void
*/
void SortBy_Height(PList pHead)
{
	//Per tmpPer;
	int i=0,j=0;
	if(pHead.Count == 1 || pHead.Count == 0)
	{
		printf("类表中有人数:%d\n",pHead.Count);
		return;
	}
	for(i=0;i<pHead.Count-1;i++)
	{
		for(j=0;j<pHead.Count-i-1;j++)
		{
			if((pHead.per+j)->Height > (pHead.per+j+1)->Height)
			{
				SwapTwo_Info((pHead.per+j),(pHead.per+j+1));
				//tmpPer = *(pHead+j);
				//*(pHead+j) = *(pHead+j+1);
				//*(pHead+j+1) = tmpPer;
			}
		}		
	}
}
/*
	功能:交换指定的人物信息储存位置
	参数1:第一个人物的存储空间的首地址
	参数2:第二个人物的存储空间地址
	返回值:void
*/
void SwapTwo_Info(Per *p1,Per *p2)
{
	Per tmpPer;
	tmpPer = *p1;
	*p1=*p2;
	*p2 = tmpPer;
}

测试代码:

#include"ListMain.h"

int PersonNum=0;
int TotalSize=0;

int main(int argc, const char *argv[])
{
	//Per *pHead=NULL,
	//Per *pTallest,*pShortest;
	int OptNum=0;
	char SetName[20];
	//char *pChar=SetName;
	PList  pHead;
	
	if(InitPersonList(&pHead)==1)
	{
		printf("已经成功创建了5个长度的Person储存空间\n");
		//printf("%d %d\n",pHead.Count,pHead.Len);
	}else
	{
		printf("pHead == NULL \n");
		return 0;//
	}
	
	while(1)
	{
		showMenu();		
		printf("请选择您需要的操作编号:");
		scanf("%d",&OptNum);
		if(OptNum==0){break;}
		switch(OptNum)
		{
			case AppendOneInfo:
				 AppendInfo_One(&pHead);
				 break;
			case AddFiveInfo:
				 AddInfo_FIVE(&pHead);
				 break;
            case GetInfoTallest:
				 GetInfo_Tallest(pHead);
				 break;
			case GetInfoShortest:
				 GetInfo_Shortest(pHead);
				 break;
			case OutPutInfo:
				 OutPutInfo_ALL(pHead);
				 break;
			case OutInfoByName:
				 printf("请输入你要查询的人物姓名:");
				 scanf("%s",SetName);
				 OutInfoBy_Name(pHead,SetName);
				 break;
			case SortByHeight:
				 //2151655
				 SortBy_Height(pHead);
				 OutPutInfo_ALL(pHead);
				 break;
			case SwapTwoInfo:
				 printf("交换之前的储存顺序:\n");
				 OutPutInfo_ALL(pHead);
				 printf("交换之后的储存顺序:\n");
				 SwapTwo_Info(GetInfo_Tallest(pHead),GetInfo_Shortest(pHead));
				 OutPutInfo_ALL(pHead);
				 break;
			case DelAllInfo:
				 DelAll_Info(&pHead);
				 break;
			case DelByName:
				 printf("请输入你要删除的人物姓名:");
				 scanf("%s",SetName);
				 DelBy_Name(&pHead,SetName);
				 break;
			case AppendSize:
				 AppendSize_Two(&pHead);
				 break;
			case CheckStoreSize:
				 printf("当前总空间大小 %d; 剩余空间 %d 。\n",pHead.Len,CheckStore_Size(pHead));
				 break;
			case InsertOneInfo:
 				 InsertInfo_One(&pHead);
				 break;
			case EXIT:
				 Destory(pHead);
				 break;
			default:
				 printf("请重新输入正确的操作指令\n");
		}
	}

	return 0;
}

 

 

 

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

linuxC/C++单项链表实现学生信息管理 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)

    如果想了解Java内存模型参考 jvm内存模型 和内存分配以及jdk jre jvm是什么关系 阿里 美团 京东 相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题 有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制
  • 《C++ System Programming Cookbook》第一章读书笔记

    阅读书籍 C System Programming Cookbook 记录 使用docker linux 用户管理常见命令 adduser 创建用户 login 用户登录 passwd 修改用户密码 usermod a G 用户加入组 us
  • 【C语言-进阶】自定义类型详解(结构体+枚举+联合)

    结构体的声明与定义 s0 s1 s2都是struct Stu 的别名 即结构体的重命名 这种情况下就不可以在声明的同时定义变量了 sp spp都是sturct Stu类型的 n1为结构体声明的同时定义变量 在下面重新赋值时不能只写n1 还要
  • Jetson Nano中使用Darknet(AlexeyAB版本)运行YOLOV4

    之前几天使用了Darknet来跑YOLOV3 或多或少遇到了一些问题 一些问题也还没有解决 YOLOV3的作者呢之前宣布自己不再更新了 那么AlexeyAB就搞了YOLOV4的版本 接下来我们就尝试一下YOLOV4 安装Darknet Al
  • element UI 动态生成表头

    最近开始搞vue了 由于 element UI 中的 table 不能像 antd 里的 table 直接注入 json 字符串生成表头 这导致了不能轻松的通过后台生成表格 或是对表头进行排序 在网上参考找了一种最简易的方法 可以给表格里面
  • VS社区版离线试用到期解决办法

    很多朋友在学习工作中 有时需要离线安装VS2017 2019 而社区版 而社区版试用时间只有30天 到期后无法继续使用 下面教大家一种解决这个问题的办法 如下 1 下载离线授权文件 VS离线授权文件 1 开始 gt Visual Studi
  • 归并排序(递归)

    归并排序是通过递归的思想实现的排序算法 什么是递归呢 递归就是需要我们转变思想 思考将一个大事转变为一个个与原问题相似的小事 而我们需要对一个整型数组排序 应该怎样将排序整个数组这么大的规模转变为排序两个数这么小的规模呢 假设我们需要排序的
  • popwindow下拉筛选 二级联动_Excel技巧:一、二、三级联动下拉菜单制作方法分享...

    平时工作过程中 经常会用到Excel表格 关于表格数据处理还有一些小技巧的 掌握一个小技巧 可能对办公效率的提高起到很大的作用 表格中对常见的可能就是表格下拉菜单的设置了 比如说 性别 这一栏 如果每次填写都得重新输入的话 要是人数众多这工
  • vue 基于el-table实现多页多选/单选、翻页回显过程

    1 问题 表格可以多选 单选 分页的时候 表格数据能进行回显 type selection 可以设置表格进行多选 row key 指定数据的 Key 用来优化 Table 的渲染 select单选的事件 select all多选的事件 这两
  • 整数与IP地址间的转换Python

    data input split IP地址转整数 a b caozuo a append bin int i 2 rjust 8 0 for i in data for i in a b i ac int b 2 print ac data
  • SQL查询优化

    一 为什么要对SQL进行优化 我们开发项目上线初期 由于业务数据量相对较少 一些SQL的执行效率对程序运行效率的影响不太明显 而开发和运维人员也无法判断SQL对程序的运行效率有多大 故很少针对SQL进行专门的优化 而随着时间的积累 业务数据
  • AD20圆形PCB板铺铜(铜皮直径可小于板框直径)

    首先 板子是圆形的 可能会需要铺圆形的铜皮 1 画一个圆 选中后右键 选择铺铜操作 铺铜管理器 2 打开铺铜管理器后 选择来自新的 多边形 选择板外形 3 右侧选择layer以及net 设置铺铜相关的属性 4 若所铺圆形铜皮直径小于圆形板框
  • MongoDB保存与读取Numpy与Pandas格式的数据到一个数据格里

    对于Numpy格式的数据 保存时使用 Binary pickle dumps array protocol 2 其中array就是ndarry格式的数组 加载时使用 pickle loads result numpy 对于Pandas格式的
  • 动态规划问题——最长上升子序列(LIS)(二)

    原文转载自我的博客benym cn 推荐链接 动态规划问题 最长上升子序列 LIS 一 动态规划问题 最长上升子序列 LIS 三 题目描述 一天 小凯同学震惊的发现 自己无内的PM2 5指标是有规律的 小凯采样了PM2 5数值 发现PM2
  • Exception in thread “main“ org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obta

    问题描述 Exception in thread main org springframework jdbc CannotGetJdbcConnectionException Failed to obtain JDBC Connection
  • Prometheus、Node_Exporter、PushGateway的使用

    文章目录 一 prometheus server端部署prometheus 二 在被监控节点部署 node exporter 三 使用 PushGateway 进行数据上报采集 一 prometheus server端部署prometheu
  • android Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)

    在Android群里 经常会有人问我 Android Log是怎么用的 今天我就把从网上以及SDK里东拼西凑过来 让大家先一睹为快 希望对大家入门Android Log有一定的帮助 android util Log常用的方法有以下5个 Lo
  • VsCode开发工具的入门及基本使用

    VsCode开发工具的入门及基本使用 一 VsCode介绍 1 VsCode简介 2 VsCode特点 二 安装VsCode 1 下载VsCode 2 安装VsCode 3 打开VsCode 三 设置VsCode中文 1 搜索中文语言插件
  • 200 行代码实现基于 Paxos 的 KV 存储

    前言 写完 paxos 的直观解释 之后 网友都说疗效甚好 但是也会对这篇教程中一些环节提出疑问 有疑问说明真的看懂了 例如怎么把只能确定一个值的 paxos 应用到实际场景中 既然 Talk is cheap 那么就 Show me th
  • linuxC/C++单项链表实现学生信息管理

    操作界面 结构定义 typedef struct Pserson char Name 20 int Age int Height Per typedef struct List Per per int Count int Len PList