一、设计目的
通过实现停车场管理系统的功能,培养自己WEB应用设计与开发的能力,综合应用WEB开发中js技术、Servlet与JSP,以及JavaBean、自定义标签等技术,结合后台数据库管理,并且设计一套关于停车时间计算的收费标准,设计并实现基于MVC架构的停车场管理系统,以提高对WEB应用系统的可维护性、可扩展性、可移植性和组件的可复用性的分析设计能力和解决实际问题的能力。
二、设计原理
随着生活水平的日益增长,家家户户都有一辆车已经不再是令人羡慕的了。随着如此多出行的车辆,市面上新建了很多停车场,并且搭配一套停车收费管理系统,而本实验也是做一套可以投入社会使用的停车收费管理系统。
本课程设计要求实现管理员功能:停车场管理员登录,停车记录查看,停车场使用情况,停车场数据统计,停车记录修改,现阶段停车预计收入查看。
车辆停车功能:车辆驶入停车,车辆驶出结算,车辆照片添加,车辆照片查看,停车场余量判断,停车场车位自动分配。
三、开发和运行环境
运行Windows的PC机,具有JDK1.7以上Java编译环境和JCreator3.5或Eclipse3.0以上Java编辑环境。
四、小组成员及分工
张成强(201906062126 软件工程1904),负责所有内容。
五、功能需求
根据杭州市物价局核准的某停车场(共有100个车位)收费标准收取占道泊位费,收费标准为: 8时至20时每辆每小时4元,20时至次日8时每辆每次4元;不超过15分钟的免费,1小时内按1小时计费,超过1小时后以半小时为计费单位,每半小时收费2元;停车24小时内按4小时计收,超过部分按上述计时收费标准重新计收;10座以上车辆或卡车或特殊车辆收费加倍。请开发一套停车场收费管理系统,包括车位管理、车辆进场管理、收费管理、停车记录查询、数据统计等功能。车位管理需对停车场的车位信息进行编号管理并提示当前空闲情况;进场管理需记录车辆类型、车牌号、进场时间及推荐停车位等,需判断当前是否有空闲车位,进场时可输入车辆类型、车牌号,也可上传图片自动识别车牌(选做);收费管理是汽车驶离时依据车辆类型、停车时间自动计算收费,并记录收费信息;停车记录查询是按时间段、车辆类型、车牌号、停车位等进行查询,结果列出车牌号、车辆类型、进场时间、出场时间、停车时长、收费等信息;数据统计包括按时间段统计收费情况、某个时段(开始时间、结束时间)的停车情况等。
要求查询统计结果可用echarts实现饼图、柱状图、折线图等形式展示,利用第三方软件或接口进行车牌自动识别。
六、设计结果
本课程设计完成了停车场收费管理系统,主要功能包括车辆驶入判断有无余量、车辆驶入推荐停车位、管理员停车场实时查看、车辆驶出计算车费、历史停车记录查看、历史停车记录修改、停车数据统计、现场收入预计查看、停车照片添加、车辆照片查看等。技术报告和系统使用说明书见附件。
七、总结和体会
1.经过两周时间的系统需求分析、设计、开发和测试,实现了停车场管理系统的基本功能,使我们在Web应用系统开发方面有了很大的提高和认识,在提高书本上知识的同时也增加了实践性,让我们掌握了Web应用系统开发的具体流程,培养了自己的WEB应用设计与开发能力。
2.而且停车场管理系统相关的计算时间这一块,我有了熟练的锻炼。明白了java时间类中Date、Calendar、DateTime之间的转换和计算,还明白如何将时间相关的类从前端转化到后端,从后端转换到数据库。这些都是我在这次实验花费大量时间去查阅资料和敲码实践的。
3.而且在这次的课程设计中,我运用了大量的js相关技术,实现了前端的表格自动筛选,验证码验证登录,网页背景动效等,也弄明白了js对html的帮助之强大。
4.在这次实验中,有一个问题是我反复思索了很多次的。那就是推荐停车位的选择。刚开始,我是想在后台设置一个int,每当车一进来,这个int就加一位,车一走,这个int就减一位,但是后来我发现,这只能用于停车数量的统计,因为之前车位的车走掉的话,他的位置就很难再分配出去了。
所以我又采用了布尔数组记录模式,有车用true,无车用false,在java中Boolean数组是默认false的。但是后来我又发现一个问题,当我重新启动程序时,这个在内存中的数组就会被清空,之前的停车状况就无法得到保留了。
但是每次添加车辆去数据库中遍历停车位又会十分的耗费时间和资源,于是我想到,当我第一次调用这个进场servlet时,我会启用初始话函数,他会从数据库中初始化这个Boolean数组,从而使得我内存中的停车记录和数据库中的记录一直保持一致。
5. 还有遇到一些奇奇怪怪的小问题我就在这里简略描述了。(1)刚开始js验证失败时返回false,网页也会跳转,后来在网上看代码才发现,我之前写的代码没有返回值所以才不行。(2)刚开始不知道怎么复制Calendar类,因为这个类都是通过调用getinstance实例化的,后来在网上查到了可以用clone方法进行复制,而且不会随着源对象的改变而改变。(3)在数据库中写sql语句时发现报错,后来发现是字符串拼接时缺少双引号形成的。(4)设计成MVC模式时,发现CSS文件读不了了,之后我定义了一个<%path%>来表示之前的绝对路径。(5)本来想在jsp内调用Java的自定义函数,后来发现建一个自定义标签可以解决我的需求。(6)不知道两个java日期String怎么求中间的日期。(7)不知道sql语句中怎么把group by查询到的结果固定。上述问题好在我查阅资料后都一一解决了。
6. 当然还有一个未解决的问题就是车牌识别,在普通java类中可以实现识别,但是到了servlet中,他的识别就出现报错了,这也是这一次课程设计遗憾的内容,所以他的功能也就仅能在后端服务器实现了。
7. 这一次java课程设计对我的帮助十分的大,感觉从这次以后,自己就拥有了一定的工程能力,希望以后能继续加油,提升自己的水平,再创新高。