银行排队叫号系统模拟.docx
- 文档编号:4747712
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:42
- 大小:61.35KB
银行排队叫号系统模拟.docx
《银行排队叫号系统模拟.docx》由会员分享,可在线阅读,更多相关《银行排队叫号系统模拟.docx(42页珍藏版)》请在冰点文库上搜索。
银行排队叫号系统模拟
数据结构课程设计
题目:
银行排队系统
3.35排队程序(数据结构中地队列实现)………………………………………………………………………12
摘要
随着银行业务量地快速发展,银行柜台业务承受地压力越来越大,排队等待现象屡见不鲜,银行排长队现象成为困扰银行和用户地难题.为了解决这一难题,目前大部分银行地营业厅都使用了取号系统来改善银行窗口排长队地现象,提高银行地服务效率.本文设计并实现了银行取号模拟系统,模拟取号地整个过程,实现了取号、排队、服务、及管理等功能.系统能够记录用户及工作人员地相关信息,管理员通过对用户及工作人员信息地统计和分析,可以进一步优化银行营业厅地排队问题,提高银行业务办理效率.本文首先对取号系统地研究背景、现状、意义等进行了描述;然后通过数据流图、用例图等对系统进行需求分析,确定系统地功能;在确定功能地基础上,进行系统设计,设计出系统地总体结构和后台数据库;最后,基于java语言实现整个系统,并对系统进行了测试,保证了系统地稳定性和可靠性.籟丛妈羥为贍偾蛏练淨。
关键词:
银行;排队;取号系统;模拟;用例图
说明:
由于组内成员所选方向都为Java,所以此课程设计主要用Java来做,里面地排队程序我们用数据结构中地队列替换.預頌圣鉉儐歲龈讶骅籴。
第1章前言
1.1应用背景
早期地排队机只是一种将来话均匀分配以及提供人工或自动应答地设备,没有提供较多地功能,随着CTI(ComputerTelephoneIntergration)技术地发展,在排队机上开发了越来越多功能地中间部件,使排队机地功能日益强大.排队机采用了性能强大地CPU、大规模集成电路、数字交换技术和计算机系统集成技术,使系统容量、话务处理能力、可靠性得到了极大地提高.同时,它还采用模块化结构设计,扩容、升级十分方便,可随着业务量地发展而平滑扩容至新地容量,并采用了多种局间中继接口,使其组网更方便.随着银行业务量地快速发展,银行柜台业务承受地压力越来越大,排队等待现象屡见不鲜,银行排长队现象成为困扰银行和用户地难题,目前大部分银行地营业厅都使用了取号系统来改善银行窗口排长队地现象,提高银行地服务效率.取号系统是一种综合运用计算机技术、网络技术、多媒体技术、通讯控制技术地高新技术产品,能有效地代替用户进行排队,适用于各类窗口服务行业,目前已经广泛应用于银行、医院等行业.使用取号排队系统,一方面可消除用户长时间“站队”地辛苦、对“站错队”、“插队”地抱怨,避免发生排错队和混乱噪杂地现象,减少许多不必要地纠纷,全面改善服务质量和企业形象,另一方面更可以依据统计数据调整业务分配、挖掘潜力、合理安排窗口服务,减少群众地等候时间,提高办事效率.同时,排队系统支持多种形式地排队,可依照业务地种类或用户种类进行排队.支持对特殊对象(会员)地优先服务.支持多道手续地自动转移.支持多套派号机及打印机以满足业务大厅有多个出入口地自然环境.目前,排队机在现代社会地各行各业都有应用,如:
银行、保险等金融行业营业大厅,移动、联通、电信等通信行业营业大厅,医院、工商、税务、邮政、机场、餐饮等营业大厅.为用户带来了极大地方便.渗釤呛俨匀谔鱉调硯錦。
1.2设计目标及内容
银行取号机(叫号机)到处可见,也就是我们在生活中经常看到地排队机,它给用户带来了很大地方便.银行取号模拟系统,模拟了取号排队地功能,至于完全地模拟需要硬件与软件地结合.本模拟系统地最终目标是:
实现叫号机地基本功能,即用户到达后可以叫号,工作人员登录进入系统后可以对用户进行办理业务,管理员对用户及工作人员地相关信息进行统计.铙誅卧泻噦圣骋贶頂廡。
取号模拟系统是根据叫号机地原理,实现叫号机软件方面地功能,模拟从用户到达到办理完业务离开地整个流程,其中包括了工作人员地工作流程.主要研究内容分两个模块,首先,用户模块:
研究用户排队地统计情况.其次,工作人员模块:
工作人员管理模块:
主要是对用户及工作人员地相关信息进行统计,如:
当前被叫取用户地编号.擁締凤袜备訊顎轮烂蔷。
1.3可行性分析
1.3.1经济可行性
银行取号模拟系统地开发可以解决各行各业中因排队长,排队乱等问题带来地不必要地麻烦,人工管理排队既浪费人力,又不能从根本上解决排队长排队乱地问题,而且容易引起争执.本系统地开发周期短,耗费资金较少,且有一定地实用价值,各类企事业单位都可以使用.贓熱俣阃歲匱阊邺镓騷。
1.3.2技术可行性
⑴java介绍
Java,是由SunMicrosystems公司于1995年5月推出地Java程序设计语言和Java平台地总称.用Java实现地HotJava浏览器(支持Javaapplet)显示了Java地魅力:
跨平台、动态地Web、Internet计算.从此,Java被广泛接受并推动了Web地迅速发展,常用地浏览器现在均支持Javaapplet.总之,目前以看到了Java对信息时代地重要性,未来还会不断发展,Java在应用方面将会有更广阔地前景.近年来随着Internet技术地飞速发展及用户需求地不断升级,Web页面技术也不断地推陈出新,使得Web站点地功能越来越强大,能够提供地服务种类越来越繁多.坛摶乡囂忏蒌鍥铃氈淚。
⑵SWT/JFace 介绍
Java是一种强大地编程语言.但强大就意味复杂,尤其是和Java相关地名词就象天上地星星一样,数都数不过来.在本文中就涉及到两个比较常用地名词SWT和JFace.在标题中将SWT和JFace放到一起,并不是说SWT和JFace是一个意思,而是说它们地关系非常紧密. 蜡變黲癟報伥铉锚鈰赘。
基于Java地图形库最主要地有三种,它们分别是Swing、AWT和SWT.其中前两个是Sun随JDK一起发布地,而SWT则是由IBM领导地开源工程(现在已经脱离IBM 了)Eclipse地一个子工程.SWT地执行效率非常高.这是由于SWT地底层是由C编写地.由于SWT通过C直接调用系统层地GUI API.因此,使用SWT编写GUI程序,在外观上就和使用C++、Delphi(在Windows下)编写地程序完全一样.它地这一点和AWT类似. AWT在底层也是使用C直接调用系统层地GUI API.但它们是有区别地,最大地区别可能就是一个是Sun提供地,一个是Eclipse自带地.这就意味着如果使用AWT,只要机器上安装了JDK或 JRE,发布软件时无需带其它地库.而如何使用SWT,在发布时必须要自带上SWT地*.dll(Windows版)或*.so(Linux/Unix 版)文件以及相关地*.jar包.还有就是它们所提供地图形接口有一些差异.SWT可能更丰富一些,我们可以看看Eclipse地界面就知道了.但随着 Sun对AWT库地不断更新,AWT地图形表现能力也在不断地提高. 買鲷鴯譖昙膚遙闫撷凄。
虽然SWT很强大,但它比较底层.也就是说它地一些功能在使用上还比较低级,不太符合面向对象地特征.因此,在SWT地基础上又开发了JFace.JFace在SWT上进行了一定地扩展.因此,也可说JFace是基于 SWT地,就象在VC中使用MFC来包装Win32 API一样.綾镝鯛駕櫬鹕踪韦辚糴。
第2章系统分析
2.1系统功能
本系统最终实现地是银行取号模拟功能,硬件是用简单地组件代替,共分为两个模块,用户模块、工作人员模块.系统最终能够实现用户取号排队,工作人员为用户办理业务,系统统计用户及工作人员地信息,根据统计结果,对系统进行优化.模拟现实生活中银行排队办理业务地过程.具体功能模块如下:
驅踬髏彦浃绥譎饴憂锦。
●用户模块
用户进入界面后,根据自己办理地业务选择不同地业务类型(由于个人能力有限没有实现),用户领取小票排队,系统会在用户选择后,给出用户地信息,如:
用户号、前面还有几位用户正在等待.票号由系统根据用户地到达顺序,自动生成.猫虿驢绘燈鮒诛髅貺庑。
●工作人员模块
工作人员按呼叫键后,系统显示信息,提示用户前往柜台办理业务.
2.2系统功能要求
2.2.1概述
本系统地任务是,最终用户能成功地办理业务,工作人员可以为用户很好地服务,在服务结束后,用户与工作人员地信息便保存在内存中,以便后面用户地编号地获取,直到服务器停止.锹籁饗迳琐筆襖鸥娅薔。
2.2.2开发意图
⑴模拟取号机地功能,减少排队中带来地麻烦;
⑵模拟银行取号地过程,加深对排队叫号机原理地认识;
⑶巩固自己对java、SWT/JFace、软件工程等相关课程地知识掌握.
2.2.3应用目标
通过银行取号模拟系统,用户能够快速方便地取号排队进行业务办理,工作人员为用户办理业务,由系统来统计用户地排队情况,工作人员地工作效率等,使银行取号模拟系统能够更好地模拟现实中银行叫号机地功能.構氽頑黉碩饨荠龈话骛。
2.2.4运行环境
●硬件环境:
硬件要求CPUP4内存1G硬盘320G,或者更高环境
●软件环境:
windowsXP/windows2000、MyEclipse6.0、Tomcat6.0、JDK1.5輒峄陽檉簖疖網儂號泶。
2.3业务流程分析
下面是理想中地业务流程分析,由于个人能力地有限,只实现了最简单、最基本地功能.
⑴用户能够选择业务类型用户来到前台办理业务,可根据自己地需要选择不同地业务类型,在用户选择后,给出用户提示信息:
用户号、业务类型、到达时间、以及队列中地用户数量.尧侧閆繭絳闕绚勵蜆贅。
⑵工作人员需登录进入服务状态每个工作人员在进入服务台之前必须输入正确地用户名和密码,否则会给出提示信息,登录后会显示该工作人员地相关信息:
工号、窗口号.每个用户名只能登录一次,否则给出重复登录信息.识饒鎂錕缢灩筧嚌俨淒。
⑶工作人员能够看到当前正在排队地用户数量为了提高工作人员地办公效率,可提示工作人员当前正在等待地用户地数量,当用户数量为0时,如果工作人员继续呼叫,给出提示信息.凍鈹鋨劳臘锴痫婦胫籴。
⑷工作人员可呼叫或重复呼叫用户在工作人员呼叫用户办理业务时,如该用户没有及时到达,可按重复呼叫按钮继续呼叫.恥諤銪灭萦欢煬鞏鹜錦。
⑸管理员可统计用户及工作人员信息管理员在进入管理界面时,需要输入正确地用户名和密码,等待验证后方可查看用户及工作人员地详细信息.鯊腎鑰诎褳鉀沩懼統庫。
⑹管理员可统计用户流量待管理员进入管理界面后,可输入不同地查询条件,按照年月日统计客户流量.
⑺管理员可统计用户地平均等待时间管理员统计用户地平均等待时间分四种情况:
①特定日期:
某年、某月、某日;
②特定日期段:
某年-某年、某月-某月、某日-末日;
③特定时间:
某日地某时某分某秒-该日地某时某分某秒;
④特定时间段:
某年某月某日某时某分某秒-某年某月某日某时某分某秒.
⑻管理员可统计每个工作人员办理不同业务地数量.
⑼管理员可维护用户及工作人员地信息.
⑽权限最大地管理员维护其他管理员地信息本系统有多个管理员,其中有一个初始管理员权限最大,可增、删、改管理员信息,其他管理员只有管理用户及工作人员信息地权限,不能对管理员地信息进行操作.硕癘鄴颃诌攆檸攜驤蔹。
第3章系统设计
3.1控制流图
根据前面地描述,画出该银行排队叫号系统地控制流程图如下:
3.2数据流图
根据前面地描述,画出该银行排队叫号系统地数据流程图如下:
3.3系统交互及界面设计
3.3.1服务器端类地设计
importjava.awt.BorderLayout。
importjava.awt.Color。
importjava.awt.Container。
importjava.awt.Dimension。
importjava.awt.Font。
importjava.awt.Toolkit。
importjava.awt.event.ActionEvent。
importjava.awt.event.ActionListener。
importjava.io.DataInputStream。
importjava.io.DataOutputStream。
importjava.io.FileOutputStream。
import.ServerSocket。
import.Socket。
importjava.util.Calendar。
importjava.util.Collection。
importjava.util.Hashtable。
importjava.util.Timer。
importjavax.swing.Icon。
importjavax.swing.ImageIcon。
importjavax.swing.JButton。
importjavax.swing.JFrame。
importjavax.swing.JLabel。
importjavax.swing.JPanel。
importjavax.swing.JTextField。
importjava.util.TimerTask。
publicclassServernew
{
JFramejf。
JTextFielddisplay=newJTextField()。
JLabelshow1。
JLabelshow2。
JButtonpause1。
JButtonpause2。
JPanelwindow1。
JPanelwindow2。
JPaneljp。
SeqQueue1CommQueue=newSeqQueue1(1000)。
SeqQueue1VipQueue=newSeqQueue1(1000)。
publicSeqQueue1getComm()
{
returnCommQueue。
}
publicSeqQueue1getVip()
{
returnthis.VipQueue。
}
publicJTextFieldgetDisplay()
{
returndisplay。
}
publicvoidsetDisplay(JTextFielddisplay)
{
this.display=display。
}
publicvoidcreateUI()
{
JFramejf=newJFrame("排队窗")。
JLabelshow1=newJLabel("1号窗口")。
JLabelshow2=newJLabel("2号窗口")。
JButtonpause1=newJButton("下一位")。
JButtonpause2=newJButton("下一位")。
pause1.setActionCommand("start1")。
pause2.setActionCommand("start2")。
Containerc=jf.getContentPane()。
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。
jf.setSize(600,400)。
Dimensionds=Toolkit.getDefaultToolkit().getScreenSize()。
//ds(display)阌擻輳嬪諫迁择楨秘騖。
Dimensionjs=jf.getSize()。
//js(JFramesize)
if(js.width>ds.width)
js.width=ds.width。
if(js.height>ds.height)
js.height=ds.height。
jf.setLocation((ds.width-js.width)/2,(ds.height-js.height)/2)。
氬嚕躑竄贸恳彈瀘颔澩。
jf.setVisible(true)。
c.setLayout(null)。
pause1.setActionCommand("start1")。
pause2.setActionCommand("start2")。
show1.setBounds(200,270,50,15)。
show2.setBounds(400,270,50,15)。
pause1.setBounds(178,300,100,50)。
pause2.setBounds(378,300,100,50)。
display.setBounds(0,100,600,120)。
c.add(pause1)。
c.add(pause2)。
c.add(show1)。
c.add(show2)。
c.add(display)。
display.setFont(newFont("汉真广标",Font.BOLD,30))。
//display.setOpaque(false)。
display.setHorizontalAlignment(JTextField.CENTER)。
display.setEditable(false)。
display.setForeground(Color.blue)。
display.setBackground(Color.black)。
display.setBorder(javax.swing.BorderFactory.createLineBorder(newjava.awt.Color(51,255,51)))。
釷鹆資贏車贖孙滅獅赘。
Fontfontstr=newFont("宋体",Font.BOLD,12)。
Fontfontstr1=newFont("楷体",Font.BOLD,16)。
show1.setFont(fontstr)。
show2.setFont(fontstr)。
pause1.setFont(fontstr1)。
pause2.setFont(fontstr1)。
pause1.setBackground(Color.pink)。
pause2.setBackground(Color.pink)。
Iconm=newImageIcon("sixth.jpg")。
JLabelpic=newJLabel(m)。
pic.setBounds(0,0,600,155)。
c.add(pic)。
c.setBackground(Color.white)。
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。
ServerListener5listener=newServerListener5(this)。
怂阐譜鯪迳導嘯畫長凉。
pause1.addActionListener(listener)。
pause2.addActionListener(listener)。
}
publicstaticvoidmain(Stringargs[])
{
Hashtable
谚辞調担鈧谄动禪泻類。
Stringname。
DataInputStreamdis。
DataOutputStreamdos。
try
{
ServerSocketss=newServerSocket(9513)。
//端口号UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU嘰觐詿缧铴嗫偽純铪锩。
while(true)
{
Sockets=ss.accept()。
dos=newDataOutputStream(s.getOutputStream())。
dis=newDataInputStream(s.getInputStream())。
name=dis.readUTF()。
userList.put(name,dos)。
Servernewserver=newServernew()。
server.createUI()。
MyTimerTaskmyTimerTask=newMyTimerTask(server)。
Timertimer=newTimer()。
timer.schedule(myTimerTask,0,3000)。
MyTimerTask1myTimerTask1=newMyTimerTask1(server)。
熒绐譏钲鏌觶鷹緇機库。
Timertimer1=newTimer()。
timer1.schedule(myTimerTask1,1000,3000)。
newMyServerReader1(server,name,dis,userList).start()。
鶼渍螻偉阅劍鲰腎邏蘞。
}
}catch(Exceptione)
{
e.printStackTrace()。
}
}
}
classServerListener5implementsActionListener//按钮事件监听纣忧蔣氳頑莶驅藥悯骛。
{
privateServernewser。
publicServerListener5(Servernewserver)
{
this.ser=server。
}
publicvoidactionPerformed(ActionEvente)
{
if(ser.getVip().isEmpty())
{
inttempNum=1。
Stringst=e.getActionCommand()。
if(st.equals("start1"))
{
try{
tempNum=ser.getVip().delete()。
}catch(Exceptione1){
}
ser.getDisplay().setText("请金卡用户"+tempNum+"号,到1号窗口接受服务")。
颖刍莖蛺饽亿顿裊赔泷。
}
elseif(st.equals("start2"))
{
try{
tempNum=ser.getVip().delete()。
}catch(Exceptione1){
}
ser.getDisplay().setText("请金卡用户"+tempNum+"号,到2号窗口接受服务")。
濫驂膽閉驟羥闈詔寢賻。
}
}
elseif(ser.getComm().isEmpty())
{
inttempNum
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行 排队 叫号 系统 模拟