c++之通讯录管理系统

news2024/9/23 1:22:22

1,系统需求

通讯录是一个记录亲人,好友信息的工具

系统中需要实现的功能如下:

1,添加联系人:向通讯录中添加新人,信息包括(姓名,性别,年龄,联系电话,家庭住址)最多记录1000个人

2,显示联系人:显示通讯录中所有的联系人信息

3,删除联系人:按照姓名进行删除指定联系人

4,查找联系人:按照姓名查找指定联系人信息

5,修改联系人:按照名字重新修改指定联系人

6,清空联系人:清空通讯录所有信息

7,退出通讯录:退出当前使用的通讯录

2,创建项目

创建项目步骤如下:

打开软件

点击创建新项目

 

点击空项目和下一步 

在前两行包含头文件 

3,菜单功能

功能描述:用户选择功能的界面

步骤:创建函数void showMenu(),并在int 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;
	cout << endl;
}

int main()
{
	showMenu();
	system("pause");
	return 0;
}

结果显示: 

4,退出功能

功能描述:退出通讯录系统

思路:根据用户不同的选择,进入不同的功能,可以选择switch分支结构,将整个框架进行搭建

当前用户选择0的时候,执行退出,选择其他先不做操作,也不会退出程序

代码展示:

	int select = 0;//创建用户输入变量

	while (1)
	{
		//调用菜单
		showMenu();
		int select = 0;
		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");
			break;
		default:
			break;
		}
	}

	system("pause");
	return 0;
}

5,添加联系人

功能描述:实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名,性别,年龄,联系电话,家庭住址)

步骤:设计联系人结构体

          设计通讯录结构体

          main()函数中创建通讯录

          封装添加联系人函数

          测试添加联系人函数

5.1  设计联系人结构体

联系人信息包括(姓名,性别,年龄,联系电话,家庭住址)

设计如下:

#include<string>//头文件信息
//联系人结构体
struct Person
{
	string name;//姓名
	int m_sex;//性别
	int m_age;//年龄
	string m_phont;//电话
	string m_address;//住址
};

5.2  设计通讯录结构体

//通讯录结构体
struct Addressbooks
{
	struct Person personArray[MAX];//通讯录保存联系人信息
	int m_size;//通讯录中人员个数
};

5.3  main()函数中创建通讯录

Addressbooks abs;//创建通讯录变量

5.4   封装添加联系人函数

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 (1)
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				abs->personArray[abs->m_size].m_sex = sex;
				break;
			}
			cout << "输入有误,请重新输入" << endl;
		}
		abs->personArray[abs->m_size].m_sex = sex;

		//年龄
		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_address = address;

		//更新通讯录人数
		abs->m_size++;

		cout << "添加成功" << endl;

		system("pause");//按任意键继续
		system("cls");//清屏操作
	}
}

5.5  测试添加联系人函数

case 1://1,添加联系人
	addPerson(&abs);//利用地址传参,可以修饰实参
	break;

5.6 结果展示 

6,显示联系人

功能描述:显示通讯录已有的联系人信息

显示联系人实现步骤:

        *封存显示联系人函数

        *测试显示联系人功能

6.1 封存显示联系人函数

思路:判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录中信息

代码如下:

//显示联系人
void showPerson(Addressbooks* abs)
{
	//判断如果当前通讯录中没有人员,就提示记录为空
	//人数大于0,显示通讯录中信息
	if (abs->m_size == 0)
	{
		cout << "当前记录为空" << endl;
	}
	else
	{
		for (int i = 0; i < abs->m_size; i++)
		{
			cout << "姓名:" << abs->personArray[i].m_name << "\t";
			cout << "性别:" << abs->personArray[i].m_sex << "\t";
			cout << "年龄:" << abs->personArray[i].m_age << "\t";
			cout << "电话:" << abs->personArray[i].m_phone << "\t";
			cout << "地址:" << abs->personArray[i].m_address << endl;
		}
	}
	system("pause");//按任意键继续
	system("cls");//清屏操作
}
}

6.2 测试显示联系人功能

case 2://2, 显示联系人
	showPerson(&abs);
	break;

6.3 结果展示 

7,删除联系人

功能描述:按照姓名进行删除指定联系人

步骤:

7.1封装检测联系人是否存在

思路:删除联系人前,我们需要先判断用户输入的联系人是否存在,如果存在就删除,不存在则提示用户没有要删除的联系人

