c++学生信息管理系统

news2024/11/27 1:32:43

前言

c++课程作业–学生信息管理系统

原博客C++通讯录管理系统
https://www.csdn.net/tags/OtDagg2sODU2Ni1ibG9n.html

的基础上进行了一点修改。

学生信息管理系统

基本功能要求:

能使用文件的打开,关闭,读写等操作,实现
1.连续输入若干个学生信息(学号,姓名,电话号码),保存在文件中
2.可以从文件读出学生信息并显示在屏幕

可扩展功能:
1.输入学号,查找学生姓名,电话号码
2.输入姓名:查找电话号码
3.删除某个学生信息
4.修改学生电话号码
其他自定义的功能

代码

#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>
#include <cstdlib>
#include <cstdio>
#include <windows.h>
using namespace std;

/*学生数据元素*/
typedef struct {
	int num;		 //编号
	string name;     //姓名
	string phonenum; //电话

}ElemType;

/*链表*/
typedef struct Node {
	ElemType data;
	struct Node* next;
}Node, * LinkList;

/*函数声明列表*/
void Read_LinkList(LinkList& L);                         //读取信息
void Save_LinkList(const LinkList& L);                   //保存信息
void Init_LinkList(LinkList& L);                         //初始化链表
void Create_LinkList(LinkList& L);                       //添加学生信息 
void Delete_LinkList(LinkList& L);                       //删除学生信息 
void Query_LinkList(const LinkList& L);                  //查询
void Modify_LinkList(LinkList& L);                       //修改
void Print_LinkList(const LinkList& L);                  //显示
bool compare(const ElemType& t1, const ElemType& t2);    //定义sort函数的关系
void Sort_LinkList(LinkList& L);                         //排序
void Clear_LinkList(LinkList& L);                        //清空
void menu(LinkList& L);                                  //主控菜单

/*程序入口---主函数*/
int main()
{

	LinkList L;
	Init_LinkList(L);
	Read_LinkList(L);
	menu(L);
	return 0;
}

/*读取信息函数*/
void Read_LinkList(LinkList& L)
{
	Node* p = L;
	ifstream infile("infomation.txt", ios::in);
	int len = 0;
	infile >> len;
	ElemType tem;
	while (len--)
	{
		infile >> tem.num >> tem.name >> tem.phonenum ;
		Node* t = new Node;
		t->data = tem;
		t->next = NULL;
		p->next = t;
		p = p->next;
	}
	infile.close();
}

/*保存信息函数*/
void Save_LinkList(LinkList& L)
{
	Node* t = L, * cnt = L;
	ofstream outfile("infomation.txt", ios::out);
	int len = 0;
	while (cnt->next)
	{
		len++;
		cnt = cnt->next;
	}
	outfile << len << endl;
	while (t)
	{
		if (t != L)
			outfile << t->data.num << "\t" << t->data.name << "\t" << t->data.phonenum << endl;
		t = t->next;
	}
	outfile.close();
}

/*初始化链表函数*/
void Init_LinkList(LinkList& L)
{
	L = new Node;
	L->next = NULL;
}

/*添加学生信息函数*/
void Create_LinkList(LinkList& L)
{
	system("cls");
	cout << "\t\t\t**************添加学生信息***************" << endl;
	Node* t = L;
	int i = 1, flag = 1;
	while (t->next)
	{
		i++;
		t = t->next;
	}
	while (flag)
	{
		Node* p = new Node;
		cout<<"\t\t\t输入学生编号:"; 
		cin>>p-> data.num;
		cout << "\t\t\t输入姓名:";
		cin >> p->data.name;
		cout << "\t\t\t输入电话:";
		cin >> p->data.phonenum;

		p->next = NULL;
		t->next = p;
		t = t->next;
		Save_LinkList(L); //将改动保存至文件中
		cout << "\t\t\t添加成功!是否继续添加?(1 是 0 否)" << endl;
		cout << "\t\t\t请选择【0-1】:";
		cin >> flag;
	}
}

