主頁 >  其他 > 黑馬程式員C++ 教程從0到1入門--c++編程實體 基于多型的職工管理系統

黑馬程式員C++ 教程從0到1入門--c++編程實體 基于多型的職工管理系統

2021-12-21 07:31:54 其他

黑馬程式員C++ 教程從0到1入門–c++編程實體 基于多型的職工管理系統

1.先來看一下程式的主體架構:

在這里插入圖片描述

第一個紅色框是頭檔案,分別是boss.h 、employee.h、manager.h、worker.h和workermanager.h,

2.程式類圖關系展示:

在這五個頭檔案當中依次是定義本次系統所需要的Class類,他們的組成關系類圖是第三紅色框標出的,如下圖:
在這里插入圖片描述

首先,創建worker的基類(父類),然后依次創建派生類(子類):boss、employee、manager類,主要方法已在圖片中顯示出來了,

3.頭檔案代碼示例

我們先看代碼:

worker.h代碼:

#pragma once
#include <iostream>
using namespace std;
#include <string>

//職工抽象類
class Worker
{
public:

	//顯示個人資訊
	virtual void showInfo() = 0;

	//獲取崗位名稱
	virtual string getDeptName() = 0;

	//職工編號
	int m_id;
	//職工姓名
	string m_name;
	//部門編號
	int m_number;
};

boss.h代碼

#pragma once
#include <iostream>
using namespace std;
#include "worker.h"

//老板類
class Boss :public Worker
{
public:

	//建構式
	Boss(int id, string name, int did);

	//顯示個人資訊
	virtual void showInfo();

	//獲取崗位名稱
	virtual string getDeptName();

};

employee.h代碼:

//普通員工檔案
#pragma once
#include <iostream>
using namespace std;
#include "worker.h"

class Employee :public Worker
{
public:

	//建構式
	Employee(int id, string name, int did);

	//顯示個人資訊
	virtual void showInfo();

	//獲取崗位名稱
	virtual string getDeptName();

};

manager.h代碼:

#pragma once
#include <iostream>
using namespace std;
#include "worker.h"

//經理類
class Manager :public Worker
{
public:

	//建構式
	Manager(int id, string name, int did);

	//顯示個人資訊
	virtual void showInfo();

	//獲取崗位名稱
	virtual string getDeptName();

};

workermanager.h代碼:

#pragma once // 防止頭檔案重復包含
#include <iostream>  //包含輸入輸出流頭檔案
using namespace std; //使用標準命名空間
#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"

#include <fstream>
#define FILENAME "empFile.txt"

class WorkerManager
{
public:

	//建構式
	WorkerManager();

	//展示選單
	void Show_Menu();

	//退出系統
	void ExitSystem();


	//記錄職工人數
	int m_EmpNum;

	//職工陣列指標
	Worker** m_EmpArray;

	//添加職工
	void Add_Emp();

	//保存檔案
	void save();

	//判斷檔案是否為空 標志
	bool m_FileIsEmpty;

	//統計檔案中人數
	int get_EmpNum();

	//初始化員工
	void init_Emp();

	//顯示職工
	void Show_Emp();

	//洗掉職工
	void Del_Emp();

	//判斷職工是否存在  如果存在回傳職工所在陣列中的位置,不存在回傳-1
	int IsExist(int id);

	//修改職工
	void Mod_Emp();

	//查找職工
	void Find_Emp();

	//按照編號排序
	void Sort_Emp();

	//清空檔案
	void Clean_File();

	//解構式
	~WorkerManager();

};

4.主要函式(方法)cpp代碼展示

其次,依據頭檔案寫出派生類特有的方法:

boss.cpp代碼:

#include "boss.h"

//建構式
Boss::Boss(int id, string name, int dId)
{
	this->m_id = id;
	this->m_name = name;
	this->m_number = dId;
}

//顯示個人資訊
void Boss::showInfo()
{
	cout << "職工編號: " << this->m_id
		<< "\t職工姓名: " << this->m_name
		<< "\t崗位: " << this->getDeptName()
		<< "\t崗位職責: 管理公司所有事務" << endl;
}

//獲取崗位名稱
string Boss::getDeptName()
{
	return  string("總裁");
}

