毕业设计实战:基于SpringBoot的汽车租赁管理系统设计与实现全攻略

0 阅读13分钟

毕业设计实战:基于SpringBoot的汽车租赁管理系统设计与实现全攻略

在开发“基于SpringBoot的汽车租赁管理系统”毕业设计时,曾因“租车订单与还车信息数据脱节”踩过关键坑——初期未设计清晰的订单状态机和还车联动机制,导致用户租车后还车时订单状态未同步更新、取消订单与租车订单状态混乱、车辆状态无法自动更新为可租,耗费4天重构订单管理模块、引入订单状态流转和车辆状态联动机制才解决问题📝。基于此次实战经验,本文精简拆解核心开发流程,附避坑要点与实操细节,为同类毕设提供可落地的实施参考。

一、需求分析:聚焦租车+还车双核心,避免功能冗余

部分同学易陷入“功能堆砌”误区,比如我曾耗时3天开发“车辆地图追踪”模块,最终因偏离“汽车信息管理、租车订单、还车管理、取消订单”核心需求被导师要求删减。明确“车辆发布→用户租车→订单生成→车辆出库→还车结算→车辆入库”的业务闭环,是降低返工率的关键。

1. 核心角色与功能(精简版)

角色核心功能
管理员用户管理、普通管理员管理、汽车类别管理、汽车信息管理、租车订单管理、取消订单管理、还车信息管理、汽车资讯管理、汽车论坛、留言板管理、系统管理
普通管理员汽车信息管理、租车订单管理、取消订单管理、还车信息管理、汽车资讯管理、个人中心
用户汽车浏览/搜索、租车下单、订单查看、取消订单、还车申请、个人中心

2. 需求避坑要点

  • 拒绝空想调研:邀请15名用户模拟“用户浏览车辆→下单租车→生成订单→车辆出库→还车申请→订单完成”完整流程,基于“用户需要知道订单状态和车辆状态”需求,增设“订单状态跟踪”和“车辆状态实时更新”模块,实用性远大于冗余的“车辆地图追踪”;
  • 明确约束条件:提前规定“订单编号自动生成(格式:DD+年月日+序号)”“租车时车辆状态自动更新为已租”“还车审核通过后车辆状态恢复为可租”“取消订单需审核”,为系统实现提供明确依据。

二、技术选型:稳定框架+订单联动,新手可上手

前期曾尝试引入Redis缓存车辆库存,因数据一致性难保证且学习成本高,调试耗时3天。最终确定“成熟框架+数据库事务”组合:

技术工具选型理由避坑提醒
Spring Boot 2.x + MyBatis-Plus快速开发,简化配置,高效实现CRUD和业务逻辑,声明式事务管理方便事务注解@Transactional记得在Service层添加;租车下单和车辆状态更新必须加事务
Vue 2.x + ElementUI组件丰富,快速构建前后台界面,表格和表单组件好用订单状态用标签展示;车辆状态用颜色区分
MySQL 5.7存储用户、车辆、订单、还车等核心业务数据金额字段用Decimal类型;事务要保证订单和车辆状态一致性
Thymeleaf(可选)服务端模板引擎,适合快速开发后台管理界面毕设时间充裕可统一用Vue

三、数据库设计:业务关联清晰,支撑车辆-订单-还车闭环

数据库设计直接影响后续开发效率。前期因未设计“订单状态字段”和“车辆状态联动机制”,导致用户还车后车辆状态未自动更新、取消订单与租车订单状态混乱。

1. 核心表结构(精选12张表)

  • 管理员表(users):id、username、password(MD5加密)、role、addtime;
  • 用户表(yonghu):id、zhanghao(账号)、mima(密码)、xingming(姓名)、nianling(年龄)、xingbie(性别)、shenfenzheng(身份证)、shouji(手机)、touxiang(头像)、addtime;
  • 普通管理员表(putongguanliyuan):id、guanlizhanghao(管理账号)、mima(密码)、guanlixingming(管理姓名)、xingbie(性别)、nianling(年龄)、lianxidianhua(联系电话)、touxiang(头像)、addtime;
  • 汽车类别表(qicheleibie):id、qicheleibie(汽车类别)、addtime;
  • 汽车信息表(qichexinxi):id、chepaihao(车牌号)、cheliangxinghao(车辆型号)、qicheleibie(汽车类别)、cheliangpinpai(车辆品牌)、jiage(日租价格)、yanse(颜色)、zhuangtai(状态)、huandangfangshi(换挡方式)、cheliangzhaopian(车辆照片)、zuoweishu(座位数)、qichepailiang(汽车排量)、qichejiage(汽车价格)、chuchangnianfen(出厂年份)、dengjiriqi(登记日期)、qichejianjie(汽车简介)、guanlizhanghao(管理账号)、guanlixingming(管理姓名)、clicktime、clicknum、addtime;
  • 租车订单表(zuchedingdan):id、dingdanbianhao(订单编号)、chepaihao(车牌号)、cheliangpinpai(车辆品牌)、qicheleibie(汽车类别)、jiage(价格)、zuqi(租期)、zongjia(总价)、chuzuriqi(出租日期)、beizhu(备注)、zhanghao(用户账号)、xingming(用户姓名)、shouji(手机)、shenfenzheng(身份证)、guanlizhanghao(管理账号)、guanlixingming(管理姓名)、sfsh(审核状态)、shhf(审核回复)、ispay(支付状态)、addtime;
  • 取消订单表(quxiaodingdan):id、dingdanbianhao(订单编号)、chepaihao(车牌号)、cheliangpinpai(车辆品牌)、qicheleibie(汽车类别)、jiage(价格)、zuqi(租期)、zongjia(总价)、quxiaoriqi(取消日期)、quxiaoyuanyin(取消原因)、zhanghao(账号)、xingming(姓名)、shouji(手机)、shenfenzheng(身份证)、guanlizhanghao(管理账号)、guanlixingming(管理姓名)、sfsh(审核状态)、shhf(审核回复)、ispay(支付状态)、addtime;
  • 还车信息表(haichexinxi):id、dingdanbianhao(订单编号)、chepaihao(车牌号)、cheliangpinpai(车辆品牌)、qicheleibie(汽车类别)、haicheriqi(还车日期)、haichebeizhu(还车备注)、zhanghao(账号)、xingming(姓名)、shouji(手机)、shenfenzheng(身份证)、guanlizhanghao(管理账号)、guanlixingming(管理姓名)、sfsh(审核状态)、shhf(审核回复)、addtime;
  • 汽车资讯表(qichezixun):id、biaoti(标题)、jianjie(简介)、fabushijian(发布时间)、neirong(内容)、faburen(发布人)、fengmian(封面)、clicktime、clicknum、userid、addtime;
  • 汽车论坛表(qicheluntan):id、title(帖子标题)、content(帖子内容)、parentid(父节点id)、userid(用户id)、username(用户名)、avatarurl(头像)、isdone(状态)、addtime;
  • 留言板表(liuyanban):id、userid、username、avatarurl、content、cpicture、reply、rpicture、addtime;
  • 收藏表(shoucang):id、userid、refid、tablename、name、picture、type、addtime。

2. 关键业务SQL示例

示例SQL(查询车辆租车历史及还车记录):

-- 查询指定车辆的租车订单和还车记录
SELECT 
    z.*,
    h.haicheriqi,
    h.haichebeizhu,
    h.sfsh as huache_status
FROM qichexinxi q
LEFT JOIN zuchedingdan z ON q.chepaihao = z.chepaihao
LEFT JOIN haichexinxi h ON z.dingdanbianhao = h.dingdanbianhao
WHERE q.chepaihao = #{chepaihao}
ORDER BY z.addtime DESC

关键避坑:订单状态需与车辆状态联动;还车审核通过后自动更新车辆状态为可租;取消订单需审核。

四、核心功能实现:8大模块满足答辩需求

无需复杂功能,优先完成以下8个核心模块,其中租车订单与还车联动是答辩重点。

1. 用户/普通管理员管理(人员模块)

  • 核心逻辑:管理员管理用户和普通管理员信息(账号、姓名、联系方式等);
  • 页面设计:用户列表显示账号、姓名、身份证、手机;普通管理员列表显示管理账号、姓名、电话;
  • 代码要点(用户注册):
public void addYonghu(Yonghu user) {
    // 校验账号是否重复
    LambdaQueryWrapper<Yonghu> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(Yonghu::getZhanghao, user.getZhanghao());
    if (yonghuMapper.selectCount(wrapper) > 0) {
        throw new RuntimeException("账号已存在");
    }
    user.setAddtime(new Date());
    yonghuMapper.insert(user);
}

2. 汽车类别管理(分类模块)

  • 核心逻辑:管理员维护汽车类别(轿车、SUV、商务车、跑车等);
  • 页面设计:类别列表支持增删改查;
  • 代码要点:删除前检查是否有车辆关联。

3. 汽车信息管理(核心资源模块)

  • 核心逻辑:普通管理员发布车辆信息(车牌号、型号、品牌、颜色、日租价格、座位数、排量等)→用户浏览、搜索;
  • 页面设计:车辆卡片式展示,显示车牌号、品牌、型号、图片、日租价格;详情页展示完整参数;
  • 代码要点(车辆发布与状态管理):
@Transactional
public void addQichexinxi(Qichexinxi car) {
    // 1. 校验车牌号是否重复
    LambdaQueryWrapper<Qichexinxi> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(Qichexinxi::getChepaihao, car.getChepaihao());
    if (qichexinxiMapper.selectCount(wrapper) > 0) {
        throw new RuntimeException("车牌号已存在");
    }
    
    car.setZhuangtai("可租");
    car.setClicknum(0);
    car.setAddtime(new Date());
    qichexinxiMapper.insert(car);
    
    log.info("普通管理员 {} 发布了车辆 {}", car.getGuanlixingming(), car.getChepaihao());
}

// 车辆状态更新(租车/还车时调用)
public void updateCarStatus(String chepaihao, String status) {
    Qichexinxi car = qichexinxiMapper.selectOne(
        new LambdaQueryWrapper<Qichexinxi>().eq(Qichexinxi::getChepaihao, chepaihao)
    );
    car.setZhuangtai(status);
    qichexinxiMapper.updateById(car);
}

4. 租车订单管理(核心业务模块)

  • 核心逻辑:用户选择车辆→填写租期→下单→生成订单→管理员/普通管理员审核→支付→车辆状态更新为已租;
  • 页面设计:订单列表显示订单编号、车牌号、租期、总价、审核状态、支付状态;
  • 代码要点(租车下单与状态联动):
@Transactional
public void addZuchedingdan(Zuchedingdan order) {
    // 1. 生成订单编号
    String orderId = "DD" + System.currentTimeMillis();
    order.setDingdanbianhao(orderId);
    
    // 2. 计算总价
    order.setZongjia(order.getJiage() * order.getZuqi());
    
    // 3. 设置初始状态
    order.setSfsh("待审核");
    order.setIspay("未支付");
    order.setAddtime(new Date());
    
    // 4. 保存订单
    zuchedingdanMapper.insert(order);
    
    log.info("用户 {} 提交租车订单 {}", order.getXingming(), orderId);
}

// 订单审核通过
@Transactional
public void approveOrder(Long orderId) {
    Zuchedingdan order = zuchedingdanMapper.selectById(orderId);
    order.setSfsh("通过");
    zuchedingdanMapper.updateById(order);
    
    // 更新车辆状态为已租
    updateCarStatus(order.getChepaihao(), "已租");
    
    log.info("订单 {} 审核通过,车辆 {} 状态更新为已租", 
        order.getDingdanbianhao(), order.getChepaihao());
}

// 订单支付
@Transactional
public void payOrder(Long orderId) {
    Zuchedingdan order = zuchedingdanMapper.selectById(orderId);
    order.setIspay("已支付");
    zuchedingdanMapper.updateById(order);
    
    log.info("订单 {} 支付成功", order.getDingdanbianhao());
}

5. 取消订单管理(订单变更模块)

  • 核心逻辑:用户申请取消订单→填写取消原因→管理员审核→审核通过后车辆状态恢复为可租;
  • 页面设计:取消订单列表显示订单编号、车牌号、取消原因、审核状态;
  • 代码要点(取消订单联动):
@Transactional
public void addQuxiaodingdan(Quxiaodingdan cancel) {
    // 1. 获取原订单信息
    Zuchedingdan order = zuchedingdanMapper.selectOne(
        new LambdaQueryWrapper<Zuchedingdan>()
            .eq(Zuchedingdan::getDingdanbianhao, cancel.getDingdanbianhao())
    );
    
    // 2. 设置取消订单信息
    cancel.setChepaihao(order.getChepaihao());
    cancel.setCheliangpinpai(order.getCheliangpinpai());
    cancel.setQicheleibie(order.getQicheleibie());
    cancel.setJiage(order.getJiage());
    cancel.setZuqi(order.getZuqi());
    cancel.setZongjia(order.getZongjia());
    cancel.setZhanghao(order.getZhanghao());
    cancel.setXingming(order.getXingming());
    cancel.setSfsh("待审核");
    cancel.setIspay("未支付");
    cancel.setQuxiaoriqi(new Date());
    cancel.setAddtime(new Date());
    
    quxiaodingdanMapper.insert(cancel);
    
    log.info("用户 {} 申请取消订单 {}", cancel.getXingming(), cancel.getDingdanbianhao());
}

// 取消订单审核通过
@Transactional
public void approveCancel(Long cancelId) {
    Quxiaodingdan cancel = quxiaodingdanMapper.selectById(cancelId);
    cancel.setSfsh("通过");
    quxiaodingdanMapper.updateById(cancel);
    
    // 车辆状态恢复为可租
    updateCarStatus(cancel.getChepaihao(), "可租");
    
    log.info("取消订单 {} 审核通过,车辆 {} 状态恢复为可租", 
        cancel.getDingdanbianhao(), cancel.getChepaihao());
}

6. 还车信息管理(服务闭环模块)

  • 核心逻辑:用户申请还车→填写还车备注→管理员审核→审核通过后车辆状态恢复为可租;
  • 页面设计:还车列表显示订单编号、车牌号、还车日期、还车备注、审核状态;
  • 代码要点(还车联动):
@Transactional
public void addHaichexinxi(Haichexinxi haiche) {
    haiche.setSfsh("待审核");
    haiche.setHaicheriqi(new Date());
    haiche.setAddtime(new Date());
    haichexinxiMapper.insert(haiche);
    
    log.info("用户 {} 申请还车,订单 {}", haiche.getXingming(), haiche.getDingdanbianhao());
}

// 还车审核通过
@Transactional
public void approveHaiche(Long haicheId) {
    Haichexinxi haiche = haichexinxiMapper.selectById(haicheId);
    haiche.setSfsh("通过");
    haichexinxiMapper.updateById(haiche);
    
    // 车辆状态恢复为可租
    updateCarStatus(haiche.getChepaihao(), "可租");
    
    // 更新原订单状态为已完成
    Zuchedingdan order = zuchedingdanMapper.selectOne(
        new LambdaQueryWrapper<Zuchedingdan>()
            .eq(Zuchedingdan::getDingdanbianhao, haiche.getDingdanbianhao())
    );
    order.setSfsh("已完成");
    zuchedingdanMapper.updateById(order);
    
    log.info("还车申请 {} 审核通过,车辆 {} 状态恢复为可租", 
        haiche.getDingdanbianhao(), haiche.getChepaihao());
}

7. 汽车资讯/论坛管理(互动模块)

  • 核心逻辑:管理员发布汽车资讯,用户参与论坛交流;
  • 页面设计:资讯列表显示标题、封面、发布时间;论坛列表支持发帖/回帖;
  • 代码要点:论坛支持楼中楼回复;资讯支持点击量统计。

8. 留言板管理(反馈模块)

  • 核心逻辑:用户留言反馈→管理员回复;
  • 页面设计:留言板显示留言内容、图片、回复内容;
  • 代码要点:支持留言图片上传。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、汽车租赁特色功能设计(关键加分项)

汽车租赁管理系统的核心在于“车辆全生命周期管理”,即车辆入库、租车出库、还车入库、订单状态流转全流程闭环,以下是实测有效的设计方案:

1. 车辆-订单-还车全流程追溯

环节记录内容可追溯信息
车辆发布车牌号、品牌、型号、日租价格、状态什么车、多少钱、可租吗
租车下单订单编号、租期、总价、审核状态、支付状态谁租的、租多久、多少钱、审核了吗
订单审核审核状态、审核回复为什么审核通过/拒绝
取消订单取消原因、审核状态为什么取消、批准了吗
还车申请还车日期、还车备注、审核状态什么时候还的、车况如何
车辆状态可租/已租状态车现在能租吗

2. 订单状态自动流转

// 订单状态枚举
public enum OrderStatus {
    PENDING("待审核"),
    APPROVED("已审核"),
    PAID("已支付"),
    RENTED("已租出"),
    RETURNED("已还车"),
    CANCELLED("已取消"),
    COMPLETED("已完成");
    
    private String desc;
}

// 车辆状态枚举
public enum CarStatus {
    AVAILABLE("可租"),
    RENTED("已租"),
    MAINTENANCE("维护中");
}

3. 租车费用自动计算

// 根据租期和日租价格自动计算总价
public BigDecimal calculateTotalPrice(BigDecimal dailyPrice, int days) {
    // 长期租赁优惠:租期≥7天9折,≥30天8折
    if (days >= 30) {
        return dailyPrice.multiply(new BigDecimal(days)).multiply(new BigDecimal("0.8"));
    } else if (days >= 7) {
        return dailyPrice.multiply(new BigDecimal(days)).multiply(new BigDecimal("0.9"));
    }
    return dailyPrice.multiply(new BigDecimal(days));
}

4. 车辆租赁统计

-- 统计各车辆租赁情况
SELECT 
    q.chepaihao,
    q.cheliangpinpai,
    q.qicheleibie,
    COUNT(z.id) as rent_count,
    SUM(z.zuqi) as total_rent_days,
    SUM(z.zongjia) as total_income
FROM qichexinxi q
LEFT JOIN zuchedingdan z ON q.chepaihao = z.chepaihao 
    AND z.sfsh = '通过' AND z.ispay = '已支付'
GROUP BY q.id
ORDER BY rent_count DESC

六、测试与答辩:流程演示为主,突出租车还车闭环

1. 核心测试用例

测试场景操作步骤预期结果
车辆发布全流程普通管理员发布车辆→用户查看车辆信息正确显示;状态为可租
租车下单流程用户选择车辆→下单→审核通过→支付订单生成;车辆状态更新为已租
取消订单流程用户申请取消订单→审核通过订单取消;车辆状态恢复为可租
还车流程用户申请还车→审核通过还车记录生成;车辆状态恢复为可租
资讯论坛功能管理员发布资讯→用户浏览评论资讯正确显示;论坛可互动

2. 答辩准备技巧

  • 演示流程:分角色演示(管理员端 + 普通管理员端 + 用户端)→ 普通管理员发布车辆 → 用户浏览并下单租车 → 普通管理员审核订单 → 用户支付 → 车辆状态更新为已租 → 用户申请还车 → 普通管理员审核还车 → 车辆状态恢复为可租 → 展示完整的车辆-订单-还车管理闭环;
  • 业务讲解:准备一页PPT展示系统功能结构图(图4-1),说明每个模块的作用和角色定位;
  • 技术亮点:重点讲解租车订单与车辆状态的联动机制、取消订单与还车的状态流转、租期费用自动计算;
  • 突出问题解决:讲清“如何保证车辆状态实时更新”(租车/还车时联动更新)、“订单审核如何影响车辆”(审核通过/取消时更新状态)、“租期费用如何计算”(日租价格×租期+长期优惠);提前预判“为什么要设计车辆状态字段”,回答“便于用户和管理员实时查看车辆可用性,提高租赁效率”。

结语

本文核心是“聚焦车辆-订单-还车核心业务、实现车辆全生命周期管理、设计完整的汽车租赁闭环”。毕设无需复杂系统,把车辆管理+租车订单+取消订单+还车管理的业务逻辑讲透、实现一个可运行的汽车租赁管理系统、展示完整的租车还车闭环,即可成为答辩亮点。

若需完整项目源码(带详细注释)、测试数据SQL脚本、订单状态流转完整代码,可在评论区留言“SpringBoot汽车租赁管理系统”获取;开发中遇问题(如事务一致性、订单状态流转、车辆状态更新),也可留言咨询~ 祝毕设顺利!🎉