在 Dev-C++中编译运行GUI 程序介绍(三)有趣示例一组
在 Dev-C++中编译运行GUI程序介绍(三)有趣示例一组
前期见
在 Dev-C++中编译运行GUI 程序介绍(一)基础 https://blog.csdn.net/cnds123/article/details/147019078
在 Dev-C++中编译运行GUI 程序介绍(二)示例:祝福程序 https://blog.csdn.net/cnds123/article/details/147019350
本文给出一组可以在 Dev-C++中编译运行的GUI 应用程序。
示例2、简单的猜数字游戏
下面是一个简单的猜数字游戏源码,您可以在 Dev-C++ 中编译和运行它。这个程序创建了一个基本的 GUI 界面,用户可以通过输入数字来进行猜测,程序会提示用户猜的数字是太高、太低还是猜对了。并有猜中计数和“重玩”按钮功能。
运行效果:
源码如下:
#include <windows.h>
#include <string>
#include <cstdlib>
#include <ctime>using namespace std;// 全局变量
HWND hwndInput, hwndButton, hwndOutput, hwndCountLabel;
int randomNumber;
int guessCount = 0; // 猜中计数// 生成随机数
void generateRandomNumber() {randomNumber = rand() % 100 + 1; // 生成 1 到 100 之间的随机数guessCount = 0; // 重置猜中计数
}// 消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_CREATE: {// 创建说明标签CreateWindow("STATIC", "请输入1到100之间的数字:", WS_CHILD | WS_VISIBLE,50, 20, 200, 25, hwnd, NULL, NULL, NULL);// 创建输入框hwndInput = CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER,50, 50, 100, 25, hwnd, NULL, NULL, NULL);// 创建猜测按钮hwndButton = CreateWindow("BUTTON", "猜测", WS_CHILD | WS_VISIBLE,50, 100, 100, 30, hwnd, (HMENU)1, NULL, NULL);// 创建重玩按钮CreateWindow("BUTTON", "重玩", WS_CHILD | WS_VISIBLE,160, 100, 100, 30, hwnd, (HMENU)2, NULL, NULL);// 创建输出框hwndOutput = CreateWindow("STATIC", "", WS_CHILD | WS_VISIBLE,50, 150, 200, 25, hwnd, NULL, NULL, NULL);// 创建猜中计数标签hwndCountLabel = CreateWindow("STATIC", "猜测次数: 0", WS_CHILD | WS_VISIBLE,50, 180, 200, 25, hwnd, NULL, NULL, NULL);generateRandomNumber(); // 生成第一个随机数// 设置光标焦点到输入框SetFocus(hwndInput);break;}case WM_COMMAND: {if (LOWORD(wParam) == 1) { // 按钮被点击char buffer[10];GetWindowText(hwndInput, buffer, sizeof(buffer)); // 获取输入的文本int guess = atoi(buffer); // 将字符串转换为整数// 进行猜测判断string message;guessCount++; // 增加猜测次数if (guess < randomNumber) {message = "太低了!";} else if (guess > randomNumber) {message = "太高了!";} else {message = "恭喜你,猜对了!";// 不重置猜测次数,直到用户选择“重玩”}// 更新输出框和猜中计数标签SetWindowText(hwndOutput, message.c_str());SetWindowText(hwndCountLabel, ("猜测次数: " + to_string(guessCount)).c_str());// 设置光标焦点到输入框SetFocus(hwndInput);}else if (LOWORD(wParam) == 2) { // 重玩按钮被点击generateRandomNumber(); // 生成新的随机数SetWindowText(hwndOutput, ""); // 清空输出框SetWindowText(hwndCountLabel, "猜测次数: 0"); // 重置猜中计数SetWindowText(hwndInput, ""); // 清空输入框SetFocus(hwndInput); // 设置光标焦点到输入框}break;}case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {srand(static_cast<unsigned int>(time(0))); // 设置随机种子// 注册窗口类const char CLASS_NAME[] = "GuessNumberWindow";WNDCLASS wc = {};wc.lpfnWndProc = WndProc;wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, CLASS_NAME, "猜数字游戏", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, NULL, NULL, hInstance, NULL);ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}
示例3、剪子、包袱、锤游戏
剪子、包袱、锤(又称石头剪刀布)游戏规则
胜负关系:
剪子 胜 包袱(剪刀剪开布)。
包袱 胜 锤(布包裹石头)。
锤 胜 剪子(石头砸坏剪刀)。
手势相同:平局,重新对决。
界面如下
源码如下:
//剪子、包袱、锤游戏
#include <windows.h>
#include <string>
#include <cstdlib>
#include <ctime>
#include <sstream>using namespace std;// 全局变量
HWND hwndOutput, hwndComputerChoice;
int computerChoice;// 生成计算机的选择
void generateComputerChoice() {computerChoice = rand() % 3; // 0 = 剪子, 1 = 包袱, 2 = 锤
}// 消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_CREATE: {// 创建剪子按钮CreateWindow("BUTTON", "剪子 (X)", WS_CHILD | WS_VISIBLE,50, 50, 100, 30, hwnd, (HMENU)1, NULL, NULL);// 创建包袱按钮CreateWindow("BUTTON", "包袱 (Q)", WS_CHILD | WS_VISIBLE,50, 100, 100, 30, hwnd, (HMENU)2, NULL, NULL);// 创建锤按钮CreateWindow("BUTTON", "锤 (P)", WS_CHILD | WS_VISIBLE,50, 150, 100, 30, hwnd, (HMENU)3, NULL, NULL);// 创建新局按钮CreateWindow("BUTTON", "新局", WS_CHILD | WS_VISIBLE,50, 200, 100, 30, hwnd, (HMENU)4, NULL, NULL);// 创建输出框hwndOutput = CreateWindow("STATIC", "", WS_CHILD | WS_VISIBLE,200, 50, 200, 100, hwnd, NULL, NULL, NULL);// 创建计算机选择显示框hwndComputerChoice = CreateWindow("STATIC", "", WS_CHILD | WS_VISIBLE,200, 150, 200, 25, hwnd, NULL, NULL, NULL);// 设置随机种子srand(static_cast<unsigned int>(time(0)));break;}case WM_COMMAND: {if (LOWORD(wParam) >= 1 && LOWORD(wParam) <= 3) { // 剪子、包袱或锤按钮被点击int userChoice = LOWORD(wParam) - 1; // 0 = 剪子, 1 = 包袱, 2 = 锤generateComputerChoice(); // 生成计算机选择// 计算机选择对应的输出来显示string computerChoiceStr;if (computerChoice == 0) computerChoiceStr = "剪子 (X)";else if (computerChoice == 1) computerChoiceStr = "包袱 (Q)";else if (computerChoice == 2) computerChoiceStr = "锤 (P)";// 判断输赢string result;if (userChoice == computerChoice) {result = "平局!";} else if ((userChoice == 0 && computerChoice == 1) || (userChoice == 1 && computerChoice == 2) || (userChoice == 2 && computerChoice == 0)) {result = "你输了!";} else {result = "你赢了!";}// 更新输出框和计算机选择框SetWindowText(hwndOutput, result.c_str());SetWindowText(hwndComputerChoice, ("计算机选择: " + computerChoiceStr).c_str());} else if (LOWORD(wParam) == 4) { // 新局按钮被点击SetWindowText(hwndOutput, ""); // 清空输出框SetWindowText(hwndComputerChoice, ""); // 清空计算机选择框}break;}case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {// 注册窗口类const char CLASS_NAME[] = "RockPaperScissorsWindow";WNDCLASS wc = {};wc.lpfnWndProc = WndProc;wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, CLASS_NAME, "剪子、包袱、锤游戏", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 420, 300, NULL, NULL, hInstance, NULL);ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}
示例4、简单计算器
可以在 Dev-C++ 中编译和运行简单计算器(通过计算机键盘输入数)。
界面如下:
代码如下:
#include <windows.h>
#include <string>
#include <sstream>using namespace std;// 全局变量
HWND hwndInput1, hwndInput2, hwndOutput, hwndButtonAdd, hwndButtonSub, hwndButtonMul, hwndButtonDiv;// 计算结果并显示
void Calculate(char operation) {char buffer1[100], buffer2[100];GetWindowText(hwndInput1, buffer1, sizeof(buffer1)); // 获取第一个输入框的文本GetWindowText(hwndInput2, buffer2, sizeof(buffer2)); // 获取第二个输入框的文本double num1 = atof(buffer1); // 转换为 doubledouble num2 = atof(buffer2); // 转换为 doubledouble result = 0.0;// 根据操作符进行计算switch (operation) {case '+': result = num1 + num2; break;case '-': result = num1 - num2; break;case '*': result = num1 * num2; break;case '/':if (num2 != 0) {result = num1 / num2;} else {SetWindowText(hwndOutput, "错误:除以零");return;}break;}// 显示结果stringstream ss;ss << result;SetWindowText(hwndOutput, ss.str().c_str());
}// 消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_CREATE: {// 创建输入框1hwndInput1 = CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER,50, 20, 100, 30, hwnd, NULL, NULL, NULL);// 创建输入框2hwndInput2 = CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER,50, 60, 100, 30, hwnd, NULL, NULL, NULL);// 创建输出框hwndOutput = CreateWindow("STATIC", "", WS_CHILD | WS_VISIBLE,50, 100, 200, 30, hwnd, NULL, NULL, NULL);// 创建加法按钮hwndButtonAdd = CreateWindow("BUTTON", "+", WS_CHILD | WS_VISIBLE,200, 20, 30, 30, hwnd, (HMENU)1, NULL, NULL);// 创建减法按钮hwndButtonSub = CreateWindow("BUTTON", "-", WS_CHILD | WS_VISIBLE,200, 60, 30, 30, hwnd, (HMENU)2, NULL, NULL);// 创建乘法按钮hwndButtonMul = CreateWindow("BUTTON", "*", WS_CHILD | WS_VISIBLE,250, 20, 30, 30, hwnd, (HMENU)3, NULL, NULL);// 创建除法按钮hwndButtonDiv = CreateWindow("BUTTON", "/", WS_CHILD | WS_VISIBLE,250, 60, 30, 30, hwnd, (HMENU)4, NULL, NULL);break;}case WM_COMMAND: {if (LOWORD(wParam) == 1) { // 加法按钮被点击Calculate('+');} else if (LOWORD(wParam) == 2) { // 减法按钮被点击Calculate('-');} else if (LOWORD(wParam) == 3) { // 乘法按钮被点击Calculate('*');} else if (LOWORD(wParam) == 4) { // 除法按钮被点击Calculate('/');}break;}case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {// 注册窗口类const char CLASS_NAME[] = "SimpleCalculator";WNDCLASS wc = {};wc.lpfnWndProc = WndProc;wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, CLASS_NAME, "简单计算器", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 400, 200, NULL, NULL, hInstance, NULL);ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}
示例5、改进版的简单计算器
下面是一个改进版的简单计算器,界面上包含数字按键(0-9)和基本的运算按键(加、减、乘、除)。用户可以通过点击数字按键和运算符按键来输入数字和运算,然后按下“=”按钮来计算结果。
界面如下:
代码如下:
#include <windows.h>
#include <string>
#include <cstdlib>
#include <sstream>using namespace std;// 全局变量
HWND hwndDisplay;
string currentInput = ""; // 当前输入// 更新显示框
void UpdateDisplay() {SetWindowText(hwndDisplay, currentInput.c_str());
}// 处理数字和操作符的按钮点击
void ButtonClick(char value) {currentInput += value; // 追加输入UpdateDisplay();
}// 计算结果并显示
void Calculate() {double num1 = 0.0, num2 = 0.0;char operation = '+';size_t pos = 0;// 解析输入for (char c : currentInput) {if (c == '+' || c == '-' || c == '*' || c == '/') {num1 = atof(currentInput.substr(0, pos).c_str());operation = c;pos++;break;}pos++;}if (pos < currentInput.length()) {num2 = atof(currentInput.substr(pos).c_str());} else {return; // 没有足够的输入进行计算}double result = 0.0;// 根据操作符进行计算switch (operation) {case '+': result = num1 + num2; break;case '-': result = num1 - num2; break;case '*': result = num1 * num2; break;case '/':if (num2 != 0) {result = num1 / num2;} else {currentInput = "错误:除以零";UpdateDisplay();return;}break;}// 显示结果stringstream ss;ss << result;currentInput = ss.str(); // 更新为结果UpdateDisplay();
}// 消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_CREATE: {// 创建显示框hwndDisplay = CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | ES_RIGHT | ES_READONLY,10, 10, 280, 30, hwnd, NULL, NULL, NULL);// 创建按钮const char* buttons[] = {"7", "8", "9", "+","4", "5", "6", "-","1", "2", "3", "*","0", ".", "=", "/"};int x = 10, y = 50;for (int i = 0; i < 16; ++i) {CreateWindow("BUTTON", buttons[i], WS_CHILD | WS_VISIBLE,x, y, 65, 40, hwnd, (HMENU)(INT_PTR)(i + 1), NULL, NULL);x += 70;if ((i + 1) % 4 == 0) {x = 10;y += 45;}}// 创建"清空"按钮CreateWindow("BUTTON", "清空", WS_CHILD | WS_VISIBLE,10, 230, 280, 30, hwnd, (HMENU)17, NULL, NULL);break;}case WM_COMMAND: {int id = LOWORD(wParam);if (id >= 1 && id <= 16) {const char* buttonValues[] = {"7", "8", "9", "+","4", "5", "6", "-","1", "2", "3", "*","0", ".", "=", "/"};if (buttonValues[id - 1][0] == '=') {Calculate();} else {ButtonClick(buttonValues[id - 1][0]);}} else if (id == 17) { // 清空按钮currentInput = "";UpdateDisplay();}break;}case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {// 注册窗口类const char CLASS_NAME[] = "SimpleCalculator";WNDCLASS wc = {};wc.lpfnWndProc = WndProc;wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, CLASS_NAME, "手持计算器", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 315, 310, NULL, NULL, hInstance, NULL);if (hwnd == NULL) {return 0;}ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg = {};while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}
示例6、绘制直线、圆和三角形
Windows API中的GDI(Graphics Device Interface,图形设备接口)是一个用于处理图形和图像输出的子系统。它允许程序与各种输出设备(如显示器、打印机等设备无关性)进行交互,绘制图形、文本和图像。
GDI的作用
- 绘制图形:GDI提供了一系列函数,用于绘制基本形状(如线条、矩形、圆形、多边形等)。程序员可以使用这些函数在窗口上绘制想要的图形。
- 文本处理:GDI也可以用于绘制文本。它支持多种字体和文本格式,程序员可以选择字体、大小和颜色来显示文本。
- 图像处理:GDI能够加载并显示位图(BMP)、图标等图像格式。程序员可以将图像绘制到窗口或打印机上。
- 设备无关性:GDI使得程序可以不依赖于特定的硬件设备。无论是在显示器上绘制,还是在打印机上输出,GDI提供的接口都是一致的。这意味着,程序可以在不同的输出设备上运行,而不需要进行太多修改。
- 设备上下文(DC):在GDI中,设备上下文是一种数据结构,表示绘图设备的状态。程序在绘图时需要获取设备上下文,以便使用它来进行绘图操作。
GDI的基本操作
- 创建窗口:在窗口上绘制图形的第一步是创建一个窗口。这可以通过Windows API中的函数来实现。
- 获取设备上下文:在绘制之前,程序需要获取窗口的设备上下文(HDC),这样才能在窗口上进行绘制。
- 绘制操作:
- 使用GDI函数绘制图形(如MoveToEx和LineTo绘制直线)。
- 使用TextOut函数绘制文本。
- 使用BitBlt函数复制图像。
- 释放资源:绘制完成后,程序需要释放获取的设备上下文,以避免资源泄露。
先看效果图:
源码如下:
#include <windows.h>LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_PAINT: {PAINTSTRUCT ps;HDC hdc = BeginPaint(hwnd, &ps);// 设置颜色HPEN hPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 255)); // 蓝色SelectObject(hdc, hPen);// 画直线MoveToEx(hdc, 50, 50, NULL); // 起点LineTo(hdc, 200, 50); // 终点// 画圆Ellipse(hdc, 50, 70, 150, 170); // x1, y1, x2, y2// 画三角形POINT vertices[] = { {200, 70}, {250, 170}, {150, 170} };Polygon(hdc, vertices, 3);// 释放资源DeleteObject(hPen);EndPaint(hwnd, &ps);break;}case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {const char CLASS_NAME[] = "SampleWindowClass";WNDCLASS wc = {};wc.lpfnWndProc = WndProc; // 设置窗口过程wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, CLASS_NAME, "绘图示例", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 400, 400, NULL, NULL, hInstance, NULL);if (hwnd == NULL) {return 0;}ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}
示例7、绘制红五角星
使用Windows API中的GDI (图形设备接口)。
先看效果图:
源码如下:
#include <windows.h>
#include <math.h>#define M_PI 3.14159265358979323846 // 定义π(如未定义)// 计算五角星顶点的函数
void DrawStar(HDC hdc, int centerX, int centerY, int size) {POINT points[10];double angle;int i;// 计算五角星的顶点for (i = 0; i < 10; i++) {angle = (i * 36.0) * (M_PI / 180.0); // 角度转换为弧度// 外部顶点if (i % 2 == 0) {points[i].x = centerX + (int)(size * cos(angle));points[i].y = centerY - (int)(size * sin(angle));}// 内部顶点else {points[i].x = centerX + (int)(size * 0.5 * cos(angle));points[i].y = centerY - (int)(size * 0.5 * sin(angle));}}// 绘制五角星HPEN hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0)); // 红色SelectObject(hdc, hPen);SelectObject(hdc, GetStockObject(NULL_BRUSH)); // 无填充Polygon(hdc, points, 10); // 绘制五角星// 释放资源DeleteObject(hPen);
}// 消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_PAINT: {PAINTSTRUCT ps;HDC hdc = BeginPaint(hwnd, &ps);// 设置背景颜色FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));// 绘制红五角星DrawStar(hdc, 200, 150, 100);EndPaint(hwnd, &ps);break;}case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {const char CLASS_NAME[] = "StarDrawingWindow";WNDCLASS wc = {};wc.lpfnWndProc = WndProc; // 设置窗口过程wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, CLASS_NAME, "绘制红五角星", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL);if (hwnd == NULL) {return 0;}ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}
相关文章:
在 Dev-C++中编译运行GUI 程序介绍(三)有趣示例一组
在 Dev-C中编译运行GUI程序介绍(三)有趣示例一组 前期见 在 Dev-C中编译运行GUI 程序介绍(一)基础 https://blog.csdn.net/cnds123/article/details/147019078 在 Dev-C中编译运行GUI 程序介绍(二)示例&a…...
功能安全时间参数FTTI
FTTI:fault tolerant time interval故障容错时间间隔; FHTI:Fault Handling Time Interval故障处理时间间隔; FRTI:Fault Reaction Time Interval故障反应时间间隔; FDTI:Fault Detectlon Ti…...
docker镜像制作
🧱 如何将任意 Linux 系统打包为 Docker 镜像 适用场景: 本地物理机 / 虚拟机上的 Linux(如 Ubuntu、Debian、CentOS、openEuler 等);想将当前系统环境完整打包成 Docker 镜像;系统内已安装了运行环境,如 Java、Python、Nginx 等,想保留它们。✅ 步骤概览: 准备文件…...
【Pandas】pandas DataFrame iat
Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法 pandas.DataFrame.iat pandas.DataFrame.iat 是一个快速访…...
【图像分类】【深度学习】系列学习文章目录
图像分类简介 图像分类是计算机视觉领域中的一个核心问题,它涉及到将图像数据分配到一个或多个预定义类别中的过程。这项技术的目标是让机器模拟人类能够自动识别并分类图像内容。近年来,随着深度学习的发展,尤其是卷积神经网络(CNNs)的应用…...
MyBatisPlus 学习笔记
文章目录 MyBatisPlus 快速入门第一步:引入 MyBaitsPlus 起步依赖第二步:自定义的 Mapper 继承 BaseMapper 接口新增相关修改相关删除相关查询相关 Mp 使用示例 MyBaitsPlus 常见注解MP 实体类与数据库信息约定Mp 实体类与数据库信息约定不符合解决方法…...
Profibus DP主站如何转Modbus TCP?
Profibus DP主站如何转Modbus TCP? 在现代工业自动化系统中,设备之间的互联互通至关重要。Profibus DP 和 Modbus TCP 是两种常见的通信协议,分别应用于不同的场景。为了实现这两种协议的相互转换,Profibus DP主站转Modbus TCP网…...
尚硅谷Java第 4、5 章IDEA,数组
第 4 章:IDEA的使用 第 5 章:数组 5.1 数组的概述 数组(Array):就可以理解为多个数据的组合。 程序中的容器:数组、集合框架(List、Set、Map)。 数组中的概念: 数组名 下标(或索…...
一些简单但常用的算法记录(python)
1、计算1-2020间的素数个数 def is_composite(num):if num < 1:return False# 从 2 开始到 num 的平方根进行遍历for i in range(2, int(num**0.5) 1):if num % i 0:return Truereturn Falsecnt 0 for num in range(1, 2021):if is_composite(num):cnt 1print(cnt)2、 …...
基于Docker容器的CICD项目Jenkins/gitlab/harbor/Maven实战
一、企业业务代码发布方式 1.1 传统方式 以物理机或虚拟机为颗粒度部署部署环境比较复杂,需要有先进的自动化运维手段出现问题后重新部署成本大,一般采用集群方式部署部署后以静态方式展现 1.2 容器化方式 以容器为颗粒度部署部署方式简单࿰…...
高并发秒杀系统设计:关键技术解析与典型陷阱规避
电商、在线票务等众多互联网业务场景中,高并发秒杀活动屡见不鲜。这类活动往往在短时间内会涌入海量的用户请求,对系统架构的性能、稳定性和可用性提出了极高的挑战。曾经,高并发秒杀架构设计让许多开发者望而生畏,然而࿰…...
(十四)安卓开发中的RecyclerView详解
在安卓开发中,RecyclerView 是一个功能强大且灵活的 UI 组件,用于高效地显示大量数据集合,如列表、网格或瀑布流。它是传统 ListView 和 GridView 的现代替代品,提供了更高的性能优化和自定义能力。RecyclerView 的核心优势在于其…...
如何设置Ubuntu服务器版防火墙
在Ubuntu服务器中,默认使用 ufw(Uncomplicated Firewall)作为防火墙管理工具。它是对iptables的简化封装,适合快速配置防火墙规则。以下是设置防火墙的详细步骤: 1. 安装与启用 ufw 安装(通常已预装&…...
根文件系统(rootfs) 制作方法(BusyBox、Buildroot、Yocto、Ubuntu Base)
以下是关于 根文件系统(rootfs) 制作的四种主流方法(BusyBox、Buildroot、Yocto、Ubuntu Base)的详细教程与对比分析,结合不同场景的需求提供具体实现步骤和关键要点。 1. BusyBox 制作 rootfs 核心特点 轻量级&…...
SAP软件FICO各种财务账期的功能用途介绍
FI会计账期 一般财务账期总账期间的控制是仅开启当前一个期间,如果月结期间应同时开启结账期间和下一期间两个期间,结账完成需立即关闭已完成结账的期间,避免凭证过账日期误记账。 设置事务码:OB52或 S_ALR_87003642 备注&#…...
蓝桥杯C++组部分填空题
P1508 - [蓝桥杯2020初赛] 门牌制作 - New Online Judge #include<bits/stdc.h> using namespace std;int main() {int res 0;for(int i 1; i < 2020; i){int num i;while(num){if(num % 10 2) res;num/10;}}cout<<res;return 0; } 624 P1509 - [蓝桥杯20…...
内联inline
一、什么是 inline? inline 的本意是: 建议编译器将函数调用处展开成函数体代码,省去函数调用的开销。 inline int square(int x) { return x * x; } 当你调用 square(5) 时,编译器可能会将其替换成 5 * 5,从而避免…...
【models】Transformer 之 各种 Attention 原理和实现
Transformer 之 各种 Attention 原理和实现 本文将介绍Transformer 中常见的Attention的原理和实现,其中包括: Self Attention、Spatial Attention、Temporal Attention、Cross Attention、Grouped Attention、Tensor Product Attention、FlashAttentio…...
基于JavaAPIforKml实现Kml 2.2版本的全量解析实践-以两步路网站为例
目录 前言 一、关于两步路网站 1、相关功能 2、数据结构介绍 二、JAK的集成与实现 1、JAK类图简介 2、解析最外层数据 3、解析扩展元数据和样式 4、递归循环解析Feature 5、解析具体的数据 三、结论 前言 随着地理信息技术的快速发展,地理空间数据的共享…...
Ubuntu搭建Pytorch环境
Ubuntu搭建Pytorch环境 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Ubuntu搭建Pytorch环境前言一、Anaconda二、Cuda1.安装流程2、环境变量&#…...
Kingbase逻辑备份与恢复标准化实施文档
背景 文章背景 本文结合实际运维经验,围绕 Kingbase 数据库在逻辑层面的备份与恢复方法进行系统性梳理,旨在为运维人员和数据库管理员提供一套清晰、高效、可落地的操作指引,提升数据库系统的可靠性与容灾能力。 第一部分 逻辑部分 1.1 全…...
二分查找5:852. 山脉数组的峰顶索引
链接:852. 山脉数组的峰顶索引 - 力扣(LeetCode) 题解: 事实证明,二分查找不局限于有序数组,非有序的数组也同样适用 二分查找主要思想在于二段性,即将数组分为两段。本体就可以将数组分为ar…...
解决opencv中文路径问题
见cv_imread函数和cv_imwrite函数 import cv2 import os import matplotlib.pyplot as plt from paddleocr import PaddleOCR, draw_ocr import numpy as np import urllib.parse # Add this import statementfrom txt_get import ImageTextExtractor# 初始化OCR,…...
Redis简介及其在Unity中的应用
一、什么是Redis? Redis(Remote Dictionary Server) 是一个开源的高性能 内存数据结构存储系统,常被用于 缓存、消息队列、排行榜、会话管理、实时分析 等。 ✅ Redis特点 基于内存,读写速度极快支持多种数据结构:String、List、Hash、Set、Sorted Set支持持久化,可将…...
Python实现批量插入PostgreSQL数据库的脚本分享
背景 上个月排查一个 Bug ,需要采集一张 PostgreSQL 的大表,测试时需要造数据。Python 比 Java 方便多了,所以用 Python写了一个批量插入 PostgreSQL 表的简单脚本。本文分享这个脚本,很简单的,就是利用 psycopg2 的 …...
一键精准采集单网页,告别手动复制粘贴
浏览某个网页时,想抓取其内容,有没有工具能避免自己手动逐个复制粘贴? 推荐使用单网页一键采集功能,可自动提取网页内容并整理成结构化数据(包括标题、正文、作者、日期、分类、标签、描述和原文网址链接等关键信息&am…...
vue入门:单文件组件数据双向绑定
文章目录 单文件组件介绍安装创建项目构建单文件组件 数据双向绑定Vue虚拟DOM的作用Vue中key属性的作用 单文件组件 介绍 单文件组件API使用文件扩展名为 .vue 的来构建组件ECMAScript 6 API 安装 Vue CLI 构建Vue -- 安装vue/cli npm install -g vue/cli-- 升级Vue CLI 包…...
接听电话,手机靠近耳朵后拿开,挂断电话,设备自动锁屏
目录 一、问题分析/需求分析 二、解决方案 一、问题分析/需求分析 先说一下大致流程: 首先是打电话过程会启动PROXIMITY(接近光传感器)用于监听手机是否到耳边,当手机到耳边时进行灭屏处理,灭屏过程中会调用到锁屏,所以最终会导致锁屏 详细流程分析: 首先根据日志看…...
代码随想录第15天:(二叉树)
一、二叉搜索树的最小绝对差(Leetcode 530) 思路1 :中序遍历将二叉树转化为有序数组,然后暴力求解。 class Solution:def __init__(self):# 初始化一个空的列表,用于保存树的节点值self.vec []def traversal(self, r…...
Matlab 汽车ABS的PID控制
1、内容简介 Matlab 199-汽车ABS的PID控制 可以交流、咨询、答疑 2、内容说明 略 摘 要 : 在 simulink 环境下对汽车防抱死制动系统进行数学建模 , 采用基于…...
若依前后端分离版之使用Swagger
记录一下使用若依前后端分离版本中,怎么使用Swagger,以帮助初学者快速入手。 1.运行项目并查看Swagger 这里自己下载项目代码,在编译器中打开运行。这个过程跳过,我们进入系统后台界面。 在系统工具、系统接口中打开Swagger页面 点击test-controller和Schemas,可展开相…...
入侵检测snort功能概述
1. 数据包嗅探与日志记录 网络流量监控:实时捕获和分析网络数据包(支持以太网、无线等)。 日志记录:将数据包以二进制格式(pcap)或文本格式存储,供后续分析。 2. 协议分析与解码 深度协议解析…...
Notepad++安装Markdown实时预览插件
具体操作 打开notepad -> 插件 -> 插件管理 -> 可用 -> “Markdown Panel” -> 安装,安装完成后工具栏点击"Markdown Panel"按钮。 注意:由于网络等原因可能安装失败 导致工具栏没出现""Markdown Panel"按钮&am…...
Swift 实现 LeetCode 254:因子组合问题的递归解法全解析
文章目录 摘要描述示例: 题解答案(Swift 实现)题解代码分析核心思路:举个例子: 示例测试及结果时间复杂度分析空间复杂度分析现实应用场景结合总结 摘要 这篇文章我们来聊聊 LeetCode 第 254 题 ——「因子的组合」。…...
Matlab 传感器加速度数据计算位移
1、内容简介 Matlab 195-传感器加速度数据计算位移 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
Ubuntu虚拟机连不上网
桥接 虚拟机Ubuntu系统必须能连接到外网,不然不能更新软件安装包 配置虚拟机网络(关机或者挂起状态) 第一步1.重启虚拟机网络编辑器(还原配置) 第二步2.重启虚拟机网络适配器(移除再添加) 启…...
大模型论文:Language Models are Unsupervised Multitask Learners(GPT2)
大模型论文:Language Models are Unsupervised Multitask Learners(GPT2) 文章地址:https://storage.prod.researchhub.com/uploads/papers/2020/06/01/language-models.pdf 摘要 自然语言处理任务,例如问答、机器翻译、阅读理解和摘要&am…...
大模型本地部署系列(3) Ollama部署QwQ[阿里云通义千问]
大家好,我是AI研究者, 今天教大家部署 一个阿里云通义千问大模型。 QwQ大模型简介 QwQ是由阿里云通义千问(Qwen)团队推出的开源推理大模型,专注于提升AI在数学、编程和复杂逻辑推理方面的能力。其核心特点包括&#x…...
WPF ObjectDataProvider
在 WPF(Windows Presentation Foundation)中,ObjectDataProvider 是一个非常有用的类,用于将非 UI 数据对象(如业务逻辑类或服务类)与 XAML 绑定集成。它允许在 XAML 中直接调用方法、访问属性或实例化对象,而无需编写额外的代码。以下是关于 ObjectDataProvider 的详细…...
《Vue Router实战教程》12.不同的历史记录模式
欢迎观看《Vue Router 实战(第4版)》视频课程 不同的历史记录模式 在创建路由器实例时,history 配置允许我们在不同的历史模式中进行选择。 Hash 模式 hash 模式是用 createWebHashHistory() 创建的: import { createRouter,…...
Dify什么?Dify 零门槛打造专属 AI 应用
Dify 是一个专注于简化大语言模型(LLM)应用开发的开源平台,旨在帮助用户通过可视化界面和模块化工具快速构建、部署和管理 AI 驱动的应用程序。以下是其核心特点: 主要功能 可视化编排 提供直观的界面,无需深入编码即…...
【Javascript】在canvas中加载shader着色器的方法(开箱即用)
功能简介 可以播放,暂停shader代码,可以在js中配置shader参数(下面案例列举了所有可用参数形式)缺点 这个是固定机位,没有自定义顶点着色器部分的功能,有需要可直接在class中改,或者修改后调用…...
华为华三模拟器解决兼容问题Win11 24H2 现在使用ENSP的问题解决了
一、Win11 24H2 现在使用ENSP的问题解决了 这个Win11 的 24H2不能使用ENSP的问题已经困扰我们很久了,在之前的文章中,我们也有说明这个问题 之前ENSP肯定启动会报错40 当时还建议大家先不要更新到win11的24H2版本,现在终于迎来了更新&#…...
五、用例篇
Bug等级:崩溃、严重、一般、次要 bug的生命周期 面试高频考题:跟开发产生争执怎么办? (1)反思自己,是不是bug描述写的不清楚 (2)站在用户思考问题,反问开发人员:“如果你是用户,你能接受这样…...
Mysql中的数据类型和语句概述
Mysql中的数据类型 数值类 整数:int,四个字节构成 浮点型:float单精度浮点数,四个字节,double双精度浮点数,八个字节,decimal用于高精度计算,尤其是在金融领域。decimalÿ…...
Vue3连接MQTT作为客户端
先下载依赖 npx --yes --registry https://registry.npmmirror.com npm install mqtt 在src的api创建 mes.js // 导入axios import axios from axios;// 定义一个变量,记录公共的前缀, baseURL const baseURL http://localhost:8080; const instance axios.create({ base…...
VLC快速制作rtsp流媒体服务器
1.安装vlc media player工具 2.打开后点击菜单 媒体->流 3.添加mp4视频,选择串流 4.选择 下一个 5.新目标选择 RTSP,点击添加按钮 6.端口和路径随便填写,如果推流失败就换个端口。一路操作下去 7.点击 流 按钮后,就可以看到下图…...
24FIC
一,赛前准备 检材密码:2024Fic杭州Powered~by~HL! 案情简介: 2024年4月,卢某报案至警方,声称自己疑似遭受了“杀猪盘”诈骗,大量钱财被骗走。卢某透露,在与某公司交流过程中结识了员工李某。李某…...
P3367 【模板】并查集
题目链接:点击进入 题目 思路 代码(路径压缩) #include <bits/stdc.h> using namespace std; const int maxn 1e6 10;int n,m,fa[maxn];int find(int x) {if(xfa[x]) return x;else return fa[x]find(fa[x]); }int unions(int x,…...
【leetcode hot 100 300】最长递增子序列
错误解法:在每次更新db[i]时,如果当前nums[i]>nums[i-1]就db[i-1]1,否则db[i-1] class Solution {public int lengthOfLIS(int[] nums) {int n nums.length;int[] db new int[n]; // db[i]表示到i的最长严格递增子序列的长度db[0] 1;f…...