employee.cpp代碼:

#include "employee.h"

//建構式
Employee::Employee(int id, string name, int dId)
{
	this->m_id = id;
	this->m_name = name;
	this->m_number = dId;
}

//顯示個人資訊
void Employee::showInfo()
{
	cout << "職工編號: " << this->m_id
		<< "\t職工姓名: " << this->m_name
		<< "\t崗位: " << this->getDeptName()
		<< "\t崗位職責: 完成經理交給的任務" << endl;
}

//獲取崗位名稱
string Employee::getDeptName()
{
	return  string("員工");
}

manager.cpp代碼:

#include "manager.h"

//建構式
Manager::Manager(int id, string name, int did)
{
	this->m_id = id;
	this->m_name = name;
	this->m_number = did;
}

//顯示個人資訊
void Manager::showInfo()
{
	cout << "職工編號: " << this->m_id
		<< "\t職工姓名: " << this->m_name
		<< "\t崗位: " << this->getDeptName()
		<< "\t崗位職責: 完成老板交給的任務,并下發任務給員工" << endl;
}

//獲取崗位名稱
string Manager::getDeptName()
{
	return  string("經理");
}

5.程式整體方法寫入代碼展示:

最后,最重要的系統整體方法寫入,在workerManager.cpp檔案中:

workerManager.cpp

#include"workermanager.h"

WorkerManager::WorkerManager()
{

	//三種情況初始化
	//1.檔案不存在
	ifstream ifs;
	ifs.open(FILENAME, ios::in);//讀檔案

	if (!ifs.is_open())
	{
		cout << "檔案不存在" << endl;
		//初始化屬性
		//初始化記錄人數
		this->m_EmpNum = 0;
		//初始化陣列指標
		this->m_EmpArray = NULL;
		//初始化檔案為空
		this->m_FileIsEmpty = true;
		ifs.close();
		return;
	}

	//2、檔案存在 資料為空
	char ch;
	ifs >> ch;
	if (ifs.eof())
	{
		//代表檔案為空
		cout << "檔案存在,資料為空" << endl;
		//初始化記錄人數
		this->m_EmpNum = 0;
		//初始化陣列指標
		this->m_EmpArray = NULL;
		//初始化檔案為空
		this->m_FileIsEmpty = true;
		ifs.close();
		return;
	}

	//3.檔案存在,并記錄資料
	int num = this->get_EmpNum();
	cout << "職工人數為:" << num << endl;
	this->m_EmpNum = num;
	//開辟空間
	this->m_EmpArray = new Worker*[this->m_EmpNum];
	//將檔案中的資料,存到陣列
	this->init_Emp();

	//初始化檔案不為空
	this->m_FileIsEmpty = false;
	//測驗代碼
	//for (int i = 0; i < this->m_EmpNum; i++)
	/* {
		cout << "職工編號:" << this->m_EmpArray[i]->m_id
			<< "姓名:" << this->m_EmpArray[i]->m_name
			<< "部門編號:" << this->m_EmpArray[i]->m_number
			<< endl;
	}*/

	//檔案中有資料
	//初始化屬性
	//this->m_EmNum = 0;
	//this->m_EmpArray = NULL;
}

//展現選單
void WorkerManager::Show_Menu()
{
	cout << "歡迎使用職工管理系統" << endl;
	cout << "0、退出管理程式" << endl;
	cout << "1、增加職工資訊" << endl;
	cout << "2、顯示職工資訊" << endl;
	cout << "3、洗掉離職職工資訊" << endl;
	cout << "4、修改職工資訊" << endl;
	cout << "5、查找職工資訊" << endl;
	cout << "6、按照編號排序" << endl;
	cout << "7、清空所有檔案" << endl;
	cout << endl;
}

//退出系統
void WorkerManager::ExitSystem()
{
	cout << "歡迎下次使用" << endl;
	system("pause");
	exit(0);//退出程式
}

//添加職工
void WorkerManager::Add_Emp()
{
	cout << "請輸入添加職工數量:" << endl;

	int addNum = 0;//保存用戶輸入數量
	cin >> addNum;
	if (addNum)
	{
		//添加
		//計算新添空間大小
		int newSize = this->m_EmpNum + addNum; //新空間大小=原來記錄人數+新增人數
	//開辟新空間
		Worker** newSpace = new Worker * [newSize];
		//將原來空間下資料,拷貝到新空間下
		if (this->m_EmpArray != NULL)
		{
			for (int i = 0; i < this->m_EmpNum; i++)
			{
				newSpace[i] = this->m_EmpArray[i];
			}
		}

		//批量添加新資料
		for (int i = 0; i < addNum; i++)
		{
			int id; //職工編號
			string name;//職工姓名
			int dSelect;// 部門選擇
			cout << "請輸入第" << i + 1 << "個新職工編號:" << endl;
			cin >> id;
			cout << "請輸入第" << i + 1 << "個新職工名字:" << endl;
			cin >> name;
			cout << "請輸入第" << i + 1 << "個新職工崗位:" << endl;
			cout << "1、普通職工" << endl;
			cout << "2、經理" << endl;
			cout << "3、老板" << endl;
			cin >> dSelect;

			Worker* worker = NULL;
			switch (dSelect)
			{
			case 1:
				worker = new Employee(id, name, 1);
				break;
			case 2:
				worker = new Manager(id, name, 2);
				break;
			case 3:
				worker = new Boss(id, name, 3);
				break;
			default:
				break;
			}
			//將創建職工職責,保存到陣列中
			newSpace[this->m_EmpNum + i] = worker;
		}

		//釋放原有空間
		delete[] this->m_EmpArray;

		//更改新空間指向
		this->m_EmpArray = newSpace;

		//更改新職工人數
		this->m_EmpNum = newSize;
		//更新職工不為空
		this->m_FileIsEmpty = false;
		//提示添加成功
		cout << "添加成功" << addNum << "名新職工" << endl;
		//保存資料到檔案中
		this->save();

	}
	else
	{
		cout << "輸入有誤" << endl;

	}
	//按任意鍵,清屏回到上級目錄
	system("pause");
	system("cls");
}

//保存檔案
void WorkerManager::save()
{
	ofstream ofs;
	ofs.open(FILENAME, ios::out);//用輸出方式打開檔案--寫檔案

	//將每個人的資料寫入到檔案中//指標的指標是否可以多次指向
	for (int i = 0; i < this->m_EmpNum; i++)
	{
		ofs << this->m_EmpArray[i]->m_id << " "
			<< this->m_EmpArray[i]->m_name << " "
			<< this->m_EmpArray[i]->m_number << " " << endl;
	}
	//關閉檔案
	ofs.close();
}

//統計檔案中人數
int WorkerManager::get_EmpNum()
{
	ifstream ifs;
	ifs.open(FILENAME, ios::in);

	int id;
	string name;
	int dId;

	int num = 0;
	while (ifs >> id && ifs >> name && ifs >> dId)
	{
		//統計人數
		num++;
	}
	return num;
}


//初始化員工
void WorkerManager::init_Emp()
{
	ifstream ifs;
	ifs.open(FILENAME, ios::in);

	int id;
	string name;
	int did;
	int indiex = 0;

	while (ifs >> id && ifs >> name && ifs >> did)
	{
		Worker* worker = NULL;

		if (did == 1)//員工
		{
			worker = new Employee(id, name, did);
		}
		else if (did == 2)//經理
		{
			worker = new Manager(id, name, did);
		}
		else
		{
			worker = new Boss(id, name, did);
		}
		this->m_EmpArray[indiex] = worker;
		indiex++;
	}
	//關閉檔案
	ifs.close();
}

//顯示職工
void WorkerManager::Show_Emp()
{
	//判斷檔案是否為空
	if (this->m_FileIsEmpty)
	{
		cout << "檔案不存在或記錄為空" << endl;
	}
	else
	{
		for (int i = 0; i < m_EmpNum; i++)
		{
			//利用多型呼叫程式介面
			this->m_EmpArray[i]->showInfo();
		}
	}

	//按任意鍵,清屏回到上級目錄
	system("pause");
	system("cls");
}


//洗掉職工
void WorkerManager::Del_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "檔案不存在或記錄為空" << endl;
	}
	else
	{
		//按照職工編號洗掉
		cout << "請輸入想要洗掉職工編號:" << endl;
		int D_id = 0;
		cin >> D_id;

		int index = this->IsExist(D_id);
		if (index != -1)
		{
			cout << "職工存在" << endl;//找到職工需要洗掉
			//資料前移
			for (int i = index; i < this->m_EmpNum - 1; i++)
			{
				this->m_EmpArray[i] = this->m_EmpArray[i + 1];//最后一個位置記憶體泄漏
			}
			this->m_EmpNum--;//更新陣列中記錄人員個數
			//資料同步更新到檔案中
			this->save();
			cout << "洗掉成功" << endl;
		}
		else
		{
			cout << "職工不存在" << endl;
		}
	}
	//按任意鍵清屏
	system("pause");
	system("cls");
}

//判斷職工是否存在 如果存在回傳職工所在陣列中的位置,不存在回傳-1
int WorkerManager::IsExist(int id)
{
	int index = -1;
	for (int i = 0; i < this->m_EmpNum; i++)
	{
		if (this->m_EmpArray[i]->m_id == id)
		{
			//找到職工
			index = i;
			break;
		}
	}

	return index;
}


//修改職工
void WorkerManager::Mod_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "檔案不存在或者記錄為空" << endl;
	}
	else
	{
		cout << "請輸入修改職工的編號" << endl;
		int id;
		cin >> id;

		int ret = this->IsExist(id);
		if (ret != -1)
		{
			cout << "職工存在" << endl;
			delete this->m_EmpArray[ret];

			int newid = 0;
			string newname = "";
			int dselect = 0;


			cout << "查到:" << id << "號職工,請輸入新職工號:" << endl;
			cin >> newid;

			cout << "請輸入新的姓名:" << endl;
			cin >> newname;

			cout << "請輸入新的職位:" << endl;
			cout << "1、普通職工" << endl;
			cout << "2、經理" << endl;
			cout << "3、老板" << endl;
			cin >> dselect;

			Worker* worker = NULL;
			switch (dselect)
			{
			case 1:
				worker = new Employee(newid, newname, dselect);
				break;
			case 2:
				worker = new Manager(newid, newname, dselect);
				break;
			case 3:
				worker = new Boss(newid, newname, dselect);
				break;
			default:
				break;
			}

			//更新資料
			this->m_EmpArray[ret] = worker;

			cout << "修改成功" << endl;

			//保存到檔案中
			this->save();
		}
		else
		{
			cout << "修改失敗,職工不存在" << endl;
		}

	}

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

}

//查找職工
void WorkerManager::Find_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "檔案不存在或者記錄為空" << endl;
	}
	else
	{
		cout << "請輸入查找的方式" << endl;
		cout << "1、按職工編號查找 " << endl;
		cout << "2、按職工姓名查找 " << endl;

		int select = 0;
		cin >> select;
		if (select == 1)
		{
			//按照ID編號查
			int id;
			cout << "請輸入查找的職工編號" << endl;
			cin >> id;
			int ret = IsExist(id);
			if (ret != -1)
			{
				cout << "職工存在,該職工資訊如下" << endl;
				this->m_EmpArray[ret]->showInfo();
			}
			else
			{
				cout << "查找失敗,查無此人" << endl;
			}
		}
		else if (select == 2)
		{
			//按照姓名查
			string name;
			cout << "請輸入查找的職工姓名" << endl;
			cin >> name;

			//加入判斷是否查到的標志
			bool flag = false;//默認未找到職工

			for (int i = 0; i < this->m_EmpNum; i++)
			{
				if (name == this->m_EmpArray[i]->m_name)
				{
					cout << "職工存在,該職工資訊如下" << endl;
					this->m_EmpArray[i]->showInfo();
					flag = true;
				}
			}
			if (flag == false)
			{
				cout << "查找失敗,未找到職工" << endl;
			}
		}
		else
		{
			cout << "輸入選項有誤" << endl;
		}
	}
	//按任意鍵清零
	system("pause");
	system("cls");
}


//按照編號排序
void WorkerManager::Sort_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "檔案不存在" << endl;
		system("pause");
		system("cls");
	}
	else
	{
		cout << "請選擇排序方式" << endl;
		cout << "1、按職工號進行升序" << endl;
		cout << "2、按職工號進行降序" << endl;

		int select = 0;
		cin >> select;

		for (int i = 0; i < m_EmpNum; i++)
		{
			int minOrMax = i;//宣告最小值或者最大值下標
			for (int j = i + 1; j < this->m_EmpNum; j++)
			{
				if (select == 1)//升序
				{
					if (this->m_EmpArray[minOrMax]->m_id > this->m_EmpArray[j]->m_id)
					{
						minOrMax = j;
					}
				}
				else //降序
				{
					if (this->m_EmpArray[minOrMax]->m_id < this->m_EmpArray[j]->m_id)
					{
						minOrMax = j;
					}

				}
				//判斷一開始認定最小值或者最大值是不是計算的最小值或者最大值,如果不是就交換資料
				if (i != minOrMax)
				{
					Worker* temp = this->m_EmpArray[i];
					this->m_EmpArray[i] = this->m_EmpArray[minOrMax];
					this->m_EmpArray[minOrMax] = temp;
				}
			}
		}
		//排序成功
		cout << "排序成功,排序后的結果:" << endl;
		this->save();//排序后結果保存到檔案中
		this->Show_Emp();
	}

}

//清除檔案
void WorkerManager::Clean_File()
{
	cout << "確定清空?" << endl;
	cout << "1、確定" << endl;
	cout << "2、回傳" << endl;

	int select = 0;
	cin >> select;

	if (select == 1)//確定清空
	{
		ofstream ofs(FILENAME, ios::trunc);//打開檔案時,但是檔案之前的內容都會被清空,洗掉檔案后重新創建
		ofs.close();

		if (this->m_EmpArray != NULL)
		{
			//洗掉堆區的每個職工物件
			for (int i = 0; i < this->m_EmpNum; i++)
			{
				delete this->m_EmpArray[i];
				this->m_EmpArray[i] = NULL;
			}
			//洗掉堆區陣列指標
			delete[] this->m_EmpArray;
			this->m_EmpArray = NULL;
			this->m_EmpNum = 0;
			this->m_FileIsEmpty = true;
		}
		cout << "清空成功" << endl;
	}
	system("pause");
	system("cls");

}

WorkerManager::~WorkerManager()
{
	if (this->m_EmpArray != NULL)
	{
		delete[] this->m_EmpArray;
		this->m_EmpArray = NULL;
	}
}

6.系統的主函式入口代碼展示

在基于多型的職工管理系統.cpp檔案代碼中:

基于多型的職工管理系統.cpp

#include <iostream>
#include "workermanager.h"
using namespace std;

int main()
{
	int choice = 0;
	//實體化管理者物件
	WorkerManager wm;

	//呼叫展示選單的成員函式
	while (true)
	{
		wm.Show_Menu();
		cout << "請輸入你的選擇:" << endl;
		cin >> choice;
		switch (choice)
		{
		case 0://退出系統
			wm.ExitSystem();
			break;
		case 1://添加職工
			wm.Add_Emp();
			break;
		case 2://顯示職工
			wm.Show_Emp();
			break;
		case 3://洗掉職工
			//測驗
			wm.Del_Emp();
			break;
		case 4://修改職工
			wm.Mod_Emp();
			break;
		case 5://查找職工
			wm.Find_Emp();
			break;
		case 6://排序職工
			wm.Sort_Emp();
			break;
		case 7://清空檔案
			wm.Clean_File();
			break;

		default:
			break;
		}
		//system("cls");

	}
	cout << "請輸入您的選擇" << endl;
	return 0;
}

總結:

本次實驗,在練習學習程序中有很多bug,記憶體溢位、程式報錯、執行失敗等等,但是都在慢慢核對和檢查,以及在消化理解程序中逐一解決了,最后是成功可以運行成功的程式!

完結,整個程式的所有代碼完畢,新手駕到,多多包含!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/387798.html

標籤:其他

上一篇:web安全day16:人人都要懂的OSI和TCP/IP協議簇

下一篇:codis集群部署

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more