本人不怎么看消息,要资源直接从下面的链接下载
源资源见: https://pan.baidu.com/s/1Vc35QF-SP5NFq1xQJeX1jQ 提取码: 8259 复制这段内容后打开百度网盘手机App,操作更方便哦
基于JavaWeb的银行叫号系统
摘 要:开发一款银行叫号系统,方面银行客户办理业务,按号办理业务,杜绝排队插队现象,减缓客户等待叫号的焦急等待心理。采用JavaWeb的开发技术,利用MVC的设计模式,完全实现页面和逻辑的分离。
关键词:MVC;JavaWeb;叫号服务;
1 项目分析
-
- 背景
随着科学技术的更新迭代和生活水平的日益提高,各行各业激烈角逐,服务质量则在各行各业都代表着行业的质量,服务水平变得愈加重要。
长期以来,人们在银行营业大厅里办理金融业务过多,前拥后挤的排队等候,极大的延误办理业务的顾客,为改善服务质量,创造人性化服务环境,解决客户在办理业务中所遇到的排队、等候、拥挤和混乱等现象,银行排队叫号系统应用而生。
1.2 刷卡取号设计要求
设计一个页面,实现排队叫号功能,用户输入卡号,选定所需的业务类型,数据从客户端传递给后台,后台处理后,返回给客户端显示用户的编号,取票时间,今日已办理人数和未服务人数,同时对基础的页面做一些显示上的优化,维持基本的界面友好性交互。
1.3 数据查询设计要求
前端得到相应的查询条件,例如服务的窗口编号,业务类型等等,数据传递给后端,由后端处理后,返回给客户端在约束条件下所查询列表的各项数据,客户端再显示这些数据。对基础页面做优化。
1.4 所使用软件
采用IntelliJ IDEA做开发平台,使用MYSQL数据库,用可视化数据库软件SQLyog管理数据库。
1.5 数据库设计
1.5.1 业务类型表(work)
用户选择的是业务名称,由业务类型表查询,得到业务编号。
1.5.2 窗口表(windows)
规定一个窗口所处理的业务,窗口的名称,若此叫号系统能完整实现,用户叫号后也应给出相应的窗口编号和窗口名称。
1.5.3 队列表(queue)
我的理解是一个队列表应当存储的是等待服务的用户,在处理完业务以后,由工作人员表示已完成,从队列表中删除,添加到历史表中。
1.5.4 历史表(history)
保存处理完业务的客户信息,包括卡号、取票时间、服务窗口等,工作人员处理完业务后给出业务处理的结束时间,将相应数据添加到此表。
2 刷卡取号实现分析
2.1 各层功能描述
表2-1 文件名和功能描述
层 | 文件名 | 描述 |
视图层 | apply.jsp | 用户输入卡号,选择业务类型传递给控制层 |
apply_end.jsp | 显示当前队列编号,尚未服务人数等处理后的信息 | |
bankcss.css | 对显示的页面做优化 | |
控制层 | applyServlet.java | Servlet,负责连接模型层,传递客户端数据 |
模型层 | bankuser.java | 连接数据库,对数据库做相应的查询和更新 |
2.2 流程分析
用户输入卡号(card),选择业务名称(work_name),卡号和名称传递到控制层,并经由控制层传到模型层,在模型层内,首先加载数据库的驱动,定义数据库的连接地址,用户名和密码。完成访问数据库后,先查询业务类型表(work),根据业务名称(work_name),找到相应的业务编号(work_numb)。再查询历史表(history),将服务结束时间(end)限定为今日,计算出今日已服务的人数,查询队列表(queue),计算出今日未服务的人数,已服务和未服务的人数求和得出得出该用户的编号(id)。将用户编号(id),前台传入的卡号(card),查询出的业务编号(work_numb),以及取票时间(get_time)都求出后,更新队列表(queue),并把数据传递给前端控制层,由控制层提交给指定页面。
2.3 界面展示
3数据查询实现分析
3.1 各层功能描述
表2-1 文件名和功能描述
层 | 文件名 | 描述 |
视图层 | Select.jsp | 用户选择业务类型等条件传递给控制层 |
history.jsp | 显示历史服务记录 | |
queue.jsp | 显示等待队列的记录 | |
selectcss.css | 对显示的页面做优化 | |
控制层 | SelectServlet.java | 处理历史队列查询的数据,连接模型层,传递客户端数据 |
SelectServlet_queue.java | 处理等待队列查询的数据,连接模型层,传递客户端数据 | |
模型层 | SelectBean.java | 连接数据库,对数据库做相应的查询和更新 |
3.2 流程分析
用户选择相应的查询条件,当前页面只能提交一个表单,数据传递给相应的控制层,并经由控制层传递给模型层,在模型层内,首先访问数据库,对于不同的控制层调用的函数,做不同的数据库查询操作。由于两个查询前端传过来的数据是业务名称(work_name),所以都要先查询业务类型表(work),得到业务编号(work_numb)。对于查询历史表(history),相应的约束条件包括开始服务时间(start),结束时间(end),窗口编号(work_window),业务编号(work_numb)。对于查询队列表(queue),相应的约束条件有业务编号(work_numb)。查询的结果保存在List对象中,由控制层提交给指定页面。
3.3 界面展示
4遇到的问题和解决方法
4.1 数据库查询
statement对象采用的使SQL语句注入的形式,使用Preparedstatement则是把传入的东西看作数据,但是之前一直没有去深究对于字符类型,字符串类型的这些数据,当用问好表示一个数据时,需不需要加单引号呢?结果是不需要的,用SetString函数即可。这也引出一些学习上的问题,也即书面性的知识,大多数运行到实践中,才能发现一些薄弱点所在,引出一些学习书本知识所注意不到的点。
4.2 radio传输到控制层
Request对象封装的浏览器信息,一般用getParameter函数获取为String类型,radio传过来的参数可以用上述方法,也可以用getParameterValues函数,并且为String[]这样的数组,被选中的值存储为第一个数组元素,而对其他的数组元素的操作都是违法的。
4.3 数据库版本问题
本项目使用的MYSQL数据库是8.0.12版本的,从MYSQL 5.5.45+, 5.6.26+ and 5.7.6+ 这些个版本以后就必须指定SSL 的值true或者false。mysql5.7以及之前的版本则不用进行添加useSSL=false,会默认为false。useSSL=true时,就是一般通过证书或者令牌进行安全验证;useSSL=false时,就是通过账号密码进行连接。
4.4 Date对象的格式问题
在查询今日已服务的人数时,先要得出今日的日期。我选择的方法是用Date的格式化输出函数,只将月和日进行查询,同时对于历史表的end一栏数据也都是月和日的数据,没有分和秒,因为分和秒当日会有很多的数据,统一放在end一栏,数据对于当前功能较为冗余。
但是如果要实现窗口叫号的服务,老师给出的查询语句是”order by 取号时间”,就需要对具体的时间也做上分和秒的记录。
4.5 结果集读取
在对结果集ResultSet进行操作之前,一定要先用ResultSet.next()将指针移动至结果集的第一行,否则将不能读取。
5 总结
参考文献
- 张娜. Java Web开发技术教程[M]. 清华大学出版社, 2011.