因此我们可以把检测联系人是否存在封装成一个函数,如果存在,返回联系人在通讯录中的位置,不存在则返回-1

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
	}
}
case 3://3,删除联系人
{
	cout << "请输入删除联系人的姓名:" << endl;
	string name;
	cin >> name;
	if (isExist(&abs, name) == -1)
	{
		cout << "查无此人" << endl;
	}
	else
	{
		cout << "找到此人" << endl;
	}
}

7.2封装删除联系人函数

void deletePerson(Addressbooks * abs, string name)
{
	int ret = isExist(abs, name);
	//ret==-1  未查到
	//ret != 1  查到了
	
	if (ret != -1)
	{
		//查到人,要进行删除操作
		for (int i = 0; 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.3测试删除联系人功能

case 3://3,删除联系人
{
	cout << "请输入删除联系人的姓名:" << endl;
	string name;
	cin >> name;
	if (isExist(&abs, name) == -1)
	{
		cout << "查无此人" << endl;
	}
	else
	{
		cout << "找到此人" << endl;
	}
	deletePerson(&abs, name); 
}

8,查找联系人

功能描述:按照姓名查找联系人信息

8.1封装查找联系人信息

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 == 1 ? "男" : "女") << "\t";
		cout << "年龄:" << abs->personArray[ret].m_age << "\t";
		cout << "电话:" << abs->personArray[ret].m_phone << "\t";
		cout << "地址:" << abs->personArray[ret].m_address << endl;
	}
	else 
	{
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

8.2 测试查找指定联系人

case 4://4,查找联系人
	findPerson(&abs);
	break;

 

9,修改联系人

功能描述:按照名字修改指定联系人

9.1 封装修改联系人函数

实现思路:查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人

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;
			}
			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_address = address;

		cout << "修改成功" << endl;
	}
	else
	{
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

9.2 测试修改联系人功能

case 5://5,修改联系人
	modifyPerson(&abs);
	break;

 

10,清空联系人

功能描述:

10.1 封存清空联系人函数

void cleanPerson(Addressbooks* abs)
{
	abs->m_size = 0;
	cout << "通讯录已经清空" << endl;
	system("pause");
	system("cls");
}

10.2 测试清空联系人功能

case 6://6,清空联系人
	cleanPerson(&abs);
	break;

 

11,整体实现

#include<iostream>
using namespace std;
#include<string>//头文件信息
#define MAX 1000

//联系人结构体
struct Person
{
	string m_name;//姓名
	int m_sex;//性别
	int m_age;//年龄
	string m_phone;//电话
	string m_address;//住址
};

//通讯录结构体
struct Addressbooks
{
	struct Person personArray[MAX];//通讯录保存联系人信息
	int m_size;//通讯录中人员个数
};

//菜单界面
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;
	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;
			}
			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_address = address;

		//更新通讯录人数
		abs->m_size++;

		cout << "添加成功" << endl;
	}
	system("pause");//按任意键继续
	system("cls");//清屏操作
}

