基于Socket的银行排号系统的设计与实现

怪咖先生

发布日期: 2020-08-02 13:20:28 浏览量: 90
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

摘 要

银行排号系统是为解决一些服务业营业大厅排队问题而设计的,它能够有效地提高工作人员的工作效率,也能够使顾客合理的安排等待时间,让顾客感到服务的公平公正。论文首先讨论了排号系统的背景、意义、应用现状以及研究与开发现状。本文在对C/S架构、Socket网络编程技术、Java线程编程等相关技术理论做了简单的论述。结合工程项目,具体论述了排号系统的需求分析、整体设计以及系统数据库的设计,其中包括业务流程图、系统用例图、功能结构图、数据流程图、以及系统数据库的E-R图的分析和描述。其次,论文着重讨论了C/S架构的排号系统的设计和实现。在论文中详细地论述了排号系统的数据库设计与系统实现的各个步骤,并对原型系统作了简要介绍。最后,论文对主要完成的工作进行了总结,并提出了研究的不足之处以及对今后研究的展望。

关键词:C/S架构;Java多线程;排号系统;Socket网络编程

1.引言

随着科技的不断发展,人们越来越要求办事的效率,讨厌把宝贵的时间花在一些排队的事情上。我国是一个人口众多的国家,各大银行,邮局,医院等营业大厅常常人满为患,排着长队等着办理业务,这种局面常常使人们怨声载道。

随着社会的发展,特别是信息技术的发展,计算机已经在社会的各个方面凸显出来。原始呆板固化的排队等候方式转变为基于计算机管理与控制的舒适、休闲的等候方式。由于原始的排队等候方式存在不方便、不安全等缺点,而基于计算机管理与控制的舒适、休闲的等候方式完全可以解决这些弊端,人们不仅可以自由安排等待时间,而且可以轻松的享受其他服务,这方式不仅提高了业务员的工作效率,也提高了其业务素质。

排号系统在现今的服务行业还是个比较新鲜的名词,利用这种先进的排号系统管理模式将网络技术、通信技术相结合,采用TCP/IP通信连接,使企业的服务机构通过网络与顾客通信,完成对顾客的管理。排号系统实现每个客户端可以迅速建立与服务器端的实时通信连接,并且操作互动的业务。顾客不仅可以进行取号业务,还可以进行一些其它操作,业务员除了进行业务处理还可以对数据库进行一些增删改查等操作。随着网络编程技术研究的不断深入和完善,国内外越来越多的企业己经开始使用排号系统,中国建设银行,上海长海医院等地方已开始使用,并且取得了相当的业绩和成果。

论文的第一章介绍了系统分析,重点介绍了系统的可行性分析,系统的需求分析,其中包括业务流程图、系统用例图、逻辑模型图、体系结构图等;第二章介绍了系统的整体设计,重点介绍了开发设计思想,系统详细功能设计及系统总体框架等;第三章介绍了系统的数据库设计,重点介绍了数据库的概念设计及逻辑结构设计等,其中包括ER图、数据字典表等;第四章介绍了系统的实现,主要介绍了一些所用到的关键技术、系统程序执行流程、以及系统的实现,其中分别介绍了系统主界面实现、服务端取号的实现、客户端业务处理的实现、Dao层实现等,文中详细论述了系统实现的各个步骤;第五章对本人的工作做出了总结并展望后继的工作。

2.系统分析

2.1 系统初步调查

社会生产力的发展与进步,积极推动了人类思想的革新与创造,从而一系列新生事物的诞生接踵而来。但是新生事物的生存与延续取决于人类的检验,因而它的可行性至关重要。万事求得发展的根本保障是物质基础,经济的飞速发展推动生活水平显著提高。所以,生活质量的标准化、多样化使市场需求处于必不可少的地位,而市场规模也随之扩大,因此,经过详细的调查,目前在我国,虽然服务行业蓬勃地发展起来,但是基本上都还在使用排队方式办理业务。在此方式下,不仅秩序混乱,还效率低下,顾客还怨声载道。显然,随着服务行业的发展,这种形式已不再适合新型服务行业的要求,对行业的发展也有一定的限制,直接导致了工作人员的工作效率低下。因此本文设计了这个功能实用的排号系统,解决服务行业里混乱的场面。

2.2 系统可行性分析

2.2.1 经济可行性

该系统对操作环境没有太多要求,系统的开发不需要很强的经济支持,就其功能和给企事业单位带来的方便来说,是完全可行的。

2.2.2 操作可行性

目前计算机已经普及到所有的单位及大部分家庭,不仅在企事业单位,即使足不出户也能通过网络对单位和人员进行统一管理。本系统的使用者有两类人,第一是客户;第二是银行柜员,对于这两类人员使用本系统都是可行的。本系统操作非常简单,不需要进行培训只需阅读说明书就可以进行操作。

2.2.3 技术可行性

本系统采用Java语言编写,它是一种简单的,面向对象的编程语言,具有多线程,分布式,跨平台等特性。它有自己的安全机制,并且移植性很好。在数据库方面采用了Oracle 10g,其灵活性,安全性和易用性为数据库编程提供了良好的条件。在数据持久化层,选用了JDBC,开发者掌握这些技术就可以具备开发此系统的能力,另外,此系统对开发环境的要求,都是大部分Java程序员进行软件开发使用的开发环境,所以,技术方面也是可行的。

2.3 系统开发环境概述

2.3.1 硬件环境

本系统采用单机操作方式,基本配置如下;

  • 处理器:Intel(R) Core(TM)2 Duo CPU T6400@2.00GHz

  • 硬盘空间:200GB

  • 内存:2G

  • 显示器:NVIDIA GeForce 9300M GS

2.3.2 软件环境

  • 采用C/S架构,使用Eclipse运行环境

  • 开发平台:MyEclipse

  • 操作系统:Windows 7

  • 数据库服务器:Oracle 10g

  • 使用技术:Java GUI、JDBC、Socket、Xml

2.4 系统需求分析

2.4.1 业务流程分析

在调研过程中,已了解到所涉及的业务流程如图2-1所示:

2.4.2 系统体系结构设计

2.4.3 系统逻辑模型

2.5 系统需求定义

2.5.1 客户用例图

2.5.2 业务员用例图

3.系统总体设计

3.1 系统设计目的与任务

系统设计阶段的主要目的是,将系统分析阶段所提出的、充分反映用户信息需求的系统逻辑方案转换成可以实施的、基于计算机和网络技术的物理方案。这一阶段的主要任务是从信息系统的总体目标出发,根据系统分析阶段对系统的逻辑功能的需要,并考虑到经济、技术和运行环境等方面的条件,确定系统的整体结构和系统各组成部分的技术方案,合理选择计算机和通信的软件、硬件设备,提出系统的实施计划。

3.2 开发设计思想

排号系统从界面上看主要实现两个方面的功能:

  • 取号:客户按键反馈给服务器,然后服务器从数据库获得一个号反馈给顾客,这就完成了取号的过程,在顾客取号的可视化界面上顾客可以查询当前取号总人数,也可查询到已处理的人数,在顾客想放弃当前的号票时也可以对号票进行删除,顾客还可以在可视化界面看到自己的取票信息和需要等待的人数

  • 叫号:业务员按键反馈给服务器,服务器拿到取号时存储在数据库中的数据,进行业务处理,在这个过程中业务员可以进行对顾客人数的查询,还可以对不需要进行处理的票号进行删除,也可已充当管理员的角色对数据库进行删除。业务员还可以查看顾客的取票情况,以及票号的业务的处理情况

排号系统的特点:

  • 可操作性:界面简易,使用通用的菜单式风格,使用直观,操作简便

  • 容量大:支持联网,不限制取号数量,可满足大型客流场所的使用

  • 高性能:系统的所有对象都存放到数据库中,表示逻辑与业务逻辑相互分离,保证系统的处理能力

  • 伸缩性:它能适应不同的应用环境,对于只实现基本功能的服务大厅,如银行系统,可以采用微机控制的排号系统,无需单独配置系统电脑,即可实现自动排队叫号的功能

  • 可靠性:能保证长时间的正常运行,同时系统有比较好的安全机制,提高了安全性能

3.3 系统总体设计框架

据以上章节所做需求分析对系统进行功能设计,见系统功能模块图如图3-1所示:

3.4 系统功能详细设计

该系统功能从服务器端和客户端角度来说可分以下两大模块,具体每一个模块又分为几个小模块:

3.4.1 服务器端

  • 取号功能:打开服务器与终端进行通信。由于把服务器设置到了用户的一端,所以在服务器端进行取号,然后把号存到数据库中

  • 统计功能:数据访问层从数据库中查出所有取票人数和等待人数在服务器端界面显示

  • 删除功能:删除当前取票顾客的排号

  • 查询功能:顾客可以从此处了解到所有顾客的取票情况及被处理状况

  • 通知功能:从服务器端获得排号,通过服务器端通知***用户到***工作台办理业务

3.4.2 客户端

同一时刻允许多个工作台办理业务。用户通过在服务器端的通知功能知道去哪个工作台办理业务,工作台显示正在为哪个号码的用户办理业务。

  • 登录功能:业务员从此处登录,业务员的姓名,密码是事先录入数据库的

  • 叫号功能:业务员点击处理按钮触发事件发送信息给服务器,服务器从数据库拿到号票,返回给业务员进行业务处理

  • 统计功能:数据访问层从数据库查询总取票人数和查询未处理人数在业务端显示

  • 删除功能:业务员可以删除数据库中所有的记录,也可以选择删除某条记录

  • 查询功能:业务员可以查询所有顾客的取票情况及业务员对号票的处理情况,这块主要为了能够及时掌握顾客取票信息及业务员处理情况

4.数据库设计

4.1 数据库需求分析

通过对排号系统内容和数据流程分析,设计的数据项和数据结构如下:

  • 顾客信息:包括的数据项有顾客ID,顾客排号、取号时间、服务类型、状态标志等

  • 业务端信息:包括的数据项有业务ID、处理时间、服务台编号、属于那种服务类型,服务的顾客票号

  • 业务员信息:包括的数据项有业务员姓名、业务员密码

  • 自动出号信息:包括的数据项有ID、服务类型

有了上面的数据结构、数据项和数据流程,就可以进行下面的数据库设计。

4.2 数据库概念设计

这一设计阶段是在需求分析的基础上,设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。根据上面的设计规划出的实体有顾客信息实体、业务端信息实体、业务员信息实体、自动出号信息实体。各个实体的E-R图及其关系描述如下:

业务端信息实体E-R图

业务员信息实体E-R图

顾客信息实体E-R图

自动出号信息实体E-R图

实体之间关系E-R图

4.3 数据库逻辑结构设计

在上面的实体以及实体之间关系的基础上,形成各个表格之间的关系。排号系统数据库中的各个表的设计结果如下面的几个表格所示,每个表格表示数据库中的一个表。

4.3.1 顾客信息表customer_tbl

表customer_tbl用来保存顾客取票信息,结构如表4-1所示。

字段名 字段类型 中文描述 备注 非空 主键
Id NUMBER 唯一标识
nextId NUMBER 顾客排号 Unique
takeDate Date 取票日期
type NUMBER 服务类型 1:vip 2:普通
flag NUMBER 处理标记 Unique

4.3.2 业务端信息表work_tbl

表work_tbl用来保存业务端信息,结构如表4-2所示。

字段名 字段类型 中文描述 备注 非空 主键
Id NUMBER 唯一标识
processDate Date 处理日期
workId NUMBER 服务台编号
type NUMBER 服务类型 1:vip 2:普通
nextId NUMBER 顾客排号 Unique

4.3.3 业务员信息表workmen_tbl

表workmen_tbl用来表示业务员信息,结构如表4-3所示。

字段名 字段类型 中文描述 备注 非空 主键
Id NUMBER 唯一标识
name varchar2(20) 用户名
password varchar2(20) 密码

4.3.4 自动出号信息srt_tbl

表srt_tbl用来产生唯一的号票信息,表结构如表4-4所示。

字段名 字段类型 中文描述 备注 非空 主键
nextId NUMBER(20) 顾客排号
type NUMBER(7) 服务类型 Unique

4.4 系统安全性设计

  • 数据因素:系统数据库中包含多个表信息,所以在系统与数据库的连接上,直接封装到代码中,由于java的安全机制比较好,所以数据信息在存储和传递过程中不可见

  • 硬件及物理因素:系统硬件及安全环境安全可靠,包括机房设施、计算机主体、存储系统、数据通信设备设施等方面是安全的

  • 存储安全:通过oracle的数据库安全设置,连接数据库需要用户名和密码,保证了数据库的安全性[14]

5.系统的实现

5.1 系统的总体概述

排号系统采用java GUI设计的界面,它通过scoket实现点对点的通信,在实现过程中,客户取号的一端设置成了server端,业务员处理一端设置成了client端,所以必须先启动server端,才能启动client端。在整个系统中server端实现了顾客的取号功能和一些查询删除功能,client端实现了业务员登录和叫号处理以及一些查询删除功能。

5.2 系统相关技术简介

5.2.1 C/S的简介

传统的应用体系结构模式主要有两种:C/S(Client/Server)结构模式B/S(Browser/ Server)结构模式。

C/S(Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是C/S形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向

C/S体系结构的优点:

  • 应用服务器运行数据负荷较轻:最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻

  • 数据的储存管理功能较为透明:在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,前台应用可以违反的规则,并且通常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序中不集中实现,例如访问者的权限,编号可以重复、必须有客户才能建立定单这样的规则。所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干涉)背后的过程,就可以完成自己的一切工作。在客户服务器架构的应用中,前台程序不是非常“瘦小”,麻烦的事情都交给了服务器和网络[18]

5.2.2 Socket的简介

Socket 是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”。在java中创建一个Socket,用它建立与其他机器的连接。从Socket得到的结果是一个InputStream以及OutputStream或Reader和Writer,以便将连接作为一个I/O流对象对待。这有两个基于数据流的套接字类:一个是ServerSocket,服务器用它“侦听”进入的连接;另一个是Socket,客户用他初始化一次连接。一旦客户(程序)申请建立一个套接字连接,ServerSocket就会返回(通过accept()方法)一个对应的服务器端套接字,以便进行直接通信。可以利用getInputStream()以及getOutputStream()每个套接字产生对应的InputStream和OutputStream对象。这些数据流必须封装到缓冲区内。在排号系统中采用了TCP/IP协议,这样实现了点对点通信等功能[3]。

5.2.3 JAVA多线程技术

多线程[17]

多线程编程技术是Java语言的重要特点。多线程编程的含义是将程序任务分成几个并行的子任务。特别是在网络编程中,你会发现很多功能是可以并发执行的。比如网络传输速度较慢、用户输入速度较慢,你可以用两个独立的线程去完成这两个功能,而不影响正常的显示或其它功能。

多线程是与单线程比较而言的,普通的Windows采用单线程程序结构,其工作原理是:主程序有一个消息循环,不断从消息队列中读入消息来决定下一步所要干的事情,一般是针对一个函数,只有等这个函数执行完之后,主程序才能接收另外的消息来执行。比如子函数功能是在读一个网络数据,或读一个文件。只有等读完这个数据或文件才能接收下一个消息。在执行这个子函数过程中你什么也不能干。但往往读网络数据和等待用户输入有很多时间处于等待状态,多线程利用这个特点将任务分成多个并发任务后,就可以解决这个问题。

线程创建的方法[16]

  • 从一个自定义的类中创建一个对象,这个类扩展了Thread类

  • 使用接口。在java中,用于创建线程的接口是Runable

  • 多线程在排号系统中的应用

为了实现多用户同时在线服务采用了多线程机制,在实际应用中启动一个业务端产生一个线程。业务端分布在不同的机器上,同时进行业务处理。多线程解决了并发执行造成的死锁问题。并实现了多用户同时在线处理。

5.3 系统的执行流程图

服务器端系统执行流程

客户端系统执行流程

5.4 系统主界面的实现

5.4.1 服务器主界面的实现

用户在取号的时候必须先启动服务器,才能进行取号。服务器端主界面如图 5-2所示。

服务器端主界面采用菜单式风格,用户可以根据需求进行取号,查询,删除等功能。界面主要采用了Grid Layout,Flow Layout,BorderLayout等布局管理器来对界面进行布局的。

5.4.2 客户端界面的实现

客户端是为业务员设计的以下是客户端登录界面如图5-3所示。

客户端业务处理界面如图5-4所示。

5.5 服务器端取号的实现

在整个系统中取号是一个至关重要的环节,也是设计它的目的所在。它的实现与其他模块紧密相连,它在Server端实现的,取号分为两个服务类型:vip业务和普通业务。首先在数据库里建立srt_tbl这张表,它用来存储自动生成的客户牌号。它里面设置两个字段,一个是nextId,一个是type类型。nextId是用来标识顾客的牌号的,而type则是用来表示顾客所要选取的服务类型,vip业务和普通业务。当点击其中的一个业务时它就会产生一个牌号,这个牌号是通过在dao层的一个方法实现的,dao层通过JDBC连接数据库实现数据的持久化。在取完号的同时调用Dao层的saveID()方法把这个信息保存在cuntomer_tbl表中。

vip会员取号如图5-6。

普通会员取号如图5-7。

普通会员的取号的实现跟vip会员一样这里就不详细标注说明。

5.6 客户端业务处理的实现

这个模块的实现主要是在不同的业务员登录后选择了服务台以后才开始业务处理,业务处理的实现首先是server端调用socketThread这个多线程类,在这个类的run方法里调用了service层的unProcess(int type)方法从数据库中拿到nextId(牌号),client端从server端的输出流里获得牌号,进行处理。处理的时候会显示提示信息。

业务处理如图5-8所示。

5.7 Dao层的实现

Dao层是整个系统的关键所在,它是实现与数据库交互的桥梁,在这层里,主要是对一些数据的增删改查,它使用了JDBC作为与数据库连接的桥梁,配合一些pojo类来完成与数据库的交互,使业务逻辑层能够调用它来完成业务逻辑。Dao层也是所谓的Dao模式,它采用了接口机制,在这一层只完成与数据库的交互,实现了低耦合。

6.结语

本系统可解决排队混乱问题。主要包括两大模块,十个小功能。主要是实现取号,叫号功能。在取号的设计中用到了高低值算法,也使用了多线程技术,目的是可以使多个业务员同时在线进行业务处理。系统中还使用了XML解析、资源配置文件,与以前的同类系统相比,它把容易变动的信息写到配置文件中,需要更改的时候只要改动配置文件中的信息就可以,不需要改动已封装好的代码,实现低耦合的特性,并且重用性也很好。

使用C/S架构开发的系统也有不足之处:首先,使用Swing作为界面开发技术,代码量庞大,实现的界面却较粗糙、不美观。其次,由于在设计中考虑问题有些欠缺,导致系统功能不完善,有些功能不太合乎业务逻辑。比如把用户取号设置在了服务器端,还有在顾客取号端设置了删除功能,不合乎业务逻辑也降低了系统的安全性。

随着Java技术的不断发展,排号系统涉及的领域越来越广,它的复杂性也变得越来越高,与此同时随着各种硬件的不断发展以及Web技术的发展,排号系统会越来越多的应用在不同领域。因此仍需要继续研究,下一步应对Web服务以及面向对象的方法和技术进行深入研究。此外,本课题采用了安全性较好的Java技术、Oracle数据库管理系统进行研发,没有专门涉及安全性的探讨研究,但这一特性的研究必不可少,特别是在企业管理这一类高敏感的系统中,这是下一步工作的重点问题。

参考文献

[1] 罗骏,何羽.SQL实用简明教程.北京.清华大学出版社.2004:1-6

[2] 邵荣.Java编程实践指南.北京.清华大学出版社.2003:20-25

[3] Bruce Eckel.Java编程思想.北京.机械工业出版社.2005:312-356

[4] 李诚,王兵.Java2简明教程.北京.清华大学出版社.2004:334-338

[5] 王克宏,张炳文.Java语言SQL接口——JDBC编程技术.北京.清华大学出版社.2001:234-262

[6] 刘巍,唐学兵.利用Java的多线程技术实现数据库的访问.计算机应用.2002,(12):121-123

[7] 雍俊海.JAVA程序设计教程.北京.清华大学出版社.2007

[8] Oram,Andy.Database programming with JDBC & Java paperback book.O’Reilly & Associates.Inc.2000

[9] Cay S. Horstmann ,Gary Cornell .Core Java 2 Volume I – Fundamentals.Seventh Edition.2004

[10] Cay S. Horstmann ,Gary Cornell.Core Java 2 Volume II - Advanced Features.Seventh Edition.2004

[11] Bruce Eckel .Thinking in java 4.Prentice Hall PTR.2006-02-15

[12] 阎宏.Java与模式.北京.电子工业出版社.2002

[13] ORACLE公司.ORACLE 8i 初学者指南.www.china-public.com

[14] 中科永联高级技术培训中心.http://www.itisedu.com/phrase/200604237235.html

[15] 赖万钦.Java 多线程探讨.福建电脑.2007,(7):13-14

[16] 姜景根,李祥.基于Java的多线程并发服务器的设计与应用.电脑与信息技术.2007,1 5(1):16-17

[17] 刘惠萍,刘亮亮,张力.C/S模式下的三层架构.科技信息.2006,(6):20-25

[18] Brian Goetz .Exploiting ThreadLocal to enhance scalability.IBM中国.http://www.ibm.com/developerworks/ .2001-10-01

上传的附件 cloud_download 中国农业银行忻州分行排号系统的设计与实现.zip ( 1.91mb, 6次下载 )
error_outline 下载需要14点积分

发送私信

21
文章数
1
评论数
最近文章
eject