Java Swing+MySQL 文具店进销存管理系统完整教程 📅 2026/8/14 3:55:07 一、项目简介本项目是一款基于Java Swing MySQL开发的小型文具店进销存管理系统主打桌面端可视化操作适配中小学文具店、小型文创门店的日常经营管理场景。系统涵盖用户权限登录、商品分类、商品管理、供应商管理、客户管理、采购入库、销售开单、库存盘点、经营报表统计八大核心业务模块完整实现了进销存全流程业务闭环。项目采用原生Java Swing开发界面无需额外框架代码轻量化、易部署、易二次开发数据库采用MySQL自动建表、自动初始化测试数据开箱即用非常适合Java课程设计、毕设入门、Swing实战项目学习使用。二、开发环境与技术栈1、技术栈前端界面Java Swing原生GUI无第三方UI框架后端逻辑Java SE 8数据库MySQL 5.7 / 8.0数据库连接JDBC 原生连接加密工具SHA256 密码加密存储开发工具IDEA / Eclipse2、环境要求JDK 1.8 及以上版本MySQL 5.7 / 8.0MySQL数据库驱动适配对应JDK版本支持Windows/Mac系统运行三、系统功能模块详解本系统功能完整覆盖小微企业进销存核心业务具体模块如下1、用户登录与注册模块管理员账号密码登录SHA256加密存储密码保障账号安全支持新管理员账号注册校验用户名重复、两次密码一致性自动记录用户登录时间更新最后登录日志内置默认管理员账号admin / admin1232、商品分类管理新增文具商品分类分类名称唯一防重复实时刷新分类列表可视化查看所有分类信息默认初始化基础分类笔类、本册、美术用品、文具配件3、商品信息管理自定义商品编码、名称、规格、进价、售价、预警库存绑定对应商品分类关联分类数据展示自动校验数字格式、商品编码唯一性实时展示商品当前库存、预警库存信息4、供应商管理新增、查看供应商信息名称、联系人、电话、地址数据实时刷新为采购入库提供供应商数据源内置默认文具批发供应商测试数据5、客户管理维护零售客户、合作客户信息记录客户名称、联系电话、备注信息支持散客销售模式适配门店零售场景6、采购入库管理自动生成唯一采购单号时间戳格式选择供应商、录入采购商品、数量、进货单价提交入库后自动累加商品库存区分当前单据明细、历史采购记录可随时查询7、销售开单管理自动生成销售单号支持客户/散客开单录入销售商品、数量、售价批量添加单据明细提交销售后自动扣减商品库存留存所有历史销售单据可追溯查询8、库存盘点与预警库存预警功能自动筛选低于预警阈值的缺货商品手动盘点库存录入实际库存数量自动计算盘盈、盘亏数量生成盘点记录自动更新商品账面库存为实际库存数据9、经营统计报表按时间段查询销售报表、采购报表展示单据号、合作方、总金额、交易时间实时查看库存台账掌握所有商品库存状态四、数据库设计系统启动时自动创建所有数据表、自动初始化测试数据无需手动建库、执行SQL脚本。下面整理了全套9张数据表详细结构包含字段类型、主键、外键、字段注释可直接用于课程设计说明书、数据库文档撰写。1、管理员用户表 user用于存储系统管理员账号信息密码SHA256加密存储记录登录日志。字段名字段类型约束字段说明idINT主键、自增管理员用户IDusernameVARCHAR(50)非空、唯一登录用户名passwordVARCHAR(100)非空加密后密码SHA256create_timeDATETIME非空账号注册时间last_login_timeDATETIME可为空最后登录时间2、商品分类表 goods_type文具商品分类数据表与商品表一对多关联。字段名字段类型约束字段说明type_idINT主键、自增分类IDtype_nameVARCHAR(30)非空、唯一文具分类名称3、商品信息表 goods核心商品数据表存储所有文具商品资料、库存、价格、预警信息关联商品分类。字段名字段类型约束字段说明goods_idVARCHAR(20)主键商品唯一编码goods_nameVARCHAR(50)非空商品名称type_idINT外键所属分类IDspecVARCHAR(30)可为空商品规格buy_priceDECIMAL(8,2)非空进货单价sell_priceDECIMAL(8,2)非空销售单价stock_numINT默认0当前账面库存warn_numINT默认10库存预警阈值remarkVARCHAR(100)可为空商品备注4、供应商表 supplier存储进货供应商资料为采购业务提供数据支撑。字段名字段类型约束字段说明supplier_idINT主键、自增供应商IDsupplier_nameVARCHAR(50)非空供应商名称contactVARCHAR(20)可为空联系人姓名phoneVARCHAR(11)可为空联系电话addressVARCHAR(100)可为空供应商地址5、客户表 customer存储门店零售、合作客户信息支撑销售开单业务。字段名字段类型约束字段说明cus_idINT主键、自增客户IDcus_nameVARCHAR(30)可为空客户名称phoneVARCHAR(11)可为空客户电话remarkVARCHAR(100)可为空客户备注信息6、采购主表 purchase采购单主表记录每一次采购单据的整体信息关联供应商和操作管理员。字段名字段类型约束字段说明purchase_idVARCHAR(30)主键采购单号时间戳生成supplier_idINT非空、外键供应商IDtotal_moneyDECIMAL(10,2)非空采购单总金额purchase_timeDATETIME默认当前时间采购下单时间user_idINT外键操作管理员ID7、采购明细表 purchase_item采购单明细表一张采购单对应多条商品明细用于精准记录采购商品数据。字段名字段类型约束字段说明idINT主键、自增明细自增IDpurchase_idVARCHAR(30)非空、外键关联采购单号goods_idVARCHAR(20)非空、外键商品编码buy_numINT非空采购数量item_moneyDECIMAL(10,2)非空单品小计金额8、销售主表 sale销售单主表记录每一笔销售订单整体信息。字段名字段类型约束字段说明sale_idVARCHAR(30)主键销售单号时间戳生成cus_idINT外键、可为空客户ID散客为空total_moneyDECIMAL(10,2)非空销售单总金额sale_timeDATETIME默认当前时间销售开单时间user_idINT外键操作管理员ID9、销售明细表 sale_item销售单明细表记录销售订单中每一款商品的销售数据。字段名字段类型约束字段说明idINT主键、自增明细自增IDsale_idVARCHAR(30)非空、外键关联销售单号goods_idVARCHAR(20)非空、外键商品编码sale_numINT非空销售数量item_moneyDECIMAL(10,2)非空单品销售小计10、库存盘点表 stock_check记录每一次库存盘点记录留存盘盈盘亏数据方便库存对账。字段名字段类型约束字段说明idINT主键、自增盘点记录IDgoods_idVARCHAR(20)非空、外键盘点商品编码book_numINT可为空账面库存数量real_numINT可为空实际盘点库存diff_numINT可为空盘盈/盘亏数量正数盘盈、负数盘亏check_timeDATETIME默认当前时间盘点时间五、核心功能代码解析1、数据库自动连接与初始化系统启动自动加载JDBC驱动连接MySQL不存在数据表则自动创建无测试数据则自动插入默认数据开箱即用。// 初始化数据库连接、自动建表、插入测试数据 private boolean initConn(){ try { if(connectionnull||connection.isClosed()){ Class.forName(com.mysql.cj.jdbc.Driver); connection DriverManager.getConnection(DB_URL,DB_USER,DB_PASSWORD); createAllTable(); // 自动创建全套数据表 insertTestData(); // 自动初始化测试数据 } return true; }catch (ClassNotFoundException|SQLException e){ e.printStackTrace(); return false; } }2、SHA256密码加密摒弃明文存储密码采用SHA256加密保障账号数据安全登录时加密比对校验。// SHA256密码加密 private String encryptPwd(String pwd){ try { MessageDigest md MessageDigest.getInstance(SHA-256); byte[] hash md.digest(pwd.getBytes(UTF-8)); StringBuilder sb new StringBuilder(); for(byte b : hash) sb.append(String.format(%02x,b)); return sb.toString(); }catch (NoSuchAlgorithmException|java.io.UnsupportedEncodingException e){ e.printStackTrace(); return pwd; } }3、采购自动更新库存核心逻辑采购单据提交后自动新增采购记录同步累加商品库存实现入库业务闭环。4、库存预警核心逻辑通过SQL筛选库存数量小于等于预警阈值的商品快速定位缺货商品辅助补货决策。// 库存预警查询 private void showWarnStock(){ String sql SELECT * FROM goods WHERE stock_num warn_num; try(Statement stmt connection.createStatement();ResultSet rs stmt.executeQuery(sql)){ DefaultTableModel model new DefaultTableModel(new String[]{商品编码,名称,当前库存,最低预警库存},0); while(rs.next()) model.addRow(new Object[]{rs.getString(goods_id),rs.getString(goods_name),rs.getInt(stock_num),rs.getInt(warn_num)}); stockTable.setModel(model); }catch (SQLException e){e.printStackTrace();} }六、项目运行教程1、前期准备安装MySQL数据库启动服务创建数据库stationery_store编码utf8mb4修改代码中数据库账号密码为自己本地MySQL账号密码2、配置参数private static final String DB_URL jdbc:mysql://localhost:3306/stationery_store?serverTimezoneAsia/ShanghaiuseSSLfalse; private static final String DB_USER root; // 本地MySQL用户名 private static final String DB_PASSWORD admin123; // 本地MySQL密码3、运行步骤导入项目至IDEA/Eclipse配置JDK1.8导入MySQL驱动包添加至项目依赖运行主类StationeryStoreSystem使用默认账号admin / admin123登录系统所有数据表、测试数据自动初始化直接操作即可七、项目亮点零配置启动自动建表、自动初始化数据无需手动SQL导入功能完整闭环从基础资料维护、采购、销售、库存盘点到报表统计全覆盖数据安全密码SHA256加密存储杜绝明文泄露业务贴合实际适配文具店小微门店经营场景库存自动增减、预警提醒代码简洁易懂原生SwingJDBC无复杂框架适合初学者学习、二次开发界面友好标签页分类展示功能操作逻辑清晰上手简单八、项目总结本文具店进销存管理系统完整实现了小微企业进销存核心业务基于原生Java开发轻量化、易部署、易维护。既可以作为Java课程设计、期末大作业、毕业设计入门项目也可以作为小型文具门店简易管理工具使用。项目涵盖GUI界面开发、JDBC数据库操作、数据加密、业务逻辑开发、数据统计查询等核心Java实战知识点非常适合Java初学者巩固Swing可视化开发与数据库交互能力。九、适配场景Java课程设计、实训项目、毕设简易选题小型文具店、文创店、小卖部进销存管理Java Swing MySQL 技术实战练习