//显示联系人
void showPerson(Addressbooks* abs)
{
	//判断如果当前通讯录中没有人员,就提示记录为空
	//人数大于0,显示通讯录中信息
	if (abs->m_size == 0)
	{
		cout << "当前记录为空" << endl;
	}
	else
	{
		for (int i = 0; i < abs->m_size; i++)
		{
			cout << "姓名:" << abs->personArray[i].m_name << "\t";
			cout << "性别:" << (abs->personArray[i].m_sex == 1 ? "男" : "女" )<< "\t";
			cout << "年龄:" << abs->personArray[i].m_age << "\t";
			cout << "电话:" << abs->personArray[i].m_phone << "\t";
			cout << "地址:" << abs->personArray[i].m_address << 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;//如果遍历结果都没有找到,则返回-1
	}
}

void deletePerson(Addressbooks * abs, string name)
{
	int ret = isExist(abs, name);
	//ret==-1  未查到
	//ret != 1  查到了
	
	if (ret != -1)
	{
		//查到人,要进行删除操作
		for (int i = 0; i < abs->m_size; i++)
		{
			//数据迁移
			//删除:就是将后面每个人的信息的位置替换前一个人的信息
			abs->personArray[i] = abs->personArray[i + 1];
		}
		abs->m_size--;
		cout << "删除成功" << endl;
	}
	else
	{
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

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 == 1 ? "男" : "女") << "\t";
		cout << "年龄:" << abs->personArray[ret].m_age << "\t";
		cout << "电话:" << abs->personArray[ret].m_phone << "\t";
		cout << "地址:" << abs->personArray[ret].m_address << endl;
	}
	else 
	{
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

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;
			}
			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_address = address;

		cout << "修改成功" << endl;
	}
	else
	{
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

void cleanPerson(Addressbooks* abs)
{
	abs->m_size = 0;
	cout << "通讯录已经清空" << endl;
	system("pause");
	system("cls");
}

int main()
{
	Addressbooks abs;//创建通讯录结构体变量
	abs.m_size = 0;//初始化当前人数个数

	int select = 0;//创建用户输入变量

	while (1)
	{
		//调用菜单
		showMenu();
		cout << "请输入:" << endl;
		int select = 0;
		cin >> select;

		switch (select)
		{
		case 1://1,添加联系人
			addPerson(&abs);//利用地址传参,可以修饰实参
			break;
		case 2://2, 显示联系人
			showPerson(&abs);
			break;
		case 3://3,删除联系人
		{
			cout << "请输入删除联系人的姓名:" << endl;
			string name;
			cin >> name;
			if (isExist(&abs, name) == -1)
			{
				cout << "查无此人" << endl;
			}
			else
			{
				cout << "找到此人" << endl;
			}
			deletePerson(&abs, name); 
		}
			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");
			break;
		default:
			break;
		}
	}

	system("pause");
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1487601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络-第2章 物理层

本章内容&#xff1a;物理层和数据通信的概念、传输媒体特点&#xff08;不属于物理层&#xff09;、信道复用、数字传输系统、宽带接入 2.1-2.2 物理层和数据通信的概念 物理层解决的问题&#xff1a;如何在传输媒体上传输数据比特流&#xff0c;屏蔽掉传输媒体和通信手段的差…

Java:三种代理模式示例

什么是代理模式&#xff1f; 代理&#xff08;Proxy&#xff09;是一种设计模式&#xff0c;为其他对象提供一种代理以控制对这个对象的访问。 代理模式的组成 抽象角色&#xff1a;通过接口或抽象类声明真实角色实现的业务方法。代理角色&#xff1a;实现抽象角色&#xff…

kibana自动补全功能失效的几个原因

文章目录 不能自动补全index&#xff1f;不能自动补全field&#xff1f; 不能自动补全index&#xff1f; 当用户在 kibana 的 Dev Tools 页面手写查询时&#xff0c;理应可以自动补全 index 的名称&#xff0c;如下图&#xff1a; 如果不能自动补全&#xff0c;则点击 Settin…

【网站项目】295演唱会购票系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

在线绘图利器:支持在线使用的电脑画图软件推荐!

计算机绘图软件是现代设计师和创作者必不可少的工具之一。伴随着技术的不断发展&#xff0c;越来越多的在线计算机绘图软件应运而生&#xff0c;为用户提供了更加便捷、高效的创作方法。对初学者而言&#xff0c;选择一款易于使用、功能强大的计算机绘图软件至关重要。本文将介…

Tomcat服务部署优化

目录 一.Tomcat的基本内容 1.概念 2.构成 &#xff08;1&#xff09;web容器 &#xff08;2&#xff09;servlet容器&#xff08;catalina&#xff09; &#xff08;3&#xff09;JSP容器 3.Tomcat顶层架构 &#xff08;1&#xff09;Tomcat中最顶层的容器是Server&…

DCFL: for Oriented Tiny Object Detection

文章目录 AbstractIntroductionContributionRelated Work定向目标检测微小目标检测多尺度学习标签分配上下文信息特征增强MethodOverview动态先验Coarse Prior MatchingFiner Dynamic Posterior MatchingAblation StudyAnalysis不平衡问题的调解可视化速度Conclusionhh 源代码 …

麒麟KYLINSOS服务器操作系统SP3安装

原文链接&#xff1a;安装麒麟服务器操作系统V10 SP3 在当今的IT环境中&#xff0c;内网仓库的部署对于确保网络安全、加快本地访问速度以及保持软件包的一致性至关重要。特别是对于企业和组织而言&#xff0c;内网仓库可以极大地提升工作效率和系统稳定性。今天&#xff0c;我…

ArmSoM Rockchip系列产品 通用教程 之 CAN 使用

CAN 使用 1. CAN 简介 CAN (controller Area Network)&#xff1a;控制器局域网络总线&#xff0c;是一种有效支持分布式控制或实时控制的串行通信网络。 目前世界上绝大多数汽车制造厂商都采用CAN总线来实现汽车内部控制系统之间的数据通信。 RK3568/RK3588的CAN驱动文件&a…

Effective objective-c-- 内存管理

Effective objective-c-- 内存管理 前言理解引用计数引用计数工作原理属性存取方法中的内存管理自动释放池保留环要点 以ARC简化引用计数使用ARC时必须遵循的方法和命名规则变量的内存管理语义ARC如何清理实例变量覆写内存管理方法要点 在dealloc方法中只释放引用并解除监听要点…

品牌与时间函数:在时间的长河中铸造品牌

品牌推广是一个与时间紧密相连的复杂过程。时间不仅是品牌推广的见证者&#xff0c;更是其推动者和塑造者。迅腾文化深刻理解品牌推广与时间之间的微妙关系&#xff0c;提出的“显”的原则&#xff0c;旨在通过巧妙的策略&#xff0c;使品牌在时间的流转中逐渐显现出其特别的魅…

Less is More: Generating Grounded Navigation Instructions from Landmarks

摘要 我们研究根据室内路线捕获的 360 图像自动生成导航指令。现有的生成器视觉基础较差&#xff0c;导致它们依赖语言先验并对物体产生幻觉。我们的 MARKY-MT5 系统通过关注视觉地标来解决这个问题&#xff1b;它包括第一级地标检测器和第二级生成器——多模式、多语言、多任…

基于springboot实现计算机类考研交流平台系统项目【项目源码+论文说明】

基于springboot实现计算机类考研交流平台系统演示 摘要 高校的大学生考研是继高校的高等教育更上一层的表现形式&#xff0c;教育的发展是我们社会的根本&#xff0c;那么信息技术的发展又是改变我们生活的重要因素&#xff0c;生活当中各种各样的场景都存在着信息技术的发展。…

U盘遇阻?解决“位置不可用”的困扰

U盘遇阻&#xff1a;当“位置不可用”成为难题 在数字化时代&#xff0c;U盘已成为我们存储和传输数据的重要工具。然而&#xff0c;当U盘突然提示“位置不可用”时&#xff0c;这无疑是一个令人头疼的问题。这不仅意味着我们无法访问存储在U盘中的文件&#xff0c;而且可能还…

PlantUML - 时序图

时序图主要内容 下面是一个简单的时序图&#xff0c;我们可以很容易并且美观的表达我们的交互流程&#xff0c;只需要在箭头的两边指定一个名字&#xff0c;加上描述即可&#xff1a; startuml bkloanapply -> bkloanapprove : request bkloanapprove --> bkloanapply :…

信息系统安全与对抗-作业2

目录 1、使用自己姓名拼音创建一个账户&#xff0c; 并使用命令和图形化查看 2、使用自己拼音打头字母创建一个隐藏账户 &#xff0c;并使用命令和图形化查看 3、使用命令启动 telnet 服务 4、使用命令打开防火墙 23 端口 5、熟悉LINUX系统&#xff0c;使用命令行创建用户…

排序(1)——直接插入排序+冒泡排序

目录 1 排序的概念及其应用 1.1 排序的概念 1.2 排序的应用 1.3 常见的排序算法 2 直接插入排序 2.1 基本思想 2.2 基本思路 2.3 代码实现 2.4 时间复杂度 3 冒泡排序&#xff08;回顾&#xff09; 3.1 思路分析 3.2 时间复杂度 4 比较 1 排序的概念及其应用 1.…

STP保护机制

1、BPDU保护: 为了保护边缘端口,因为当一个边缘端口收到一个BPDU时,会状变为非边缘端口,会参与生成树的计算,如果频繁的UP/DOWN,就使网络一直处于生成树的计算。 解决方法:在交换机的端口开启BPDU保护,当设置为BPDU保护的端口收到BPDU时,系统会将该端口变为down状态。…

网络安全: Kali Linux 使用 nmap 扫描目标主机

目录 一、实验 1.环境 2. Kali Linux (2024.1) 使用 namp 扫描目标主机 3.Kali Linux (2024.1)远程登录 Windows Server 4.Kali Linux (2024.1) 使用crunch字典工具 5.Kali Linux (2024.1)使用hydra密码工具 6.Kali Linux (2022.3) 通过SSH端口获取 Ubuntu 密码 二、问题…

蓝桥杯嵌入式2015年第六届省赛主观题解析

1 题目 2 解析 /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body********************************************************************…