【C++】通讯录管理系统

2023-11-18

1.系统功能介绍与展示

在这里插入图片描述
在这里插入图片描述

2.创建项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.菜单功能

在这里插入图片描述
代码:

//-封装函数显示该界面 如 void showMenu()
//-在main函数中调用封装好的函数
#include <iostream>
using namespace std;

//-菜单界面
void showMenu() {
	cout << "***************************" << endl;
	cout << "*****  1、添加联系人  *****" << endl;
	cout << "*****  2、显示联系人  *****" << endl;
	cout << "*****  3、删除联系人  *****" << endl;
	cout << "*****  4、查找联系人  *****" << endl;
	cout << "*****  5、修改联系人  *****" << endl;
	cout << "*****  6、清空联系人  *****" << endl;
	cout << "*****  0、退出通讯录  *****" << endl;
	cout << "***************************" << endl;
}

int main() {

	showMenu();//-菜单界面

	system("pause");
	return 0;
}

4.退出功能

在这里插入图片描述
代码:

#include <iostream>
using namespace std;

//-菜单界面
void showMenu() {
	cout << "***************************" << endl;
	cout << "*****  1、添加联系人  *****" << endl;
	cout << "*****  2、显示联系人  *****" << endl;
	cout << "*****  3、删除联系人  *****" << endl;
	cout << "*****  4、查找联系人  *****" << endl;
	cout << "*****  5、修改联系人  *****" << endl;
	cout << "*****  6、清空联系人  *****" << endl;
	cout << "*****  0、退出通讯录  *****" << endl;
	cout << "***************************" << 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;
}

结果
在这里插入图片描述

5.添加联系人-结构体设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.添加联系人-功能实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
tips:system("cls"); //cls 指的是 clean screen

6.显示联系人


代码:

void showPerson(Addressbooks& abs) { //2、显示联系人 函数定义
	//判断通讯录中人数是否为0,如果为0,提示记录为空
	//如果不为0,显示记录的联系人信息
	if (abs.m_Size == 0) {
		cout << "当前记录为空" << endl;
	}
	else {
		cout << "通讯录联系人信息列表:" << endl;
		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 << "\t" << endl;
		}
	}
	system("pause");
	system("cls");
}

7.删除联系人-检测联系人

在这里插入图片描述
代码:

//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
//参数1-abs 通讯录    参数2-name 对比姓名
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; //如果遍历结束的没有找到,返回-1
}

7.删除联系人-功能实现

在这里插入图片描述
在这里插入图片描述
关于赵六位置没了,它只能往后一位调用,后一位为0,原因如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
代码

void deletePerson(Addressbooks& abs) { //3、删除联系人 函数定义
	cout << "请输入联系人姓名:" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);//在通讯录里查找,并返回联系人下标编号
	if (ret == -1) {
		cout << "查无此人" << endl;
	}
	else {
		for (int i = ret; i < abs.m_Size; i++) {
			abs.personArray[i] = abs.personArray[i + 1];//结构体之间是支持=号直接赋值的
		}
		abs.m_Size--;
		cout << "删除成功" << endl;
	}
	system("pause");
	system("cls");//清屏
}

8.查找联系人

在这里插入图片描述
代码

void findPerson(Addressbooks& abs) { //4、查找联系人 函数定义
	cout << "请输入联系人姓名:" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if (ret == -1) {
		cout << "查无此人" << endl;
	}
	else {
		cout << "该联系人信息如下:" << endl;
		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 << "\t" << endl;
	}
	
	system("pause");
	system("cls");
}

9.修改联系人

在这里插入图片描述
代码:

void renewPerson(Addressbooks& abs) { //5、修改联系人 函数定义
	cout << "请输入联系人姓名:" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if (ret == -1) {
		cout << "查无此人" << endl;
	}
	else
	{
		cout << "正在修改该联系人信息..." << endl;
		//姓名
		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;
		while (true) {
			cin >> age;
			if (age > 0 && age < 150) {
				abs.personArray[ret].m_Age = age;
				break;
			}
			else {
				cout << "输入有误,请重新输入!" << endl;
			}
		}

		//联系电话
		cout << "请输入联系电话:" << endl;
		string phone = "";
		cin >> phone;
		abs.personArray[ret].m_Phone = phone;

		//家庭住址
		cout << "请输入家庭住址:" << endl;
		string address;
		cin >> address;
		abs.personArray[ret].m_Addr = address;

		cout << "修改完成" << endl;
	}

	system("pause");
	system("cls");
}

