12基于CS的JAVA多线程队列牌号系统的设计与实现.docx
《12基于CS的JAVA多线程队列牌号系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《12基于CS的JAVA多线程队列牌号系统的设计与实现.docx(36页珍藏版)》请在冰豆网上搜索。
12基于CS的JAVA多线程队列牌号系统的设计与实现
基于C/S的JAVA多线程队列牌号系统的设计与实现
姓 名
系别、专业
导师姓名、职称
完成时间
摘要
本论文所设计的牌号系统是为解决一些服务业营业大厅排队问题而设计的,它能有效地提高工作人员的工作效率,也能使顾客合理的安排等待时间,让顾客感到服务的公平公正。
论文首先介绍了牌号系统的背景、意义、应用现状以及研究与开发现状。
其次对C/S架构、Socket网络编程技术、Java线程编程等相关技术理论做了简单的论述。
接着结合工程项目,具体论述了牌号系统的需求分析、整体设计以及系统数据库的设计,其中包括业务流程图、系统用例图、功能结构图、数据流程图、以及系统数据库的E-R图的分析和描述。
然后,着重描述了C/S架构的牌号系统的设计和实现,其中系统的实现主要是描述了各个模块的实现方法。
最后,总结了本论文的主要工作特色及所存在的不足,并提出了今后的研究方向。
关键词:
客户端/服务端架构;多线程;牌号系统;网络编程;开发
ABSTRACT
GradesysteminthispaperisdesignedtosolveproblemsofqueuinginHallofbussinessservices.Itcaneffectivelyimprovethestaff'sefficiency,andmakethecustomersreasonablyarrangethewaitingtime,thensupplyfairandjustserviceforthecustomers.
Firstly,background,significance,developmentandapplicationofgradessystemwereintroducedinthispaper.Secondly,theC/Sstructure,Socketnetworkprogrammingtechnology,Java-threadprogramming,andotherrelatedtechnologieswerealsosimplydissertated.Thencombinedwiththeproject,specificallydiscussesthegradesystemofneedsanalysis,theoveralldesignandsystemdesignofthedatabase,whichBaokuobusinessflowchart,systemusecasediagram,functionalstructurediagram,ShuJuflowcharts,andthesystemdatabaseERdiagramoftheanalysisandMiaoshu.Then,focusondescribingtheC/Sstructureofthegradesystemdesignandimplementation,includingSystem,whichdescribestherealizationmethodofeachmodule.Finally,thispapersummarizesthemainfeaturesandtheshortcomings,andproposefutureresearchdirections.
Keywords:
Client/Serverstructure;multi-threaded;gradesystem;networkprogramming;development
1概述
随着科技的不断发展,人们要求办事的效率越来越高,牌号系统在这种情况下应运而生。
1.1牌号系统的介绍
牌号系统在现今的服务行业还是个比较新鲜的名词,利用这种先进的牌号系统管理模式将网络技术、通信技术相结合,采用TCP/IP通信连接,使企业的服务机构通过网络与顾客通信,完成对顾客的管理。
牌号系统实现每个客户端可以迅速建立与服务器端的实时通信连接,并且操作互动的业务。
顾客不仅可以进行取号业务,还可以进行一些其它操作,业务员除了进行业务处理还可以对数据库进行一些增删改查等操作。
随着网络编程技术研究的不断深入和完善,国内外越来越多的企业己经开始使用牌号系统,如中国建设银行和上海长海医院等相关部门已开始使用,并且取得了相当的业绩和成果。
1.2选题背景及意义
时间等于金钱,这句话是这个飞速发展时代的真实写照,随着科技的不断发展,人们越来越要求办事的效率,讨厌把宝贵的时间花在一些排队的事情上。
我国是一个人口众多的国家,各大银行,邮局,医院等营业大厅常常人满为患,排着长队等着办理业务,这种局面常常使人们怨声载道。
随着社会的发展,特别是信息技术的发展,计算机已经在社会的各个方面凸显出来。
原始呆板固化的排队等候方式转变为基于计算机管理与控制的舒适、休闲的等候方式。
由于原始的排队等候方式存在不方便、不安全等缺点,而基于计算机管理与控制的舒适、休闲的等候方式完全可以解决这些弊端,人们不仅可以自由安排等待时间,而且可以轻松的享受其他服务,这方式不仅提高了业务员的工作效率,也提高了其业务素质。
1.3国内外研究现状分析
随着市场规模的扩大,经过详细的调查,国内外越来越多的企业己经开始使用牌号系统。
目前国际上已有许多人员致力于这方面的研究与开发,而这方面的方法与文献也是层出不穷。
随着技术的越来越先进,各研究人员研究开发牌号系统所采用的技术也各不相同:
如基于C/S架构的Java多线程技术、基于arm技术的等等。
在国外,牌号系统早已普及应用到各个服务领域,他们所应用的也是先进的如智能型、多媒体式的牌号系统。
而在我国,相对来说,在各大银行应用比较广泛,而在医院,却是最近一两年内才开始使用的。
虽然比国外研究应用得晚,但是随着服务行业发展的脚步,牌号系统在我国的应用也会越来越普及。
基于Java技术的不断发展,牌号系统涉及的领域越来越广,它的复杂性也会变得越来越高,与此同时随着各种硬件的不断发展以及Web技术的发展,牌号系统也会越来越多的应用在不同领域。
因此,对于牌号系统仍需要继续研究,下一步应对Web服务以及面向对象的方法和技术进行深入研究。
鉴于牌号系统的Oracle数据库管理系统这方面,没有专门涉及安全性的探讨研究,但这一特性的研究必不可少,特别是在企业管理这一类高敏感的系统中,因而这也是下一步工作的重点问题。
1.4本文的组织结构
第2章系统开发环境及相关技术理论:
系统开发的主要平台,C/S简介、Soket简介及JAVA多线程技术介绍。
第3章系统分析:
从牌号系统的两大功能方面对系统进行了功能需求分析;通过经济、操作和技术三个方面对系统可行性进行了分析。
第4章系统的总体设计:
包括系统功能结构、系统各子功能模块的设计和系统总及各实体用例图设计。
第5章系统的详细设计:
描述了各实体及其属性,系统E-R图,数据库物理结构设计和系统安全性设计。
第6章系统的实现:
根据系统的执行流程分析给出了系统结构流程图,并一一实现了各功能模块。
最后是结论,主要写本论文的主要工作内容、创新点及所存在的缺点,和本次论文设计的心得体会。
2系统开发环境及相关技术理论介绍
2.1系统开发环境
开发平台:
MyEclipse
操作系统:
WindowsXP
数据库服务器:
Oracle9i/10g
使用技术:
JavaGUI、JDBC、Socket、Xml
2.2系统相关技术介绍
2.2.1C/S的简介
传统的应用体系结构模式主要有两种:
C/S(Client/Server)结构模式B/S(Browser/Server)结构模式。
C/S(Client/Server)结构,即大家熟知的客户机和服务器结构。
它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
目前大多数应用软件系统都是C/S形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。
这也就是目前应用系统的发展方向。
C/S体系结构的优点:
(1)应用服务器运行数据负荷较轻。
最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。
二者可分别称为前台程序与后台程序。
运行数据库服务器程序的机器,也称为应用服务器。
一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。
(2)数据的储存管理功能较为透明。
在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,前台应用可以违反的规则,并且通常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序中不集中实现,例如访问者的权限,编号可以重复、必须有客户才能建立定单这样的规则。
所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干涉)背后的过程,就可以完成自己的一切工作。
在客户服务器架构的应用中,前台程序不是非常“瘦小”,麻烦的事情都交给了服务器和网络[11]。
2.2.2Socket的简介
Socket是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”。
在java中创建一个Socket,用它建立与其他机器的连接。
从Socket得到的结果是一个InputStream以及OutputStream或Reader和Writer,以便将连接作为一个I/O流对象对待。
这有两个基于数据流的套接字类:
一个是ServerSocket,服务器用它“侦听”进入的连接;另一个是Socket,客户用他初始化一次连接。
一旦客户(程序)申请建立一个套接字连接,ServerSocket就会返回(通过accept()方法)一个对应的服务器端套接字,以便进行直接通信。
可以利用getInputStream()以及getOutputStream()每个套接字产生对应的InputStream和OutputStream对象。
这些数据流必须封装到缓冲区内。
在牌号系统中采用了TCP/IP协议,这样实现了点对点通信等功能[6]。
2.2.3JAVA多线程技术
(1)多线程
多线程编程技术是Java语言的重要特点。
多线程编程的含义是将程序任务分成几个并行的子任务。
特别是在网络编程中,有很多功能是可以并发执行的。
比如网络传输速度较慢、用户输入速度较慢,则可以用两个独立的线程去完成这两个功能,而不影响正常的显示或其它功能[7]。
多线程是与单线程比较而言的,普通的Windows采用单线程程序结构,其工作原理是:
主程序有一个消息循环,不断从消息队列中读入消息来决定下一步所要干的事情,一般是针对一个函数,只有等这个函数执行完之后,主程序才能接收另外的消息来执行。
比如子函数功能是在读一个网络数据,或读一个文件。
只有等读完这个数据或文件才能接收下一个消息。
在执行这个子函数过程中你什么也不能干。
但往往读网络数据和等待用户输入有很多时间处于等待状态,多线程则可以解决这个问题。
(2)线程创建的方法
1)从一个自定义的类中创建一个对象,这个类扩展了Thread类。
2)使用接口。
在java中,用于创建线程的接口是Runable[1]。
(3)多线程在牌号系统中的应用
为了实现多用户同时在线服务采用了多线程机制,在实际应用中启动一个业务端产生一个线程。
业务端分布在不同的机器上,同时进行业务处理。
多线程解决了并发执行造成的死锁问题。
并实现了多用户同时在线处理。
3系统分析
3.1功能需求分析
牌号系统从界面上看主要实现两个方面的功能:
(1)取号客户按键反馈给服务器,然后服务器从数据库获得一个号反馈给顾客,这就完成了取号的过程,在顾客取号的可视化界面上顾客可以查询当前取号总人数,也可查询到已处理的人数,在顾客想放弃当前的号票时也可以对号票进行删除,顾客还可以在可视化界面看到自己的取票信息和需要等待的人数。
(2)叫号业务员按键反馈给服务器,服务器拿到取号时存储在数据库中的数据,进行业务处理,在这个过程中业务员可以进行对顾客人数的查询,还可以对不需要进行处理的票号进行删除,也可以充当管理员的角色对数据库进行删除。
业务员还可以查看顾客的取票情况,以及票号的业务的处理情况。
3.2可行性分析
3.2.1经济可行性
该系统对操作环境没有太多要求,系统的开发不需要很强的经济支持,就其功能和给企事业单位带来的方便来说,是完全可行的。
3.2.2操作可行性
目前计算机已经普及到所有的单位及大部分家庭,不仅在企事业单位,即使足不出户也能通过网络对单位和人员进行统一管理。
本系统的使用者有三类人,第一是客户;第二是银行柜员;第三是银行管理人员,对于这三类人员使用本系统都是可行的。
本系统操作非常简单,不需要进行培训只需阅读说明书就可以进行操作。
3.2.3技术可行性
本系统采用Java语言编写,它是一种简单的,面向对象的编程语言,具有多线程,分布式,跨平台等特性。
它有自己的安全机制,并且移植性很好。
在数据库方面采用了Oracle10g,其灵活性,安全性和易用性为数据库编程提供了良好的条件。
在数据持久化层,选用了JDBC,开发者掌握这些技术就可以具备开发此系统的能力,另外,此系统对开发环境的要求,都是大部分Java程序员进行软件开发使用的开发环境,所以,技术方面也是可行的。
4系统总体设计
4.1系统功能结构
根据以上章节所做需求分析对系统进行功能设计,得如图4-1所示的功能模块图。
图4-1系统功能模块图
4.2系统各子功能模块设计
该系统功能从服务器端和客户端角度来说可分以下两大模块,具体每一个模块又分为几个小模块:
(1)服务器端
1)取号功能:
打开服务器与终端进行通信。
由于把服务器设置到了用户的一端,所以在服务器端进行取号,然后把号存到数据库中。
2)统计功能:
数据访问层从数据库中查出所有取票人数和等待人数在服务器端界面显示。
3)弃号功能:
丢弃当前取票顾客的牌号。
4)查询功能:
顾客可以从此处了解到所有顾客的取票情况及被处理状况。
5)通知功能:
从服务器端获得牌号,通过服务器端通知***用户到***工作台办理业务。
(2)客户端
同一时刻允许多个工作台办理业务。
用户通过在服务器端的通知功能知道去哪个工作台办理业务,工作台显示正在为哪个号码的用户办理业务。
1)登录功能:
业务员从此处登录,业务员的姓名,密码是事先录入数据库的。
2)叫号功能:
业务员点击处理按钮触发事件发送信息给服务器,服务器从数据库拿到号票,返回给业务员进行业务处理。
3)统计功能:
数据访问层从数据库查询总取票人数和查询未处理人数在业务端显示。
4)移除功能:
业务员可以移除数据库中所有的记录,也可以选择移除某条记录。
5)查询功能:
业务员可以查询所有顾客的取票情况及业务员对票号的处理情况,这块主要为了能够及时掌握顾客取票信息及业务员处理情况。
4.3系统总体及各实体用例图设计
4.3.1系统体系结构设计
图4-2系统体系结构
4.3.2系统逻辑模型
图4-3系统逻辑模型
4.3.3业务员用例图
图4-4业务员用例图
4.3.4客户用例图
图4-5客户用列图
5系统详细设计
5.1各实体及其属性
这一设计阶段是在需求分析的基础上,设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。
根据上面的设计规划出的实体有顾客信息实体、业务端信息实体、业务员信息实体、自动出号信息实体。
各个实体及其关系描述如下:
图5-1业务端信息实体及其属性图
图5-2业务员信息实体图
图5-3顾客信息实体图
图5-4自动出号信息实体图
5.2系统E-R图
图5-5实体之间关系E-R图
5.3数据库物理结构设计
在上面的实体以及实体之间关系的基础上,形成各个表格之间的关系。
牌号系统数据库中的各个表的设计结果如下表所示(每个表格表示数据库中的一个表)。
(1)顾客信息表customer_tbl
表customer_tbl用来保存顾客取票信息,结构如表5-1所示。
表5-1customer_tbl的结构
字段名
字段类型
中文描述
备注
非空
主键
Id
NUMBER
唯一标识
√
nextId
NUMBER
顾客牌号
Unique
√
takeDate
Date
取票日期
√
type
NUMBER
服务类型
1:
vip2:
普通
√
flag
NUMBER
处理标记
Unique
√
(2)业务端信息表work_tbl
表work_tbl用来保存业务端信息,结构如表5-2所示。
表5-2work_tbl的结构
字段名
字段类型
中文描述
备注
非空
主键
Id
NUMBER
唯一标识
√
processDate
Date
处理日期
√
workId
NUMBER
服务台编号
√
type
NUMBER
服务类型
1:
vip2:
普通
√
nextId
NUMBER
顾客牌号
Unique
√
(3)业务员信息表workmen_tbl
表workmen_tbl用来表示业务员信息,结构如表5-3所示。
表5-3workmen_tbl的结构
字段名
字段类型
中文描述
备注
非空
主键
Id
NUMBER
唯一标识
√
name
varchar2(20)
用户名
√
password
varchar2(20)
密码
√
(4)自动出号信息srt_tbl
表srt_tbl用来产生唯一的号票信息,表结构如表5-4所示
表5-4srt_tbl的结构
字段名
字段类型
中文描述
备注
非空
主键
nextId
NUMBER(20)
顾客牌号
√
tyep
NUMBER(7)
服务类型
Unique
√
5.4系统安全性设计
(1)数据因素:
系统数据库中包含多个表信息,所以在系统与数据库的连接上,直接封装到代码中,由于java的安全机制比较好,所以数据信息在存储和传递过程中不可见。
(2)硬件及物理因素:
系统硬件及安全环境安全可靠,包括机房设施、计算机主体、存储系统、数据通信设备设施等方面是安全的。
(3)存储安全:
通过oracle的数据库安全设置,连接数据库需要用户名和密码,保证了数据库的安全性[3]。
6系统实现
6.1系统结构流程图
6.1.1服务端
根据系统的执行流程分析,可得服务器系统结构流程如图6-1所示。
图6-1服务器系统结构流程图
6.1.2客户端
根据系统的执行流程分析,可得客户端系统结构流程如图6-2所示。
图6-2客户端系统结构流程图
6.2各功能模块的实现
6.2.1系统主界面的实现
(1)服务器主界面的实现
用户在取号的时候必须先启动服务器,才能进行取号。
服务器端主界面如图6-3所示。
图6-3服务器端主界面
服务器端主界面采用菜单式风格,用户可以根据需求进行取号,查询,删除等功能。
界面主要采用了GridLayout,FlowLayout,BorderLayout等布局管理器来对界面进行布局的。
(2)客户端界面的实现
客户端是为业务员设计的以下是客户端登录界面如图6-4所示。
图6-4业务员登录界面
客户端业务处理界面如图6-5所示。
图6-5业务处理界面
客户端业务处理界面也采用了菜单式风格,采用了布局管理器对界面进行布局管理,其中在显示这一项里采用了JTable设计的设计界面如下图6-6所示。
图6-6员工处理情况界面
部分实现代码如下:
界面信息的显示的实现,在这里调用了Dao层的方法获得需要的信息
StringcolHeads[]={"服务台编号","服务类型","处理时间","顾客票号"};
IWorkDaodao=(IWorkDao)BeanFactory.getPojo("workDao");
Listlist=dao.loadAllWork();
Objectdata[][]=newObject[list.size()][4];
for(inti=0;idata[i][0]=list.get(i).getWorkId();
data[i][1]=list.get(i).getType();
if(list.get(i).getType()==1){
data[i][1]="vip用户";
}else{
data[i][1]="普通用户";
}
data[i][2]=list.get(i).getProcessDate();
data[i][3]=list.get(i).getNextId();
}
JTabletable=newJTable(data,colHeads);
6.2.2服务器端取号的实现
在整个系统中取号是一个至关重要的环节,也是设计它的目的所在。
它的实现与其他模块紧密相连,它在Server端实现的,取号分为两个服务类型:
vip业务和普通业务。
首先在数据库里建立srt_tbl这张表,它用来存储自动生成的客户牌号。
它里面设置两个字段,一个是nextId,一个是type类型。
nextId是用来标识顾客的牌号的,而type则是用来表示顾客所要选取的服务类型,vip业务和普通业务。
当点击其中的一个业务时它就会产生一个牌号,这个牌号是通过在dao层的一个方法实现的,dao层通过JDBC连接数据库实现数据的持久化。
在取完号的同时调用Dao层的saveID()方法把这个信息保存在cuntomer_tbl表中。
(1)vip会员取号如图6-7所示。
图6-7vip用户取号界面
实现代码如下:
1)产生号票
num=dao.nextID
(1);
Customercustomer=newCustomer(num,1);
2)把顾客取到的号票存储到数据库中,调用find