基于C++/MFC的图书管理系统:从数据库设计到界面开发的全栈实践
1. 项目概述与核心价值最近在整理一些老项目翻出来一个用C和MFC写的图书管理系统感觉挺有代表性的。很多朋友尤其是刚学完C语法、想找个项目练手过渡到Windows桌面开发的朋友经常会问有没有一个能串起C面向对象、数据库操作和界面编程的综合案例这个基于MFC的图书管理系统就是一个非常经典的答案。它不是什么高深莫测的框架但恰恰是这种“老派”的技术栈能让你把C的基础知识、Windows消息机制、数据库的CRUD操作增删改查以及一个完整软件的业务逻辑从头到尾、扎扎实实地走一遍。对于理解一个桌面应用从数据层到表现层的完整架构有着不可替代的作用。这个系统麻雀虽小五脏俱全。它要处理的核心业务就是图书馆的日常图书信息的录入与维护、读者的注册与管理、图书的借阅与归还、以及相关的查询统计。用C和MFC来实现意味着你需要自己设计类来封装图书、读者、借阅记录这些实体需要编写SQL语句通过ODBC或OLEDB与后台数据库比如Access或SQL Server交互更需要用MFC的文档-视图架构或者对话框来搭建用户界面处理按钮点击、列表显示、数据验证这些琐碎但至关重要的细节。整个过程是对编程基本功和工程思维的一次全面锻炼。2. 系统整体设计与技术选型考量2.1 为什么选择C与MFC这个“经典组合”现在提起桌面开发大家可能第一时间想到C# WinForms/WPF、Qt甚至Electron。但在特定的教学和遗产系统维护场景下C/MFC依然有它的生命力。选择这个组合来做图书管理系统主要基于以下几点考量深度绑定C核心能力MFC本身就是用C写的一套框架。使用它迫使你必须理解C的类、继承、多态、指针和内存管理。比如你需要从CView或CDialog派生自己的视图类需要处理WM_COMMAND消息映射这些都是对C面向对象特性的实战应用。它避免了像某些高级语言那样把底层细节过度封装让你清楚地知道“代码是如何驱动窗口的”。贴近Windows原生开发MFC是对Windows API的一层面向对象封装。通过这个项目你会间接接触到窗口过程、消息循环、GDI绘图等Windows编程的核心概念。这对于未来需要深入Windows系统底层或进行高性能客户端开发的人来说是一笔宝贵的财富。轻量级与独立性生成的EXE文件通常不需要庞大的运行时库如果静态链接MFC部署简单。数据库方面搭配Access.mdb文件可以做到真正的单文件绿色部署非常适合作为课程设计或小型图书馆的管理工具。明确的学习路径这个技术栈的学习路径非常清晰C语法 - Windows程序基本结构 - MFC框架基础 - 数据库访问技术。完成这个项目相当于打通了这条路径上的关键节点。当然也要正视其缺点开发效率相较于现代框架较低界面美化比较费力以及微软对MFC的更新基本停滞。但对于学习目的而言这些“缺点”反而成了深入理解原理的“优点”。2.2 系统架构与模块划分一个结构清晰的图书管理系统通常采用典型的三层架构思想即使在MFC中也能很好地体现表示层由MFC的对话框或文档视图构成。主要负责提供用户交互界面如图书信息录入表单、查询条件输入框、数据列表显示。接收用户输入并进行基本的数据验证如书名不能为空、ISBN格式校验。将用户请求转发给业务逻辑层并接收返回的数据进行展示。业务逻辑层这是系统的核心通常由一系列C类来实现。主要职责封装核心业务实体如CBook、CReader、CBorrowRecord类。每个类有对应的属性成员变量和行为成员函数。实现具体的业务规则例如“同一本书库存大于0才能借阅”、“读者有超期未还书则不能借新书”、“计算超期罚款”等。作为表示层和数据访问层之间的桥梁协调数据处理流程。数据访问层负责与数据库直接通信。在MFC中通常使用CDatabase和CRecordset类来完成。CDatabase代表一个到数据库的连接。CRecordset代表一个数据表或查询结果集。我们需要为每个主要的业务实体如图书表、读者表创建一个从CRecordset派生的类用于执行针对该表的SQL操作。模块划分示例图书管理模块实现图书信息的增、删、改、查。包含CBook类业务实体和CBookSet类继承自CRecordset用于数据访问。读者管理模块实现读者信息的注册、修改、注销。包含CReader和CReaderSet类。借阅管理模块这是最复杂的模块处理借书、还书、续借操作涉及图书和读者两个实体的状态变更。包含CBorrowRecord和CBorrowRecordSet类并在业务逻辑中严格校验规则。查询统计模块提供组合条件查询如按书名、作者、出版社查书按读者姓名、证件号查借阅历史并生成简单统计报表如最热图书排行、读者借阅排行榜。注意在实际编码中业务逻辑层和数据访问层的界限有时会模糊特别是小型项目。有些人会将业务规则直接写在CRecordset派生类的相关函数里。但从设计上讲分离它们会让代码更清晰、更易于测试和维护。例如CBook类可以有一个Save()方法它内部调用CBookSet来执行插入或更新而借阅规则检查则放在一个独立的BorrowService类中。3. 核心模块实现与关键技术点解析3.1 数据库设计与连接数据库是系统的基石。对于图书管理系统核心表至少包括图书表BookID主键ISBNBookNameAuthorPublisherPublishDatePriceTotalCount总数量AvailableCount可借数量。读者表ReaderID主键ReaderNameReaderType如学生、教师IDCardPhoneBorrowLimit借阅上限Status正常、挂失。借阅记录表RecordID主键BookID外键ReaderID外键BorrowDateDueDate应还日期ReturnDate实际归还日期为空表示未还RenewTimes续借次数。在MFC中连接数据库 我们通常使用ODBC作为数据库接口因为它通用性好。首先需要在Windows的ODBC数据源管理器里配置一个系统DSN指向你的Access或SQL Server数据库文件。// 通常在应用类CYourApp的 InitInstance() 中初始化数据库连接 BOOL CBookManageApp::InitInstance() { // ... 其他初始化代码 CDatabase m_db; // 通常作为应用类或一个全局单例的成员变量 try { // “LibraryDB”是你在ODBC中配置的数据源名称 m_db.OpenEx(_T(DSNLibraryDB;UID;PWD), CDatabase::noOdbcDialog); } catch (CDBException* e) { AfxMessageBox(_T(数据库连接失败)); e-Delete(); return FALSE; } // ... 后续代码 }实操心得连接字符串可以写在配置文件中提高灵活性。务必在应用退出时ExitInstance()调用m_db.Close()关闭数据库连接。对于多线程访问需要谨慎处理CDatabase对象的线程安全性通常每个线程使用独立的连接。3.2 数据绑定与CRUD操作MFC提供了CRecordset和CRecordView/CDialog结合的数据绑定机制可以简化界面显示。但对于需要灵活控制的场景手动操作CRecordset更常见。以图书查询为例声明记录集类使用ClassWizard为Book表生成一个CBookSet类会自动映射表中的字段到类的成员变量如m_BookID,m_BookName。执行查询CBookSet bookSet(m_db); // m_db 是已连接的 CDatabase 对象 CString strSQL; strSQL.Format(_T(SELECT * FROM Book WHERE BookName LIKE %%%s%%), strKeyword); // strKeyword是用户输入的关键词 bookSet.Open(CRecordset::snapshot, strSQL); // snapshot 表示静态快照遍历结果并显示if (!bookSet.IsBOF()) { bookSet.MoveFirst(); while (!bookSet.IsEOF()) { // 将 bookSet.m_BookName 等添加到列表控件CListCtrl中 m_listCtrl.InsertItem(0, bookSet.m_BookName); // ... bookSet.MoveNext(); } } bookSet.Close();实现增删改增加bookSet.Open(CRecordset::dynaset, _T(SELECT * FROM Book WHERE 10));然后bookSet.AddNew();为成员变量赋值最后bookSet.Update();。修改打开记录集定位到要修改的记录bookSet.Edit();修改成员变量bookSet.Update();。删除定位到记录后直接bookSet.Delete();。注意事项CRecordset的Open操作比较耗时尤其是数据量大时。对于频繁的查询应考虑使用参数化查询来优化或者直接使用CDatabase::ExecuteSQL()执行SQL语句。另外在修改和删除前务必进行业务逻辑校验比如删除图书前检查是否有未归还的记录。3.3 借阅业务逻辑的实现这是系统的核心也是最容易出bug的地方。关键在于事务处理和并发控制。一次借书操作的正确流程开启事务CDatabase::BeginTrans();检查读者状态查询读者表确认读者状态正常且未超借阅上限。检查图书库存查询图书表确认AvailableCount 0。更新图书库存执行SQLUPDATE Book SET AvailableCount AvailableCount - 1 WHERE BookID ?。创建借阅记录向借阅记录表插入一条新记录设置BorrowDate和DueDate。提交事务如果所有步骤成功CDatabase::CommitTrans();。异常回滚任何一步失败立即CDatabase::Rollback();并给用户明确错误提示。BOOL BorrowBook(long nBookID, long nReaderID) { CDatabase* pDB GetDatabase(); // 获取数据库连接 pDB-BeginTrans(); try { // 1. 检查读者 CReaderSet readerSet(pDB); readerSet.Open(CRecordset::snapshot, _T(SELECT * FROM Reader WHERE ReaderID%d AND Status正常 FOR UPDATE), nReaderID); // 注意FOR UPDATE悲观锁 if (readerSet.IsEOF()) { /* 抛出异常读者不存在或状态异常 */ } // 检查借阅数量... readerSet.Close(); // 2. 检查并锁定图书库存 CBookSet bookSet(pDB); bookSet.Open(CRecordset::dynaset, _T(SELECT * FROM Book WHERE BookID%d FOR UPDATE), nBookID); if (bookSet.IsEOF() || bookSet.m_AvailableCount 0) { /* 抛出异常 */ } // 3. 更新库存 bookSet.Edit(); bookSet.m_AvailableCount--; bookSet.Update(); bookSet.Close(); // 4. 插入借阅记录 CBorrowRecordSet borrowSet(pDB); borrowSet.AddNew(); borrowSet.m_BookID nBookID; borrowSet.m_ReaderID nReaderID; borrowSet.m_BorrowDate CTime::GetCurrentTime(); // 计算应还日期例如30天后 borrowSet.m_DueDate CTime::GetCurrentTime() CTimeSpan(30, 0, 0, 0); borrowSet.Update(); borrowSet.Close(); pDB-CommitTrans(); return TRUE; } catch (CDBException* e) { pDB-Rollback(); AfxMessageBox(_T(借书操作失败”) e-m_strError); e-Delete(); return FALSE; } }关键点解析上面的SQL中使用了FOR UPDATE具体语法取决于数据库SQL Server是WITH (UPDLOCK, ROWLOCK)这是一种悲观锁在事务中锁定选中的行防止其他事务同时修改解决并发借阅时可能出现的库存超卖问题。这是实现此类系统必须考虑的重点。4. MFC界面开发与用户体验优化4.1 使用对话框与控件对于图书管理系统基于对话框的应用CDialog比文档-视图架构更简单直接。主要工作就是拖放控件编辑框、按钮、列表控件、组合框等并为其绑定变量和事件处理程序。数据交换使用ClassWizard为控件添加“值”类型或“控制”类型的成员变量。在DoDataExchange函数中通过DDX_Text,DDX_Control等宏实现对话框数据与成员变量的交换。列表控件CListCtrl是显示图书、读者列表的主力。需要设置其扩展风格LVS_EX_FULLROWSELECT,LVS_EX_GRIDLINES动态添加列并在数据变化时刷新。数据验证可以在DoDataExchange中或按钮的点击事件里进行。例如检查必填字段是否为空ISBN格式是否正确日期是否合法。4.2 实现查询与筛选功能一个友好的查询界面通常提供多条件组合筛选。例如在图书查询对话框中可能有“书名”、“作者”、“出版社”等多个编辑框以及一个“查询”按钮。void CBookQueryDlg::OnBtnQuery() { UpdateData(TRUE); // 将控件数据更新到成员变量 CString strFilter; if (!m_strBookName.IsEmpty()) { strFilter.AppendFormat(_T( AND BookName LIKE %%%s%%), m_strBookName); } if (!m_strAuthor.IsEmpty()) { strFilter.AppendFormat(_T( AND Author LIKE %%%s%%), m_strAuthor); } // ... 其他条件 CString strSQL; if (strFilter.IsEmpty()) { strSQL _T(SELECT * FROM Book); } else { strSQL _T(SELECT * FROM Book WHERE 11) strFilter; // “11”技巧方便拼接AND条件 } // 使用strSQL打开记录集并刷新列表... }性能优化对于大数据量表频繁的LIKE ‘%%’模糊查询会导致全表扫描性能极差。应考虑建立合适的索引在数据库端。引导用户使用更精确的查询如提供ISBN精确查询选项。对于中文注意数据库的排序规则LIKE可能不适用有些数据库需用CONTAINS全文索引。4.3 报表生成与数据导出虽然MFC本身不提供强大的报表控件但我们可以用一些简单方法满足基本需求列表控件打印重载OnDraw或使用CDC相关函数将列表控件的内容绘制到打印机DC上。导出到CSV这是最通用的方式。遍历数据用逗号分隔各字段写入文本文件。Excel可以直接打开CSV。CStdioFile file; if (file.Open(_T(图书列表.csv), CFile::modeWrite | CFile::modeCreate)) { file.WriteString(_T(图书ID,ISBN,书名,作者,出版社,库存\n)); while (!bookSet.IsEOF()) { CString line; line.Format(_T(%d,%s,%s,%s,%s,%d\n), bookSet.m_BookID, bookSet.m_ISBN, bookSet.m_BookName, bookSet.m_Author, bookSet.m_Publisher, bookSet.m_AvailableCount); file.WriteString(line); bookSet.MoveNext(); } file.Close(); }使用第三方库如果需要复杂的格式如PDF、Excel可以集成开源库如LibHaruPDF或直接使用COM操作Excel。5. 项目部署、调试与常见问题排查5.1 开发环境搭建与项目配置IDE推荐使用Visual Studio 2019或2022。创建项目时选择“MFC应用程序”。项目设置在“高级功能”中根据需求选择“数据库支持”不带文件支持这会自动引入CDatabase等头文件。在“代码生成”中选择运行时库如/MT或/MD。静态链接/MT会使exe变大但部署简单动态链接/MD需要目标机器有对应的VC运行库。数据库驱动确保开发机和目标部署机都安装了对应的数据库驱动如Access的ODBC驱动或SQL Server Native Client。5.2 编译与运行时常见错误“无法找到程序入口点”或“缺少DLL”原因动态链接了MFC或运行时库但目标机器没有。解决在项目属性中改为“在静态库中使用MFC”或将对应的msvcp140.dll,vcruntime140.dll,mfc140.dll等随程序一起发布。数据库连接失败错误CDBExceptionwithm_strErrorlike “数据源名称未找到”。排查检查连接字符串中的DSN名称是否正确。在目标机器的ODBC数据源管理器中确认已配置同名的系统DSN。如果是Access数据库检查文件路径是否正确是否有读写权限。中文乱码问题场景从数据库读取或显示到界面时中文变成问号或乱码。解决数据库层面确保数据库、表的字符集如UTF-8 GBK与程序编码一致。MFC默认使用_T宏和CString在Unicode工程下是宽字符。程序层面在连接字符串中指定字符集如对于MySQL“Charsetutf8;”。读取数据时确保CRecordset的字符串字段类型是CStringWUnicode工程。通用方法在需要时使用MultiByteToWideChar和WideCharToMultiByte进行转换。列表控件刷新慢或闪烁原因数据量大时逐条InsertItem并设置子项文本会触发多次重绘。优化在批量插入前调用m_listCtrl.SetRedraw(FALSE)禁止重绘。插入完成后调用m_listCtrl.SetRedraw(TRUE)并Invalidate()。考虑使用虚拟列表控件LVS_OWNERDATA风格它只在需要显示时请求数据适合超大数据集。DEBUG模式下正常RELEASE模式下崩溃常见原因未初始化的变量、数组越界、在Release版中被优化的代码路径问题。调试在Release模式下也生成调试符号/DEBUG使用Windbg或Visual Studio附加调试。仔细检查所有指针操作和数组索引。5.3 实战中的经验与技巧封装数据库操作类不要在每个对话框里都写CDatabase连接和CRecordset操作代码。可以封装一个CDBHelper单例类统一管理连接池简单项目一个连接即可、执行SQL、处理异常使业务代码更清晰。使用预编译头务必使用stdafx.h将常用的MFC头文件、数据库头文件、STL头文件放进去能显著加快编译速度。合理使用定时器如热词中提到的“MFC 两个定时器做延时处理”在需要周期性任务如检查超期借阅时很有用。但要注意定时器回调函数中不宜进行耗时操作否则会阻塞UI线程。对于耗时任务应启动工作线程。内存管理虽然MFC和CString等类帮我们管理了大部分内存但手动分配的new出来的对象一定要delete特别是异常发生时要确保资源释放使用RAII思想或智能指针如std::unique_ptr。界面线程与工作线程所有UI操作必须在主线程UI线程进行。如果数据库查询非常慢会导致界面卡死。解决方案是使用工作线程AfxBeginThread执行查询查询完成后通过发送自定义消息PostMessage通知主线程更新界面。这个项目做下来最大的体会不是学会了多少MFC的API而是对“一个完整的软件是如何运作的”有了切身的理解。从设计表结构、编写SQL到用C类去映射业务实体再到用MFC把数据和操作呈现给用户每一步都需要仔细思考数据和逻辑的流转。过程中踩过的坑比如忘记处理事务导致数据不一致或者并发操作时没加锁都是极其宝贵的经验。虽然现在新技术层出不穷但把这些基础打牢以后学任何新框架都会快得多。如果你正在学C并且对Windows开发感兴趣亲手实现这样一个系统绝对是一个性价比极高的选择。

相关新闻

Parrot2无人机用YOLOv3+OpenCV实时追气球的C++工程(含标定数据、飞行指令生成与完整构建脚本)

Parrot2无人机用YOLOv3+OpenCV实时追气球的C++工程(含标定数据、飞行指令生成与完整构建脚本)

本文还有配套的精品资源,点击获取 简介:基于Parrot2无人机平台,用C调用OpenCV DNN模块加载YOLOv3-tiny模型,实现对彩色气球的实时检测与像素级坐标追踪。系统整合摄像头标定(含camer_fix坐标系校正)、图…

2026/10/18 3:03:11 阅读更多 →
函数:编程中的核心概念

函数:编程中的核心概念

什么是函数?函数是编程语言中的基本构建块,它是一段可重复使用的代码块,用于执行特定任务。函数通过接收输入(参数)、执行一系列操作,然后返回输出(返回值)来工作。函数的基本结构大…

2026/10/18 3:05:05 阅读更多 →
453张实拍车牌图+标注框+训练缓存+识别Notebook+Web演示一键跑通

453张实拍车牌图+标注框+训练缓存+识别Notebook+Web演示一键跑通

本文还有配套的精品资源,点击获取 简介:直接可用的车牌检测训练素材,含453张真实道路场景下的JPEG汽车图像,每张都带精确车牌边界框标注;train/test文件夹已划分好,附带.cache缓存文件加快数据加载&…

2026/10/19 15:20:50 阅读更多 →

最新新闻

网络扫描新手入门指南:用Dracnmap掌握Nmap端口探测核心技能

网络扫描新手入门指南:用Dracnmap掌握Nmap端口探测核心技能

1. 项目环境解析:为什么新手需要Dracnmap这类工具网络安全圈子有个常见的误区:很多人觉得“渗透测试”是高不可攀的黑客技术,一上来就想学各种复杂攻击手法。但实际上,真正入门的起点应该是理解网络扫描和测绘——你要先知道目标网…

2026/10/20 5:46:17 阅读更多 →
MySQL数据库脚本工程化:初始化、备份与迁移实践

MySQL数据库脚本工程化:初始化、备份与迁移实践

接手过不少别人留下的 MySQL 项目之后,我越来越觉得,真正决定一个系统能走多远的,往往不是业务代码写得有多花哨,而是那堆看起来不起眼的数据库脚本。最近刚好在重构一套旧系统的初始化脚本和备份逻辑,踩了几个坑&…

2026/10/20 5:46:16 阅读更多 →
VSCode搭建ROS开发环境全攻略:从智能提示到调试远程开发

VSCode搭建ROS开发环境全攻略:从智能提示到调试远程开发

1. 为什么我坚持用VSCode做ROS开发做机器人开发这些年,我先后用过各种各样的编辑器组合,从最初在虚拟机里用Vim硬啃,到后来用Qt Creator写ROS节点,再到尝试过CLion、Eclipse,最后稳定在VSCode上,这个过程其…

2026/10/20 5:46:16 阅读更多 →
diagram-design:从草图到系统,图表设计工程化实战指南

diagram-design:从草图到系统,图表设计工程化实战指南

1. 从一张草图到一套系统:diagram-design 到底在解决什么问题第一次听到 diagram-design 这个词,很多人会以为它只是“画图工具”的另一个说法。但真正在项目里被图表折磨过的人知道,问题从来不是“能不能画出来”,而是“画出来的…

2026/10/20 5:46:16 阅读更多 →
一张图吃透OpenClaw四层架构:感知认知行动记忆的智能体设计

一张图吃透OpenClaw四层架构:感知认知行动记忆的智能体设计

懂不懂一套系统,其实用不着一上来就去翻源码。你只要先把它的层次边界吃透,后面看任何文档、追任何报错,都会轻松很多。这次我继续写“OpenClaw”的认知启蒙系列第2篇,重点就是把四层架构彻底讲清楚。上一篇我们聊了为什么需要一套…

2026/10/20 5:46:16 阅读更多 →
FMCW MIMO雷达多目标分辨与DBSCAN聚类MATLAB仿真详解

FMCW MIMO雷达多目标分辨与DBSCAN聚类MATLAB仿真详解

“雷达点云看着漂亮,真正落地的时候就知道里面全是坑。”我最近在 MATLAB 里重新整理了一套基于 FMCW MIMO 雷达的多目标分辨与聚类仿真链路,用 128 个 Chirp 做慢时间积累,从回波生成一路走到 DBSCAN 点云聚类,把两个位置很接近的…

2026/10/20 5:45:16 阅读更多 →

日新闻

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/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →