当前位置: 首页 > news >正文

【数据库课程设计】网上投票管理系统

目录

前言:

一,系统需求分析

1,需求概述

2,系统功能图

3,业务流程图 

业务流程分析

业务流程图

4,数据流程图 

5,数据字典 

二,概念结构设计

1,实体分析

2,属性分析

3,联系分析

4,概念模型分析(CDM图) 

三,逻辑结构设计

逻辑结构模型

逻辑结构图 (LDM)

四,物理结构设计

1,表设计

2,建表sql语句

3,物理结构(PDM图)

五,数据库功能实现及界面展示

1,确定数据库需要创建的对象

视图

自定义函数 

存储过程 

触发器 

2,界面布局及实现

遇到的问题: 

源码:


前言:

开发环境:SQL Server 2022,Qt Creator 4.11.1 (Community)

源码在文章末尾

结果预览:

屏幕录制 2025-05-20 183909

一,系统需求分析

1,需求概述

(1)应用系统背景

随着互联网技术的发展,传统线下投票方式(如纸质投票、会议举手表决等)逐渐暴露出效率低、成本高、统计复杂、安全性差等问题。网上投票管理系统旨在通过数字化手段实现投票流程的自动化,支持多场景投票需求(如企业决策、校园活动、社会调研等),提供高效、安全、透明的投票服务。

系统目标

  1. 提高投票效率和准确性,减少人工统计错误;

  2. 支持匿名/实名投票、单选/多选、限时投票等多种模式;

  3. 保障数据安全性,防止刷票、篡改等恶意行为;

  4. 提供友好的用户界面和实时结果可视化功能。

(2)组织结构情况

  • 普通用户:参与投票、查看投票结果。

  • 管理员:创建/管理投票活动、审核用户身份、设置投票规则。

  • 审核员:对敏感投票内容进行人工审核。

  • 系统管理员:维护系统安全与数据库。

(3)需求分析过程

1,需求收集方法:

  • 问卷调查:面向企业、学校等潜在用户,收集投票场景需求。

  • 竞品分析:研究现有投票系统(如腾讯投票、问卷星)的功能优缺点。

  • 专家访谈:与信息安全专家讨论防刷票、数据加密方案。

2,核心需求整理

  • 功能性需求

    • 用户注册/登录(支持手机号、邮箱、第三方登录);

    • 投票创建(设置标题、选项、截止时间、投票规则);

    • 投票参与(匿名/实名模式、防重复提交);

    • 结果统计(实时图表展示、数据导出为Excel/PDF);

    • 审核机制(敏感词过滤、人工审核流程)。

  • 非功能性需求

    • 性能:支持1000人同时在线投票,响应时间<2秒;

    • 安全性:HTTPS传输、数据库加密、IP限制防刷票;

    • 兼容性:适配PC、手机浏览器及微信小程序。

2,系统功能图

3,业务流程图 

业务流程分析

1,用户注册与身份验证流程

  • 新用户通过邮箱/手机号注册,系统验证唯一性后创建账户。
  • 管理员可对用户信息进行审核。

2,投票创建与发布流程

  • 管理员填写投票基本信息(标题,选项,截止时间等等)
  • 审核通过后 ,投票进入“已发布”状态,用户可见。

3,用户参与投票流程

  • 用户选择投票活动,根据规则(实名/匿名)提交选择。
  • 系统校验用户权限。
  • 投票实时记录,并写入数据库。

4,投票处理流程

  • 投票时间到后,系统自动关闭并锁定数据。
  • 支持查看投票结果。

业务流程图

 

4,数据流程图 

5,数据字典 

1,用户表(User)

表说明
存储系统用户信息,支持角色权限管理。用户名和邮箱需唯一,密码加密存储。

字段名数据类型长度是否允许为空默认值键/索引说明
UserIDINT11主键用户唯一标识,自增
UsernameNVARCHAR50唯一索引用户名
PasswordNVARCHAR128密码
EmailNVARCHAR100用户邮箱
RoleNVARCHAR10'user'索引用户角色
CreatedAtDATETIME-GETDATE()用户注册时间

2,投票主表(Vote)

表说明
存储投票活动的基本信息,通过外键关联创建者。状态字段控制投票生命周期。

字段名数据类型长度是否允许为空默认值键/索引说明
VoteIDINT11主键投票唯一标识,自增
TitleNAVRCHAR100投票标题
CreatorIDINT11外键User投票创建者 ID
IsAnonymousBIT0是否匿名投票:0(实名),1(匿名)
MaxChoicesINT111用户最多可选选项数(单选/多选)
EndTimeDaATETIME否 索引投票结束时间
StatusNVARCHAR10'draft'联合索引状态:draft(草稿),published(已发布),closed(已关闭)

3,投票选项表(VoteOption)

表说明
存储投票的选项信息,每个投票可包含多个选项,通过外键关联投票主表。

字段名数据类型长度是否允许为空默认值键/索引说明
OptionIDINT11主键选项唯一标识,自增
VoteIDINT11外键->Vote关联的投票ID
OptionTextNVARCHAR200选项文本内容

 4,投票记录表(VoteRecord)

表说明
记录用户投票行为,匿名投票时UserID为NULL。通过唯一约束(UserID+VoteID)防止重复投票。

字段名数据类型长度是否允许为空默认值键/索引说明
RecordIDINT11主键投票记录唯一标识,自增
VoteIDINT11外键->Vote关联投票ID
UserIDINT11NULL外键->User投票用户ID,匿名时为NULL
OptionIDINT11外键->VoteOption用户选择的选项ID
VoteTimeDATETIMEGETDATE()索引投票提交时间
IPAddressNVARCHAR45用户投票时的投票IP

5,审核日志表 (AuditLog)

表说明
记录投票审核的操作日志,确保投票内容的合规性。

字段名数据类型长度是否允许为空默认值键/索引说明
LogIDINT11主键唯一标识 ,自增
VoteIDINT11外键->Vote被审核的投票ID
AuditorLogINT11外键->User审核员用户ID
ActionNVARCHAR10审核操作:通过,驳回
CommentNVARCHAR(MAX)NULL审核意见(文本)
AuditTimeDATETIMEGETTIME()审核时间

二,概念结构设计

数据库概念结构设计是指将系统需求转化为一个抽象的信息结构,即概念模型。

1,实体分析

实体识别,核心实体:

User(用户),Vote(投票),VoteOpston(投票选项),VoteRecord(投票记录),AyditLog(审核日志)

2,属性分析

实体特征:

为每个实体定义唯一标识符(主键)和描述性属性。

为每个实体定义唯一标识(主键约束),然后根据业务需求确立其他字段。(如非空、唯一性、默认值)。

  • User 实体UserID(主键)、UsernamePasswordRole

  • Vote 实体VoteID(主键)、TitleEndTimeStatus

3,联系分析

  • 根据业务流程分析实体间交互(如用户创建投票、用户选择选项)。

  • 确定关系基数(1:1、1:N、M:N)。

实体与实体之间的关系:

确定关系基数,用户:投票=1:n(一个用户可以创建多个投票活动)

投票:选项=1:n(一个投票包含多个选项)等等。

实体关系模型:E-R图如下

4,概念模型分析(CDM图) 

三,逻辑结构设计

数据库的逻辑设计的任务是把概念设计阶段设计好的基本E-R图转换为与选用的具体机器上的DBMS所支持的数据模型相符合的逻辑结构。根据ER图 写出关系模式,并标出主键外键。

1,实体到表的转换

每个实体映射为一张表,属性转换为表的字段。关系模型的基本映射规则(实体-表,属性-列)。示例:User实体->User表;Vote实体->Vote表。

2,关系处理

1:n关系:通过外键在“多”端表中引用“一”端表中的主键。

3,主键与唯一键约束

主键(Primary Key):每个表定义唯一标识符。如自增(auto increment)

唯一性约束:防止数据重复,如用户名唯一。

逻辑结构模型

1,用户表(User)

字段名数据类型约束说明
UserIDINTPRIMARY KEY IDENTITY用户唯一标识
UsernameNVARCHAR(50)UNIQUE NOT NULL用户名(唯一)
PasswordNVARCHAR(128)NOT NULL密码(加密)
EmailNVARCHAR(100)NOT NULL用户邮箱
RoleNVARCHAR(10)CHECK (Role IN ('user','admin','auditor')) DEFAULT 'user'用户角色
CreatorAtDATETIMEDEFAULT GETDATE()注册时间

2,投票主表(Vote)

字段名数据类型约束说明
VoteIDINTPRIMARY KEY IDENTITY投票唯一
TitleNVARCHAR(100)NOT NULL投票标题
CreatorIDINTFOREIGN KEY REFERENCES User(UserID) 创建者ID
IsAnonymousBITDEFAULT 0

0实名,

1匿名

MaxChoicesINTDEFAULT 1最多可选数
EndtimeDATETIMENOT NULL截止时间
StatusNVARCHAR(10)CHECK (Status IN ('draft','published','closed')) DEFAULT 'draft'投票状态

3,投票选项表(VoteOption)

字段名数据类型约束说明
OptionIDINTPRIMARY KEY IDENTITY选项唯一标识
VoteIDINTFOREIGN KEY REFERENCES Vote(VoteID)所属投票ID
OptionTextNVARCHAR(200)NOT NULL选项文本内容

4,投票记录表(OptionRecord)

字段名数据类型约束说明
RecordIDINTPRIMARY KEY INENTITY记录唯一标识
VoteIDINTFOREIGN KEY REFERENCES Vote(VoteID) 关联投票ID
UserIDINTFOREIGN KEY REFERENCES User(UserID)投票用户ID
OptionIDINTFOREIGN KEY REFERENCES VoteOption(OptionID)用户选择的选项ID
VoteTimeDATETIMEDEFAULT GETDATE()投票时间
IPAddressNVARCHAR(45)NOT NULL用户IP地址

5,审核日志表 (AuditLog)

字段名数据类型约束说明
LogIDINTPRIMARY KEY IDENTITY日志唯一标识
VoteIDINTFOREIGN KEY REFERENCES Vote(VoteID)被审核的投票ID
AuditorIDINTFOREIGN KEY REFERENCES User(UserID)审核员ID
ActionNVARCHAR(10)CHECK (Action IN ('approve','reject'))审核操作
CommentNVARCHAR(200)NULL审核意见
AuditTimeDATETIMEDEFAULT GETDATE()审核时间

逻辑结构图 (LDM)

四,物理结构设计

1,表设计

存储优化:

使用NVARCHAR存储多语言文本(如中文,符号等等)。

自增主键IEDNTITY(1,1)替身插入性能。

完整性约束:

级联删除:删除用户时自动清理其生成的投票(ON DELETE CASCADE)

索引策略:

高频查询字段:Vote表中的Status和EndTime联合索引,加速查询。

时间范围查询:VoteRecord表中的VoteTime创建索引。

安全设计:

密码字段使用SHA2_256(哈希算法)。

匿名投票时,强制IPAddress非空。

2,建表sql语句

注:下面 的建表语句中,有的表的名称 加上了[ ],目的是避免你创建的表,或查询与一些SQL SERVER自带的关键字发生冲突

比如下面创建了一个的User表,而系统中也包含这一张表,所以需要加上[ ],避免冲突。

-- 1. 用户表
CREATE TABLE [User](UserID INT IDENTITY(1,1) PRIMARY KEY,Username NVARCHAR(50) NOT NULL UNIQUE,Password NVARCHAR(128) NOT NULL,Email NVARCHAR(100),Role NVARCHAR(10) CHECK (Role IN ('user', 'admin', 'auditor')) DEFAULT 'user',CreatedAt DATETIME NOT NULL DEFAULT GETDATE()
);
GO-- 2. 投票主表
CREATE TABLE Vote (VoteID INT IDENTITY(1,1) PRIMARY KEY,Title NVARCHAR(100) NOT NULL,CreatorID INT NOT NULL FOREIGN KEY REFERENCES [User](UserID) ON DELETE CASCADE,IsAnonymous BIT NOT NULL DEFAULT 0,MaxChoices INT NOT NULL DEFAULT 1 CHECK (MaxChoices > 0),EndTime DATETIME NOT NULL,
);
GO-- 3. 投票选项表
CREATE TABLE VoteOption (OptionID INT IDENTITY(1,1) PRIMARY KEY,VoteID INT NOT NULL FOREIGN KEY REFERENCES Vote(VoteID) ON DELETE CASCADE,OptionText NVARCHAR(200) NOT NULL
);
GO-- 4. 投票记录表
CREATE TABLE VoteRecord (RecordID INT IDENTITY(1,1) PRIMARY KEY,VoteID INT NOT NULL FOREIGN KEY REFERENCES Vote(VoteID) ON DELETE NO ACTION ,UserID INT NULL FOREIGN KEY REFERENCES [User](UserID)  ON DELETE SET NULL,OptionID INT NOT NULL FOREIGN KEY REFERENCES VoteOption(OptionID) ON DELETE NO ACTION ,VoteTime DATETIME NOT NULL DEFAULT GETDATE(),IPAddress NVARCHAR(45) NOT NULL,-- 唯一约束防止重复投票(匿名投票需程序补充IP校验)CONSTRAINT UK_User_Vote UNIQUE (UserID, VoteID)
);
GO-- 5. 审核日志表
CREATE TABLE AuditLog (LogID INT IDENTITY(1,1) PRIMARY KEY,VoteID INT NOT NULL FOREIGN KEY REFERENCES Vote(VoteID) ON DELETE CASCADE,AuditorID INT NOT NULL FOREIGN KEY REFERENCES [User](UserID),Action NVARCHAR(10) NOT NULL CHECK (Action IN ('approve', 'reject')),Comment NVARCHAR(MAX) NULL,AuditTime DATETIME NOT NULL DEFAULT GETDATE()
);
GO-- 6. 索引设计
CREATE INDEX idx_User_Role ON [User] (Role);
CREATE INDEX idx_Vote_Status_EndTime ON Vote (Status, EndTime);
CREATE INDEX idx_VoteRecord_VoteTime ON VoteRecord (VoteTime);
CREATE INDEX idx_AuditLog_AuditTime ON AuditLog (AuditTime);

3,物理结构(PDM图)

五,数据库功能实现及界面展示

1,确定数据库需要创建的对象

视图

视图(views):简化复杂查询,如统计投票结果,显示待审核的投票。

投票结果视图:展示已发布投票的每个选项得票数

CREATE VIEW vw_VoteResults AS
SELECT v.VoteID,v.Title,vo.OptionID,vo.OptionText,COUNT(vr.OptionID) AS VoteCount
FROM Vote v
JOIN VoteOption vo ON v.VoteID = vo.VoteID
LEFT JOIN VoteRecord vr ON vo.OptionID = vr.OptionID
GROUP BY v.VoteID, v.Title, vo.OptionID, vo.OptionText;

待审核投票视图:列出所有状态为"草稿"的 视图,包含创建者及截止时间。

CREATE VIEW vw_PendingAudits AS
SELECT v.VoteID,v.Title,u.Username AS Creator,v.CreatedAt,v.EndTime
FROM Vote v
JOIN [User] u ON v.CreatorID = u.UserID
WHERE v.Status = 'draft';

用户投票记录视图:仅显示实名投票记录,包含用户,投票及选项信息。

CREATE VIEW vw_UserVoteHistory AS
SELECT u.UserID,u.Username,v.VoteID,v.Title,vo.OptionText AS VotedOption,vr.VoteTime
FROM VoteRecord vr
JOIN [User] u ON vr.UserID = u.UserID
JOIN Vote v ON vr.VoteID = v.VoteID
JOIN VoteOption vo ON vr.OptionID = vo.OptionID
WHERE v.IsAnonymous = 0;

删除投票视图

--CREATE PROCEDURE sp_DeleteVote
--    @VoteID INT,
--    @RequesterUserID INT
--AS
--BEGIN
--    BEGIN TRY
--        BEGIN TRANSACTION--        --  验证权限:仅管理员或创建者可删除
--        IF NOT EXISTS (
--            SELECT 1 
--            FROM Vote 
--            WHERE VoteID = @VoteID 
--            AND (
--                CreatorID = @RequesterUserID 
--                OR EXISTS (
--                    SELECT 1 
--                    FROM [User] 
--                    WHERE UserID = @RequesterUserID 
--                    AND Role = 'admin'
--                )
--            )  
--        )
--        BEGIN
--            RAISERROR('无权删除该投票', 16, 1)
--            RETURN
--        END--        -- 执行删除(触发器处理级联删除)
--        DELETE FROM Vote 
--        WHERE VoteID = @VoteID--        COMMIT TRANSACTION
--    END TRY
--    BEGIN CATCH
--        IF @@TRANCOUNT > 0
--            ROLLBACK TRANSACTION;
--        THROW;  -- 抛出原始错误
--    END CATCH
--END

自定义函数 

自定义函数::用于业务逻辑,如检查用户是否已投票、计算选项得票数。

检查用户是否已投票(防止重复投票)

CREATE FUNCTION dbo.fn_HasUserVoted (@UserID INT,@VoteID INT
)
RETURNS BIT
AS
BEGINDECLARE @Result BIT = 0;IF EXISTS (SELECT 1 FROM VoteRecord WHERE UserID = @UserID AND VoteID = @VoteID)SET @Result = 1;RETURN @Result;
END;

存储过程 

存储过程:封装业务操作,如创建投票、提交投票、审核投票。

创建投票:

CREATE PROCEDURE sp_CreateVote@Title NVARCHAR(100),@CreatorID INT,@IsAnonymous BIT,@MaxChoices INT,@EndTime DATETIME,@Options NVARCHAR(MAX) -- JSON格式: ["Option1", "Option2"]
AS
BEGINBEGIN TRANSACTION;-- 插入投票主表INSERT INTO Vote (Title, CreatorID, IsAnonymous, MaxChoices, EndTime)VALUES (@Title, @CreatorID, @IsAnonymous, @MaxChoices, @EndTime);DECLARE @VoteID INT = SCOPE_IDENTITY();-- 解析并插入选项INSERT INTO VoteOption (VoteID, OptionText)SELECT @VoteID, [value]FROM OPENJSON(@Options);-- 自动触发敏感词检测IF EXISTS (SELECT 1 FROM VoteOption WHERE VoteID = @VoteIDAND dbo.fn_CheckSensitiveWords(OptionText) = 1)BEGIN-- 存在敏感词,状态设为待审核UPDATE Vote SET Status = 'draft' WHERE VoteID = @VoteID;ENDELSEBEGIN-- 无敏感词,直接发布UPDATE Vote SET Status = 'published' WHERE VoteID = @VoteID;ENDCOMMIT TRANSACTION;
END;

用户提交投票:

CREATE PROCEDURE sp_SubmitVote@VoteID INT,@UserID INT, -- 匿名时为NULL@OptionIDs NVARCHAR(MAX), -- JSON格式: [1, 2]@IPAddress NVARCHAR(45)
AS
BEGINBEGIN TRYBEGIN TRANSACTION;-- 检查投票是否有效IF NOT EXISTS (SELECT 1 FROM Vote WHERE VoteID = @VoteID AND Status = 'published'AND EndTime > GETDATE())RAISERROR('投票不存在或已截止!', 16, 1);-- 检查选项数量DECLARE @OptionCount INT = (SELECT COUNT(*) FROM OPENJSON(@OptionIDs));IF @OptionCount > (SELECT MaxChoices FROM Vote WHERE VoteID = @VoteID)RAISERROR('超出最大可选数量!', 16, 1);-- 实名投票检查重复IF @UserID IS NOT NULL AND dbo.fn_HasUserVoted(@UserID, @VoteID) = 1RAISERROR('您已参与过本次投票!', 16, 1);-- 匿名投票检查IP限制IF @UserID IS NULL AND EXISTS (SELECT 1 FROM VoteRecord WHERE VoteID = @VoteID AND IPAddress = @IPAddressAND VoteTime >= DATEADD(HOUR, -24, GETDATE()))RAISERROR('同一IP24小时内仅能投票一次!', 16, 1);-- 插入投票记录INSERT INTO VoteRecord (VoteID, UserID, OptionID, IPAddress)SELECT @VoteID, @UserID, [value], @IPAddressFROM OPENJSON(@OptionIDs);COMMIT TRANSACTION;END TRYBEGIN CATCHROLLBACK TRANSACTION;THROW;END CATCH
END;

触发器 

触发器:触发器是一种特殊的存储过程,它会在特定的数据库事件(如插入,删除,更新等等)发生时自动执行。触发器与表直接关联,用于在数据变动时,完成某些业务逻辑,从而保证数据的一致性,完整性和自动化处理。

自动更新选项的票数:每次插入投票记录时,对应选项的 VoteCount字段自动+1

CREATE TRIGGER trg_UpdateVoteCount
ON VoteRecord
AFTER INSERT
AS
BEGINUPDATE voSET vo.VoteCount = vo.VoteCount + 1FROM VoteOption voJOIN inserted i ON vo.OptionID = i.OptionID;
END;

防止修改已结束的投票:拦截对已截止投票的修改操作,确保数据不可变性。

CREATE TRIGGER trg_PreventModifyClosedVote
ON Vote
INSTEAD OF UPDATE
AS
BEGINIF UPDATE(EndTime) OR UPDATE(Status)BEGINIF EXISTS (SELECT 1 FROM inserted iJOIN deleted d ON i.VoteID = d.VoteIDWHERE d.EndTime < GETDATE())RAISERROR('投票已截止,禁止修改!', 16, 1);ELSEUPDATE vSET Title = i.Title,EndTime = i.EndTime,Status = i.StatusFROM Vote vJOIN inserted i ON v.VoteID = i.VoteID;END
END;

2,界面布局及实现

程序开始界面

登录/注册界面

 
 

 

主页面

遇到的问题: 

在进行新建投票的操作过程中,出现userID冲突的过程。找了半天是在用户登录注册代码部分,获取userID时,由于通过map查找userID时,字符串大小写搞错了,一直获取的是同一个userID。

还有就是对于选项表,起初的想法是按照数组的特点,每个选项对应一个下标,运行后才发现这样做使得OptionID发生冲突,也就是发生主键冲突。解决办法是将每个选项的文本和它的选项ID拼接在一起,获取选项ID的时候,直接取选项的第一个字符然后转为整数(先这么做,这里看到会存在问题的)。

源码:

网上投票系统: 这是一个数据库课程设计,关于网上投票管理系统的,使用到的技术QT,使用的数据库SQL-Server - Gitee.com

相关文章:

【数据库课程设计】网上投票管理系统

目录 前言&#xff1a; 一&#xff0c;系统需求分析 1&#xff0c;需求概述 2&#xff0c;系统功能图 3&#xff0c;业务流程图 业务流程分析 业务流程图 4&#xff0c;数据流程图 5&#xff0c;数据字典 二&#xff0c;概念结构设计 1&#xff0c;实体分析 2&am…...

STM32+ESP8266+ONENET+微信小程序上传数据下发指令避坑指南

之前只做过类似的但是以为这种烂大街的功能应该不难结果还是踩了不少坑&#xff0c;记录几个需要注意的点 1、创建产品的时候选择onejson&#xff0c;自定义方案。这样选择的就是物模型&#xff0c;之后可以去使用物模型的API调试。 2、设置物模型 大概有以下几种比较常用的&…...

不同消息队列保证高可用实现方案

消息队列的高可用性&#xff08;High Availability, HA&#xff09;是分布式系统中的核心需求&#xff0c;不同消息队列通过多种技术手段实现高可用。以下是主流消息队列的高可用实现方案及对比&#xff1a; 一、Apache Kafka 副本机制&#xff08;Replication&#xff09; 每个…...

Android 蓝牙开发 - 蓝牙相关权限(蓝牙基本权限、Android 12 蓝牙新增权限、位置权限)

蓝牙基本权限 1、基本介绍 <uses-permission android:name"android.permission.BLUETOOTH" />BLUETOOTH&#xff1a;允许应用连接配对的蓝牙设备 <uses-permission android:name"android.permission.BLUETOOTH_ADMIN" />BLUETOOTH_ADMIN&am…...

【Linux】第二十一章 管理存储堆栈

1. 分别说明LVM中物理卷、物理区块、卷组、逻辑卷的概念以及它们之间的关系。 在 LVM (Logical Volume Management) 中&#xff0c;硬盘的管理变得更加灵活&#xff0c;允许动态地调整磁盘空间的分配。 物理卷&#xff08;PV&#xff09;&#xff1a;LVM使用底层物理设备&…...

OpenCV 人脸识别:从基础到实践全解析

在人工智能与计算机视觉蓬勃发展的今天&#xff0c;人脸识别技术已深入我们生活的方方面面&#xff0c;从手机解锁到安防监控&#xff0c;其应用无处不在。而 OpenCV 作为计算机视觉领域最受欢迎的开源库之一&#xff0c;为开发者提供了一套高效且易用的人脸识别解决方案。本文…...

【HTML-2】HTML 标题标签:构建网页结构的基础

在网页开发中&#xff0c;标题标签(<h1>到<h6>)是构建内容层次结构和语义化标记的基础元素。这些标签不仅影响内容的视觉呈现&#xff0c;更对网页的可访问性和SEO有着深远影响。 1. 标题标签的基本用法 HTML提供了六个级别的标题标签&#xff1a; <h1>这…...

vue3前端后端地址可配置方案

在开发vue3项目过程中&#xff0c;需要切换不同的服务器部署&#xff0c;代码中配置的服务需要可灵活配置&#xff0c;不随着run npm build把网址打包到代码资源中&#xff0c;不然每次切换都需要重新run npm build。需要一个配置文件可以修改服务地址&#xff0c;而打包的代码…...

HTML应用指南:利用POST请求获取全国申通快递服务网点位置信息

申通快递&#xff08;STO Express&#xff09;作为中国领先的综合物流服务商&#xff0c;自1993年创立以来&#xff0c;始终秉持“正道经营、长期主义”的发展理念&#xff0c;深耕快递物流领域&#xff0c;开创了行业加盟制先河。经过30余年的发展&#xff0c;申通已成长为国家…...

《医院运营管理典型应用数据资源建设指南2025》全面分析

引言:医院数据资源建设的时代背景与意义 医院运营管理数据资源建设正迎来前所未有的发展机遇与挑战。在深化支付改革与公立医院高质量发展政策驱动下,医院亟需建立智慧化运营管理体系,而数据资源作为关键要素,其建设水平直接关系到医院管理的科学性与效率。《医院运营管理…...

.NET外挂系列:3. 了解 harmony 中灵活的纯手工注入方式

一&#xff1a;背景 1. 讲故事 上一篇我们讲到了 注解特性&#xff0c;harmony 在内部提供了 20个 HarmonyPatch 重载方法尽可能的让大家满足业务开发&#xff0c;那时候我也说了&#xff0c;特性虽然简单粗暴&#xff0c;但只能解决 95% 的问题&#xff0c;言外之意还有一些…...

taro 小程序 CoverImage Image src无法显示图片的问题

目录 一、问题描述 二、解决方案 一、问题描述 使用taro开发的微信小程序图片无法正常显示&#xff0c;并报如下错误&#xff1a; [渲染层网络层错误] Failed to load local image resource /assets/icon/message.png the server responded with a status of 500 (HTTP/1.…...

05_核支持向量机

描述 核支持向量机&#xff08;通常简称为SVM&#xff09;可以推广到更复杂模型的扩展&#xff0c;这些模型无法被输入空间的超平面定义。 SVM 的核心思想是找到一个最优的超平面&#xff0c;将不同类别的数据分开。这个超平面不仅要能够正确分类数据&#xff0c;还要使得两个…...

[解决方案] Word转PDF

背景&#xff1a; 之前做过一些pdf导出&#xff0c; 客户提了一个特别急的需求&#xff0c; 要求根据一个模版跟一个csv的数据源&#xff0c; 批量生成PDF&#xff0c; 因为之前用过FOP&#xff0c; 知道调整样式需要特别长的时间&#xff0c; 这个需求又特别急&#xff0c; 所…...

Oracle 11g post PSU Oct18 设置ssl连接(使用wallets)

说明 oracle 11g 从PSU 2018Oct&#xff08;含&#xff09;及之后的补丁不支持MD5. 要使用JDBC SSL要使用TSL1.2. 有两种方法&#xff0c;一种使用wallet, 一种使用JKS. 本文档使用wallets. 1. 为什么用TSL 1.2 https://blogs.oracle.com/developers/post/ssl-connection-to…...

linux关闭某端口暂用的进程

查看是哪个端口暂用 sudo netstat -tulpn | grep :80根据图片 显示 80端口暂用的 进程id是 3002 结束进程id为3002的进程 sudo kill -9 3002...

web开发全过程总结

目录 利用pnpm创建vue3的文件 使用pnpm创建项目 项目配置 在idea中创建Spring Boot项目 配置基础项目架构(三层架构) 利用pnpm创建vue3的文件 1.打开cmd,以管理员的身份运行 2.切换到自己想要建立项目的文件的目录下或者直接在文件中以cmd的形式打开 输入指令安装pnpm n…...

经典Java面试题的答案——Java 基础

大家好&#xff0c;我是九神。这是互联网技术岗的分享专题&#xff0c;废话少说&#xff0c;进入正题&#xff1a; 1.JDK 和 JRE 有什么区别&#xff1f; JDK&#xff1a;Java Development Kit 的简称&#xff0c;java 开发工具包&#xff0c;提供了 java 的开发环境和运行环境…...

Fiddler 指定链接断点

问题背景 在使用Fiddler进行抓包和mock数据时&#xff0c;由于前端页面通常依赖多个前置接口&#xff08;如JS、CSS、登录态等&#xff09;&#xff0c;导致抓包过程中难以精准定位到目标接口。这种复杂性增加了调试和mock数据的难度。 常见挑战 前置接口过多&#xff1a;页…...

C# 语法篇:字段的定义和运算

对于字段来说&#xff0c;是在对象创建时就被初始化了&#xff1b;而构造函数的运行是在这之后。 因此&#xff0c;不能对字段进行需要用到“构造函数赋值的变量”的运算&#xff0c;因为此时这些变量的值都为0或者随机值&#xff0c;编译器不允许这时候做运算。 因此&#xf…...

音频应用的MediaSession冲突

前提条件 系统级应用&#xff0c;使用了sharedUserId 应用在AndroidManifest.xml中声明了系统级UID&#xff1a;android:sharedUserId"android.uid.system"该配置使应用具有系统级权限&#xff0c;可以访问系统级API和资源 使用MediaSession框架 应用通过MediaSessi…...

【QT】类A接收TCP数据并通过信号通知类B解析

以下是基于Qt的完整示例代码&#xff0c;包含类A接收TCP数据并通过信号通知类B解析的实现&#xff1a; ------------------ ClassA.h 网络数据接收类 ------------------ #pragma once#include <QTcpServer> #include <QTcpSocket> #include <QObject>class…...

【Jitsi Meet】(腾讯会议的平替)Docker安装Jitsi Meet指南-使用内网IP访问

Docker安装Jitsi Meet指南-使用内网IP访问 下载官方代码配置环境变量复制示例环境文件并修改配置&#xff1a;编辑 .env 文件&#xff1a; 修改 docker-compose.yml 文件生成自签名证书启动服务最终验证 腾讯会议的平替。我们是每天开早晚会的&#xff0c;都是使用腾讯会议。腾…...

微服务架构中的多进程通信--内存池、共享内存、socket

目录 1 引言 2 整体架构简介 3 疑问 3.1 我们的共享内存消息机制是用的posix还是system V 3.2 rmmt中&#xff0c;不同线程之间的比如访问同一个内存&#xff0c;用的什么锁控制的 3.3 疑问&#xff1a;假如一个进程发送给了另外两个进程&#xff0c;然后另外两个进程都同…...

使用 adb 命令截取 Android 设备的屏幕截图

使用 adb 命令截取 Android 设备的屏幕截图。以下是两种常见的方法&#xff1a; 方法一&#xff1a;截屏后保存到电脑 adb shell screencap -p /sdcard/screenshot.png adb pull /sdcard/screenshot.png解释&#xff1a; adb shell screencap -p /sdcard/screenshot.png&…...

Jenkins服务器配置密钥对

1. 在 Jenkins 服务器上执行以下命令 # 生成 SSH 密钥对 ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""# 查看公钥内容 cat ~/.ssh/id_rsa.pub 2. 将显示的公钥内容复制&#xff0c;然后在目标服务器上执行 # 在目标服务器上执行 mkdir -p /root/.ssh chmod …...

Docker中部署Alertmanager

在 Docker 中部署 Alertmanager&#xff08;通常与 Prometheus 告警系统配合使用&#xff09;的步骤如下&#xff1a; 一、拉取镜像prom/alertmanager docker pull prom/alertmanager二、 创建 Alertmanager 配置文件 首先准备Alertmanager的配置文件 alertmanager.yml(如存…...

Keil软件中STM32(ARM)与C51兼容方法

推荐其他UP主&#xff1a;Keil5安装教程&#xff08;包含C51与MDK共存&#xff09; - Kojull - 博客园 我已经实现了&#xff01;...

青少年编程与数学 02-019 Rust 编程基础 19课题、项目发布

青少年编程与数学 02-019 Rust 编程基础 19课题、项目发布 一、准备工作1. 创建和配置项目2. 编写代码和测试3. 文档注释 二、构建发布版本1. 构建优化后的可执行文件2. 静态链接&#xff08;可选&#xff09; 三、发布到 crates.io1. Crates.io核心功能使用方法特点最新动态 2…...

一洽小程序接入说明

接入说明 文档以微信小程序作为示例介绍&#xff0c;其他小程序接入操作与此类似 1、添加校验文件 开发者使用微信小程序提供的 webview 组件可以实现打开一洽的H5对话 小程序的“域名配置”中添加一洽的对话域名地址&#xff0c;需要获取校验文件提供给一洽放在域名根目录下…...

RabbitMQ的基本使用

RabbitMQ 是一个非常流行的消息中间件&#xff0c;用于实现生产者与消费者之间的异步通信。它基于 AMQP 协议&#xff08;高级消息队列协议&#xff09;&#xff0c;支持多种编程语言和平台。 以下是 RabbitMQ 的基本使用说明&#xff0c;包括安装、核心概念、基本操作和 Pyth…...

CSS专题之常见布局

前言 石匠敲击石头的第 13 次 作为一名前端开发&#xff0c;在日常开发中&#xff0c;写页面是必不可少的工作&#xff0c;但有时候发现很多的页面结构都是类似的&#xff0c;所以打算写一篇文章来梳理一下日常开发中常见的布局&#xff0c;如果哪里写的有问题欢迎指出。 单列…...

CentOS 7连接公司网络配置指南

在物理主机上安装了一个CentOS 7&#xff0c;需要连接公司的网络&#xff0c;但是公司的网络需要输入用户名密码才能连接 解决方案 需要 同时设置 wifi-sec.key-mgmt 和 802-1x 参数。以下是分步操作&#xff1a; 1. 创建基础 Wi-Fi 连接 sudo nmcli con add con-name &quo…...

RustDesk CentOS自建中继节点

一、需开放端口 TCP: 21115, 21116, 21117, 21118, 21119 UDP: 21116 二、安装docker 1.使用 root 权限登录 CentOS。确保 yum 包更新到最新 yum update 2. 卸载旧版本 yum remove docker 3. 安装 Docker 所需依赖 yum -y install yum-utils device-mapper-persistent-d…...

CentOS 7上部署BIND9 DNS服务器指南

场景假设&#xff1a; 我们要为内部网络 192.168.1.0/24 搭建一个权威 DNS 服务器。 域名&#xff1a;mylab.localDNS 服务器 IP&#xff1a;192.168.1.10我们将配置正向解析 (hostname -> IP) 和反向解析 (IP -> hostname)。 一、安装 BIND9 更新系统并安装 BIND 及工…...

面试突击:消息中间件之RabbitMQ

一&#xff1a;你们项目中哪里用到了RabbitMQ ? 难易程度&#xff1a;☆☆☆ 出现频率&#xff1a;☆☆☆☆ 我们项目中很多地方都使用了RabbitMQ , RabbitMQ 是我们项目中服务通信的主要方式之一 , 我们项目中服务通信主要有两种方式实现 : 通过Feign实现服务调用通过MQ实现服…...

基于 ESP32 与 AWS 全托管服务的 IoT 架构:MQTT + WebSocket 实现设备-云-APP 高效互联

目录 一、总体架构图 二、设备端(ESP32)低功耗设计(适配 AWS IoT) 1.MQTT 设置(ESP32 连接 AWS IoT Core) 2.低功耗策略总结(ESP32) 三、云端架构(基于 AWS Serverless + IoT Core) 1.AWS IoT Core 接入 2.云端 → APP:WebSocket 推送方案 流程: 3.数据存…...

将 /dev/vdb1 的空间全部合并到 /dev/mapper/centos-root(即扩展 CentOS 的根分区)

要将 /dev/vdb1 的 1TB 空间合并到 /dev/mapper/centos-root&#xff08;即扩展 CentOS 的根分区&#xff09;&#xff0c;可以采用 LVM&#xff08;逻辑卷管理&#xff09; 的方式。以下是详细步骤&#xff1a; 步骤 1&#xff1a;检查当前磁盘和 LVM 情况 1.1 确认 /dev/vdb…...

CentOS Stream安装MinIO教程

1. 下载 MinIO 二进制文件 # 进入 MinIO 安装目录 sudo cd /usr/local/bin/# 下载 MinIO 二进制文件&#xff08;替换为最新版本链接&#xff09; wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio2. 创建专用用户和存储目录 # 创建 minio 用户…...

游戏引擎学习第299天:改进排序键 第二部分

回顾并为当天内容做准备 我们会现场编写完整的游戏代码。回顾上周发现自己对游戏中正确的排序规则并没有清晰的理解。主要原因是我们更擅长三维游戏开发&#xff0c;缺乏二维游戏和二维游戏技术的经验&#xff0c;对于二维精灵排序、模拟三维效果的最佳方案等没有太多技巧和经…...

设计模式----软考中级软件设计师(自用学习笔记)

目录 1、设计模式的要素 2、设计模式的分类 3、简单工厂模式 4、工厂方法 5、抽象工厂 6、生成器 7、原型 8、单例模式 9、适配器 10、桥接 11、组合模式 12、装饰 13、外观 14、享元 15、代理 16、责任链 17、命令 18、解释器 19、迭代器 20、中介者 21、…...

uniapp如何设置uni.request可变请求ip地址

文章目录 简介方法一&#xff1a;直接在请求URL中嵌入变量方法二&#xff1a;使用全局变量方法三&#xff1a;使用环境变量方法四&#xff1a;服务端配置方法五&#xff1a;使用配置文件&#xff08;如config.js&#xff09;:总结 简介 在uni-app中&#xff0c;uni.request 用…...

Centos上搭建 OpenResty

一、OpenResty简介 OpenResty 是基于 Nginx 的扩展平台&#xff0c;完全兼容 Nginx 的核心功能&#xff08;如 HTTP 服务和反向代理&#xff09;&#xff0c;同时通过内嵌 LuaJIT 支持&#xff0c;允许开发者用 Lua 脚本灵活扩展业务逻辑。它简化了动态逻辑的实现。 二、安装…...

Kotlin与物联网(IoT):Android Things开发探索

在物联网&#xff08;IoT&#xff09;领域&#xff0c;Kotlin 凭借其简洁性、安全性和与 Java 生态的无缝兼容性&#xff0c;逐渐成为 Android Things 开发的有力工具。尽管 Google 已于 2022 年宣布停止对 Android Things 的官方支持&#xff0c;但其技术思想仍值得探索&#…...

WIFI信号状态信息 CSI 深度学习篇之CNN(Python)

本博客是一篇非新手导向的CNN处理CSI图像帧的教程&#xff0c;基于tensorflow框架构建CNN模型进行训练&#xff0c;训练对象依然是前述博客中所提到的CSI图像帧&#xff08;500 x 90 x 1&#xff09;。代码里用到了深度可分离卷积&#xff0c;这种结构在减少计算量和参数数量方…...

深度学习实战 04:卷积神经网络之 VGG16 复现三(训练)

在后续的系列文章中&#xff0c;我们将逐步深入探讨 VGG16 相关的核心内容&#xff0c;具体涵盖以下几个方面&#xff1a; 卷积原理篇&#xff1a;详细剖析 VGG 的 “堆叠小卷积核” 设计理念&#xff0c;深入解读为何 332 卷积操作等效于 55 卷积&#xff0c;以及 333 卷积操作…...

欧拉系统离线部署docker

https://www.cnblogs.com/hsh96/p/18150538 Docker 离线安装指南 本文介绍了如何在 Linux 系统上进行 Docker 的离线安装。首先&#xff0c;确保欧拉系统安装的是server版本&#xff0c;否则没有tar工具。 您需要下载 Docker 的离线安装包。您可以从以下链接获取所需的安装包&a…...

Java 中 final 与 static 的区别

Java 中 final 与 static 的区别 在 Java 中&#xff0c;final 和 static 是两个不同的关键字&#xff0c;它们的核心作用和不可变性特性有本质区别&#xff1a; 一、final 的核心作用 1. 变量&#xff08;不可变引用&#xff09; 不可重新赋值&#xff1a;final 修饰的变量…...

多模态实时交互边界的高效语音语言模型 VITA-Audio 介绍

介绍 VITA-Audio是由Zuwei Long等研究者提出的端到端大型语音语言模型&#xff0c;其核心目标是通过跨模态令牌生成技术&#xff0c;解决传统语音交互系统中首音频令牌生成延迟高的问题。该模型的创新点主要体现在&#xff1a; 低延迟&#xff1a;VITA-Audio 是首个能够在初次…...

LLM | 论文精读 | NAACL 2025 | Clarify When Necessary:教语言模型何时该“问一句”再答!

&#x1f50d; 解读 NAACL 2025 重磅论文《Clarify When Necessary》&#xff1a;教语言模型何时该“问一句”再答&#xff01; &#x1f9e9; 一、现实问题&#xff1a;大模型“看不懂装懂”有多危险&#xff1f; 我们每天用的 ChatGPT、Claude 等大型语言模型&#xff08;LL…...