10.清空联系人

在这里插入图片描述
在这里插入图片描述
代码:

void cleanPerson(Addressbooks& abs) { //6、清空联系人 函数定义
	cout << "确定要清空所有联系人信息嘛?" << endl
		<< "1————确定清空" << endl
		<< "2————放弃清空" << endl;
	int flag = 0;
	while (true) {
		cin >> flag;
		if (flag != 1 && flag != 2) {
			cout << "请输入正确指令" << endl;
		}
		else if (flag == 1) {
			abs.m_Size = 0;
			cout << "通讯录已经清空" << endl;
			break;
		}
		else {
			cout << "通讯录放弃清空" << endl;
			break;
		}
	}
	system("pause");
	system("cls");
}

总代码

#include <iostream>
#include <string>
using namespace std;
#define MAX 1000//最大可存入联系人人数

//-菜单界面
void showMenu() {
	cout << "***************************" << endl;
	cout << "*****  1、添加联系人  *****" << endl;
	cout << "*****  2、显示联系人  *****" << endl;
	cout << "*****  3、删除联系人  *****" << endl;
	cout << "*****  4、查找联系人  *****" << endl;
	cout << "*****  5、修改联系人  *****" << endl;
	cout << "*****  6、清空联系人  *****" << endl;
	cout << "*****  0、退出通讯录  *****" << endl;
	cout << "***************************" << endl;
}

//设计联系人结构体
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);//1、添加联系人 函数声明
void showPerson(Addressbooks& abs);//2、显示联系人 函数声明
void deletePerson(Addressbooks& abs);//3、删除联系人 函数声明
void findPerson(Addressbooks& abs); //4、查找联系人 函数声明
void renewPerson(Addressbooks& abs); //5、修改联系人 函数声明
void cleanPerson(Addressbooks& abs); //6、清空联系人 函数声明

int main() {
	int select = 0;

	Addressbooks abs;//创建通讯录

	abs.m_Size = 0;//初始化通讯录中人数

	while (true) {
		showMenu();//-菜单界面

		cin >> select;//选择指令

		switch (select)
		{
		case 1://1、添加联系人
			addPerson(abs);
			break;
		case 2://2、显示联系人
			showPerson(abs);
			break;
		case 3://3、删除联系人
			deletePerson(abs);
			break;
		case 4://4、查找联系人
			findPerson(abs);
			break;
		case 5://5、修改联系人
			renewPerson(abs);
			break;
		case 6://6、清空联系人
			cleanPerson(abs);
			break;
		case 0://0、退出通讯录
			cout << "欢迎下次使用!" << endl;
			system("pause");
			return 0;
			break;
		default:
			break;
		}
	}

	system("pause");
	return 0;
}

void addPerson(Addressbooks& abs) { //1、添加联系人 函数定义
	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;
		while (true) {
			cin >> age;
			if (age > 0 && age < 150) {
				abs.personArray[abs.m_Size].m_Age = age;
				break;
			}
			else {
				cout << "输入有误,请重新输入!" << endl;
			}
		}

		//联系电话
		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 showPerson(Addressbooks& abs) { //2、显示联系人 函数定义
	//判断通讯录中人数是否为0,如果为0,提示记录为空
	//如果不为0,显示记录的联系人信息
	if (abs.m_Size == 0) {
		cout << "当前记录为空" << endl;
	}
	else {
		cout << "通讯录联系人信息列表:" << endl;
		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 << "\t" << endl;
		}
	}
	system("pause");
	system("cls");
}

//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
//参数1-abs 通讯录    参数2-name 对比姓名
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; //如果遍历结束的没有找到,返回-1
}

void deletePerson(Addressbooks& abs) { //3、删除联系人 函数定义
	cout << "请输入联系人姓名:" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if (ret == -1) {
		cout << "查无此人" << endl;
	}
	else {
		for (int i = ret; i < abs.m_Size; i++) {
			abs.personArray[i] = abs.personArray[i + 1];//结构体之间是支持=号直接赋值的
		}
		abs.m_Size--;
		cout << "删除成功" << endl;
	}
	system("pause");
	system("cls");
}

void findPerson(Addressbooks& abs) { //4、查找联系人 函数定义
	cout << "请输入联系人姓名:" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if (ret == -1) {
		cout << "查无此人" << endl;
	}
	else {
		cout << "该联系人信息如下:" << endl;
		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 << "\t" << endl;
	}
	
	system("pause");
	system("cls");
}

void renewPerson(Addressbooks& abs) { //5、修改联系人 函数定义
	cout << "请输入联系人姓名:" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if (ret == -1) {
		cout << "查无此人" << endl;
	}
	else
	{
		cout << "正在修改该联系人信息..." << endl;
		//姓名
		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;
		while (true) {
			cin >> age;
			if (age > 0 && age < 150) {
				abs.personArray[ret].m_Age = age;
				break;
			}
			else {
				cout << "输入有误,请重新输入!" << endl;
			}
		}

		//联系电话
		cout << "请输入联系电话:" << endl;
		string phone = "";
		cin >> phone;
		abs.personArray[ret].m_Phone = phone;

		//家庭住址
		cout << "请输入家庭住址:" << endl;
		string address;
		cin >> address;
		abs.personArray[ret].m_Addr = address;

		cout << "修改完成" << endl;
	}

	system("pause");
	system("cls");
}

void cleanPerson(Addressbooks& abs) { //6、清空联系人 函数定义
	cout << "确定要清空所有联系人信息嘛?" << endl
		<< "1————确定清空" << endl
		<< "2————放弃清空" << endl;
	int flag = 0;
	while (true) {
		cin >> flag;
		if (flag != 1 && flag != 2) {
			cout << "请输入正确指令" << endl;
		}
		else if (flag == 1) {
			abs.m_Size = 0;
			cout << "通讯录已经清空" << endl;
			break;
		}
		else {
			cout << "通讯录放弃清空" << endl;
			break;
		}
	}
	system("pause");
	system("cls");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++】通讯录管理系统 的相关文章

  • c++11 正则表达式比 python 慢

    嗨我想了解为什么以下代码使用正则表达式进行分割字符串分割 include
  • MVC Core IActionResult 含义

    什么是IActionResult 我尝试查看 MSDN 和其他网站 但需要通用 常见 易于理解的答案 MSDN IActionResult https learn microsoft com en us dotnet api microso
  • C++ 模板中的名称查找

    我有一些 C 代码 如果没有 fpermissive 选项 就无法再编译 这是我无法分享的专有代码 但我认为我已经能够提取一个简单的测试用例来演示该问题 这是 g 的输出 template eg cpp In instantiation o
  • gtest 和 gmock 有什么区别?

    我试图理解的目的google mock Google 的 C 模拟框架 https github com google googletest blob master googlemock README md 我已经与gtest较早 但我还是
  • 如何在 MFC 中调整对话框大小时移动控件?

    我已经在 MFC 中创建了对话框视图 从下图中可以清楚地看到 如滑块控件和编辑框等 当我调整对话框大小时 这些控件不会移动 在此输入图像描述 https i stack imgur com 7OxAK jpg 我想移动控件以适应对话框 但不
  • 将指针转换为浮点数?

    我有一个unsigned char 通常 这指向一块数据 但在某些情况下 指针就是数据 即 铸造一个int的价值unsigned char 指针 unsigned char intData unsigned char myInteger 反
  • 在桌面应用程序中,类库的连接字符串存储在哪里?我可以在app.config中使用吗?

    我是桌面应用程序开发的新手 目前正在使用分层架构 用户界面 DAL BLL 构建桌面应用程序 在 Web 开发中 我曾经将连接字符串存储在 web config 中 我的类库从那里访问它 请指导我在桌面应用程序中如何以及在何处存储 DAL
  • C++ 非类型参数包扩展

    我正在编写由单一类型参数化的模板函数 并且具有可变数量的相同类型 而不是不同类型 的参数 它应该检查第一个值是否在其余值中 我想这样写 include
  • 异步方法中的异常未被捕获

    下面的代码没有捕获我的OperationCancelEException 它是通过调用抛出的ct ThrowIfCancellationRequested public partial class TitleWindow Window IA
  • 将列表(对象)转换为列表(字符串)

    有没有办法转换List of Object to a List of String 在 c 或 vb net 中而不迭代所有项目 幕后迭代很好 我只想要简洁的代码 Update 最好的方法可能就是进行新的选择 myList Select f
  • 具有多重继承的类的 sizeof

    首先 我知道 sizeof 取决于机器和编译器的实现 我使用的是 Windows 8 1 x64 gcc 5 3 0 没有标志传递给编译器 我从大学讲座中得到了以下代码 include
  • C++ 私有静态成员变量

    此 C 代码在编译时产生链接器错误 A h class A public static void f private static std vector
  • 获取给定EntityType的导航属性

    我在用VS2010 EF4 0 需要如下功能 private string GetNaviProps Type entityType eg typeof Employee NorthwindEntities en new Northwind
  • 在 ncurses 中使用退格键

    我设置了一个简单的 ncurses 程序 它使用 getch 一次读取一个字符并将它们复制到缓冲区中 我遇到的问题是检测到按下退格键 这是相关代码 while buffer i c getch EOF i if c n break else
  • 简单的文档管理系统和API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 无法将方法组“Read”转换为非委托类型“bool”

    我正在尝试使用SqlDataReader检查条目是否存在 如果存在则返回ID 否则返回false 当我尝试编译时 出现错误 无法将方法组 Read 转换为非委托类型 bool 我一直在遵循在 VB 中找到的示例 但似乎翻译可能不正确 pri
  • Active Directory UserPrincipal.Current.GetGroups() 返回本地组而不是 Web 服务器上的组

    以下内容在我的本地开发盒上效果很好 但是 当我将其移动到网络服务器时 它失败了 甚至不会记录错误 public static List
  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • 使用 roslyn 扩展 C# 语法

    我试图在没有 else 情况的情况下实现 return if return value if 因为我只想在条件有效时返回或返回一个值 我知道 有if condition return or if condition return value
  • 如何将 Metro 应用部署到桌面?

    我正在尝试将我的 C 应用程序部署到我的 Windows 8 Metro 桌面 我可以在 bin 文件夹中看到部署的文件 但是当我尝试打开它们时 出现以下错误 该应用程序只能在 AppContainer 的上下文中运行 我检查了属性上下文菜

随机推荐

  • iOS编程基础-OC(七)-运行时系统

    该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 第7章 运行时系统 终于到了运行时这一章 让我们来一步一步揭开它神秘的面纱吧 OC拥有相当多的动态特性 这些特性在运行程序时发挥作用 而不是在编译或链接代码时发挥作用
  • 解决报错:Errorjava.lang.NullPointerException(no error message)

    解决报错 Error java lang NullPointerException no error message 一 分析原因 Android Studio经常出现dependencies或者configuing相关错误 这类错误出现的
  • python中!=是什么_python中!=的意思是什么

    python中 的意思是什么 发布时间 2020 07 14 15 09 19 来源 亿速云 阅读 208 作者 Leah python中 的意思是什么 很多新手对此不是很清楚 为了帮助大家解决这个难题 下面小编将为大家详细讲解 有这方面需
  • OD2022Q2算法题-补种未成活胡杨,输出最多的连续胡杨树数-PYTHON解法

    题目描述 近些年来 我国防沙治沙取得显著成果 某沙漠新种植N棵胡杨 编号1 N 排成一排 一个月后 有M棵胡杨未能成活 现可补种胡杨K棵 请问如何补种 只能补种 不能新种 可以得到最多的连续胡杨树 输入描述 N 总种植数量 1 lt N l
  • ImportError: cannot import name ‘dtensor‘ from ‘tensorflow.compat.v2.experimental‘报错

    一 错误分析 出现这个问题原因在于tensorflow和keras版本不匹配 keras的版本太高了 需要降低到和tensorflow版本一致 二 解决步骤 1 首先查看自己电脑的keras版本 pip show keras 上图中 我的t
  • 图书推荐管理系统Python,基于Django和协同过滤算法等实现

    一 介绍 图书推荐系统 图书管理系统 以Python作为开发语言 基于Django实现 使用协同过滤算法实现对登录用户的图书推荐 二 效果展示 三 演示视频 视频 代码 https www yuque com ziwu yygu3z gq5
  • 基于ESP8266的CMSIS-DAP调试器

    前言 前段时间用8266制作了一个STM32的下载器 可以进行远程下载固件 不过我们用STM32的时候 经常需要进行各种调试 这时候一个调试器就很重要了 于是我想到也许可以做一个无线调试器 本来我打算自己写一个的 不过在github发现居然
  • 1. docker镜像拉取报错:Error response from daemon: Get https://registry-1.docker.io/v2/

    倘若不配置镜像 拉取速度会很慢 因此就会报超时的错误 试了网上的几个镜像 好些都无法使用 其中配置了中科院的和阿里云的 但是只有阿里云的可以使用 并且下载速度很快 大概一两分钟的样子 解决方案 1 打开终端 输入以下命令 sudo vi e
  • centos7中docker启动报错

    root localhost systemctl status docker docker service Docker Application Container Engine Loaded loaded usr lib systemd
  • gtest单元测试框架介绍及简单使用

    Gtest介绍 Gtest是Google的一个开源框架 它主要用于写单元测试 检查真自己的程序是否符合预期行为 可在多个平台上使用 包括Linux Mac OS X Windows Cygwin和Symbian 它提供了丰富的断言 致命和非
  • Laravel blade 模板压缩、加速扩展 renatomarinho/Laravel-page-speed 介绍

    在Laravel框架中 使用renatomarinho laravel page speed 扩展可以将blade模板渲染的html网页进行压缩 优化 可以节省了网络带宽 使我们的网站具有更快的访问速度 扩展包的文档中说明 可以自动优化网站
  • monitor-single-one-docker-host

    参考 https github com vegasbrianc prometheus 在github上有人使用docker compose启动Grafana Prometheus监控单台Host的docker容器 1 下载项目 git cl
  • 根据Explain结果中的key_len判断MySQL联合索引中实际用到的索引字段

    一 数据表staff 现有数据表staff 字符集utf8 并创建有一些字段单独索引及组合索引index age birth salary包含三个字段 sf age tinyint DEFAULT NULL sf birthday date
  • 廉价的全闪存雷电 NAS 折腾笔记:NUC9 操作系统踩坑

    上一篇文章中 分享了关于低成本全闪存 NAS 的个人方案选择 本篇文章 来聊聊硬件相关部分 以及软件的基础配置部分 也聊聊雷电组网的踩坑之旅 写在前面 我使用的设备是 NUC9i5QNX 这台设备的硬件基础规格 可以在 Intel ARK
  • 2023年华为od机试 Java【刻录光盘备份】

    前言 python代码 链接 JavaScript代码 链接 题目 有一系列文件需要通过光盘备份 每张光盘的容量固定为500MB 文件的大小均为整数MB并且不超过500MB 文件不可拆分或分卷备份 需要确定最少需要多少张光盘来完成备份 输入
  • ngnix+lua+js埋点 实现自定义日志采集

    ngnix lua js埋点 实现自定义日志采集 1 收集数据的页面 js埋点 在想要手机数据的页面预先放一段js代码 当用户发生行为时 触发js方法 收集数据 发到后端 http 192 168 4 101 index html 这里的i
  • 在Windons子系统ubuntu中安装ssh(保姆级教程)

    1 什么是ssh SSH Secure Shell 是一种用于远程登录和安全文件传输的网络协议 SSH服务是在计算机上运行的服务程序 它允许用户通过网络安全地远程访问计算机并执行各种操作 以下是关于SSH服务的一些重要信息 远程登录 SSH
  • 流操作

    StreamReader 与 FileStream 的区别用法 有关StreamReader的内容参考http blog sina com cn s blog 796ffec50100te51 html StreamReader 旨在以一种
  • “互联网+”最可行的路径就是“社群+”

    互联网 最可行的路径就是 社群 36氪的朋友们 2016 04 05 17 04 文章摘要 商业正从物以类聚走向人以群分 编者按 本文作者 卢彦 原文来自微信公众号 互联网思维 ID webthinking 36 氪经授权转载 前不久阿里
  • 【C++】通讯录管理系统

    1 系统功能介绍与展示 2 创建项目 3 菜单功能 代码 封装函数显示该界面 如 void showMenu 在main函数中调用封装好的函数 include