- 博客(206)
- 资源 (19)
- 收藏
- 关注
原创 暗黑模式实践
暗黑模式是一种以深色背景搭配浅色文本为核心的界面设计方案,与传统亮色调界面形成鲜明对比。视觉舒适度提升:减少强光刺激,尤其在低光环境下(如夜间使用)能降低眼睛疲劳感续航优化:OLED 屏幕设备中,纯黑色像素不发光,可显著降低功耗沉浸式体验:深色背景能让内容(如图像、视频、文字)更突出,减少视觉干扰时尚设计趋势:符合现代 UI 设计的极简美学,增强产品科技感。
2025-06-13 11:49:53
267
原创 视频监控软件开发的需求管理
在软件开发过程中,一个校方的用户向他所认识的一个项目开发人员抱怨系统软件中的一项功能问题,并且表示希望能够进行修改,如果不加控制而直接进行修改会带来很多问题,如没有对变更进行控制,没有修改记录,容易造成软件版本的管理混乱,没有把变更的结果通知到所有的项目干系人,容易造成信息不一致,软件文档没有得到及时的更新。在视频监控软件项目开发过程中,需求管理计划和控制是非常重要的一个环节,有效的需求管理能对项目进度、质量和成本起到很好的控制作用,需求变更的过度蔓延有可能带来项目的混乱、失控甚至项目的最终失败。
2025-06-13 08:36:22
474
原创 某船指挥中心的综合语音调度系统设计
综合语音调度系统的基础支持包括内通调度系统(普通电话调度、IP电话调度)、统一通信调度系统、无线调度系统、卫星电话系统,同时还包含视频会议系统、图像接入系统以及中控系统等。在某船的信息系统设计过程中,船东提出的综合语音调度系统的建设目标为:将固定电话、卫星电话、IP电话以及短波、超短波电台的音频系统有机融合,实现多种通信手段互联互通。因此建议围绕综合语音调度通信系统为核心,对其它通信系统进行整合,目标是不同制式的通信系统可通过调度系统互联,实现有线、无线、短波、超短波、集群电话、卫星电话之间的互联互通。
2025-06-13 08:33:49
8
原创 #pragma pack的作用
指定对齐字节数:通过 #pragma pack(n) 可指定结构体按n字节对齐(n通常为1、2、4、8、16等2的幂次)。通常配合 #pragma pack(pop) 或 #pragma pack() 恢复默认对齐,使用时需注意n的取值应合理,避免因过度压缩影响访问效率。// 2字节,b后填充2字节(总占8字节)// 1字节,后填充1字节(对齐到2字节)// 2字节(对齐到2字节,紧跟b后)// 4字节,默认对齐下,a后填充3字节。// 2字节,紧跟b后(总占7字节)// 4字节,紧跟a后,无填充。
2025-06-12 21:52:39
281
原创 计算机信息系统集成项目的质量管理探讨
通过对项目的时间、成本、质量、风险等实行综合有效的控制,达到项目的期望值,不仅提高了客户的满意度,增加了市场竞争力,而且使企业在项目中的投入更加经济、高效,从而保证利润最大化。项目管理是开放的、连续的,为了提高过程的效果和效率,须持续改进过程,改进的目的是不断满足项目需求。作为项目经理,就是要在项目实施中严格按照公司的质量管理体系执行,从项目的需求分析开始,到项目交付为止,做到同策划、同安排、同实施、同验收、同总结,将质量管理工作贯穿于整个项目的过程,即需求分析、方案设计、工程实施、工程交验,后续维护等。
2025-06-12 08:39:16
682
原创 TCP 网络调试工具详细设计
本 TCP 网络调试工具旨在提供一个便捷的平台,用于测试和调试 TCP 网络通信。该工具支持服务器和客户端两种模式,允许用户在本地网络中进行数据的发送和接收,并实时监控网络连接状态和数据传输情况。本 TCP 网络调试工具通过 MFC 框架和 Winsock 库实现了服务器和客户端的 TCP 网络通信功能。通过详细的设计和实现,该工具具有良好的用户界面和稳定性,能够满足用户在 TCP 网络调试方面的需求。在后续的开发中,可以进一步优化工具的性能,增加更多的功能,如数据解析、协议支持等。
2025-06-12 08:31:13
760
原创 TCP 套接字与 Socket 编程基础入门
std::cout << "客户端连接成功:" << client_ip << ":" << ntohs(client_addr.sin_port) << std::endl;// 监听端口(需大于1024避免权限问题)std::cout << "服务器响应:" << buffer << std::endl;std::cout << "服务器启动成功,监听端口 8080..." << std::endl;std::cout << "收到数据:" << buffer << std::endl;
2025-06-12 06:01:14
283
原创 ateⅹⅰt()的用法
在C/C++中, atexit() 函数用于注册程序退出时需要调用的函数,即使程序通过 main() 函数返回、 exit() 函数退出或异常终止,这些注册的函数也会被执行。- 与exit()的关系: exit() 函数会触发 atexit() 注册的函数,而 main() 返回等价于调用 exit(返回值)。- 注册多个函数:可多次调用 atexit() 注册多个函数,执行顺序与注册顺序相反(后进先出)。// 注册退出函数:atexit()可多次调用,按注册顺序的逆序执行。
2025-06-11 21:30:49
59
原创 c++中main函数执行完后还执行其它语句吗?
不存在 main 函数体外的可执行语句——因为编译器会将 main 函数视为程序的起点和终点,函数外的代码会被视为语法错误(除非是全局作用域的声明或定义,如变量、函数声明等,但这些不属于“可执行语句”)。这种情况下,析构函数的执行是 main 结束流程的一部分,并非“额外执行的语句”,本质上仍属于 main 函数结束时的资源清理操作。如果 main 函数中创建了具有析构函数的对象(如类的实例),当 main 结束时,系统会自动调用这些对象的析构函数。// main结束时,t的析构函数会被自动调用。
2025-06-11 21:27:22
306
原创 # include<heαd.h>和# include″heαd.h″的区别
搜索路径:编译器会优先在系统默认的头文件目录中查找(例如Linux下的 /usr/include ,Windows下的MSVC安装路径等),不会在当前源文件所在目录查找。- 包含标准库头文件时,用 <> ,例如: #include <iostream> #include <string>。- 包含自定义头文件(如同一项目中的 .h 文件)时,用 "" ,例如: #include "myHeader.h"。- 搜索路径:编译器会先在当前源文件所在的目录中查找,若未找到,再去系统默认目录中查找。
2025-06-11 21:22:44
120
原创 C++与C有什么不同
C++:虽然也支持指针,但引入了引用,在很多场景下可以替代指针,减少了指针使用的复杂性。- C++:标准库更丰富,除了包含C语言的标准库外,还增加了STL(标准模板库),包含容器(如vector、map)、算法(如sort、find)、迭代器等。- C++:除了C语言的内存管理方式外,还引入了 new 和 delete 运算符,自动调用构造函数和析构函数,在一定程度上简化了内存管理。- C++编译器:除了编译功能外,还会处理C++特有的语法特性,如函数重载的名称修饰等。
2025-06-11 21:16:25
258
原创 C语言标识符、关键字、注释、表达式和语句
标识符就是程序员自己起的名字,除了变量名,后面还会讲到函数名、宏名、结构体名等,它们都是标识符。C语言规定,标识符只能由字母(A~Z, a~z)、数字(0~9)和下划线(_)组成,并且第一个字符必须是字母或下划线,不能是数字。标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号,因此,命名应尽量有相应的意义,以便于阅读和理解,作到“顾名思义”。定义变量时,我们使用了诸如 a、abc、mn123 这样的名字,它们都是程序员自己起的,一般能够表达出变量的作用,这叫做标识符(Identifier)。
2025-06-11 17:58:34
353
原创 关于指针的那些事
h) 一个有10个函数指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数。g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数。c) 一个指向指针的的指针,它指向的指针是指向一个整型数。f) 一个指向有10个整型数数组的指针。d) 一个有10个整型数的数组。b) 一个指向整型数的指针。
2025-06-11 14:02:48
270
原创 CTime时间转换为字符串2025-06-11 08:52:54的几种方法
在 MFC 或 Windows 编程中,CTime 类提供了多种方式将时间对象转换为特定格式的字符串。
2025-06-11 08:56:27
136
原创 在C++ UI编程中,什么是暗黑模式
在C++ UI编程里,暗黑模式(Dark Mode) 是一种界面设计风格,主要特点是把界面背景设为深色(像黑色、深灰),文字和控件元素用浅色(比如白色、浅灰),形成高对比度的视觉效果。- 可能需要根据模式切换来动态更新界面资源,比如用 QSS (Qt样式表)或自定义绘制函数。- 节省功耗:要是设备用的是OLED屏幕,暗黑模式下黑色像素不发光,能起到省电的作用。- 降低视觉疲劳:在光线较暗的环境中,深色背景能减少屏幕对眼睛的刺激。- 调整图标、边框等元素的样式,保证在深色主题下显示正常。
2025-06-11 07:13:26
69
原创 将两个变量a,b的值进行交换,不使用任何中间变量
std::cout << "原始值: a = " << a << ", b = " << b << std::endl;std::cout << "交换后: a = " << a << ", b = " << b << std::endl;std::cout << "原始值: x = " << x << ", y = " << y << std::endl;std::cout << "交换后: x = " << x << ", y = " << y << std::endl;// a ^ b的结果存入a。
2025-06-10 22:19:42
232
原创 有符号变量与无符号变量的区别和联系
范围:以int为例(假设4字节),范围为 -2^31 ~ 2^31-1 (即 -2147483648 ~ 2147483647 )。- 范围:以unsigned int为例,范围为 0 ~ 2^32-1 (即 0 ~ 4294967295 )。// 补码表示为全1,转换后u=4294967295(2^32-1)数值范围 正负值区间(如-2^n ~ 2^n-1) 非负值区间(0 ~ 2^(n+1)-1)// 取模2^32,v=0。// 错误示例:i为-1时,循环不会执行(-1转换为无符号数是大数)
2025-06-10 22:13:06
349
原创 编程风格良好的条件比较语句
if (age >= 18 && type == "student") { ... } // 条件过长时可读性差。// 必须包含default。if (num == 10) { ... } // 误写为num = 10时,编译无错但逻辑错误。if (isReady == true) { ... } // 等价于if (isReady)if (10 == num) { ... } // 若误写为10 = num,编译报错。if (vec.size() == 0) { ... } // 效率低于empty()
2025-06-10 22:07:40
433
原创 i++与++i的区别
后自增 i++ :先取值,再自增 → 返回临时值 → 适用于需要原始值的场景。// 合法,i先加1变为6,再被赋值为10 → i=10。- 前自增 ++i :先自增,再取值 → 返回引用 → 效率更高(类对象场景)。// i先变为6,再将6赋给j → i=6,j=6。// 先将5赋给j,i再变为6 → i=6,j=5。// 编译错误,i++返回的是临时值(5),无法赋值。- i++ (后自增):先使用变量的原始值,再将值加1。- ++i (前自增):先将变量值加1,再使用新值。
2025-06-10 22:02:54
284
原创 C++中变量赋值有几种形式
直接赋值和列表初始化是基础场景的常用方式,而拷贝/移动赋值、构造函数初始化则更多用于类对象或资源管理。Person(string n, int a) : name(n), age(a) {} // 构造函数初始化。// vec1的资源转移给vec2。Data& operator=(const Data& other) { // 赋值运算符重载。// 拷贝初始化obj1。// 调用构造函数赋值。使用 = 符号,但本质是通过拷贝构造函数完成赋值(适用于类对象)。// 等价于int b = 20;
2025-06-10 21:48:27
44
原创 利用最小二乘法找圆心和半径
std::cout << "真实圆心: (" << trueCenterX << ", " << trueCenterY << "), 真实半径: " << trueRadius << std::endl;std::cout << "计算圆心: (" << centerX << ", " << centerY << "), 计算半径: " << radius << std::endl;<< ", 半径=" << fabs(radius - trueRadius) << std::endl;
2025-06-10 20:39:14
321
原创 visual studio 2022更改主题为深色
在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色。点击visual studio 上方的 工具-> 选项。
2025-06-10 15:34:04
177
原创 学好C语言的关键点
指针的理解与运用:指针是C语言的核心特色,它可以让程序员直接操作内存,实现对数据的灵活访问和处理,但也容易引发错误。要深入理解指针的概念、指针与数组的关系、指针的运算等,通过大量实践掌握其用法。- 语法知识:认真研读经典的C语言教材,如《C Primer Plus》《C语言程序设计》等,深入理解变量、数据类型、控制结构、函数、指针等基础概念,掌握它们的用法和规则。- 算法与数据结构:掌握常见的算法和数据结构,如排序算法、链表、栈、队列等,它们是编写高效C语言程序的基础,能够提高程序的性能和效率。
2025-06-10 07:10:19
65
原创 复制构造函数是什么?什么情况下会用到它?什么是深复制和浅复制?
浅复制:在浅复制中,新对象的成员变量直接复制原始对象的成员变量的值。对于基本数据类型的成员变量,这种复制方式没有问题,但对于指针类型的成员变量,浅复制只是复制了指针的值,使得新对象和原始对象的指针指向同一块内存空间。- 深复制:深复制不仅复制对象的成员变量的值,还会为指针类型的成员变量分配新的内存空间,并将原始对象中指针所指向的内容复制到新的内存空间中。这样,新对象和原始对象就有了各自独立的内存空间,对一个对象的修改不会影响另一个对象,在对象销毁时也能正确地释放各自的内存。
2025-06-10 06:30:46
125
原创 队列和栈的区别
用数组实现栈时,通常将数组的一端作为栈顶,通过移动栈顶指针来进行入栈和出栈操作。用链表实现栈时,将链表的头节点作为栈顶,插入和删除节点都在头节点处进行,操作相对简单。用数组实现时,需要考虑队列满和队列空的情况,以及如何高效地进行入队和出队操作。例如,在函数调用时,函数的参数、局部变量等会被压入栈中,当函数执行完毕后,再从栈中弹出相关信息。- 栈:所有的插入和删除操作都在栈的同一端进行,这一端被称为栈顶。- 队列:在队列的一端进行插入操作(称为入队),在另一端进行删除操作(称为出队)。
2025-06-10 06:27:15
308
原创 禸联函数与宏有什么区别?
宏在定义时要小心处理宏参数(一般情况是把参数用括号括起来),否则容易出现二义性。而内联函数定义时不会出现二义性。- 在编译的时候内联函数可以直接被嵌入到目标代码中,而宏只是一个简单的文本替换。- 内联函数可以完成诸如类型检测、语句是否正确等编译功能,宏就不具有这样的功能。- 内联函数在编译时展开,宏在预编译时展开。- 宏不是函数,inline函数是函数。
2025-06-08 20:34:13
99
原创 为什么不把所有的函数都定义成禸联函数?
内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。一方面,如果执行函数体内代码的时间相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。一个好的编译器将会根据函数的定义体,自动地取消不值得的内联(这说明了inline不应该出现在函数的声明中)。- 如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。- 如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
2025-06-08 20:29:26
129
原创 为什么要引入内联函数?
内联函数可以像普通函数一样被调用,具有良好的封装性和可读性。同时,在需要修改函数功能时,只需要在一个地方修改内联函数的定义,而不需要在每个调用处进行修改,便于代码的维护和管理。在这个例子中, add 函数被定义为内联函数,在编译时,编译器可能会将 add 函数的代码直接插入到 main 函数中调用 add 的地方,从而提高程序的执行效率。- 虽然内联函数会将函数体插入到调用处,但如果内联函数的代码量较小,那么相对于多次函数调用的代码,整体代码量可能并不会增加很多,反而能提高效率。
2025-06-08 20:24:52
206
原创 sizeof 与strlen的区别
sizeof 是一个操作符,用于计算数据类型或变量在内存中所占的字节数,它是在编译时确定的,与数据的实际内容无关,可用于任何数据类型,包括基本数据类型(如 int 、 char 等)、数组、结构体、指针等。- strlen 是一个函数,用于计算字符串的长度,即字符串中字符的个数,不包括字符串结束符 \0 ,它是在运行时计算的,并且只适用于以 \0 结尾的字符串。
2025-06-08 20:18:45
336
原创 什么是函数对象
在C++中,函数对象(Function Object)又称仿函数(Functor),是通过定义 operator() 运算符重载的类或结构体实例,使其行为类似函数。// 创建函数对象实例。
2025-06-08 20:04:13
419
原创 UDP 与 TCP 的区别是什么?
TCP:由于要保证数据的可靠性,需要进行大量的控制和管理操作,如确认、重传、流量控制等,所以传输效率相对较低,延迟相对较高。- TCP:面向连接,在数据传输前需要通过三次握手建立连接,传输完成后要通过四次挥手关闭连接,能确保数据传输的可靠性。- UDP:无连接,发送数据前不需要建立连接,也不维护连接状态,因此UDP的通信效率较高,适合对实时性要求高的场景。- UDP:传输效率高,因为它没有连接建立和维护的开销,也没有复杂的确认和重传机制,数据传输速度快,延迟低。
2025-06-08 19:46:55
415
原创 两台路由器如何串联
设置要点:第一台路由器正常设置,开启DHCP服务器。第二台路由器需设置WAN口连接方式,通常选择动态IP(如果第一台路由器分配的是动态IP),并可根据需要修改LAN口的IP地址,避免与第一台路由器的LAN口IP在同一网段,同时开启第二台路由器的DHCP服务器。- 连接方法:用一根网线将第一台路由器的LAN口与第二台路由器的WAN口相连。
2025-06-07 10:19:47
360
原创 EditPlus中.nut文件自动完成--acp配置文件解释
你可以根据需要扩展这个文件,添加更多的代码模板:plaintextfunction ^!()return;;*/这样,当你输入function并触发自动完成时,会得到一个完整的函数定义模板。
2025-06-06 14:07:58
178
WinSCP 是 Windows 环境下出色的开源图形化 SFTP 客户端,也支持 SCP 协议
2025-04-16
Restart on Crash 是一款免费的 Windows 系统进程监控软件
2025-04-16
适用于VS2022的 VA Assist(全称 Visual Assist)是一款由 Whole Tomato Software 公司开发的非常强大的 Visual Studio 插件
2025-04-15
libmodbus编译好的windows x86 版本的dll
2025-04-11
Astyle3.6.4 可执行文件
2025-03-29
boost::asio 库源码1.30.2
2025-03-27
C++11 引入的范围基 for 循环(Range-based for loop),测试代码
2025-03-27
基于OpenGL和SolidWorks的机械系统运动仿真原理及实现
2024-12-11
一个有10年工作经验的工程师对modbus协议总结 包括ModbusASCII 、ModbusRTU、ModbusTcp 报文
2024-07-04
qt5.7windows下开发环境搭建和一个例子
2024-06-28
UR5机械臂的TCP/IP控制
2024-04-07
Windows平台上达梦数据库的ODBC驱动包(64位)
2023-11-17
Windows平台上达梦数据库的ODBC驱动包(32位)
2023-11-16
如何让Editplus支持squirrel语言
2022-05-22
qt开发的上位机程序源码。
2022-02-28
使用QMediaPlayer开发音乐播放器
2025-06-10
使用QMediaPlayer开发音乐播放器源码
2025-06-10
一个功能强大的计算器,集表达式计算、线性代数工具、超大整数计算工具
2025-04-24
VC++写的音乐播放器源码
2025-04-23
mychess250422,由VS2010 +MFC 写的中国象棋程序源码 可实现人机对抗、悔棋、走棋音效
2025-04-23
opencv-2.4.10
2025-04-17
Modbus Poll 64位
2025-04-16
GeoGebra 是一款自由且跨平台的动态数学软件、适用于各级教育 它融合了几何、代数、微积分统计等多种功能
2025-04-16
Astyle 3.6.5 源码
2025-04-16
Azure Kinect SDK 是微软为 Azure Kinect DK 硬件设备量身打造的软件开发工具包,可助力开发者高效利用该设备的各项功能进行应用程序开发
2025-04-16
git 2.32.0-64位安装文件
2025-04-16
std for-each学习笔记
2025-04-16
范围基 for 循环学习笔记
2025-04-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人