/*删除学生信息函数*/
void Delete_LinkList(LinkList& L)
{
	system("cls");
	cout << "\t\t\t**************删除学生信息***************" << endl;
	int sel = 0;
	Node* p = L, * t = NULL;
	ElemType tem;
	cout << "\t\t\t-----------------" << endl;
	cout << "\t\t\t1 按学号删除" << endl;
	cout << "\t\t\t2 按姓名删除" << endl;
	cout << "\t\t\t3 返回主菜单" << endl;
	cout << "\t\t\t-----------------" << endl;
	cout << "\t\t\t请选择【1-3】:";
	cin >> sel;
	while (sel < 1 || sel>3)
	{
		cout << "\t\t\t输入不合法,请重新选择【1-3】:";
		cin >> sel;
	}
	if (sel == 1)
	{
		int flag = 0;
		cout << "\t\t\t请输入待删除学生的编号:";
		cin >> tem.num;
		while (p->next)
		{
			t = p->next;
			if (t->data.num == tem.num)
			{
				cout << "\t\t\t待删除学生的信息如下:" << endl;
				cout<<"\t\t\t**************************************"<<endl; 
				cout << "\t\t\t学号\t" << "姓名\t" << "联系电话" << endl;
				cout << "\t\t\t" << t->data.num << "\t" << t->data.name << "\t" << t->data.phonenum << endl;
				cout<<"\t\t\t**************************************"<<endl;
				flag = 1;
				break;
			}
			p = p->next;
		}
		if (flag == 0) cout << "\t\t\t查无此人,无法删除!" << endl;
		else
		{
			cout << "\t\t\t确认删除?(1 是 0 否)" << endl;
			cout << "\t\t\t请选择【0-1】:";
			cin >> sel;
			while (sel < 0 || sel>1)
			{
				cout << "\t\t\t输入不合法,请重新选择【0-1】:";
				cin >> sel;
			}
			if (sel == 0);
			else if (sel == 1)
			{
				p->next = t->next;
				delete t;
				cout << "\t\t\t删除成功!" << endl;
				Save_LinkList(L); //改动保存至文件中
			}
		}
		cout << "\n\t\t\t";
		system("pause");
		Delete_LinkList(L);
	}
	else if (sel == 2)
	{
		int flag = 0;
		cout << "\t\t\t请输入待删学生的姓名:";
		cin >> tem.name;
		while (p->next)
		{
			t = p->next;
			if (t->data.name == tem.name)
			{
				cout << "\t\t\t待删除学生的信息如下:" << endl;
				cout<<"\t\t\t**************************************"<<endl;
				cout << "\t\t\t学号\t" << "姓名\t" << "联系电话" << endl;
				cout << "\t\t\t" << t->data.num << "\t" << t->data.name << "\t" << t->data.phonenum << endl;
				cout<<"\t\t\t**************************************"<<endl;
				flag = 1;
				break;
			}
			p = p->next;
		}
		if (flag == 0) cout << "\t\t\t查无此人,无法删除!" << endl;
		else
		{
			cout << "\t\t\t确认删除?(1 是 0 否)" << endl;
			cout << "\t\t\t请选择【0-1】:";
			cin >> sel;
			while (sel < 0 || sel>1)
			{
				cout << "\t\t\t输入不合法,请重新选择【0-1】:";
				cin >> sel;
			}
			if (sel == 0);
			else if (sel == 1)
			{
				p->next = t->next;
				delete t;
				cout << "\t\t\t删除成功!" << endl;
				Save_LinkList(L); //改动保存至文件中
			}
		}
		cout << "\n\t\t\t";
		system("pause");
		Delete_LinkList(L);
	}
	else if (sel == 3) return;
}

/*查询函数*/
void Query_LinkList(const LinkList& L)
{
	system("cls");
	cout << "\t\t\t**************查询功能***************" << endl;
	int sel = 0;
	Node* t = L;
	ElemType tem;
	cout << "\t\t\t-----------------" << endl;
	cout << "\t\t\t1 按学号查询" << endl;
	cout << "\t\t\t2 按姓名查询" << endl;
	cout << "\t\t\t3 返回主菜单" << endl;
	cout << "\t\t\t-----------------" << endl;
	cout << "\t\t\t请选择【1-3】:";
	cin >> sel;
	while (sel < 1 || sel>3)
	{
		cout << "\t\t\t输入不合法,请重新选择【1-3】:";
		cin >> sel;
	}
	if (sel == 1)
	{
		int flag = 0;
		cout << "\t\t\t请输入待查询学生的学号:";
		cin >> tem.num;
		while (t->next)
		{
			t = t->next;
			if (t->data.num == tem.num)
			{
				cout << "\t\t\t待查询学生信息如下:" << endl;
				cout<<"\t\t\t**************************************"<<endl;
				cout << "\t\t\t姓名\t" << "联系电话\t" << endl;
				cout << "\t\t\t" << t->data.name << "\t" << t->data.phonenum << endl;
				cout<<"\t\t\t**************************************"<<endl;
				flag = 1;
				break;
			}
		}
		if (flag == 0) cout << "\t\t\t查无此人!" << endl;
		cout << "\n\t\t\t";
		system("pause");
		Query_LinkList(L);
	}
	else if (sel == 2)
	{
		int flag = 0;
		cout << "\t\t\t请输入待查询学生的姓名:";
		cin >> tem.name;
		while (t->next)
		{
			t = t->next;
			if (t->data.name == tem.name)
			{
				cout << "\t\t\t待查询学生信息如下:" << endl;
				cout<<"\t\t\t**************************************"<<endl;
				cout << "\t\t\t联系电话" << endl;
				cout << "\t\t\t"<< t->data.phonenum<< endl;
				cout<<"\t\t\t**************************************"<<endl;
				flag = 1;
				break;
			}
		}
		if (flag == 0) cout << "\t\t\t查无此人!" << endl;
		cout << "\n\t\t\t";
		system("pause");
		Query_LinkList(L);
	}
	else if (sel == 3)
	{
		return;
	}
}

/*修改学生信息函数*/
void Modify_LinkList(LinkList& L)
{
	system("cls");
	cout << "\t\t\t**************修改学生信息***************" << endl;
	int sel = 0;
	Node* t = L;
	ElemType tem;
	cout << "\t\t\t-----------------" << endl;
	cout << "\t\t\t1 按学号修改" << endl;
	cout << "\t\t\t2 按姓名修改" << endl;
	cout << "\t\t\t3 返回主菜单" << endl;
	cout << "\t\t\t-----------------" << endl;
	cout << "\t\t\t请选择【1-3】:";
	cin >> sel;
	while (sel < 1 || sel>3)
	{
		cout << "\t\t\t输入不合法,请重新输入【1-3】:";
		cin >> sel;
	}
	if (sel == 1)
	{
		int flag = 0;
		cout << "\t\t\t请输入待修改学生的学号:";
		cin >> tem.num;
		while (t->next)
		{
			t = t->next;
			if (t->data.num == tem.num)
			{
				cout << "\t\t\t待修改学生信息如下:" << endl;
				cout<<"\t\t\t**************************************"<<endl;
				cout << "\t\t\t学号\t" << "姓名\t" << "联系电话\t"<< endl;
				cout << "\t\t\t" << t->data.num << "\t" << t->data.name << "\t" << t->data.phonenum << endl;
				cout<<"\t\t\t**************************************"<<endl;
				flag = 1;
				break;
			}
		}
		if (flag == 0) cout << "\t\t\t查无此人,无法修改!" << endl;
		else
		{
			ElemType tem;
			cout << "\t\t\t输入要修改的信息:" << endl;
//			cout << "\t\t\t输入姓名:";
//			cin >> tem.name;
			cout << "\t\t\t输入新的【电话】:";
			cin >> tem.phonenum;
			
			tem.num = t->data.num;
			tem.name=t->data.name;
			cout << "\t\t\t确认修改?(1 是 0 否)" << endl;
			cout << "\t\t\t请选择【0-1】:";
			cin >> sel;
			while (sel < 0 || sel>1)
			{
				cout << "\t\t\t输入不合法,请重新选择【0-1】:";
				cin >> sel;
			}
			if (sel == 0);
			else if (sel == 1)
			{
				t->data = tem;
				cout << "\t\t\t修改成功!" << endl;
				Save_LinkList(L); //将改动保存至文件中
			}
		}
		cout << "\n\t\t\t";
		system("pause");
		Modify_LinkList(L);
	}
	else if (sel == 2)
	{
		int flag = 0;
		cout << "\t\t\t请输入待修改学生的姓名:";
		cin >> tem.name;
		while (t->next)
		{
			t = t->next;
			if (t->data.name == tem.name)
			{
				cout << "\t\t\t待修改学生的信息如下:" << endl;
				cout<<"\t\t\t**************************************"<<endl;
				cout << "\t\t\t学号\t" << "姓名\t" << "联系电话"<< endl;
				cout << "\t\t\t" << t->data.num << "\t" << t->data.name << "\t" << t->data.phonenum << endl;
				cout<<"\t\t\t**************************************"<<endl;
				flag = 1;
				break;
			}
		}
		if (flag == 0) cout << "\t\t\t查无此人,无法修改!" << endl;
		else
		{
			ElemType tem;
			cout << "\t\t\t输入修改后的学生信息:" << endl;
//			cout << "\t\t\t输入姓名:";
//			cin >> tem.name;
			cout << "\t\t\t输入新的【电话】:";
			cin >> tem.phonenum;
			
			tem.num = t->data.num;
			tem.name=t->data.name;
			cout << "\t\t\t确认修改?(1 是 0 否)" << endl;
			cout << "\t\t\t请选择【0-1】:";
			cin >> sel;
			while (sel < 0 || sel>1)
			{
				cout << "\t\t\t输入不合法,请重新选择【0-1】:";
				cin >> sel;
			}
			if (sel == 0);
			else if (sel == 1)
			{
				t->data = tem;
				cout << "\t\t\t修改成功!" << endl;
				Save_LinkList(L); //将改动保存至文件中
			}
		}
		cout << "\n\t\t\t";
		system("pause");
		Delete_LinkList(L);
	}
	else if (sel == 3) return;
}

/*学生信息显示函数*/
void Print_LinkList(const LinkList& L)
{
	system("cls");
	cout << "\t\t\t***************学生信息***************" << endl;
	Node* t = L->next;
	cout << "\t\t\t-----------------------------------------------------" << endl;
	cout << "\t\t\t学号\t" << "姓名\t" << "联系电话" << endl;
	cout << "\t\t\t-----------------------------------------------------" << endl;
	while (t)
	{
		cout << "\t\t\t" << t->data.num << "\t" << t->data.name << "\t" << t->data.phonenum<< endl;
		t = t->next;
	}
	cout << "\t\t\t-----------------------------------------------------" << endl;
	cout << "\t\t\t";
	system("pause");
}

/*排序函数中sort函数的第三个参数*/
bool compare(const ElemType& t1, const ElemType& t2)
{
	return t1.num < t2.num;
}

/*排序函数*/
void Sort_LinkList(LinkList& L)
{
	system("cls");
	cout << "\t\t\t***************排序功能***************" << endl;
	Node* p = L;
	int cnt = 0, i = 0;
	while (p->next)
	{
		p = p->next;
		cnt++;
	}
	ElemType* arr = new ElemType[cnt];
	p = L;
	while (p->next)
	{
		p = p->next;
		arr[i++] = p->data;
	}
	sort(arr, arr + cnt, compare);
	p = L, i = 0;
	while (p->next)
	{
		p = p->next;
		p->data = arr[i++];
//		p->data.num = i;
	}
	cout << "\t\t\t对学生信息进行(学号)排序并整理如下:" << endl;
	Node* t = L->next;
	cout << "\t\t\t-----------------------------------------------------" << endl;
	cout << "\t\t\t学号\t" << "姓名\t" << "联系电话" << endl;
	cout << "\t\t\t-----------------------------------------------------" << endl;
	while (t)
	{
		cout << "\t\t\t" << t->data.num << "\t" << t->data.name << "\t" << t->data.phonenum << endl;
		t = t->next;
	}
	cout << "\t\t\t-----------------------------------------------------" << endl;
	Save_LinkList(L); //改动保存至文件中
	cout << "\t\t\t";
	system("pause");
}

/*清空函数*/
void Clear_LinkList(LinkList& L)
{
	int sel = 0;
	system("cls");
	cout << "\t\t\t**************清空功能(请谨慎选择)*************" << endl;
	cout << "\t\t\t-----------------" << endl;
	cout << "\t\t\t1 确认清空学生信息" << endl;
	cout << "\t\t\t2 返回主菜单" << endl;
	cout << "\t\t\t-----------------" << endl;
	cout << "\t\t\t请慎重选择【1-2】:";
	cin >> sel;
	while (sel < 1 || sel>2)
	{
		cout << "\t\t\t输入不合法,请重新输入【1-2】:";
		cin >> sel;
	}
	if (sel == 1)
	{
		Node* head = L;
		if (head == NULL)
		{
			return;
		}
		//清空链表,是不清空头节点的,因此从第一个有数据的节点开始释放
		Node* curNode = head->next;
		while (curNode != NULL)
		{
			//先保住下一个节点的位置
			Node* nextNode = curNode->next;
			free(curNode);
			curNode = nextNode;
		}
		//将头结点next指针置空
		head->next = NULL;
		Save_LinkList(L);
		cout << "\n\t\t\t";
		system("pause");
	}
	else if (sel == 2) return;
}

/*主控菜单函数*/
void menu(LinkList& L)
{
	char sel;
	system("cls");
	cout << "\t\t\t***********欢迎来到学生信息管理系统***********" << endl;
	cout << "\t\t\t你可以进行以下操作:" << endl;
	cout << "\t\t\t|------------------------------------------|" << endl;
	cout << "\t\t\t|             1   添加学生信息             |" << endl;
	cout << "\t\t\t|------------------------------------------|" << endl;
	cout << "\t\t\t|             2   删除学生信息             |" << endl;
	cout << "\t\t\t|------------------------------------------|" << endl;
	cout << "\t\t\t|             3   修改学生信息             |" << endl;
	cout << "\t\t\t|------------------------------------------|" << endl;
	cout << "\t\t\t|             4   查询学生信息             |" << endl;
	cout << "\t\t\t|------------------------------------------|" << endl;
	cout << "\t\t\t|             5   显示所有学生             |" << endl;
	cout << "\t\t\t|------------------------------------------|" << endl;
	cout << "\t\t\t|             6   排序                     |" << endl;
	cout << "\t\t\t|------------------------------------------|" << endl;
	cout << "\t\t\t|             7   清空(慎选)             |" << endl;
	cout << "\t\t\t|------------------------------------------|" << endl;
	cout << "\t\t\t|             0   退出                     |" << endl;
	cout << "\t\t\t|------------------------------------------|" << endl;
	cout << "\t\t\t请选择【0-7】:";
	cin >> sel;
	while (sel < '0' || sel>'7')
	{
		cout << "\t\t\t输入非法,请重新选择【0-7】:";
		cin >> sel;
	}
	switch (sel)
	{
	case '1':
		Create_LinkList(L);
		menu(L);
		break;
	case '2':
		Delete_LinkList(L);
		menu(L);
		break;
	case '3':
		Modify_LinkList(L);
		menu(L);
		break;
	case '4':
		Query_LinkList(L);
		menu(L);
		break;
	case '5':
		Print_LinkList(L);
		menu(L);
		break;
	case '6':
		Sort_LinkList(L);
		menu(L);
		break;
	case '7':
		Clear_LinkList(L);
		menu(L);
		break;
	case '0':
		exit(0);
	default:
		menu(L);
	}
}

在原理播客-通讯录系统上进行一些小修改,使之成为学生信息管理系统

运行结果

菜单页面
在这里插入图片描述
操作一:显示所有学生
在这里插入图片描述
操作二:添加学生信息
在这里插入图片描述
查看是否成功
在这里插入图片描述
进入txt文件查看
在这里插入图片描述

操作三:删除学号为1001的学生
在这里插入图片描述

菜单【5】查看
在这里插入图片描述

查看txt文件
在这里插入图片描述

操作四:修改 1002 的号码
在这里插入图片描述
操作五:排序

在这里插入图片描述
after

操作六:查询信息
在这里插入图片描述

操作七:清空
在这里插入图片描述
注:代码在dev运行生成.exe文件 可能会有小伙伴运行没有生成.txt文件的(与代码和cpp文件在同一文件下 建议给一个单独的文件夹以免找不到txt文件)没生成可以换个方法试试,顺便说一下 这是全部的代码了,复制黏贴运行即可。

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

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

相关文章

STM32单片机(六)TIM定时器 -> 第八节:TIM编码器练习(编码器接口测速)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

Linux学习入门笔记

计算机硬件 计算机五大基本部件 控制器 -----> 协调各个部件运算器 -----> 算术、逻辑运算存储单元 ----->内存、外存输入单元输出单元 cup 由控制器、运算器组成 计算机操作系统 操作系统 OS 管理和控制计算机系统中的硬件和软件资源&#xff0c;用于在用户与系统…

gitLens插件简单使用

1.安装 在vscode中的插件管理输入如下后下载 GitLens — Git supercharged 2.配置 点击文件--首选项--设置 点击右上角设置小图标 3.github使用 首先仓库文件一定是要git init是git所管理的 1.在代码文件夹下使用git init创建仓库 2.打开vscode的git管理 3.点击添加暂存区…

Triton教程 --- 优化

Triton教程 — 优化 文章目录 Triton教程 --- 优化优化设置动态批处理程序模型实例 特定于框架的优化带有 TensorRT 优化的 ONNX (ORT-TRT)具有 OpenVINO 优化的 ONNXTensorFlow 与 TensorRT 优化 (TF-TRT)TensorFlow JIT 图优化TensorFlow 自动 FP16 优化 NUMA优化主机策略 Tr…

python找出所有重复数字的三位数(如110)注意重复数字(如111除外) ​要求打印所有满足条件的三位数及个数,每行打印五个

一、编程题目 python找出所有重复数字的三位数&#xff08;如110&#xff09;注意重复数字&#xff08;如111除外&#xff09; ​要求打印所有满足条件的三位数及个数&#xff0c;每行打印五个。 二、实现思路 要实现判断数字是否重复&#xff0c;脑袋里的第一反应就是使用循环…

在办公套件 ONLYOFFICE 中使用 AI 插件:自动生成文本/图片、单词释义、翻译等

想必大家多少都体验过各种人工智能应用&#xff0c;它们跟办公套件结合简直就是打工人和学生们的王炸。除了在Office全家桶中可以使用AI插件&#xff0c;在开源办公套件 ONLYOFFICE 中也能使用它。 什么是 ONLYOFFICE ONLYOFFICE 是一个开源办公套件&#xff0c;由总部位于总部…

OpenMMLab-AI实战营第二期-课程笔记-Class 4:深度学习预训练与MMPretrain

Class4&#xff1a;深度学习预训练与MMPretrain 课程链接&#xff1a;深度学习预训练与MMPretrain_哔哩哔哩_bilibili 相关repo&#xff1a;open-mmlab/mmpretrain: OpenMMLab Pre-training Toolbox and Benchmark (github.com) 文章目录 Class4&#xff1a;深度学习预训练与MM…

系统工程 - 记录一次调试USB设备低功耗应用的过程

系统工程 - 记录一次调试USB设备低功耗应用的过程 文章目录 系统工程 - 记录一次调试USB设备低功耗应用的过程需求功耗测量方法分析功耗来源LED功耗MCU功耗板子漏电 软件改善功耗调整tinyusb协议栈源码降低主频电脑唤醒usb设备退出低功耗进入STOP模式 总结 需求 最近在同客户做…

【Python 随练】寻找完数

题目&#xff1a; 一个数如果恰好等于它的因子之和&#xff0c;这个数就称为"完数"。例如 61&#xff0b;2&#xff0b;3.编程找出 1000 以内的所有完数。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个数学问题&#xff1a;如何找出 1000 以内的所有…

Stable diffusion WebUI txt2img使用教学

本篇文章将深入探讨如何在Stable Diffusion WebUI上进行各项参数的调整。将以txt2img为主要讨论对象&#xff0c;探讨诸如基本设定Sampling method以及CFG scale等参数的调整&#xff0c;以及这些参数之间的相互影响。 对于还未安装Stable Diffusion WebUI的小伙伴&#xff0c…

httpd的安装和mysql数据库的安装方法

目录 一 安装httpd 1.下载httpd包模块apr和apr-u到opt目录 2. 解包 3. 把apr和apr-u包放在http的第三方模块scrilb目录中 4.进入httpd包的安装目录并安装依赖环境和进行编译安装 5. make -j 2 && make install 编译并安装 6.优化配置文件 7. 把httpd服务放在sy…

智能文档图像处理技术:解决大数据时代文档图像处理难题

智能文档图像处理技术&#xff1a;解决大数据时代文档图像处理难题 0. 前言1. 智能文档处理1.1 智能文档处理简介1.2 智能文档处理应用 2. VALSE 视觉与学习青年学者研讨会2.1 VALSE 20232.2 合合信息亮相 VALSE 2023 3. 版面分析技术3.1 版面分析3.2 文档还原 4. 其他相关智能…

Gamma:强大的AI制作PPT神器,用完再也回不去了!

看过许多 AI 制作 PPT 软件&#xff0c;最终还是被 Gamma 惊艳到。 Gamma 是一款基于人工智能技术的 PPT 制作工具&#xff0c;可以帮助用户轻松制作高质量的 PPT 演示文稿。 痛点解决 相比传统制作 PPT 方式&#xff0c;Gamma 可以解决哪些如下 7 个痛点&#xff1a; 一句话…

2016年全国硕士研究生入学统一考试管理类专业学位联考写作试题

2016年1月真题&#xff1a; 四、写作&#xff1a;第56~57小题&#xff0c;共65 分。其中论证有效性分析30 分&#xff0c;论说文35分。 56、论证有效性分析&#xff1a; 分析下述论证中存在的缺陷和漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0…

2013年全国硕士研究生入学统一考试管理类专业学位联考写作试题

2013年1月真题: 四、写作:第 56~57小题&#xff0c;共65分。其中论证有效性分析30 分&#xff0c;论说文35 分。 56、论证有效性分析: 分析下述论证中存在的缺陷和漏洞&#xff0c;选择若干要点&#xff0c;写一篇600 字左右的文章&#xff0c;对该论证的有效性进行分析和评论…

Golang每日一练(leetDay0102) 删除无效的括号、累加数

目录 301. 删除无效的括号 Remove Invalid Parentheses &#x1f31f;&#x1f31f;&#x1f31f; 306. 累加数 Additive Number &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏…

使用mpi并行技术实现wordcount算法

【问题描述】 编写程序统计一个英文文本文件中每个单词的出现次数&#xff08;词频统计&#xff09;&#xff0c;并将统计结果按单词字典序输出到屏幕上。 注&#xff1a;在此单词为仅由字母组成的字符序列。包含大写字母的单词应将大写字母转换为小写字母后统计。 【输入形…

iPhone手机用户们在用的手机桌面便签推荐哪款?

iPhone手机的性能和外观设计是非常好的&#xff0c;很多人在工作和生活中都少不了它的辅助。有人在工作生活中担心会忘掉一些重要的事&#xff0c;在这种情况下可以用便签软件来帮自己把这些重要的事情记录下来。iPhone手机用户们在用的手机桌面便签推荐哪款&#xff1f; 其实…

加密与解密 调试篇 静态分析技术 (一)文件类型/窗口/定位

1.文件类型分析 逆向分析的第一步就是文件类型分析 文件使用什么写的 使用什么编译器编译的 是否被加密过 然后才能进入下一步 有很多工具可以进行分析 我选择exeinfo来查看 但是并不是工具就可以直接分析完成 因为有些会存在欺骗 把入口代码改造成和Visual C 6.0类似的…

04-闭包

闭包&#xff1a;函数嵌套函数&#xff0c;内部函数就是闭包&#xff0c;只有函数内部的子函数才能读取内部变量。 先上一个经典的闭包&#xff1a; function outerFun () {let a 10;function innerFun () {console.log(a);}return innerFun; } let fun outerFun(); fun();…