基于SSM的停车场管理系统的设计与实现
摘要
自从进入21 世纪以后,汽车产业迅速发展,伴随着人们生活程度的日益进步的人口的迅速增加,汽车的数量也如雨后春笋般在城市里不断的增加。这种现象,一方面是值得我们高兴的,这代表着我们国家的经济发展非常迅速,但同时它也给城市的泊车带来了极大的挑战。在我国各个城市当中,由于资源使用的不完善,资源配置的不合理,所以始终存在着泊车难、泊车贵的问题。
事实证实,增加停车位的供应诚然重要,但充分利用车位资源将更加可行。所以将当前固有的车位发挥最大的使用效率是目前实施力最强的解决方案。
本课题就是针对停车位管理这一需求主体,基于Spring MVC + Spring + MyBatis三个Web应用程序成熟的开源框架作为系统基础框架,Tomcat提供服务支撑,MySQL提供完整的数据存储撑持,设计了一款智能停车场管理系统。该停车场管理系统的智慧化、信息化和自动化也有所进步,既降低了人工压力,同时也显著减少人工登记由于个人错误而引发的一系列问题。通过该停车场管理系统,一方面可以省去繁琐的人工登记,也可以节省一笔不小的人员支出,同时也有利于问题出现以后的追踪查询增加安全性。该系统同时拥有灵活性和拓展性。
关键词:停车场管理;车牌识别算法;收费停车场;SSM
一、引言
1.1 研究背景
随着汽车市场的快速发展,各个社会中的汽车和私有车数量都在快速增长。停车位的供给速度远远低于汽车数量的增长速度,招致城市停车位越来越紧张[1]。停车难情况的原因不但是因为停车场以及停车位建立的缺乏,而且也是由于停车场没有秩序的管理方式。
因此,停车场的要满足现代城市建设这个宗旨就必须要经营管理。当然,对于"城市停车难"的情况,最直接有用的方法是增加停车场地的数量,增加停车位,并根据不同停车场或区域的汽车数,在现今的公共区域上新建停车位,建造更多的停车场[2]。但由于国家土地资源稀缺的限度,已不能随意增加建设大量的停车场。所以根本上的解决方法还是要靠合理的优化配置当前已建设的停车场,提升停车场的管理效率,通过运用科学、合理的管理技术来达到提升停车场利用率的效果。
基于此,设计一个具有高效率、低成本、便于管理停车场的管理系统已成为国内现代社会发展一个不可避免的趋势。
1.2 课题研究目的及意义
在我国传统的停车管理系统中,车辆进出停车场必须使用专用护照IC卡。以传统方式管理的停车场,面临着几个共同问题:首先由于车主可能会丢失或者借与其他人IC卡,假如这样做就会给停车场的管理带来一些困难;再有就是停车场内的车位使用情况不能得到及时的监控,因此不能获取停车场内所停车辆的车主信息,那么安全隐患就会一直存在[3]。
针对上述问题,通过出入停车场的车辆车牌可以被车牌被迅速检测以及识别,系统同时完成对车辆信息的录入,极大减少了车辆通过所需的时间,与传统的人工或IC卡管理系统对比,系统的优点更加明显,一方面可以对停车场进行实时监控,有效监控停车场停车位的使用变化,整理最终收集的数据,通过图表的方式向管理人员进行展现[4]。另外,建立停车场管理系统,可以正确收费,避免违规收费,保护司机的正当权利和利益。
系统的设计和实施可以大大提高停车场的操作和灵活性,转变了停车场人工管理的固有概念,让停车场管理变得愈加高效智能。
1.3 国内外发展状况
1.3.1 国外研究现状
在国外,智能停车场管理系统的设计开发相对来说高效,基本上改变了出入停车场的传统车辆的复杂方式,停车场的进出方法也比较灵活。在国外,停车场系统的运营商重视智能管理系统的构建和技术输入[5]。许多先进的停车场管理电子设备基本上不需要手动管理进出车辆。人才需求少,基本上能够完成软件的自动管理。随着科学技术的发达,智能停车管理系统大多数已经使用网络进行管理,人们可以通过网站进行车位预约的操作,也可通过网站及时查看停车场的停车位情况[6]。
就实际情况来说,Designa、Mengli、西门子等国外停车场的知识管理系统的研发已经达到了比较成熟的水平。在那些所有的智能管理系统中,比较有代表性的是:由德国Designa公司开发设计的终端控制计算机TCC和数据控制中心BFR,及其配套的一整套控制设备和语音车牌识别系统[6]。包括中央停车引导程序PLC、停车卡管理SITY和机械停车程序SICALOSAPS在内的多种程序和系统都是由门吉利公司经过多年探索并投入大量资金进行设计开发[7]。
从上面数据可以看到,国外对于智能停车管理系统的设计开发上比较注重用户体验。比较有代表性的Young等设计开发的PARKSIM系统,使用这个系统,用户能自动引导用户在停车场内搜寻车位[7]。还有一些国外学者提出了更特别的观念,比如停车泊位抉择模型,该模型基于大批考察数据以后进行分析,然后得出个人特征与泊位抉择之间的关系。
1.3.2 国内研究现状
现如今,在国内停车场的管理系统中,还是主要以收费管理为焦点。如何提高收费效率是当前首要需要解决的问题,并根据各车辆的进出时间来计算收费。在一些非一二线城市,依然还在采用磁卡和远程IC卡用于访问,更有一些地方还是使用手写纸条的方式来记录车辆进出信息[8]。如此费力的方式却没有达到很好的效果,这种方式仅仅是将信息进行登记和记录,没有将客户和信息进行关联,对于后续的管理非常的不便。不过在一些一二线城市已经实现了进入以后车牌识别的停车场,不过覆盖率并没有特别高,还处于发展阶段。
对于一个停车管理系统来说,比较核心的就是车牌辨别技术。关于车牌辨别技术的研究。可以追踪到上个世纪90年代的交通智能研究,最重要是对于智慧交通中车牌识别的研究[9]。汉王眼是目前国内关于车牌识别十分成熟的系统,是由中国中科院设计开发的一整套智能系统。同时,深圳及通电子有限公司也有非常深的研究,还包括国内排名靠前的高校研究室、国家重点实验室等[10]。
不过国内的停车场管理系统都没有泊车引导系统,不能引导司机以最短的路径开往空闲停车位。同时国内的停车场管理系统管理不够简洁化、系统化,因此有必要开发一个易于上手,简洁操作的停车管理系统。
1.4 本文章节结构
本文主要分为七大部分。
第一章引言:介绍停车场管理系统的研究背景和研究目的和意义。接着分析了停车场管理系统的国内外发展状况。
第二章软件开发相关技术:介绍了本停车管理系统开发过程中所使用的各类软件开发技术。
第三章需求分析:先对停车场的进行了可行性的相关分析,接着对系统功能需求进行分析,包括使用系统用例图、用例规约的方法对各个模块进行需求分析。
第四章系统设计:首先介绍了停车场管理系统的系统结构、系统功能结构图等。然后介绍了主要功能模块的设计思路,最后介绍了数据库表的相关设计。
第五章系统实现:介绍了停车管理系统的开发环境,以及介绍了车辆自动进场和手动进场的具体实现方法等,并展示了系统各个功能的界面截图。
第六章系统测试:主要介绍了对停车场管理系统功能测试的测试用例和测试结果。
第七章总结与展望:总结了本停车管理系统功能的功能,展望今后应该如何让系统更加完善。
二、相关技术
2.1 开发工具及开发环境
本管理系统是基于JavaWeb进行开发,因此使用了IntelliiJ IDEA作为集成开发环境。IntelliiJ IDEA是一款十分实用方便的集成开发工具。IntelliiJ IDEA支持自定义窗口,在开发过程中能够依据实践需求进行显示和操作。作为一个集成开发工具,IntelliiJ IDEA可以为我们提供各种框架和服务器接口。管理系统中的Tomcat8.0服务器只要在IntelliiJ IDEA里做好相关配置,就可直接使用。
对于利用Maven的项目管理,现在市面上销售的许多新项目都推荐利用Maven进行项目管理。Maven开始改变管理我们本来项目的习惯,团队管理、项目建设具有本质性的飞跃。Maven有助于我们构建项目的更加可维护性、科学性、模块性,所制作的项目具有更加具有可重复使用等优点[11]。
利用Maven进行项目管理,目前的市面上的很多新项目都推荐使用Maven进行项目管理。Maven已然开始扭转我们原先的管理项目的方式,关于公司的管理,项目的构建都是一种巨大的进步。Maven帮助我们构建项目愈加具备可维护性,更加科学,更加模块化,做出来的项目更加具有可复用性等优势。
2.2 Bootstrap
Bootstrap是当今市场上最受开发者钟意的一个前端框架,它是由美国的Twitter公司研究开发的。Bootstrap十分便捷灵活的,它是以HTML、CSS、JavaScript为基础进行集成的,提供了非常优秀的HTML和CSS标度,使得开发者能够迅速且方便的开发网页,开源是它热门的一个十分重要的原因。Bootstrap从来都是Github上有名气的项目,一经推出就极受欢迎。并且Bootstrap提供了特别实用、美观的文档,包括HTML、CSS、jQuery等各种专业文档。本停车场管理系统因为是后台管理系统,正好非常适合使用Bootstrap来进行敏捷开发,Bootstrap提供的动态效果、CSS样式、图形库等,节省了造轮子的工夫和精力,大大提高了开发速度,并且提高了页面的美观[11]。
2.3 JavaScript
如今的网站开发,特别是前端设计师,掌握JavaScript既是基础也是最重要的技术,很多大型前端框架都是基于JavaScript进行开发,如果能掌握JavaScript对今后的框架学习具有事半功倍的效果。它的神奇在于其优秀的动态效果和交互效果。让用户拥有更好的使用体验。
JavaScript是开发人员中最受欢迎的解释脚本语言。它可以直接嵌入到网页中,无需外部服务器的支撑,并且可以直接处理请求或在浏览器中运行,以获得页面交互的效果。JavaScript十分轻量,对服务器担负不高。JavaScript在开发行业中占有很高的地位,因为它还可以支持跨平台操作[12]。
在前端就可以直接对用户的操作做验证,是JavaScript的特有优势。因为前端直接反馈结果,不用通过查询数据库的操作,因此效率极高。
2.4 Ajax
Ajax技术是由多种技术组成的[13]。它使得用户得以异步的方法从网络浏览器获得请求。对于传统的技术,如果用户选择上传页面或者填写表单后,服务器将发送一个完整的页面用于更新,对于现在图片很多的页面,将会给用户带来很不好的体验。如今使用Ajax技术,在用户上传数据以后,只有选定的部分将从服务器里更新到页面上。
在停车场管理系统中也经常性的使用到Ajax技术。例如添加用户时,在输入用户名以后先利用Ajax到服务器上查询是否已经存在相同的用户名,如果存在则进行提示。还有在添加停车卡时,也对停车卡号进行Ajax验证等。
Web网站通常由服务器将所有内容发送给用户,这极大的拖累了系统的性能。Ajax的功能是作为浏览器和服务器的调度器发挥作用[13]。这将根据用户的需求提取专门用于验证的数据,大大缩短用户的等待时间,同时减轻服务器的负担,也给用户更迅速、更舒适的使用体验。
2.5 Redis
Redis是利用c语言开发的开源(合乎BSD协定)高性能键值对(key-value)的内存数据库,可以用作消息中间件、缓存、数据库等[14]。
Redis是一个内存数据库,具备高性能的优势,数据由于位于内存中,因此读取和写入速度极其迅速,效率极高。运用单进程单线程、线程安全、IO多路复用机制。具有多种的数据类型,包括strings、sets、hash、lists等。支持数据持久性,您可以将内存中的数据保存到硬盘,并在重新启动时加载这些数据[14]。Redis用于本地缓存用户停车信息,不再从数据库中获取信息,从而大大减少了用户等候时间,提升用户使用体验。
在本停车场系统中对于数据量比较大又不需要实时更新的的历史停车数据等就采用Redis进行了本地缓存,需要时直接从本地取,不用多次的到数据库进行查询,大大减少了管理员等待时间。
2.6 车牌识别技术
车牌号是车辆唯一的信息识别。自动车牌识别技术允许车辆信息的自动注册和验证,且无需对车辆进行任何更改。可以使用车牌识别技术,在复杂的背景下提取车辆的车牌,识别当前的车牌。最新的车牌辨别技术,字母和阿拉伯数字的识别率达95%,中文的识别率达98%[14]。
本停车管理系统使用的车牌识别技术可以识别绿牌、蓝牌、白牌等国内各种车牌,识别准确率高。车牌识别技术作为车辆进入停车场的主要形式,车牌识别技术配合自动闸机即可实现汽车无需停车快速进入停车场,即自动进场、自动出场、自动收费一体的管理系统。这种免取卡、无需停车的用户体验正是当今现代人们追求的高效率管理方式。
2.7 本章小结
本章主要介绍了此次毕业设计所处的开发环境以及所使用的软件技术,包括前端框架Bootstrap、页面动态效果JavaScript、本地缓存Redis、异步请求Ajax还有车牌识别技术等。
三、需求分析
3.1 可行性分析
3.1.1 技术可行性
停车场管理系统开发设计过程中,使用Sring+SpringMVC+BootStrap作为开发框架。基于WEB进行开发,是一个面向对象的可视化操作界面,使用IDEA作为集成开发工具,Tomcat8.0作为应用服务器,Redis进行本地缓存,技术成熟。
采用设计模式中的MVC开发模式,即Model、View、Controller三层结构[15]。
Model层:分为数据模型和业务模型,数据模型用来寄存业务数据,例如实体数据;业务模型包含应用的业务操作。
View层:将具体内容转化为可视化界面展示给用户。
Controller层:在接受到用户的请求以后,会对数据和模型进行映射并处理,然后会选择对应的视图将结果展示给客户。
由于整个过程使用了SSM开发框架,代码开发过程分工明确、代码解耦,利于多人开发提高开发效率。同时也增加了项目的拓展性。
3.1.2 经济可行性
本节将从项目运维费用、开发成本及系统预计收益等方面来进行分析:
1.投入:搭建该停车管理系统,每年须要购置专业服务器以及一个域名。通过查询了解到,阿里云的.top域名一年使用费是9元,阿里云的1核2G5M每年使用费是501元。项目设计开发阶段主要通过网上自我学习、参考教材和向导师请教来完成,项目后期维护由本人亲自完成,可以不用加入成本考虑。
2.效益:主要从经济效益和时间效益两个方面来思考。以经济效益看,利用本系统能够显著减少人员支出,并且系统使用快捷简单易懂,不用对管理员进行特别的培训即可上手使用。本停车管理系统也面向停车用户,可以吸引用户长期在此停车,带来持续长久的收益。以时间效益来看,将停车管理系统投入使用以后就可以实现对停车场的规范化管理,有效提高了停车场的工作效率和纪律!
综上所述,本系统在经济上是可行的,具备经济可行性。
3.1.3 管理可行性
本系统对不同用户登录系统将展现不同的操作界面和功能,特别是对于一些非专业的用户省去了许多繁琐难懂的功能,操作界面简约易懂,轻松上手。对于管理者,应该有的功能也毫不含糊,既可以对停车场的停车情况了如指掌,又可以管理所有用户信息,还可以通过车牌识别功能实现车辆进入停车场免取卡自动登记和驶出停车卡自动登记,达到事半功倍的效果。
3.2 系统功能需求分析
3.2.1 系统用例图
停车场管理系统将角色分为三种,分别为用户,管理员和超级管理员,他们拥有不同的权限和功能如下:
第一种用户类型是停车场客户。客户具有的功能有:(1)停车卡充值(2)优惠券查询(3)车位预定(4)违规信息查询(5)历史停车信息查询(6)个人信息管理。对应的用户系统用例图如图 3.1所示。
图 3.1 用户系统用例图
第二种用户类型是管理员。管理员具有的功能有:(1)停车位管理,包括入库和出库(2)停车卡的管理(3)优惠券管理(4)接受/拒绝车位预定(5)违规添加(6)历史停车查询(7)用户管理(8)收入情况图表展示。对应的管理员系统用例图如图 3.2所示。
图 3.2 管理员系统用例图
第三种用户类型是超级管理员。拥有全部功能和最高的权限,可以操作系统所有行为。对应的超级管理员系统用例图如图 3.3所示。
图 3.3 超级管理员系统用例图
3.2.2 功能模块需求分析
1.登录模块:用户和管理员都可以直接登录本停车管理系统,系统会根据角色不同来跳转到不同的主界面并拥有不同的功能。如表 3.1所示。
用例名称 | 登录账号 |
---|---|
用例标识号 | U01 |
用例角色 | 用户、管理员、超级管理员 |
前置条件 | 此账户已经存在该系统内 |
基本事件流 | 1.用户输入用户名和密码,点击登录 |
基本事件流 | 2.系统判断用户的角色 |
基本事件流 | 3.系统根据用户的角色,跳转到不同的主界面 |
扩展事件流 | 1a.用户输入的账号或者密码错误,系统提示用户名或密码错误信息 |
扩展事件流 | 1b.用户输入账号或密码为空就点击登录,系统提示不能输入空用户名或空密码 |
约束条件 | 无 |
后置条件 | 登录系统成功,进入主界面 |
2.停车位管理:包括有车辆进行入库操作和出库操作以及查询车位的停车情况等功能。管理员可以选择上传图片以后自动车牌识别进行自动入库操作,或者手动输入车牌号、停车卡号等信息进行手动入库操作。也可以输入车牌号、停车位号等信息查询停车场是否存在该车辆。车辆自动入库用例规约如表 3.2所示。
用例名称 | 车辆自动入库 |
---|---|
用例标识号 | U02 |
用例角色 | 管理员 |
前置条件 | 登录管理员账号 |
基本事件流 | 1.管理员点击停车位管理 |
基本事件流 | 2.管理员点击自动入库以后,选择一张图片进行上传 |
基本事件流 | 3.系统上传图片到百度API进行车牌识别 |
基本事件流 | 4.系统判断是否停车场内已有该车牌号 |
基本事件流 | 5.系统将识别到的车牌号进行入库操作 |
扩展事件流 | 3a.车牌识别失败,系统提示"车牌识别失败,是否选择手动输入" |
扩展事件流 | 3b.车牌识别错误,管理员可以手动输入 |
扩展事件流 | 4a.如果有重复系统提示"该车牌号已经在停车场当中,不可重复停车。" |
约束条件 | 无 |
后置条件 | 车辆入库成功 |
车辆手动入库用例规约如表 3.3所示。
用例名称 | 车辆手动入库 |
---|---|
用例标识号 | U03 |
用例角色 | 管理员 |
前置条件 | 登录管理员账号 |
基本事件流 | 1.管理员点击停车位管理 |
基本事件流 | 2.管理员点击手动入库以后,填写车牌号、停车卡等相关信息 |
基本事件流 | 3.系统判断是否停车场内已有该车牌号 |
基本事件流 | 4.系统将管理员填写的车牌进行入库操作 |
扩展事件流 | 2a.必填的车牌号为空,系统提示"车牌号不能为空" |
扩展事件流 | 3a.如果有重复系统提示"该车牌号已经在停车场当中,不可重复停车。" |
约束条件 | 无 |
后置条件 | 车辆入库成功 |
查询车位信息用例规约如表 3.4所示。
用例名称 | 查询车位信息 |
---|---|
用例标识号 | U04 |
用例角色 | 管理员 |
前置条件 | 登录管理员账号 |
基本事件流 | 1.管理员点击停车位管理 |
基本事件流 | 2.管理员填写车牌号或车位号进行搜索 |
基本事件流 | 3.系统将查询到的车位信息全部显示 |
扩展事件流 | 2a.输入为空则显示所有信息 |
扩展事件流 | 3a.无任何信息被查询到,显示查询结果为空 |
约束条件 | 无 |
后置条件 | 查询到车位信息 |
3.违规管理模块:管理员可以给停车场内的车辆添加违规信息、查看违规信息和删除违规信息。
添加违规信息用例规约如表 3.5所示。
用例名称 | 添加违规信息 |
---|---|
用例标识号 | U05 |
用例角色 | 管理员 |
前置条件 | 登录管理员账号 |
基本事件流 | 1.管理员点击违规管理 |
基本事件流 | 2.管理员点击添加违规信息 |
基本事件流 | 3.管理员填写违规车牌号和违规信息 |
基本事件流 | 4.系统确认该车牌号是否已经添加过违规 |
基本事件流 | 5.系统将违规信息进行存储 |
扩展事件流 | 4a.如果管理员已经添加过该违规,系统则提示"该车辆已经添加过违规" |
约束条件 | 无 |
后置条件 | 添加违规信息 |
删除违规信息用例规约如所表 3.6示。
用例名称 | 删除违规信息 |
---|---|
用例标识号 | U06 |
用例角色 | 管理员 |
前置条件 | 登录管理员账号 |
基本事件流 | 1.管理员点击违规管理 |
基本事件流 | 2.管理员点击删除违规信息 |
基本事件流 | 3.系统提示是否确认删除违规信息 |
基本事件流 | 4.系统完成该命令 |
扩展事件流 | 3a.管理员选择确认删除,则删除违规信息,系统进行存档 |
3b.管理员选择否,则退出用例,不做存档 | |
约束条件 | 无 |
后置条件 | 删除违规信息 |
设置收费规则模块:超级管理员可以设置停车场的收费规则进行设置,如每小时收费价格、每日最高收费、月卡年卡收费等,以适应不同的物价变动。设置收费规则用例规约如表 3.7所示。
用例名称 | 设置收费规则 |
---|---|
用例标识号 | U06 |
用例角色 | 超级管理员 |
前置条件 | 登录超级管理员账号 |
基本事件流 | 1.超级管理员点击收费设置 |
基本事件流 | 2.超级管理员点击设置收费规则 |
基本事件流 | 3.超级管理员填写收费的规则 |
基本事件流 | 4.系统对设置进行存储 |
扩展事件流 | 无 |
约束条件 | 无 |
后置条件 | 成功设置收费规则 |
3.2.3 系统业务
以下是系统的业务流程。车辆进入停车场以后先进行车牌识别,识别成功则自动入库,识别不成功就需要人工进行手动入库,该车牌识别算法成功率能达到95%以上,所以基本上能够识别成功,即使识别不成功也准备了手动入库的方式,管理员可以选择自己手动登记车牌的方式。在汽车停在停车场当中的时候,如果发生了违规行为,则管理员有权可以对违规车辆记录违规信息。在车辆准备驶出停车场之前则进行费用计算,普通卡包括停车费和违规费两部分,月卡和年卡用户如果没有违规行为则直接可以驶出停车场。普通卡用户只有在成功付款以后,汽车才可以驶出停车场。详细的业务流程图如图 3.4所示。
图 3.4 系统业务流程
3.2.4 性能需求分析
准确性:车牌辨别成功率至少可达到90%以上。
敏捷性:由于使用了Redis对一些不太需要经常更新的数据进行本地缓存,不再频繁与数据库进行交互,极大减少了网站响应时间,提高用户使用体验,响应请求速度达到0.5s以下。
稳定性:经测试即使达到用户最高峰的100个并发访问,依然可以高效运行24小时。
灵活性:系统对不同角色满足不同功能,能够适应各种类型的停车场。
安全性:系统用户信息保存进行了加密操作,多线程并发访问具有线程安全。
3.3 本章小结
本章主要从可行性分析,包括技术可行性分析、经济可行性分析、管理可行性分析三个方面验证毕业设计的可行性。接着介绍了功能需求分析,包括介绍系统用户以及系统的业务流程。最后介绍系统的性能需求分析。
四、系统设计
4.1 系统框架设计
本停车管理系统的开发使用已经十分成熟的SSM框架,这样有利于后期的迭代开发。以JSP作为停车管理系统的页面展现,Spring MVC用来接受管理员的各类请求并进行转发后将结果告知管理员。Spring作为全局管理者拥有对所有对象的管理权限,包括创建、销毁和关系。具体的系统架构图如图 4.1所示。
图 4.1 系统架构图
4.2 系统功能结构
本停车管理系统可以实现手动停车或者通过车牌识别算法自动停车。用户的角色对应的权限也是不同的。总的是分为五大模块,客户信息模块、车辆进出模块、综合管理模块、数据管理模块、系统管理模块。
客户信息模块,包括个人信息修改、车牌预定、停车卡登记、车位预定、停车卡充值;车辆进出模块,包括车牌识别系统、车辆进入登记、车辆驶出登记;综合管理模块,包括优惠券管理、违规管理、停车卡添加、车位预定的响应。数据管理模块,包括停车卡管理、停车位管理、历史停管理、收费统计、停车情况管理。系统管理,包括收费设置、表格导出、报表分析、用户管理等。
具体的停车场管理系统的系统功能结构图,如图 4.2所示:
图 4.2系统功能结构图
4.3 主要功能设计
4.3.1 车辆进入停车场
- 车辆进场登记是一个停车管理系统最基础也是最重要的功能。车辆进场主要有两种方式:手动进场和自动进场。
- 自动进场:为了方便管理员的管理,提升车辆进出的效率,节省进出的时间。采用了车牌识别算法来进行自动识别车牌达到无需人工操作即可快速获得车牌号信息,达到入场的目的。
- 手动入场:当出现特殊情况,管理员也可以通过手动输入车牌来达到车辆手动入场。
- 车辆进入停车场流程图如图 4.3所示。
图 4.3 车辆进入停车场流程图
4.3.2 车辆驶出停车场
车辆驶出停车场前首先进行费用统计,然后判断用户是否拥有停车卡如果是的话进行判断余额是否足够支付,支付过后方可驶出停车场。对于临时停车或者余额不足的也可以使用扫码或者现金的方式支付停车费用。车辆驶出停车场流程图如图 4.4所示。
图 4.4 车辆驶出停车场流程图
4.3.3 历史停车查询
管理员可以输入停车卡号或车牌号或车位号进行查询操作,模糊查询到相关信息则会显示停车日期、车牌号、付款金额等。如图 4.5所示。
图 4.5 历史停车查询流程图
4.3.4 违规管理
为了维护停车场的秩序,加强停车安全意识。管理员可以对产生违规的车辆登记违规信息,违规信息会记录在该车牌号下,包含违规详情和违规时间。并且会对违规车辆进行处罚,当车辆出场的时候就会提示违规信息并加以罚款,客户必须支付停车费加上违规费用方可离场。如图 4.6所示。
图 4.6 违规管理流程图
4.3.5 优惠券管理
为了吸引新客户开展节日活动,管理员可以发放优惠券进行促销。目前的计费规则是先抵扣客户的优惠券如果不够再支付现金。优惠券管理流程图如图 4.7所示:
图 4.7 优惠券管理流程图
4.4 数据库设计
4.4.1 数据库表间关系设计
用户和停车卡之间是一对一的关系,即一个用户对应一张停车卡,同时一张停车卡也对应唯一的用户。一张停车卡也对应着一个车牌号。因为车牌号的特殊性和唯一性,车牌号和停车位之间也是一对一的关系。一个车牌号只能占用一个停车位,一个停车位只能被一个车牌号占用。具体的停车表间关系ER图如图 4.8所示。
图 4.8 停车表间关系ER图
4.4.2 基本表设计
表4.1用户表主要用来记录用户的相关信息以及角色权限。
表4.1 user(用户表)
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
id | int(11) | 用户ID | PRIMARY KEY |
username | varchar(255) | 用户名 | |
name | varchar(255) | 真实姓名 | |
password | varchar(255) | 用户密码 | |
sex | varchar(255) | 性别 | |
tel | varchar(255) | 电话 | |
role | int(11) | 用户类型 | |
cardid | int(11) | 停车卡ID | FOREIGN KEY |
表4.2停车卡表主要用来记录停车卡的相关信息,通过关联用户表来实现用户拥有唯一停车卡的功能。
表4.2 card(停车卡表)
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
id | int(11) | 停车卡ID | PRIMARY KEY |
cardnum | varchar(255) | 停车卡号 | |
type | int(11) | 卡类型 | |
money | double(11,2) | 余额 | |
time | datetime | 发卡时间 | |
islose | int(11) | 是否挂失 | |
illegalcount | int(11) | 违规次数 | |
carnum | varchar(255) | 车牌号 | |
deductedtime | datetime | 扣费时间 |
表4.3卡类型表主要用来记录停车卡的类型。
表4.3 cardtype(卡类型表)
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
id | int(11) | 卡类型表ID | PRIMARY KEY |
type | int(11) | 卡类型 |
表4.4停车位表是记录停车位信息的,如果该车位有停车就会有所停车辆的信息。
表4.4 parkspace(停车位表)
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
id | int(11) | 表ID | PRIMARY KEY |
parkid | int(11) | 车位号 | |
status | int(11) | 是否停车 | |
tag | int(11) | 停车类型 | |
carnum | varchar(255) | 车牌号 |
表4.5历史停车记录表是用来记录停车场的历史停车信息。
表4.5 parkinfoall(历史停车记录表)
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
id | int(11) | 表ID | PRIMARY KEY |
cardnum | varchar(255) | 停车卡ID | |
parknum | int(11) | 停车位ID | |
carnum | varchar(255) | 车牌号 | |
parkin | datetime | 停入时间 | |
parkout | datetime | 驶出时间 | |
parktemp | int(11) | 是否临时停车 |
表4.6违规信息表主要用来记录车辆的违规信息,记录车辆违规信息主要是通过车牌号与停车信息表中的数据进行关联。
表4.6 illegalinfo(违规信息表)
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
id | int(11) | 违规信息ID | PRIMARY KEY |
cardnum | varchar(255) | 停车卡号 | |
illegalinfo | varchar(255) | 违规详情 | |
parkin | datetime | 停车时间 | |
time | datetime | 记录时间 | |
uid | int(11) | 记录的管理员id | |
carnum | varchar(255) | 车牌号 | |
deleted | char(10) | 是否删除 |
表4.7优惠券表主要用来记录优惠券的相关信息。
表4.7 coupon(优惠券表)
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
id | int(11) | 表ID | PRIMARY KEY |
couponNum | varchar(255) | 优惠券号 | |
money | int(11) | 优惠金额 | |
cardnum | varchar(255) | 停车卡号 | FOREIGN KEY |
time | datetime | 过期时间 |
表4.8邮件表主要用来记录管理员和用户邮件互通的消息记录。
表4.8 email(邮件表)
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
id | int(11) | 邮件ID | PRIMARY KEY |
sendid | int(11) | 发送方 | |
toid | int(11) | 接收方 | |
title | varchar(255) | 标题 | |
content | varchar(255) | 内容 | |
time | datetime | 发送时间 | |
managerisread | int(11) | 管理员是否已读 | |
userisread | int(11) | 用户是否已读 | |
userdeleted | int(11) | 用户是否删除 | |
managedelete | int(11) | 管理员是否删除 |
表4.9计费规则表是用来设置停车场的收费规则,管理员可以自由设置每小时价格和每日最高收费和月卡年卡的价格。
表4.9 depotinfo(计费规则表)
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
id | int(11) | 评价ID | PRIMARY KEY |
hourmoney | varchar(255) | 每小时价格 | |
monthcard | varchar(255) | 月卡价格 | |
yearcard | varchar(255) | 年卡价格 | |
illegal | varchar(255) | 总车位数 | |
daymaxmoney | varchar(255) | 每日最高收费 |
表4.9收入表用来记录停车场经营的收入所得以及相关信息。
表4.10 income(收入表)
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
id | int(11) | 表ID | PRIMARY KEY |
money | double(20,2) | 收入 | |
method | int(11) | 收入方式 | |
type | int(11) | 收入类型 | |
carnum | varchar(255) | 车牌号 | |
isillegal | varchar(255) | 是否违规 | |
cardnum | varchar(255) | 停车卡号 | |
source | int(11) | 收入来源 | |
time | datetime | 停车时间 | |
duration | int(11) | 停车时长 | |
trueincome | 是否真正收入 |
4.5 本章小结
本章主要介绍了系统功能框架和主要功能设计,包括登录模块、车辆进出和出场功能、历史停车查询功能、违规管理功能、优惠券管理功能等。然后介绍了数据库各类表的详细设计。
五、系统实现
5.1 系统开发环境
1.硬件环境
具体硬件环境:
CPU:Intel® Core™ i5
内存:8G
硬盘:512G固态
2.软件环境
操作系统:Win10专业版 64位
开发工具:IntelliJ IDEA
数据库:MySQL 5.7
服务器:Tomcat 8.5
开发语言:Java
JDK版本:1.8
页面显示:谷歌浏览器、火狐浏览器等。
5.2 车辆手动入库和自动入库实现
该功能是管理员可以通过手动填写车牌信息、停车卡号等进行手动入库,或者通过上传车牌照片进行车牌识别进行一键自动入库。具体的实现方式是通过将管理员填写的车牌号、停车卡号等信息序列化以后传到Control层,然后调用parkspaceService下的changeStatus ()方法对车位进行更新,将车牌号,入库时间等写入数据库完成停车操作。接着再调用parkinfoservice的saveParkinfo()方法将停车信息写入历史停车数据库就完成一整套的停车流程。停车位管理界面如图 5.1所示。
图 5.1 停车位管理界面
5.3 添加车辆违规实现
该功能是管理员能够更好的管理停车场的利器。对于在停车场中没有规范停车或者其他违规行为,管理员可以对其记录违规信息,在结算的时候就会将违规费添加到停车费用中,通过违规管理可以让停车场更加规范有秩序,利于长久的发展。具体的实现方式是管理员记录好违规车牌以及违规内容以后,将数据序列化以后传到Control层。首先会对是否此次停车已经添加过违规进行检测,检测方式是调用illegalInfoService的findByCarnum()方法传入车牌号以及停车时间作为参数,所以不会查到之前的违规。然后调用illegalInfoService的save()方法将车牌号、违规内容、违规时间等保存到违规信息表当中,就完成了整个违规添加的流程。具体代码如图 5.2所示。
图 5.2 添加违规核心代码
5.4 添加停车卡实现
首先将网页填的手机号、姓名、金额、类型等信息序列化以后传到控制层,控制层调用depotcardService的save()方法将数据保存到数据库,因为手机号是否重复已经在前端做了验证,所以这里就直接插入即可。再调用incomeService的save()方法将停车卡的收入保存到数据库的收入表中。添加停车卡界面如图 5.3所示。
图 5.3 添加停车卡界面
5.5 系统界面展示
登录界面:可以在此进行登录,系统会根据角色不同来跳转到不同的主界面并拥有不同的功能。如图 5.4所示。
图 5.4 登录界面
停车位管理:管理员可以对车辆进行入库操作和出库操作以及查询车位的停车情况。如图 5.5所示。
图 5.5 停车位管理
车辆自动入库:首先选择一张车牌的照片,点击上传识别,就可以自动辨别图片中的车牌号,然后自动对其进行入库操作,省时省力,对于车辆出入次数多的停车场可以有效提高车辆进入的效率。如图 5.6所示。
图 5.6 车辆自动入库
车辆手动入库:对于不能自动入库的情况,管理员也可以通过手动输入车牌号等相关信息进行手动入库。或者对于有一些特殊要求的,也可通过手动输入的方式进行入库。如图 5.7所示。
图 5.7 车辆手动入库
车位预定管理:对于一些不方便打电话预定的用户,可以在网站上使用车位预定功能提前进行车位预定。后台管理员可以对预定车位的操作进行响应和回复。如图 5.8所示。
图 5.8 车位预定管理
用户管理:管理员可以添加新的停车用户,编辑停车用户或者删除停车用户。如图 5.9所示。
图 5.9 用户管理
停车卡管理:管理员可以添加新的停车卡,如果有停车卡遗失的情况也可以对停车卡进行挂失操作或者删除停车卡。如图 5.10所示。
图 5.10 停车卡管理
停车情况图表分析:管理员可以通过图表的方式对车位的停车情况有更加直观的了解。如图 5.11所示。
图 5.11 停车情况图表分析
收入管理:管理员可以对停车场的收入详情进行查看和查询指定日期内的收入情况。如果需要的话也可以对收入情况进行分析,将会以图表的方式展示。如图 5.12图 5.13所示。
图 5.12 收入管理
图 5.13 收入分析图表
优惠券管理:管理员可以在一些节假日发放优惠券来进行促销吸引顾客。当一个停车卡上有优惠券的时候,在付款的时候优先抵扣优惠券金额,优惠券用完以后才会扣除停车卡上的余额。如图 5.14所示。
图 5.14 优惠券管理
支付界面:车辆驶出前要先完成支付才可以驶出停车场。如图 5.15所示。
图 5.15 支付界面
违规管理:主要对违规的添加、查看和删除。其中添加违规分为手动添加违规和自动添加违规。自动添加违规即上传车牌照片和添加违规信息即可利用车牌识别算法自动识别出车牌号并添加违规。手动添加违规则适用于自动添加违规不生效的情况下,手动输入车牌号和违规信息来添加违规。如图 5.16所示。
图 5.16 违规管理界面
5.6 本章小结
本章是系统实现介绍。先是介绍了开发环境,然后介绍了车辆自动入库和手动入库的代码实现方式和添加违规的代码实现方式等。最后将整个系统所有页面功能进行展示。
六、系统测试
6.1 软件测试
本停车管理系统在设计开发过程中就采用软件测试的V模型来规范软件测试。V模型推崇开发与测试并行的方式,在开发完一个功能模块以后就进行相应的单元测试,注重细节方面的问题。接着再进行集成测试,主要测试模块间的接口能否互通的问题。最后,在进行功能测试来检测整个系统运行是否正常[16]。
在测试过程中主要采取的是功能测试,通过功能测试可以逐一检测各个功能是否可以满足停车场管理人员的需求。
6.2 功能测试
功能测试是一种黑盒测试,这是根据软件需求的要求设计测试用例并验证系统功能的过程,并且通过与测试系统的外部输入与输出的关系来验证。功能测试在于测试功能是否正常,因此不考虑内部的实现方式,测试的前提就是系统已经处于运行状态[17]。
本停车管理系统对在设计开发过程中多次对系统功能进行测试,确保功能的正常运作。
6.3 测试用例
通过实际使用状况设计测试用例,对比预期和结果来得出测试结论。
表6.1是系统登录功能的测试用例。
表6.1 登录功能测试用例
表6.2为对车辆驶入的功能测试的测试用例。
表6.2 车辆驶入功能测试用例
表6.3为车辆驶出停车场的测试用例。
表6.3 车辆驶出功能测试用例
表6.4为违规管理功能的测试用例。
表6.4 违规管理功能测试用例
表6.5为停车卡管理功能的测试用例。
表6.5 停车卡管理功能测试用例
表6.6添加用户功能的测试用例。
表6.6 添加用户功能测试用例
6.4 功能测试总结
主要对停车场管理系统的登录、车辆驶入、车辆驶出、违规添加、停车卡管理就行功能测试。测试过程中界面UI的显示都符合预期,功能方面符合需求。
6.5 本章小结
本章节主要介绍了对停车场管理系统进行功能测试的必要性和测试结果,针对当前停车管理系统设计了一系列的功能测试用例。通过系统测试使系统更能符合预期要求,并能检测和修复一些开发过程中的bug。
七、总结与展望
7.1 总结
随着汽车市场的快速发展,各个社会中的汽车和私有车数量都在快速增长。停车位的供给速度远远低于汽车数量的增长速度,招致城市停车位越来越紧张。停车难情况的原因不但是因为停车场以及停车位建立的缺乏,而且也是由于停车场没有秩序的管理方式。因此有必要开发一个停车场综合管理系统来解决这个问题。
本课题就是针对停车位管理这一需求主体,基于Spring MVC + Spring + MyBatis三个Web应用程序成熟的开源框架作为系统基础框架,Tomcat提供服务支撑,MySQL提供完整的数据存储撑持,设计了一款智能停车场管理系统。该停车场管理系统的智慧化、信息化和自动化也有所进步,既降低了人工压力,同时也显著减少人工登记由于个人错误而引发的一系列问题。通过该停车场管理系统,一方面可以省去繁琐的人工登记,也可以节省一笔不小的人员支出,同时也有利于问题出现以后的追踪查询增加安全性。该系统同时拥有灵活性和拓展性。
本停车管理系统的功能具有:停车位管理、停车卡管理、违规管理、车位预约、用户管理、车辆进出、优惠券管理、收入管理、收费设置等功能。一个停车场中需要的基本功能都有,还有一些额外的促销功能,比如发放优惠券。
总的来说,系统主要依靠着车牌识别算法可以有效解决人工速度慢、易出错、费用高等缺点,也可以有效减少停车场乱收费的现象。
7.2 展望
目前本系统对于未来停车场的发展还是有提升的地方:第一,面对面积越来越大的收费停车场,车主可能会忘记自己车在什么位置因此后期需要增加一个寻车算法来帮助寻车。第二,对于首次来停车场消费的客户很可能找不到指定的停车位,因此需要一个引导泊车的算法来帮助找到泊车位。第三,需要开放接口和硬件进行结合,软件硬件相结合才能发挥最大的效果。