一、项目简介
本项目是一款基于Java Swing + MySQL开发的小型宠物店宠物寄养管理系统,适用于中小型宠物店日常寄养业务、宠物档案管理、客户管理、疫苗记录、库存管理、营收统计等场景。系统界面简洁、功能完整、代码结构清晰,非常适合作为 Java 课程设计、毕业设计、期末大作业使用。
系统实现了从客户主人信息、宠物信息、疫苗档案、寄养订单、商品库存、营收统计、用户权限的全流程管理,支持数据备份恢复、密码加密、订单结算、数据统计等实用功能。
二、开发环境
开发工具:IDEA / Eclipse
编程语言:Java
UI框架:Java Swing
数据库:MySQL 8.0
数据库驱动:mysql-connector-java 8.0
系统架构:单机桌面客户端模式
三、系统功能模块
本系统功能齐全,分为七大核心模块:
用户登录与注册模块支持管理员注册、账号密码 SHA256 加密登录、记录最后登录时间、数据库备份与恢复。
主人信息管理模块对宠物店客户(宠物主人)进行新增、修改、删除、查询管理,包含姓名、电话、地址、备注信息。
宠物信息管理模块绑定主人ID,记录宠物名称、品种、性别、年龄、体重、健康状态,支持增删改查。
宠物疫苗档案模块为每只宠物建立疫苗接种记录,包含疫苗名称、接种时间、到期时间、备注。
寄养订单管理模块核心业务模块,支持创建寄养订单、设置寄养起止时间、单日价格、订单结算、订单状态管理。
用品库存管理模块管理宠物店售卖/使用的商品库存,包含商品名称、分类、售价、库存数量、供应商信息。
营收统计模块按时间段统计寄养订单数量、已结算订单总营收,可视化数据汇总。
系统用户管理模块支持新增管理员/店员账号、删除账号、查看用户列表,区分管理员与普通店员角色。
四、数据库详细设计(含表结构+字段注释)
本系统数据库采用MySQL 8.0,共6张数据表,包含用户权限、客户、宠物、疫苗、寄养订单、商品库存,所有表结构规范、字段注释完整,支持外键关联约束,有效保证数据完整性。以下为完整建表语句及字段说明。
4.1 系统用户表 sys_user
用于存储系统登录账号、权限角色、登录记录,密码SHA256加密存储
CREATE TABLE sys_user ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', username VARCHAR(50) NOT NULL UNIQUE COMMENT '登录用户名', password VARCHAR(100) NOT NULL COMMENT '加密后密码', role VARCHAR(20) NOT NULL COMMENT '角色:admin管理员 / user店员', create_time VARCHAR(50) COMMENT '账号创建时间', last_login_time VARCHAR(50) COMMENT '最后登录时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户表';4.2 宠物主人表 pet_owner
存储宠物店客户信息,为宠物信息的上级关联表
CREATE TABLE pet_owner ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主人主键ID', owner_name VARCHAR(50) NOT NULL COMMENT '主人姓名', owner_phone VARCHAR(20) NOT NULL COMMENT '联系电话', owner_address VARCHAR(200) COMMENT '居住地址', remark VARCHAR(200) COMMENT '备注信息', create_time VARCHAR(50) COMMENT '信息录入时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宠物主人信息表';4.3 宠物信息表 pet_info
关联宠物主人,存储所有宠物基础档案信息,核心基础数据表
CREATE TABLE pet_info ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '宠物主键ID', owner_id INT NOT NULL COMMENT '关联主人ID', pet_name VARCHAR(50) NOT NULL COMMENT '宠物名称', pet_type VARCHAR(50) COMMENT '宠物品种', pet_sex VARCHAR(10) COMMENT '宠物性别', pet_age VARCHAR(20) COMMENT '宠物年龄', pet_weight VARCHAR(20) COMMENT '宠物体重', health_desc VARCHAR(200) COMMENT '健康状况描述', create_time VARCHAR(50) COMMENT '录入时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宠物信息表';4.4 宠物疫苗档案表 pet_vaccine
关联宠物ID,记录宠物疫苗接种台账,方便溯源管理
CREATE TABLE pet_vaccine ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '疫苗记录ID', pet_id INT NOT NULL COMMENT '关联宠物ID', vaccine_name VARCHAR(50) NOT NULL COMMENT '疫苗名称', vaccine_date VARCHAR(30) COMMENT '接种日期', expire_date VARCHAR(30) COMMENT '疫苗到期日期', remark VARCHAR(200) COMMENT '备注说明', create_time VARCHAR(50) COMMENT '记录录入时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宠物疫苗档案表';4.5 寄养订单表 foster_order
系统核心业务表,记录宠物寄养所有订单数据、价格、状态、结算信息
CREATE TABLE foster_order ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '订单ID', pet_id INT NOT NULL COMMENT '关联宠物ID', start_date VARCHAR(30) COMMENT '寄养开始日期', end_date VARCHAR(30) COMMENT '预计离店日期', daily_price DECIMAL(10,2) COMMENT '每日寄养单价', total_money DECIMAL(10,2) DEFAULT 0 COMMENT '订单总金额', status VARCHAR(20) DEFAULT '寄养中' COMMENT '订单状态:寄养中/已结算', care_remark VARCHAR(200) COMMENT '寄养照料备注', settle_time VARCHAR(50) COMMENT '订单结算时间', create_time VARCHAR(50) COMMENT '订单创建时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='寄养订单表';4.6 商品库存表 goods_stock
记录宠物店耗材、售卖商品的库存、价格及供应商信息
CREATE TABLE goods_stock ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '商品ID', goods_name VARCHAR(50) NOT NULL COMMENT '商品名称', goods_type VARCHAR(30) COMMENT '商品分类', price DECIMAL(10,2) COMMENT '商品售价', stock_num INT DEFAULT 0 COMMENT '库存数量', supplier VARCHAR(50) COMMENT '供应商', create_time VARCHAR(50) COMMENT '录入时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品库存表';五、系统特色亮点
密码安全加密:采用 SHA256 加密算法,密码不明文存储,安全性更高。
数据库备份恢复:系统内置一键备份、一键恢复 SQL 功能,保障数据安全。
完整业务闭环:客户→宠物→疫苗→寄养订单→结算→营收统计,业务完整。
防误删机制:有关联数据的主数据禁止删除,避免数据库外键报错。
时间段数据统计:支持自定义日期范围统计订单量、营收总额。
角色区分:区分管理员、店员角色,可拓展权限控制。
界面简洁美观:Tab 标签页布局,操作直观,零基础也能上手。
五、系统特色亮点
1. JDBC 数据库连接
系统统一封装数据库连接方法,自动获取连接、关闭连接,避免资源泄露。配置时区、关闭SSL适配 MySQL8.0。
2. SHA256 密码加密
自定义加密工具方法,对注册、登录密码进行哈希加密,保证系统账号安全。
3. Swing 表格数据渲染
使用 DefaultTableModel 动态加载数据库数据,实现表格刷新、数据回填、选中操作。
4. 系统调用 cmd 实现数据库备份恢复
通过 Runtime 执行 mysqldump、mysql 命令,实现可视化备份恢复功能,实用性极强。
六、核心项目代码展示
6.1 数据库连接核心代码
全局封装JDBC连接,适配MySQL8.0,统一管理连接、关闭资源,避免资源泄漏
// 数据库配置常量 private static final String DB_URL = "jdbc:mysql://localhost:3306/pet_foster_db?serverTimezone=Asia/Shanghai&useSSL=false"; private static final String DB_USER = "root"; private static final String DB_PASSWORD = "admin123"; private Connection connection; // 初始化数据库连接 private boolean initConn() { try { if (connection == null || connection.isClosed()) { Class.forName("com.mysql.cj.jdbc.Driver"); connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); } return true; } catch (ClassNotFoundException | SQLException e) { JOptionPane.showMessageDialog(null, "数据库连接失败:" + e.getMessage()); e.printStackTrace(); return false; } } // 关闭数据库连接 private void closeConn() { try { if (connection != null && !connection.isClosed()) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } }6.2 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; } }6.3 数据库备份&恢复核心代码
调用系统CMD命令,实现一键数据库备份、恢复,项目特色功能
// 数据库备份 private void backupDatabase() { JFileChooser chooser = new JFileChooser(); chooser.setDialogTitle("选择备份保存位置"); String fileName = "pet_foster_backup_" + dateFormat.format(new Date()) + ".sql"; chooser.setSelectedFile(new File(fileName)); FileNameExtensionFilter filter = new FileNameExtensionFilter("SQL备份文件", "sql"); chooser.setFileFilter(filter); int opt = chooser.showSaveDialog(loginFrame); if (opt != JFileChooser.APPROVE_OPTION) return; File saveFile = chooser.getSelectedFile(); String cmd = "mysqldump -u" + DB_USER + " -p" + DB_PASSWORD + " pet_foster_db > " + saveFile.getAbsolutePath(); try { Runtime.getRuntime().exec(cmd); JOptionPane.showMessageDialog(loginFrame, "备份成功!\n路径:" + saveFile.getAbsolutePath()); } catch (IOException e) { JOptionPane.showMessageDialog(loginFrame, "备份失败,请配置MySQL环境变量"); e.printStackTrace(); } } // 数据库恢复 private void restoreDatabase() { JFileChooser chooser = new JFileChooser(); chooser.setDialogTitle("选择备份sql文件"); FileNameExtensionFilter filter = new FileNameExtensionFilter("SQL备份文件", "sql"); chooser.setFileFilter(filter); int opt = chooser.showOpenDialog(loginFrame); if (opt != JFileChooser.APPROVE_OPTION) return; File loadFile = chooser.getSelectedFile(); String cmd = "mysql -u" + DB_USER + " -p" + DB_PASSWORD + " pet_foster_db < " + loadFile.getAbsolutePath(); try { Runtime.getRuntime().exec(cmd); JOptionPane.showMessageDialog(loginFrame, "数据恢复成功,请重新登录"); } catch (IOException e) { JOptionPane.showMessageDialog(loginFrame, "恢复失败,请配置MySQL环境变量"); e.printStackTrace(); } }6.4 寄养订单结算核心业务代码
核心业务逻辑,实现订单状态更新、结算时间记录
// 订单结算 private void settleOrder() { int row = fosterTable.getSelectedRow(); if (row == -1) { JOptionPane.showMessageDialog(mainFrame, "选择订单"); return; } int orderId = Integer.parseInt(fosterTable.getValueAt(row, 0).toString()); String sqlUpdate = "UPDATE foster_order SET status='已结算',settle_time=NOW() WHERE id=?"; try (PreparedStatement pstmt = connection.prepareStatement(sqlUpdate)) { pstmt.setInt(1, orderId); pstmt.executeUpdate(); JOptionPane.showMessageDialog(mainFrame, "订单结算完成"); refreshFosterTable(); } catch (SQLException e) { e.printStackTrace(); } }6.5 营收数据统计核心代码
按自定义时间段统计订单数量、总营收,实现数据可视化汇总
// 营收汇总统计 private void loadIncomeTotalStat(){ String sql = "SELECT SUM(total_money) total_income,COUNT(id) total_order " + "FROM foster_order WHERE status='已结算' AND DATE(settle_time) BETWEEN ? AND ?"; try(PreparedStatement pstmt = connection.prepareStatement(sql)){ pstmt.setString(1,statStart.getText().trim()); pstmt.setString(2,statEnd.getText().trim()); ResultSet rs = pstmt.executeQuery(); DefaultTableModel model = new DefaultTableModel(new String[]{"时间段结算订单总数","总营收金额"},0); if(rs.next()){ model.addRow(new Object[]{rs.getInt("total_order"),rs.getDouble("total_income")}); } incomeStatTable.setModel(model); }catch (SQLException e){ e.printStackTrace(); } }七、运行教程
创建 MySQL 数据库
pet_foster_db导入数据库表结构(可自行根据字段建表或执行备份文件)
修改代码中数据库账号、密码为自己本地 MySQL 账号密码
导入 mysql 驱动包
运行主方法,启动系统,注册账号后登录使用
八、项目总结
本宠物店寄养管理系统功能完整、代码规范、界面整洁,覆盖了宠物寄养行业的基础管理需求,适合作为Java 毕业设计、课程设计、练手项目。项目无冗余代码,模块分工明确,非常适合新手学习 JavaSwing 桌面开发与 JDBC 数据库交互。
可二次拓展功能:宠物寄养天数自动计算、订单自动计价、员工权限细分、图片上传、打印订单、Excel 导出等。