Java Swing+JDBC水果超市管理系统课设源码解析与避坑指南

发布时间:2026/10/15 15:26:58

Java Swing+JDBC水果超市管理系统课设源码解析与避坑指南 简介面向Java初学者的水果超市管理系统源码包适合正在学习Java GUI、集合框架与JDBC数据库编程的读者。项目提供两种典型实现一种基于ArrayList完成内存数据管理另一种使用MySQL数据库并通过JDBC进行增删改查帮助对照理解纯内存操作与持久化存储的差异。界面支持水果清单展示、添加、修改、删除等完整功能代码结构清晰便于模仿与二次开发。压缩包共41个文件主要包含16个class字节码、15个java源码、2个依赖jar包内含MySQL连接驱动以及工程配置文件与界面图片整体大小约704KB解压后可直接导入IDE运行。同时附带的lib目录已备好驱动省去额外配置的麻烦。目前已有3018人学习下载适合课程设计或自学练手。1. Java 水果超市管理系统一套能直接跑的 Swing JDBC 课设源码一套以 Java JDBC Java GUI 组合完成的水果超市管理系统从登录到收银的完整链路都能跑通。这类项目在课程设计和期末作业里出现频率很高我最近拆过一套核心就是 Swing 做界面、JDBC 连 MySQL、业务表围绕商品和订单展开。对刚开始接触 Java 桌面应用的人来说这套源码的价值在于界面、数据库、业务逻辑三部分都能找到对应代码不是只有一个空壳。对想快速上手的人来说改改连接串和库表就能适配自己的环境。下面按我实际排查的顺序写从功能拆解讲到避坑最后给验证清单。2. 系统功能拆解与技术选型从登录到收银的完整业务链路这套系统功能不复杂但业务链路是完整的。用户登录、商品分类维护、水果信息录入、库存查询、前台收银、订单生成这几个环节全部落在数据库表上。把它拆成模块列表看才知道每一块代码该去哪里改。模块职责涉及表对应界面登录与权限校验员工账号区分管理员与普通员工sys_user登录窗口分类管理增加、修改、删除水果分类fruit_category主界面分类页商品管理录入水果名称、品类、价格、库存fruit商品管理面板销售收银添加购物车、结算、扣减库存、生成订单sales_order、order_item收银面板订单查询按订单号或时间段查看销售记录sales_order、order_item订单查询面板2.1 模块划分四张表和三个界面撑起的业务闭环从表结构来看sys_user 管登录权限fruit_category 和 fruit 管商品资料sales_order 和 order_item 管销售流水。这里有个容易被忽略的点fruit 表里存的 stock 库存字段既要在商品管理页里被修改又要在收银结算时被扣减所以这个字段是业务核心代码里要多处用到改的时候要特别小心。界面侧则按角色分流。登录进去后普通员工看到收银和商品查询管理员还能看到分类管理和订单管理。很多课设版本会把所有页面都开放给所有人但如果你手里的源码已经做了权限判断记得在 User 对象里保留 role 字段因为后面所有界面控制都依赖它。我一般拿到这样一套系统会先把模块和表对应关系写出来因为大多数报错不是 Java 语法问题而是某个 DAO 方法对应的 SQL 写错了表名或字段名。比如 OrderDao 里插入订单时用了 order 做表名而 order 在 MySQL 里是关键字就会直接抛语法错误这一点下面避坑章节会专门说。2.2 技术选型为什么是 Swing JDBC 而不是 JavaFX MyBatis选题阶段很多人会纠结要不要用 JavaFX 加 MyBatis。我的看法是这个组合对课设和入门来说性价比不高。Swing 是 JDK 自带的 GUI 框架不需要额外引入依赖打包和部署都省事JDBC 是 Java 连数据库最基础的方式每一个步骤都是显式的拿连接、写 SQL、执行、关资源。这个过程虽然啰嗦但对理解 Java 和数据库的交互非常有帮助。MyBatis 的优势是 SQL 与代码分离但它把连接管理、参数映射做了封装反而让初学者看不懂底层。JavaFX 界面更现代但 FXML、控制器、生命周期这些概念叠加起来学习曲线一下子拉高了。对于一套以“跑通业务、展示增删改查”为核心目标的项目Swing 加 JDBC 是最合适的方案也符合大多数课程设计的技术要求。如果你拿到手的资源里已经用了某种分包风格不要急着大改。先跑通再按自己的习惯调整这是最稳妥的路径。2.3 源码目录与运行入口拿到压缩包先看哪里常见的一套源码分包结构如下所示不同版本可能略有差异但入口类一般就在 com.fruit 或 src 根目录附近。src/com/fruit/ ├── Main.java // 程序入口启动主窗口 ├── db/ │ ├── DBUtil.java // JDBC 连接与关闭工具 ├── dao/ │ ├── UserDao.java // 登录校验 │ ├── FruitDao.java // 商品增删改查 │ ├── OrderDao.java // 订单与明细写入 ├── ui/ │ ├── LoginFrame.java // 登录窗口 │ ├── MainFrame.java // 主窗口CardLayout 切换页面 │ ├── FruitPanel.java // 商品管理面板 │ └── SalePanel.java // 收银面板 └── sql/ └── init.sql // 建库建表脚本拿到资源后先做三件事打开 sql 目录确认建表脚本存在打开 db/DBUtil.java 确认数据库连接参数打开 Main.java 确认启动入口。如果源码包里带了 lib 目录直接把里面的 MySQL 驱动 jar 加入项目依赖如果没有就去 Maven 仓库下载对应版本的驱动这一步决定了项目能不能在本地跑起来。运行流程通常是先在 MySQL 里执行 init.sql再修改 DBUtil 里的用户名密码最后运行 Main。中间任何一个环节断了都会出现后面要讲的驱动加载或连接失败问题。3. 数据库设计与 JDBC 连接建表语句、驱动参数与连接配置数据库是整个项目能不能跑起来的地基。库表建错一个字段Java 代码里就全是 SQL 异常。这套系统的表结构围绕“商品、订单、用户”三个核心对象展开用四张表加上一张明细表就能支撑完整业务。3.1 核心表结构用户表、商品表、分类表、订单表下面是基于这套业务最常见的建表脚本我用 MySQL 8.0 语法写。如果你本机是 5.7也兼容。CREATE DATABASE fruit_mart DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE fruit_mart; CREATE TABLE sys_user ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20) NOT NULL UNIQUE, password VARCHAR(64) NOT NULL, role TINYINT NOT NULL DEFAULT 0 COMMENT 1管理员 0员工, status TINYINT NOT NULL DEFAULT 1 COMMENT 1可用 0禁用 ); CREATE TABLE fruit_category ( id INT AUTO_INCREMENT PRIMARY KEY, category_name VARCHAR(20) NOT NULL ); CREATE TABLE fruit ( id INT AUTO_INCREMENT PRIMARY KEY, fruit_name VARCHAR(50) NOT NULL, category_id INT NOT NULL, price DECIMAL(10,2) NOT NULL, stock INT NOT NULL DEFAULT 0, unit VARCHAR(10) DEFAULT 斤, shelf_date DATE, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, CONSTRAINT fk_fruit_category FOREIGN KEY (category_id) REFERENCES fruit_category(id) ); CREATE TABLE sales_order ( id INT AUTO_INCREMENT PRIMARY KEY, order_no VARCHAR(30) NOT NULL, staff_id INT NOT NULL, total_amount DECIMAL(10,2) NOT NULL, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, CONSTRAINT fk_order_staff FOREIGN KEY (staff_id) REFERENCES sys_user(id) ); CREATE TABLE order_item ( id INT AUTO_INCREMENT PRIMARY KEY, order_id INT NOT NULL, fruit_id INT NOT NULL, quantity INT NOT NULL, price DECIMAL(10,2) NOT NULL, CONSTRAINT fk_item_order FOREIGN KEY (order_id) REFERENCES sales_order(id), CONSTRAINT fk_item_fruit FOREIGN KEY (fruit_id) REFERENCES fruit(id) );建表脚本里有几个细节值得注意。数据库字符集用 utf8mb4考虑到水果名称里可能有生僻字或表情符号utf8mb4 比 utf8 更可靠。price 字段用 DECIMAL(10,2)不要用 FLOAT因为金额计算有精度要求。sales_order 表不直接叫 order因为 order 是 MySQL 的保留字如果强行用 order 做表名每次写 SQL 都要加反引号纯属给自己挖坑。3.2 JDBC 连接串MySQL 8.0 实际踩过的参数连接配置集中在 DBUtil 里这是整个项目最容易翻车的地方。MySQL 8.0 的驱动类名和连接参数与 5.x 版本不一样如果你手上是 8.0 的驱动还写老的驱动类名启动时直接报 ClassNotFoundException。package com.fruit.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { private static final String DRIVER com.mysql.cj.jdbc.Driver; private static final String URL jdbc:mysql://localhost:3306/fruit_mart ?useUnicodetruecharacterEncodingutf8 serverTimezoneAsia/Shanghai useSSLfalse allowPublicKeyRetrievaltrue; private static final String USER root; private static final String PASSWORD 你的密码; static { try { Class.forName(DRIVER); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(MySQL 驱动未找到请确认 jar 已加入 classpath); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } }这段代码里的参数逐个说清楚。serverTimezoneAsia/Shanghai 解决 MySQL 8.0 时区报错不写这个会看到 The server time zone value 的异常。useSSLfalse 是本地连接时避免 SSL 握手警告。allowPublicKeyRetrievaltrue 解决 caching_sha2_password 插件下的公钥检索问题这个参数在 MySQL 8.0 默认认证插件下几乎必加。字符集用 characterEncodingutf8与建库时的 utf8mb4 配合避免中文乱码。3.3 PreparedStatement 与资源关闭账号验证代码的正确写法登录查询如果直接拼字符串虽然能跑但一旦用户名里出现单引号SQL 就崩了。更严重的是存在注入风险。正确做法是用 PreparedStatement参数通过占位符传递。public User login(String username, String password) { String sql SELECT id, username, role FROM sys_user WHERE username ? AND password ? AND status 1; try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { ps.setString(1, username); ps.setString(2, password); try (ResultSet rs ps.executeQuery()) { if (rs.next()) { User user new User(); user.setId(rs.getInt(id)); user.setUsername(rs.getString(username)); user.setRole(rs.getInt(role)); return user; } } } catch (SQLException e) { e.printStackTrace(); } return null; }ps.setString 会把参数值按字符串类型安全地传给数据库省去手动处理单引号的麻烦。查询条件里加 status 1表示只允许启用状态的账号登录禁用账号直接拦在外面。try-with-resources 写法的好处是连接、语句、结果集都会自动关闭不需要手写 finally这在长方法里能避免漏关资源。我第一次跑这套项目时就是因为在 DBUtil 里少写了 allowPublicKeyRetrievaltrue本地连接一直报 Public Key Retrieval is not allowed排查了半天才发现是参数问题这个坑在下面专门整理。4. GUI 与业务层分离Swing 界面布局、事件监听与事务边界Swing 本身不复杂但很多人写出来的代码是界面和业务混在一起按钮监听里直接写 SQL导致后期改需求非常痛苦。这套源码里如果把 DAO 层单独拆出来了界面和业务的边界就很清晰UI 只负责收集输入、展示结果DAO 负责和数据库打交道。4.1 主窗体布局JFrame、CardLayout 与面板切换主界面一般用一个 JFrame 装多个 JPanel用 CardLayout 做页面切换。登录成功后从登录面板切到主面板退出登录再切回来这种模式在课程设计里很常见。JFrame frame new JFrame(水果超市管理系统); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setSize(1024, 640); frame.setLocationRelativeTo(null); CardLayout cardLayout new CardLayout(); JPanel container new JPanel(cardLayout); LoginPanel loginPanel new LoginPanel(container); MainPanel mainPanel new MainPanel(); container.add(loginPanel, login); container.add(mainPanel, main); cardLayout.show(container, login); frame.setContentPane(container); frame.setVisible(true);把 container 传给 LoginPanel是为了在登录成功后让登录面板能直接调用 cardLayout.show(container, main)。这种做法比在 Main 类里写一堆切换逻辑要清爽。setLocationRelativeTo(null) 让窗口居中显示setSize(1024, 640) 是给普通笔记本屏幕留出足够空间如果改成 800x600 也能跑就是表格区域会挤一点。CardLayout 切换时不会销毁页面切回主面板时之前填过的表单内容还在。如果希望在每次进入某个页面时刷新数据可以在 show 之后手动调用对应面板的加载方法。4.2 登录模块事件监听与数据库校验解耦登录按钮的监听器里不要直接写 JDBC 代码而是调用 UserDao 的方法拿到结果后再决定切换页面还是弹错误提示。loginBtn.addActionListener(e - { String name userText.getText().trim(); String pwd new String(pwdField.getPassword()); User user userDao.login(name, pwd); if (user ! null) { currentUserLabel.setText(user.getUsername() 已登录); cardLayout.show(container, main); } else { JOptionPane.showMessageDialog(this, 账号或密码错误); } });密码框用 getPassword() 拿到的是 char[] 而不是 String这是 Swing 的一个设计细节目的是减少密码字符串在内存中被复用的风险。如果业务上需要 String再用 new String(...) 转换。userText.getText().trim() 去掉首尾空格避免用户不小心输入空格导致登录失败。登录成功后的 user 对象可以传给主面板后续收银时记录操作员就用这个对象里的 id。如果主面板拿不到 user可以临时存在一个全局的 Session 类里但最简单的方式是在构造 MainPanel 时把 user 传进去。这套源码里如果已经写了类似 CurrentUser 的持有类直接用就行。4.3 订单结算事务开启、库存扣减与回滚收银是系统里唯一涉及多表写入的操作要插入订单主表、插入订单明细、扣减商品库存。这三个操作必须在一个事务里完成任何一个失败都要全部回滚否则会出现订单生成但库存没扣的脏数据。public void createOrder(Order order, ListOrderItem items) throws SQLException { Connection conn null; try { conn DBUtil.getConnection(); conn.setAutoCommit(false); String orderSql INSERT INTO sales_order(order_no, staff_id, total_amount) VALUES(?, ?, ?); try (PreparedStatement ps conn.prepareStatement(orderSql, Statement.RETURN_GENERATED_KEYS)) { ps.setString(1, order.getOrderNo()); ps.setInt(2, order.getStaffId()); ps.setBigDecimal(3, order.getTotalAmount()); ps.executeUpdate(); try (ResultSet keys ps.getGeneratedKeys()) { if (keys.next()) { order.setId(keys.getInt(1)); } } } String itemSql INSERT INTO order_item(order_id, fruit_id, quantity, price) VALUES(?, ?, ?, ?); try (PreparedStatement ps conn.prepareStatement(itemSql)) { for (OrderItem item : items) { ps.setInt(1, order.getId()); ps.setInt(2, item.getFruitId()); ps.setInt(3, item.getQuantity()); ps.setBigDecimal(4, item.getPrice()); ps.addBatch(); } ps.executeBatch(); } String stockSql UPDATE fruit SET stock stock - ? WHERE id ? AND stock ?; try (PreparedStatement ps conn.prepareStatement(stockSql)) { for (OrderItem item : items) { ps.setInt(1, item.getQuantity()); ps.setInt(2, item.getFruitId()); ps.setInt(3, item.getQuantity()); ps.executeUpdate(); } } conn.commit(); } catch (SQLException e) { if (conn ! null) { conn.rollback(); } throw e; } finally { if (conn ! null) { conn.setAutoCommit(true); conn.close(); } } }事务代码的关键点有两处。一是 conn.setAutoCommit(false) 必须在所有写入操作之前调用否则每条 SQL 都会自动提交回滚就失效了。二是库存扣减语句里写了 stock ?这一条件天然防止库存扣成负数。如果库存不足这条更新语句影响行数为 0你可以在 executeUpdate 后检查返回值小于 1 就抛异常触发回滚。executeBatch 的作用是批量插入明细比起循环里逐条 executeUpdate性能和代码可读性都好很多。finally 里把 autoCommit 恢复成 true 是给连接池场景用的否则连接归还后还保持手动提交状态会影响下一次使用。5. JDBC 与 Swing 避坑指南五个高频问题与排查路径这套源码整体跑通不难但我在帮人排查时反复遇到过几个固定问题现象几乎一样原因却各不相同。下面按“现象、原因、解决”的顺序整理照着查能省不少时间。5.1 驱动加载时直接报 ClassNotFoundException现象运行 Main 类控制台第一行就抛出 ClassNotFoundException指向的类名是 com.mysql.jdbc.Driver。原因项目里没有引入 MySQL 驱动 jar或者驱动 jar 版本与代码里的驱动类名不匹配。MySQL 8.0 的驱动类改成 com.mysql.cj.jdbc.Driver老写法 com.mysql.jdbc.Driver 虽然在 5.x 驱动里能用但在新驱动里已经移除了。解决先确认 MySQL 版本再检查项目 classpath 里有没有 mysql-connector-java 的 jar。如果是 Maven 项目检查 pom.xml 里依赖是否存在。最后确认 DBUtil 里的 DRIVER 常量与依赖版本一致。5.2 java.util.Date 转 java.sql.Date 存不进去现象往 fruit 表的 shelf_date 字段插入日期时要么报错要么存进去的时间不对通常是少了时分秒。原因JDBC 的 setDate 方法只接受 java.sql.Date代码里如果直接传 java.util.Date编译不会报错运行时会提示类型不匹配。解决在 DAO 层做一次转换把 java.util.Date 转成 java.sql.Date常见写法是 new java.sql.Date(utilDate.getTime())。如果你只需要日期部分用这个转换就够了如果需要完整时间应该用 setTimestamp 配合 java.sql.Timestamp。5.3 点击按钮后界面白屏卡死过几秒才恢复现象在登录或收银时点击按钮窗口立刻变白鼠标转圈感觉整个程序假死。原因按钮事件默认跑在 Swing 的事件分发线程上也就是 EDT。DAO 查询数据库、等待响应这些耗时操作如果直接写在监听器里EDT 被占住界面就无法重绘。解决把耗时查询放到新线程里SwingWorker 是官方推荐的做法。查询完成后用 SwingUtilities.invokeLater 把结果回写到组件上。不要直接在后台线程里操作 JTable 或 JLabelSwing 组件不是线程安全的。5.4 中文乱码数据库里全是问号现象界面输入框里输入中文正常点保存后去数据库看字段值变成了一串问号。原因数据库、连接串、页面编码三方不一致。常见组合是库表是 latin1 或 gbk连接串没带 characterEncoding导致字符集转换失败。解决建库时统一用 utf8mb4连接串加上 useUnicodetruecharacterEncodingutf8这两步做完基本不会再乱码。如果还乱码检查 IDE 控制台的编码设置Windows 下把运行环境改成 -Dfile.encodingUTF-8。5.5 Connection 没关导致连接耗尽现象项目跑一段时间后报错 Too many connections重启后恢复过一会儿又报同样的错。原因登录或查询操作拿到的 Connection 没有关闭。每调用一次 getConnection 就占用一个连接连接池里的连接被耗尽后续请求全部阻塞。解决所有 JDBC 操作都用 try-with-resources 包裹确保 Connection、PreparedStatement、ResultSet 全部自动关闭。如果你拿到手的源码里还在用老式写法只在 finally 里关了 Connection 但没关 Statement 和 ResultSet也要一起补上。6. 验证与进阶从“能跑通”到“改得动”的四个动作先给一套验证清单确保系统在你的机器上能正常跑通。按顺序执行每完成一步就对照预期结果及时发现问题。步骤操作预期结果1在 MySQL 中执行 init.sql建库建表成功无报错2修改 DBUtil 中的用户名和密码程序启动后不报连接错误3运行 Main.java弹出登录窗口4使用 init.sql 里初始化的账号登录进入主界面右上角显示当前用户5在商品管理页新增一条水果记录表格新增记录数据库可查到6在收银页添加商品并结算库存减少订单表和明细表各多一条数据7查询订单列表能看到刚生成的订单金额与明细一致跑通之后如果想在源码基础上继续进阶我建议先做两个改动。第一个是把数据库连接参数抽到配置文件里。现在 DBUtil 里的 URL、用户名、密码都是硬编码的换一台电脑就得改代码重编译。建一个 db.properties 文件放在 resources 目录下再用 Properties 类读取后续只改文件不动代码。Properties props new Properties(); try (InputStream in DBUtil.class.getClassLoader() .getResourceAsStream(db.properties)) { props.load(in); }第二个改动是加一个导出 CSV 的功能。水果超市的经营者会想要把商品列表导出成表格这个功能实现成本很低但很实用。从表格模型里取出 JTable 的每一行数据按 CSV 格式写入文件即可。注意字段内容里如果有逗号要用引号包起来否则用 Excel 打开时列会错位。try (FileWriter fw new FileWriter(fruits.csv); BufferedWriter bw new BufferedWriter(fw)) { bw.write(水果名称,分类,价格,库存); bw.newLine(); for (String[] row : tableData) { bw.write(String.join(,, row)); bw.newLine(); } }有一次我把连接串里的 serverTimezone 去掉结果换到另一台电脑跑直接报时区错误排查了大半天才发现是参数变更导致的。从那以后只要是从别人手里接过来的 JDBC 项目我都强制先打开 DBUtil 和 init.sql 确认一遍参数再启动这个习惯帮我省了太多冤枉时间。希望帮到你。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/10/15 15:21:58

计算机基础++:把背过的名词变成能解释现象的地图

我面试过不少候选人,也带过新人,慢慢发现一个共性现象:很多人能把“进程和线程的区别”“TCP和UDP的区别”背得滚瓜烂熟,可你只要把问题稍微换一下,变成“如果让你设计一个聊天软件,你会选 TCP 还是 UDP&am…

2026/10/15 15:21:58

51单片机+DS18B20温控系统完整实战:从硬件接线到PID控制

简介:一套基于AT89C52单片机与DS18B20数字温度传感器的温控系统设计资源,面向单片机初学者及有课程设计、竞赛备赛需求的开发者。RAR压缩包内共有3个文件,包含C语言源码、Proteus仿真工程以及可直接烧录的Hex文件,整体仅28KB&…

2026/10/15 15:21:58

Halcon图像采集实战指南:从接口配置到问题排查

很多第一次碰Halcon的人,都容易踩进同一个坑:算法文档背了一堆,匹配、测量、识别流程说得头头是道,结果一到现场,相机在Halcon里怎么也打不开,或者图像一片黑,又或者采到的图动不动卡帧。机器视…

2026/10/15 16:17:59

彻底搞懂CSS弹性布局:从轴概念到实战避坑指南

1. 为什么弹性布局值得你花时间彻底搞懂做前端这些年,我见过太多人把 Flex 当成"能居中就行"的工具。问起来就是display: flex加justify-content: center加align-items: center,三件套背得滚瓜烂熟,可一旦遇到子项宽度被压缩、换行…

2026/10/15 16:17:59

Android 移植 OctoPrint 实战:Kotlin 壳嵌入 Python 运行时

简介:这份资源是 Octo4a 项目的完整源码包,面向没有树莓派却希望远程控制 3D 打印机的 Android 用户与 Kotlin 开发者。它把 OctoPrint 主机能力搬到手机端,让用户无需 Linux 基础即可在 Android 设备上完成部署,解决硬件成本高、…

2026/10/15 16:17:59

Spring MVC响应消息处理机制解析:从返回值到HTTP输出的完整链路

1. 响应消息到底在响什么:先搞清楚Spring MVC的“最后一公里”做Java Web开发的兄弟,十有八九都经历过这样的困惑:Controller方法明明写完了return,前端拿到的却经常跟预想的不一样。要么是返回JSON时字段丢了,要么是下…

2026/10/15 16:17:59

纯CSS实现移动端家谱世系图:基于uniapp递归组件实战

家谱世系图这个需求,乍一看很简单,无非就是画一棵树。但真落到移动端、落到 uniapp、还得加一句“纯 CSS 实现”的时候,事情就变得有意思了。我上一个项目正好接到类似需求,要在 App 里展示一个家族从始祖到当前几代人的完整世系关…

2026/10/15 16:17:59

TDC-GP22激光测距开发实战:寄存器配置、标定滤波与避坑指南

简介:这份资源面向嵌入式开发工程师与激光测距方向的学习者,围绕Infineon TDC-GP22时间数字转换器展开,提供从硬件接口到软件驱动的完整工程参考,帮助解决亚纳秒级时间间隔测量与微米级距离解算的实现问题。压缩包共195个文件&…

2026/10/15 16:12:55

TikTok 2026海外营销新趋势:品牌如何通过KOC矩阵解决内容增长难题?

品牌出海TikTok增长怎么做?为什么越来越多企业开始布局KOC矩阵营销?对于已经进入全球市场竞争阶段的消费品牌来说,TikTok正在从一个单纯的短视频曝光渠道,逐渐演变为品牌建立海外用户认知、获取消费者反馈、沉淀内容资产的重要增长…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/14 17:41:07

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/15 13:42:16

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/15 0:02:22

防关联浏览器哪个好?三款产品实测差异解析

新手做多店铺,最纠结的就是防关联浏览器选哪个。飞跨、网易、站斧这三款被问得最多,先给结论:要一体化省心、长期便宜,选站斧;要网易招牌和稳,选网易;预算紧做东南亚 Lazada,选飞跨。…

2026/10/15 0:02:22

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成 一、技术背景 大模型(LLM)在通用场景下表现强大,但当我们将 GPT-4 或 Qwen 直接用于生成影刀RPA操作指令和 XPath 定位时,准确率通常只有 40%-60%。原因…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