学生信息管理系统MySQL版源码解析:从导入到二次开发
简介这份资源是面向Java初学者与课程设计学习者的学生信息管理系统MySQL版V1.0完整源码采用Java GUI结合MySQL数据库实现适合用于课程设计参考、桌面应用入门练习或二次开发。压缩包共246个文件以176个class编译文件与49个java源码为主另含8个png界面素材、7个xml配置、1个jar依赖、1个sql建库脚本及properties配置文件等整体约1.74MB结构完整便于直接导入运行。系统功能覆盖学校信息与状态栏设置、用户登录注册与密码修改以及学生记录的增删改查支持按学号、姓名、班级、系部查询与删除并能按性别、班级、系部统计人数配套帮助文档可辅助理解模块划分。目前已有1327人学习下载读者可借此掌握Java Swing界面设计、JDBC数据库连接与DAO分层写法快速完成课程作业或作为项目脚手架复用。1. 学生信息管理系统(MySQL版)V1.0源码.rar一个压缩包背后藏着多少能跑起来的细节拿到一个名为「学生信息管理系统(MySQL版)V1.0源码.rar」的压缩包很多人的第一反应是解压、找 SQL 文件、导入数据库、改连接串、跑起来看界面。但真正做过交付的人会先问三个问题这套系统的表结构能不能撑住一个院系的数据量登录鉴权是明文比对还是哈希加盐成绩录入有没有事务保护这三个问题决定了这份源码是「能演示」还是「能上线」。学生信息管理系统是典型的 CRUD 教学项目也是很多开发者从「会写单表增删改查」到「理解多表关联与权限分层」的必经之路。MySQL 版意味着数据持久化落在关系型数据库上V1.0 说明它是最初的完整形态源码包通常包含建表脚本、后端接口、前端页面和一份说明文档。适合谁适合刚学完 SQL 语法想找一个完整项目练手的人也适合需要快速搭一套内部信息登记工具的开发者。但别急着双击运行先跟着我把里面的门道拆开看。2. 解压之后先别急着导入把源码包拆成可评估的模块拿到压缩包第一步不是找启动脚本而是把目录结构画出来。一个结构清晰的学生信息管理系统源码通常会在根目录下分出sql/、backend/、frontend/、docs/四个一级目录。如果解压后发现所有文件平铺在一起说明这份源码的工程化程度不高后续改起来会很痛苦。我一般会先执行一条命令看文件类型分布再决定用哪种方式读代码。2.1 用命令行快速摸清压缩包里的文件构成在 Linux 或 macOS 下直接解压并统计文件类型# 解压到指定目录避免污染当前工作区 mkdir -p /tmp/sims_v1 tar -xvf 学生信息管理系统\(MySQL版\)V1.0源码.rar -C /tmp/sims_v1 2/dev/null || unzip -o 学生信息管理系统\(MySQL版\)V1.0源码.rar -d /tmp/sims_v1 # 统计各类型文件数量快速判断技术栈 find /tmp/sims_v1 -type f | sed s/.*\.// | sort | uniq -c | sort -rn | head -20 # 查看目录层级超过三层的目录重点关注 find /tmp/sims_v1 -maxdepth 3 -type d | sort这段命令的逻辑是先解压到临时目录避免在桌面留下散落文件然后用sed提取扩展名并统计如果.java或.php文件占多数说明后端是单体应用如果.vue或.jsx文件多说明前后端分离。find -maxdepth 3用来观察目录深度超过三层的嵌套往往意味着模块划分过细或存在冗余。参数上-o表示覆盖已有文件-d指定解压目标目录这两个参数在反复解压时能省去手动清理的麻烦。2.2 从 SQL 文件反推表结构设计是否合理找到sql/目录下的.sql文件后不要直接导入先用文本编辑器打开看建表语句。重点关注三张核心表学生表、课程表、成绩表。一个常见的设计缺陷是成绩表里同时存了学生姓名和课程名称而不是只存外键 ID。这种冗余设计在 V1.0 里很常见因为写起来快但后期改学生姓名时就要更新多处。-- 典型的学生表建表语句注意字段类型和约束 CREATE TABLE student ( id int(11) NOT NULL AUTO_INCREMENT, student_no varchar(20) NOT NULL COMMENT 学号业务主键, name varchar(50) NOT NULL, gender tinyint(1) DEFAULT 1 COMMENT 1男 2女, class_id int(11) DEFAULT NULL, created_at datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_student_no (student_no), KEY idx_class_id (class_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;看这段 SQL 要抓三个点student_no有没有唯一索引class_id有没有普通索引字符集是不是utf8mb4。如果student_no没有唯一约束导入重复学号时不会报错后面查成绩就会出现一人多条记录。utf8mb4是必须的否则学生姓名里的生僻字会变成问号。ENGINEInnoDB决定了是否支持事务如果建表用的是 MyISAM成绩批量录入失败时无法回滚这是血泪教训。2.3 判断后端入口文件和数据库连接配置的位置后端入口通常叫index.php、app.js、main.py或Application.java。找到它之后顺着require或import语句往下追一般能在两级目录内找到数据库配置文件。配置文件里会写死host、user、password、database四个值。V1.0 源码里数据库密码经常是root或123456这不是安全问题而是教学项目的惯例但部署到内网前必须改掉。# 在源码目录里搜索数据库连接关键词快速定位配置文件 grep -rn mysql_connect\|mysqli_connect\|new PDO\|createConnection\|DataSource /tmp/sims_v1 --include*.php --include*.js --include*.py --include*.java | head -10这条grep命令同时覆盖了 PHP、Node.js、Python 和 Java 四种常见后端的连接写法。-r递归搜索-n显示行号--include限定文件类型避免搜到二进制文件。找到配置文件后先备份一份再改成本地数据库的地址和账号。如果源码里用了环境变量读取配置那说明工程化做得不错直接改.env文件即可。3. 把 MySQL 版源码跑起来从建库到登录成功的完整链路评估完源码结构接下来就是让它真正跑起来。这一章按「建库 → 导数据 → 配连接 → 启服务 → 验登录」的顺序推进每一步都有可复现的命令和参数说明。中间会穿插讲清楚为什么这样操作以及失败时该看哪里。3.1 建库与导入 SQL 的三个关键参数导入 SQL 文件时字符集和排序规则必须和建表语句一致。常见做法是先用CREATE DATABASE指定字符集再用source命令导入。-- 创建数据库字符集和排序规则与建表语句保持一致 CREATE DATABASE sims_v1 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -- 切换到该数据库 USE sims_v1; -- 导入源码包里的 SQL 文件注意路径要写绝对路径 SOURCE /tmp/sims_v1/sql/sims_v1.sql;utf8mb4_general_ci里的ci表示大小写不敏感学号查询时S2024001和s2024001会被视为相同这在实际场景中更符合预期。如果导入时报Unknown collation错误说明 MySQL 版本低于 5.5需要把utf8mb4改成utf8。导入完成后用SHOW TABLES;确认表数量再用SELECT COUNT(*) FROM student;看初始数据有多少条。如果学生表是空的说明源码只给了结构没给测试数据需要自己造几条。3.2 修改数据库连接配置并验证连通性找到配置文件后把host改成127.0.0.1user改成rootpassword改成你本地 MySQL 的密码database改成sims_v1。改完后不要急着启动应用先用命令行验证连接是否通畅。# 用 mysql 客户端测试连接-h 指定主机-u 指定用户-p 后面跟密码 mysql -h 127.0.0.1 -u root -p你的密码 -D sims_v1 -e SELECT COUNT(*) AS student_count FROM student;这条命令的-e参数表示执行完 SQL 后立即退出适合脚本化验证。如果返回了学生数量说明数据库层没问题。如果报Access denied检查密码里有没有特殊字符需要转义如果报Unknown database说明建库时名字写错了。这一步能排除掉一半的「应用启动失败」问题因为很多报错其实是数据库连不上但应用日志只显示「系统异常」。3.3 启动后端服务并观察日志里的第一个报错不同技术栈的启动命令不同。PHP 项目通常直接扔到 Apache 或 Nginx 的网站根目录Node.js 项目用npm install然后npm startJava 项目用mvn spring-boot:run或java -jar。启动后不要盯着浏览器先看控制台日志。# 以 Node.js 项目为例先安装依赖再启动 cd /tmp/sims_v1/backend npm install --registryhttps://registry.npmmirror.com npm start 21 | tee /tmp/sims_start.log--registry指定国内镜像源能显著加快依赖安装速度。21 | tee把标准错误和标准输出都写到日志文件方便后面搜索关键词。启动后如果看到Server running on port 3000之类的提示说明服务起来了。如果卡在Connecting to database...回到 3.2 检查连接配置。如果报Port already in use用lsof -i:3000找到占用进程并杀掉或者改配置文件里的端口号。3.4 登录验证从明文比对到会话保持的排查路径打开浏览器访问http://localhost:3000输入源码文档里写的默认账号密码。如果登录失败按以下顺序排查先看浏览器开发者工具的 Network 面板确认登录请求发到了哪个 URL返回状态码是 200 还是 500再看后端日志里有没有 SQL 报错最后直接查数据库里的用户表。-- 查看用户表里的账号和密码存储方式 SELECT id, username, password, role FROM sys_user LIMIT 5;如果password字段是明文比如admin123那登录失败大概率是前端传参字段名和后端接收字段名不一致。如果password是 32 位字符串说明用了 MD5你需要知道原始密码才能登录或者直接更新一条记录UPDATE sys_user SET password MD5(newpass) WHERE username admin;。如果密码是 60 位左右的字符串那是 bcrypt 哈希不能直接改只能通过注册接口新建账号或找源码里的初始化脚本。4. 避坑学生信息管理系统源码导入与运行中的五个高频翻车点这一章记录的是我在不同机器上复现这类源码时真实踩过的坑每个坑按「现象 → 原因 → 解决」写清楚。如果你在导入或运行过程中卡住了先在这里找找有没有对应的情况。4.1 导入 SQL 时报「Specified key was too long」现象执行SOURCE命令时建表语句报错Specified key was too long; max key length is 767 bytes。原因MySQL 5.6 及以下版本InnoDB 引擎的单列索引长度限制是 767 字节而utf8mb4字符集下varchar(255)就占 1020 字节。解决把报错字段的长度从 255 改成 191或者升级 MySQL 到 5.7 以上并在配置里开启innodb_large_prefix。我一般直接改字段长度因为改配置需要重启数据库影响其他库。4.2 登录后页面空白但控制台无报错现象输入账号密码后跳转到一个空白页浏览器控制台没有红色报错后端日志也正常。原因前端路由用了 history 模式但后端没有配置 fallback 路由刷新或跳转时请求了一个不存在的静态文件路径。解决如果是 Nginx在location /里加try_files $uri $uri/ /index.html;如果是 Node.js 的 Express加app.get(*, (req, res) res.sendFile(path.join(__dirname, index.html)));。这个坑在前后端分离的项目里特别常见V1.0 源码往往只给了前端构建产物没给服务端路由配置。4.3 成绩录入后列表不显示新数据现象提交成绩表单提示成功但成绩列表刷新后看不到刚录入的记录。原因后端插入语句用了INSERT INTO但事务没有提交或者查询语句带了WHERE is_deleted 0而插入时is_deleted字段默认值为 NULL。解决先查数据库确认数据是否真的写进去了SELECT * FROM score ORDER BY id DESC LIMIT 3;。如果数据在但查不出来检查查询条件里的软删除标记如果数据不在检查后端有没有执行commit()。我遇到过最隐蔽的一次是连接池配置了自动回滚但插入方法上没加Transactional。4.4 中文姓名显示为问号或乱码现象学生姓名在页面上显示为???或æŽå››。原因数据库连接串没有指定字符集或者 Tomcat/Nginx 的默认编码不是 UTF-8。解决MySQL 连接串加?useUnicodetruecharacterEncodingutf8Java 项目在server.xml的 Connector 里加URIEncodingUTF-8PHP 项目在连接后执行SET NAMES utf8mb4;。三个地方只要有一个没对齐中文就会翻车。4.5 分页查询在第二页之后数据重复或丢失现象第一页显示 10 条点第二页还是那 10 条或者跳过了一些记录。原因分页 SQL 用了LIMIT offset, size但ORDER BY的字段有重复值比如按班级排序时同班学生顺序不稳定。解决在ORDER BY里加上唯一字段作为第二排序条件比如ORDER BY class_id ASC, student_no ASC LIMIT 10 OFFSET 10;。如果源码用的是LIMIT 10, 10这种写法注意第一个参数是偏移量不是页码第二页的偏移量是 10 而不是 2。5. 在 V1.0 基础上做二次开发三个能立刻用上的改造技巧跑通之后很多人会想在这个基础上加功能或改界面。V1.0 的代码结构通常比较直白改造起来不难但有几个地方提前处理好能省很多时间。这一章不讲大而全的重构只给三个具体技巧每个都能在半小时内落地。5.1 用视图把多表关联查询封装成单表操作学生信息管理系统里最复杂的查询往往是「查某个学生的所有课程成绩」需要关联学生表、成绩表、课程表三张表。如果前端每个页面都写一遍 JOIN后期改表结构会疯掉。常见做法是建一个视图CREATE VIEW v_student_score AS SELECT s.student_no, s.name AS student_name, c.course_name, sc.score, sc.exam_time FROM student s JOIN score sc ON s.id sc.student_id JOIN course c ON sc.course_id c.id WHERE sc.is_deleted 0;建好之后后端查询直接SELECT * FROM v_student_score WHERE student_no S2024001;不用再写 JOIN。视图的优点是逻辑集中改关联条件只改一处缺点是性能不如直接写 JOIN因为 MySQL 会把视图展开成子查询。如果数据量超过十万条建议在student_no和course_id上建复合索引。5.2 给敏感操作加一条操作日志表V1.0 通常没有日志功能但删除学生、修改成绩这类操作一旦误触没有后悔药。加一张日志表在关键接口里插入记录CREATE TABLE oper_log ( id int(11) NOT NULL AUTO_INCREMENT, operator varchar(50) DEFAULT NULL, action varchar(100) DEFAULT NULL, target_id int(11) DEFAULT NULL, detail text, created_at datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_created_at (created_at) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;后端在删除学生的接口里执行DELETE之前先INSERT INTO oper_log把操作人、动作、目标 ID 和原始数据写进去。这样即使删错了也能从日志里恢复。注意detail字段用text类型因为原始数据可能很长。idx_created_at索引方便按时间范围查日志。5.3 用环境变量替换硬编码的数据库密码V1.0 源码里数据库密码经常直接写在配置文件里提交到代码仓库就是泄露。改造方法很简单把配置文件里的密码改成process.env.DB_PASSWORD或getenv(DB_PASSWORD)然后在启动脚本里设置环境变量。# 启动前导出环境变量避免密码写进代码 export DB_HOST127.0.0.1 export DB_USERroot export DB_PASSWORD你的密码 export DB_NAMEsims_v1 npm start如果是 PHP 项目用getenv()读取Java 项目用System.getenv()。这样同一份代码可以在开发机和服务器上用不同的密码不需要改代码。注意环境变量在export之后只对当前终端会话有效写到.bashrc里才能持久化但.bashrc本身也要注意权限。5.4 验证改造是否生效的最小检查清单改完上面三处之后按这个顺序验证先查视图能不能返回数据SELECT * FROM v_student_score LIMIT 1;再删一条测试学生看oper_log里有没有新增记录最后重启服务确认环境变量读取的密码能连上数据库。如果视图查询报Views SELECT contains a subquery in the FROM clause说明 MySQL 版本太低不支持视图里嵌套子查询需要把视图改成直接 JOIN 两张表。如果日志表没有记录检查插入日志的代码是不是在DELETE之后执行那样删除失败时日志也会写进去顺序要反过来。我自己的习惯是每改一处就提交一次代码哪怕只是加了一个索引。这样出问题时能快速回退到上一个可用状态比事后翻日志找原因快得多。学生信息管理系统这类项目代码量不大但表关系和权限逻辑是核心把这两块吃透后面换任何业务系统都是同样的套路。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

C++ MCP 服务器实现:把 endpoint 改到 TaoToken 的完整配置与验证

C++ MCP 服务器实现:把 endpoint 改到 TaoToken 的完整配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 7:29:21 阅读更多 →
制药无菌洁净边界全解析:从设计验证到运行维护的关键控制点

制药无菌洁净边界全解析:从设计验证到运行维护的关键控制点

每一粒药片的诞生,都藏着一条看不见的生死线。我在制药和生物制品行业待了十几年,见过太多产线在设备参数上挑不出毛病、人员操作也按部就班,却因为环境监测数据反复飘红,导致批次放行延期、百万级产品就地封存,甚至整…

2026/10/12 18:33:03 阅读更多 →
Fluent Meshing水密工作流中Add Local Sizing实战指南

Fluent Meshing水密工作流中Add Local Sizing实战指南

如果你和我一样,每天要和 Fluent Meshing 打交道,那你一定遇到过这种场景:全局尺寸给到0.5mm,算下来网格量五百多万,看起来数值也没问题,但一到弯管处,边界层一拉,圆弧面网格完全看不…

2026/10/19 14:32:15 阅读更多 →

最新新闻

2026年教育培训SaaS系统怎么选?从评价维度到避坑指南全解析

2026年教育培训SaaS系统怎么选?从评价维度到避坑指南全解析

第一次被培训机构老板问“哪家SaaS系统排名高”的时候,我记得很清楚,那是2018年,一个做少儿艺术培训的朋友拿着三份报价单来找我对比。那时候大家比的还是谁家的功能模块多、谁家的App长得好看。到了2026年,这个问题不但没变简单&…

2026/10/20 12:06:01 阅读更多 →
KECA核熵成分分析:训练测试集分离与数据泄漏避坑实践

KECA核熵成分分析:训练测试集分离与数据泄漏避坑实践

简介:这是一份面向非线性高维数据降维的KECA(核熵成分分析)MATLAB程序,适用于机器学习、模式识别及特征提取场景,尤其针对Q9A等需要核熵分析的实验问题。KECA结合核方法与熵理论,将数据映射到高维特征空间后…

2026/10/20 12:06:01 阅读更多 →
Kafka 2.8.0生产者消费者原生实现与高可用配置详解

Kafka 2.8.0生产者消费者原生实现与高可用配置详解

1. 项目概述:为什么一个“简单实现”值得花时间深挖?Kafka集群(2.8.0版本)之四:Java简单实现生产者和消费者——这个标题看起来平平无奇,甚至有点“教科书感”。但在我过去十年带团队落地消息中间件的实战中…

2026/10/20 12:06:01 阅读更多 →
MATLAB数据分析与挖掘实战:数据预处理、特征工程与建模避坑指南

MATLAB数据分析与挖掘实战:数据预处理、特征工程与建模避坑指南

简介:MATLAB数据分析与挖掘实战完整教程整合了配套源码、说明文档与真实数据集,面向工科生、数学专业及算法方向学习者,可系统演练数据导入、清洗、建模、评估与结果分析的完整链路,帮助理解数据挖掘中常用的预处理思路和建模方法…

2026/10/20 12:06:01 阅读更多 →
无GPU也能跑大模型:银河麒麟V10离线部署DeepSeek-R1全流程

无GPU也能跑大模型:银河麒麟V10离线部署DeepSeek-R1全流程

简介:面向银河麒麟V10操作系统技术人员的一份DeepSeek离线部署操作指南,重点解决在内网或无互联网环境下安装ollama大语言模型服务及chatbox客户端的问题。资源为单个docx文档,约2.69MB,内容涵盖系统环境与硬件检查、ollama解压安…

2026/10/20 12:06:01 阅读更多 →
KSyntaxHighlighting编译指南:解决KF6依赖与CMake构建链问题

KSyntaxHighlighting编译指南:解决KF6依赖与CMake构建链问题

1. 项目概述:为什么一个语法高亮库的编译会卡住你一整天?“编译 KSyntaxHighlighting 的过程中遇到的一些问题”——这个标题看起来平平无奇,甚至有点枯燥,但它背后藏着的是无数 C 跨平台开发者的共同记忆:一个看似轻量…

2026/10/20 12:05:01 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →