项目编号:BS-XX-023
一,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
开发技术:SSM+JSP+Bootstrap
二,项目简介
汽车目前己经成为个人出行中必备的一种交通工具,作为一个家庭来讲,也基本上是出行的标配,这都得益于中国改革开放几十年来的经济发展的成果,也使得人们享受更好的生活。但是还有相当一部分不具备购买汽车的条件,或由于某种条件限制不适合远距离开车,这也造就了汽车租赁行业蓬勃发展。全国各地也逐渐出现了很多经营汽车出租业务的租凭公司。本课题主要研究的是如何利用现代化信息技术来帮助汽车租赁行业有效的进行汽车租赁信息的管理,加快数据的有效性管理和数据查询,提升企业的数字化管理效能。
本文主要基于Java开发语言开发实现一款汽车租赁管理系统,本系统采用B/S模式开发实现,采用Java平台的SSM框架进行开发实现,前端采用JSP结合Layui框架进行实现。整体采用MVC设计思想,将前端和后台代码有效隔离,利用三层架构体系完成组件的相对独立性,降低系统的耦合性和依赖性。系统整功能完整,界面简洁大方,实现了一个切合实际应用的汽车租赁管理系统。
本次开发的网上汽车租赁系统就是基于这种问题进行开发的,论文从该系统
的需求分析、系统设计以及数据库设计、系统实现、系统测试几个方面进行描述
说明[1]。
第一章,绪论。介绍了当前国内汽车租赁市场的背景及形势,提出开发汽车租赁管理系统的必要性。
第二章,相关技术综述。主要介绍基于SSM开发的汽车租赁管理系统在开发设计时一些架构和设计模式的应用,以及基于SSM开发的汽车租赁管理系统系统所开发中用到的软件开发技术和数据存储的相关说明和阐述。
第三章,系统总体设计。主要从基于SSM开发的汽车租赁管理系统系统的设计目标、是否可行的方面研究、基于SSM开发的汽车租赁管理系统开发方法和应技术等方面对整个系统进行了充分的调研分析。并在此基础上对基于SSM开发的汽车租赁管理系统总体使用的框架,涉及的业务功能模块进行详细阐述说明。
第四章,系统数据库设计。介绍汽车租赁管理系统的数据库模型和物理数据结构的开发设计,其中涉及到具体的业务存储用到的表结构,字段,类型,说明等。
第五章,系统功能实现。主要从实现的角度详细介绍汽车租赁系统的每个模块的功能实现,并将运行的结果以图形的方式来进行直观的展示。
总结:对系统开发设计过程进行总结与展望
汽车出租系统的UseCase图,是对当前出租系统进行详细描述的一展现方式,主要面向和包含系统管理员以及普通用户使用的系统相关功能,本章就是对出且系统的相关用例进行详细分解。
基于SSM的汽车出租系统,其整体功能主要四大基础模块:其中包含基础管理,汽车出租的统计分析,关于本系统的系统管理,相关的业务管理四大功能模块。
这四大模块中的基础管理又下属两个模块,分别是租车客户管理和出租车辆管理。
这四大模块中的业务管理又包含四个子模块,分别是汽车入库管理,汽车出租管理,检查单管理,出租单管理。
这四大模块中系统管理又下属五个子模块,分别是操作用户管理,管理系统菜单管理,内部公告管理,操作员操作的日志管理,系统分配的角色管理。
这四大模块中统计分析模块下属三个子模块,分别是业务员年度锁售额统计,公司年度月份销售统计,客户地区统计。
根据功能分析设计的系统功能结构图如下图1所示。
图1 系统功能结构图
基于SSM的租车管理系统的管理员,这个角色可以使用本次设计的租车系统的全部功能模块。租车系统系统管理员主要负责管理员用户的定义以及对应的权限划分,其业务操作上大致可以抽像出四种用例,数据基础管理,租出业务管理,设置系统管理,销售数据统计分析。每个模块又下分多个子模块,在展现系统管理员用户用例图时以此四大功能用例为主。具体用例图如图2所示。
图2 管理员整体功能用例图
汽车出租公司的业务战线的人员,主要操作功能包含业务管理,基础用户和汽车数据管理,个人销量数据统计分析三个模块。出租公司招聘的业务员,其信息管理用例按下面图2所示。
图3 业务员管理用例图
三,系统展示
3.1 客户管理功能具体实现
基于SSM的汽车出租客户管理模块,在客户管理中主要维护租车的客户信息,具体包含租车客户添加、按条件租车客户信息搜索查询、租车客户信息编辑、租车客户信息删除、租车客户信息批量删除等,具体出租系统中的客户管理功能展示按下面图9所示。
图9 出租系统中租出客户信息管理--UI界面
3.2 车辆管理功能具体实现
基于SSM的汽车出租系统的车辆管理,在此模块中主要维护系统出租的车辆信息,具体包含出租车辆添加,按条件出租车辆搜索查询,出租车辆信息编辑,出租车辆信息删除,出租车辆信息批量删除等。出租系统车辆管理具体功能展示按下面图10所示。
图10 出租系统中汽车信息管理--UI界面
3.3 汽车出租功能具体实现
汽车出租模块主要实现对客户出租汽车功能,输入客户身份证后,可以列出所有未出租的汽车供客户租用。点击列表某个汽车信息的出租汽车按钮,可以填写出租信息并生成汽车租赁单。具体功能展示如下图11,图12所示。
图11 出租信息管理界面
图12 添加出租信息管理界面
3.4 汽车租赁单功能具体实现
汽车出租单模块主要实现对客户租赁汽车的订单数据进行管理,主要实现对出租单的查询功能,对未归还汽车的纺车功能,对己归还完成的出租单导出信息功能等。具体功能展示如下图13所示。
图13 出租单信息管理界面
3.5 汽车入库功能具体实现
汽车入库模块主要实现对客户租赁汽车的归还操作管理,归还汽车时输入相关的检查信息,生成相应的检查单,看看汽车有没有什么问题。具体功能展示如下图14所示。
图14 汽车入库信息管理界面
3.6 菜单管理功能具体实现
基于SSM实现汽车出租系统菜单管理,此模块是系统构建核心功能,主要实现对出租系统展示的功能菜单有机的进行高效的管理工作。菜单分配主要包含了展示的菜单树形结构,相关菜单添加等管理功能。出租系统的菜单管理功能展示如下图16所示。
图16 出租系统里菜单信息管理--UI界面
3.7 月销统计具体实现
此模块主要根据租用汽车的销量按年底月份进行统计操作,产生成曲线图进行展示,其主要利用Echarts组件来将查询统计的数据以图形的形式进行展示,用户可以选择要查看的年份进行统计,这针统计指定年份每月的出租销量信息。具体汽车出租数据统计功能实现如下图24所示。
图24 汽车出租年底月销统计界面
四,核心代码展示
数据库详情表的展示:
按照汽车租赁管理系统各个功能模块的设计要求,需要设计以下数据表:
- 用户信息表
汽车租赁系统的用户信息表,其主要用来保存租车系统操作管理员的有关个人账户信息。这其中表的字段主要字段包括,有用户编号,系统登陆账号,系统登陆密码以及个人信息等。如表1所示。
表1 用户信息表
字段名 |
数据类型 |
字段描述 |
长度 |
约束 |
UserID |
Int |
用户编号 |
11 |
主键 |
Loginname |
Varchar |
登录账号 |
50 |
|
Realname |
Varchar |
真实名字 |
50 |
|
Sex |
Int |
性别 |
1 |
|
Address |
Varchar |
地址 |
50 |
|
Phone |
Varchar |
电话 |
11 |
|
Pwd |
Varchar |
密码 |
20 |
|
Position |
Varchar |
身份 |
20 |
|
Available |
Int |
状态 |
1 |
2)汽车信息表
汽车租赁系统中的汽车表,其结构主要包括汽车编号,车辆颜色,汽车类型,汽车本身价格以及汽车出租租赁价格等。其中汽车信息中,isreting字段代表汽车租赁状态,0为未出租,1为己出租。如表2所示。
表2 汽车信息表
字段名 |
数据类型 |
字段描述 |
长度 |
约束 |
Carnumber |
Varchar |
汽车编号 |
11 |
主键 |
Cartype |
Varchar |
类型 |
50 |
|
Color |
Varchar |
颜色 |
50 |
|
Price |
Double |
价格 |
10 |
|
Rentprice |
Double |
出租价格 |
10 |
|
Deposit |
Double |
押金 |
10 |
|
Isrenting |
Int |
出租状态 |
11 |
|
Description |
Varchar |
描述 |
100 |
|
Carimg |
Varchar |
图片 |
255 |
|
Createtime |
Datetime |
添加日期 |
0 |
3)客户信息表
租车的用户信息表包括租车客户编号,租车用户名字,租车用户性别,租车用户地址,车主联系电话等。如表3所示。
表3 客户信息表
字段名 |
数据类型 |
字段描述 |
长度 |
约束 |
Identity |
Varchar |
客户编号 |
255 |
主键 |
Custname |
Varchar |
客户名称 |
50 |
|
Sex |
Int |
性别 |
1 |
|
Address |
Varchar |
地址 |
50 |
|
Phone |
Varchar |
电话 |
11 |
|
Pwd |
Varchar |
密码 |
20 |
|
Career |
Varchar |
专业 |
20 |
|
Createtime |
Datetime |
添加时间 |
0 |
4)租赁信息表
汽车租赁时制定的合同信息表,它主要包含了汽车的租赁编号,汽车的出租给客户的价格,租车开始时间,租车结束时间,车牌号码等。如表4所示。
表4 租赁信息表
字段名 |
数据类型 |
字段描述 |
长度 |
约束 |
rentid |
Varchar |
租赁编号 |
255 |
主键 |
Price |
Double |
价格 |
10 |
|
Begindate |
Datetime |
开始日期 |
0 |
|
Returndate |
Datetime |
结束日期 |
0 |
|
Rentflatg |
Int |
标记 |
11 |
|
Carnumber |
Varchar |
车牌 |
20 |
|
Opername |
Varchar |
操作人 |
20 |
|
Createtime |
Datetime |
添加时间 |
0 |
5)角色信息表
汽车出租系统的角色信息表,其主要包括角色编号,角色描述,角色的名字,角色的可用状态等。如表5所示。
表5 角色信息表
字段名 |
数据类型 |
字段描述 |
长度 |
约束 |
Roleid |
int |
角色编号 |
255 |
主键 |
Rolename |
Varchar |
角色名 |
10 |
|
Roledesc |
Varchar |
角色描述 |
255 |
|
Available |
Int |
可用状态 |
11 |
|
部分代码展示:
package com.bjpowernode.bus.controller; import com.bjpowernode.bus.domain.Rent; import com.bjpowernode.bus.service.CheckService; import com.bjpowernode.bus.service.RentService; import com.bjpowernode.bus.vo.CheckVo; import com.bjpowernode.sys.utils.DataGridView; import com.bjpowernode.sys.utils.ResultObj; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; import java.util.Map; /** * */ @RestController @RequestMapping("check") public class CheckController { @Autowired private RentService rentService; @Autowired private CheckService checkService; @RequestMapping("checkRentExist") public Rent checkRentExist(String rentid){ //出租单号不存在,返回一个null,出租单号存在,返回一个rent对象 Rent rent = rentService.queryRentByRentId(rentid); return rent; } /** * 根据出租单号加载检查单的表单数据 * @param rentid * @return */ @RequestMapping("initCheckFormData") public Map<String,Object> initCheckFormData(String rentid){ return this.checkService.initCheckFormData(rentid); } /** * 保存检查单数据 * @param checkVo * @return */ @RequestMapping("saveCheck") public ResultObj saveCheck(CheckVo checkVo){ try{ checkVo.setCreatetime(new Date()); this.checkService.addCheck(checkVo); return ResultObj.ADD_SUCCESS; }catch (Exception e){ e.printStackTrace(); return ResultObj.ADD_ERROR; } } /** * 查询所有检查单 * @param checkVo * @return */ @RequestMapping("loadAllCheck") public DataGridView loadAllCheck(CheckVo checkVo){ return this.checkService.queryAllCheck(checkVo); } /** * 删除一个检查单 * @param checkVo * @return */ @RequestMapping("deleteCheck") public ResultObj deleteCheck(CheckVo checkVo){ try{ this.checkService.deleteCheck(checkVo); return ResultObj.DELETE_SUCCESS; }catch (Exception e){ e.printStackTrace(); return ResultObj.DELETE_ERROR; } } /** * 批量删除检查单 * @return */ @RequestMapping("deleteBatchCheck") public ResultObj deleteBatchCheck(CheckVo checkVo){ try{ this.checkService.deleteBatchCheck(checkVo.getIds()); return ResultObj.DELETE_SUCCESS; }catch (Exception e){ e.printStackTrace(); return ResultObj.DELETE_ERROR; } } /** * 更新检查单 * @param checkVo * @return */ @RequestMapping("updateCheck") public ResultObj updateCheck(CheckVo checkVo){ try { this.checkService.updateCheck(checkVo); return ResultObj.UPDATE_SUCCESS; }catch (Exception e){ e.printStackTrace(); return ResultObj.UPDATE_ERROR; } } }
package com.bjpowernode.bus.controller; import com.bjpowernode.bus.domain.Car; import com.bjpowernode.bus.service.CarService; import com.bjpowernode.bus.vo.CarVo; import com.bjpowernode.sys.constant.SysConstant; import com.bjpowernode.sys.utils.AppFileUtils; import com.bjpowernode.sys.utils.DataGridView; import com.bjpowernode.sys.utils.ResultObj; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; @RestController @RequestMapping("car") public class CarController { @Autowired private CarService carService; /** * 加载车辆列表返回DataGridView * @param carVo * @return */ @RequestMapping("loadAllCar") public DataGridView loadAllCar(CarVo carVo){ return this.carService.queryAllCar(carVo); } /** * 添加一个车辆 * @param carVo * @return */ @RequestMapping("addCar") public ResultObj addCar(CarVo carVo){ try{ carVo.setCreatetime(new Date()); //如果不是默认图片就去掉图片的_temp的后缀 if(!carVo.getCarimg().equals(SysConstant.DEFAULT_CAR_IMG)){ String filePath = AppFileUtils.updateFileName(carVo.getCarimg(), SysConstant.FILE_UPLOAD_TEMP); carVo.setCarimg(filePath); } this.carService.addCar(carVo); return ResultObj.ADD_SUCCESS; }catch (Exception e){ e.printStackTrace(); return ResultObj.ADD_ERROR; } } /** * 修改一个车辆 * @param carVo * @return */ @RequestMapping("updateCar") public ResultObj updateCar(CarVo carVo){ try{ String carimg = carVo.getCarimg(); if (carimg.endsWith(SysConstant.FILE_UPLOAD_TEMP)) { String filePath =AppFileUtils.updateFileName(carVo.getCarimg(), SysConstant.FILE_UPLOAD_TEMP); carVo.setCarimg(filePath); //把原来的删除 Car car = this.carService.queryCarByCarNumber(carVo.getCarnumber()); AppFileUtils.removeFileByPath(car.getCarimg()); } this.carService.updateCar(carVo); return ResultObj.UPDATE_SUCCESS; }catch (Exception e){ e.printStackTrace(); return ResultObj.UPDATE_ERROR; } } /** * 删除一个车辆 * @param carVo * @return */ @RequestMapping("deleteCar") public ResultObj deleteCar(CarVo carVo){ try { this.carService.deleteCar(carVo.getCarnumber()); return ResultObj.DELETE_SUCCESS; }catch (Exception e){ e.printStackTrace(); return ResultObj.DELETE_ERROR; } } /** * 批量删除车辆 * @param carVo * @return */ @RequestMapping("deleteBatchCar") public ResultObj deleteBatchCar(CarVo carVo){ try{ this.carService.deleteBatchCar(carVo.getIds()); return ResultObj.DELETE_SUCCESS; }catch (Exception e){ e.printStackTrace(); return ResultObj.DELETE_ERROR; } } }
五,项目总结
本汽车租赁管理系统是通过对汽车出租公司进行分析调研的基础上,根据其实际需求研发出来的。
1)本文所做的工作
(1) 研究相关文献,了解整个汽车出租市场的国内外的情况。
(2) 研究汽车租赁系统用到的技术,准备好汽车租赁系统的开发前期工作。
(3) 研究相关软件开发理论,为软件开发做好理论支撑工作。
(4) 研究相关类似软件系统,学习吸收别人长处。
2)下一步工作期望
(1) 在现在的基础完善汽车租赁系统核心业务功能。
(2) 对系统中存在的不足和BUG进行修复。
(3) 争取能使本系统达到商品产品的效果,这需要站在客户的角度上更好的进行设计。
3)收获与体会
这次在老师的指导下独立完成这么一个汽车出租管理系统平台,使认识到只要肯吃苦钻研,积极学习新技术,利用百度等平台,就可以解决碰到的所有困难点和BUG,也使我体会到了一个程序员的艰辛和不易。在开发中用到了大学四年所学的相关技术,并学习和掌握了更多没有接触或应用不熟练的技术,这给我了很大的自信。