Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

影视器材租赁管理系统

CI

一个面向影视工作室的 Java 控制台租赁系统。项目以真实租赁流程为主线,覆盖器材库存、客户信用、租赁订单、归还计费、维修记录和经营统计,并通过 Controller / Service / DAO 分层与 JDBC 事务保证核心业务一致性。

项目来源于课程作业,后续按可复现、可测试、可讲解的求职项目标准完成了工程化整理。

项目亮点

  • 完整业务闭环:器材入库与检索、客户管理、租赁下单、归还、逾期费用、信用积分、维修与统计。
  • 事务一致性:订单、明细、库存和信用变更由 Service 统一编排,失败时整体回滚。
  • 并发库存保护:库存扣减使用带上下界条件的原子 SQL,并检查受影响行数,避免超租和负库存。
  • 分段租金计算:按 [开始日期, 归还日期) 逐日计费,支持普通日、周末上浮与特殊日期费率,统一使用 BigDecimal
  • 权限与密码安全:普通用户只能操作本人订单;密码采用随机盐 PBKDF2-HMAC-SHA256 哈希,兼容旧账号首次登录迁移。
  • 可验证质量:JUnit 5 覆盖日期边界、租金规则和密码哈希;数据库脚本包含外键、检查约束和常用查询索引。

系统架构

三层架构图

Controller  控制台菜单、输入输出、角色路由
    ↓
Service     业务校验、租金与信用规则、事务编排
    ↓
DAO         JDBC、PreparedStatement、数据映射
    ↓
MySQL       9 张业务表、外键、约束与索引

数据库实体关系如下:

数据库 ER 图

核心流程

创建订单

  1. 校验客户、器材、数量和租赁日期。
  2. 拦截信用积分低于 60 的客户和不可租器材。
  3. 读取租赁区间内的特殊费率,逐日计算订单金额。
  4. 原子扣减可租库存,写入订单与订单明细。
  5. 任一步骤失败则回滚整个事务。

租金计算流程

归还器材

系统校验订单状态与客户归属,计算逾期费用,恢复库存,并根据是否逾期、是否损坏调整信用积分和记录变更日志。

器材归还流程

技术栈

类别 技术
语言与构建 Java 11、Maven
数据库 MySQL 8.0、InnoDB、utf8mb4
数据访问 JDBC、PreparedStatement
日志 SLF4J、Logback
测试 JUnit 5、Maven Surefire
安全 PBKDF2-HMAC-SHA256、随机盐、订单归属校验

项目结构

video_rent/
├─ src/main/java/com/dong/rental/
│  ├─ controller/       # 管理员与普通用户菜单
│  ├─ service/          # 业务接口与事务实现
│  ├─ dao/              # JDBC 数据访问
│  ├─ entity/           # 领域实体
│  ├─ constant/         # 状态与信用等级枚举
│  ├─ exception/        # 业务异常
│  └─ util/             # 数据库、日期、计价、密码等工具
├─ src/main/resources/
│  ├─ sql/init.sql      # 表结构、约束、索引和演示数据
│  └─ db.properties.example
├─ src/test/java/       # JUnit 与手工业务场景
├─ drawio/              # 架构、ER 与流程图源文件
└─ md/DESIGN.md         # 完整设计文档

快速开始

1. 环境要求

  • JDK 11 或更高版本
  • Maven 3.8+
  • MySQL 8.0+

2. 初始化数据库

先创建并选择数据库,再执行初始化脚本:

CREATE DATABASE IF NOT EXISTS video_rent
  DEFAULT CHARACTER SET utf8mb4;
USE video_rent;
SOURCE src/main/resources/sql/init.sql;

3. 配置连接

复制示例配置:

Copy-Item src/main/resources/db.properties.example src/main/resources/db.properties

然后在本地 db.properties 中填写数据库账号和密码。该文件已加入 .gitignore,不会提交真实凭据。

4. 构建与运行

mvn clean test
mvn exec:java -Dexec.mainClass="com.dong.rental.App"

也可以直接在 IDE 中运行 com.dong.rental.App

演示账号的初始密码均为 123456

角色 用户名
管理员 admin
普通用户 zhangweilinawangqiang

测试

mvn test

自动化测试重点覆盖:

  • 周末日期边界及非法日期区间;
  • 周末上浮、特殊费率优先级与数量计价;
  • 密码随机盐、正确匹配和错误密码拒绝。

src/test/java/com/dong/rental/service 中还保留了可连接演示数据库运行的完整业务场景。

设计文档

更完整的数据表设计、事务边界、业务规则和演进建议见 系统设计文档

后续计划

  • 把剩余数据库场景迁移为可隔离运行的集成测试;
  • 引入连接池和构造器依赖注入;
  • 完善订单付款、取消、逾期扫描等状态迁移;
  • 在现有 Service/DAO 基础上增加 Web API 或前端界面。

About

Java 影视器材租赁管理系统|JDBC + MySQL + 事务一致性 + PBKDF2 + JUnit

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages