银行排队叫号系统模拟Word格式.docx
《银行排队叫号系统模拟Word格式.docx》由会员分享,可在线阅读,更多相关《银行排队叫号系统模拟Word格式.docx(42页珍藏版)》请在冰点文库上搜索。
主要是对用户及工作人员地相关信息进行统计,如:
当前被叫取用户地编号.擁締凤袜备訊顎轮烂蔷。
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)。
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)。
ServerListener5listener=newServerListener5(this)。
怂阐譜鯪迳導嘯畫長凉。
pause1.addActionListener(listener)。
pause2.addActionListener(listener)。
publicstaticvoidmain(Stringargs[])
Hashtable<
String,DataOutputStream>
userList=newHashtable<
()。
谚辞調担鈧谄动禪泻類。
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("
))
try{
tempNum=ser.getVip().delete()。
}catch(Exceptione1){
}
ser.getDisplay().setText("
请金卡用户"
+tempNum+"
号,到1号窗口接受服务"
颖刍莖蛺饽亿顿裊赔泷。
elseif(st.equals("
ser.getDisplay().setText("
号,到2号窗口接受服务"
濫驂膽閉驟羥闈詔寢賻。
elseif(ser.getComm().isEmpty())
inttempNum