银行排队模拟系统实验报告_第1页
银行排队模拟系统实验报告_第2页
银行排队模拟系统实验报告_第3页
银行排队模拟系统实验报告_第4页
银行排队模拟系统实验报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京电子科技学院数据结构课程设计实验报告题 目: 银行排队模拟系统 班 级: 0921 姓 名: 韩晓雪 学 号: 完成日期: 2011/9/9 一、 问题描述 银行业务越来越丰富,有一般的客户存款或取款、理财金(股票、基金等业务)、外币服务等。每天来银行的客户越来越多,为免除客户排队等待,日前银行均设计有排队管理系统。试编程模拟管理银行的排队业务。题目要求:(1)设置有排队机器,可以实现“理财金”“外币”“个人服务”等3种业务的排队。(2)银行窗口接待服务。接待窗口分3种“理财”“外币”和“个人业务”,理财和外币业务由专用窗口接待,且这些专用窗口接待完本类业务之后,将继续进行“个人业务”服务。直到全部客户服务均完成。二、 需求分析根据客户办理业务的需求,银行设有“个人业务”、“理财业务”和“外币业务”3种业务的办理,且“理财业务”的优先级高于“外币业务”。本程序将根据客户选择要办理的业务类型,等候办理业务的客户进行队伍编排。工作人员控制每位客户的业务办理时间。程序开始:第一位客户选择要办理的业务类型后。程序结束:3个窗口均无人办理业务。三、 概要设计(一) 程序功能:本程序可以实现对办理不同业务的客户进行合理编排,尽量减少客户等待时间,同时客户可以从界面获得自己的排队情况,并可以了解到当前日期和时间。1、 选择业务:客户从应用程序界面上选择要办理的业务类型。2、 产生编号:程序通过客户选择业务来为其排号,业务不同,客户获得的编号类型不同。3、 显示排队情况:将客户的编号、所排窗口、所在队伍位置显示在应用程序界面上,模拟排队情况。4、 刷新队伍:每位客户业务办理结束后,工作人员提醒下一位客户,当2号窗口、3号窗口业务办理结束且1号窗口仍有人在办理业务,则将在1号窗口前排队的客户分配到2号窗口、3号窗口去。分配方法是:当2、3窗口同时为空时,先分配给2号窗口,若此时仍有客户在1号窗口排队,则再分配给3号窗口。5、 排号算法:若客户选择“理财”或“外币”业务,则分别将其直接排到2号窗口、3号窗口的队伍中,若客户选择“个人业务”,则要进行如下判断:(1) 若1号窗口无人办理业务,则安排其到1号窗口办理业务;(2) 若1号窗口有人在办理业务,则一次判断2号窗口、3号窗口是否有人办理业务,若没有则安排其在无人窗口办理业务;(3) 若3个窗口均有人在办理业务,则将其排到1号窗口的队伍中。(二) 对象说明1、窗体:1个窗体,用于设计应用程序界面。2、Label控件:14个Label控件,用于做文字说明或信息提示。3、Button控件:7个Button控件,用于接受客户的命令,然后执行该命令所对应的事件过程中的程序代码。4、 TextBox控件:4个TextBox控件,用于输出文本信息5、 Timer控件:3个Timer控件,用于触发事件。6、 DataTimePicker1控件1个:获取当前日期,观看日历。对象名属性名设置属性名Form1Text银行排队模拟系统Label1、11Text1号窗口Label2、14Text2号窗口Label3Text您的编号是:Label4Text请您选择业务Label5、13Text3号窗口Label6Text欢迎光临Label7Text排队等候人数多于50!Label8Text排队等候人数多于50!Label9Text排队等候人数多于50!Label10Text今天是:Label12Text工作人员界面TextBox1Text1号窗口排队情况TextBox2Text2号窗口排队情况TextBox3Text3号窗口排队情况TextBox4Text电子时钟Timer4Interval1000Timer5Interval2000Timer6Interval1000Button1、2、4Text下一位Button3Text退出系统Button5Text个人业务Button6Text理财业务Button7Text外币业务DataTimePicker1CustomForm yyyy-MM-dd四、 详细设计本程序通过数组来实现对排队客户的存储,再通过textbox以文本形式将排队情况显示出来。(一) 数据数据名数据类型作用aIntegergeren()的数组元素标号BIntegerlicai()的数组元素标号cIntegerwaibi()的数组元素标号num1Integer办理个人业务客户的编号num2Integer办理理财业务客户的编号num3Integer办理外币业务客户的编号geren()String存储办理个人业务客户的数组licai()String存储办理理财业务客户的数组waibi()String存储办理外币业务客户的数组(二) 事件说明1、Button6_Clickl 客户选择个人业务,将客户放在数组geren()中,数组元素加1,并给客户相应的编号,编号加1,根据排号算法,将客户排在合适的窗口并显示。l 若排队人数多于25人,显示提示信息,同时停止个人业务办理。2、Button7_Clickl 客户选择理财业务,将客户放在数组licai()中,数组元素加1,并给客户相应的编号,编号加1,根据排号算法,将客户排在2号窗口并显示。l 若2号窗口排队人数多于25人,显示提示信息,同时停止理财业务办理。3、Button8_Clickl 客户选择外币业务将客户放在数组waibi()中,数组元素加1,并给客户相应的编号,编号加1,根据排号算法,将客户排在3号窗口并显示。l 若3号窗口排队人数多于25人,显示提示信息,同时停止外币业务办理。4、Button1_Clickl 工作人员接待当前客户完毕后,在显示排队情况的文本中清除该客户编号,下一位前往办理业务。l 1号窗口排队人数小于25人时,撤销提示信息,恢复个人业务的办理。5、Button2_Clickl 工作人员接待当前客户完毕后,在显示排队情况的文本中清除该客户编号,下一位前往办理业务。l 2号窗口排队人数小于25人时,撤销提示信息,恢复理财业务的办理。l 所有理财业务办理结束后,触发timer6。6、Button4_Clickl 工作人员接待当前客户完毕后,在显示排队情况的文本中清除该客户编号,下一位前往办理业务。l 3号窗口排队人数小于25人时,撤销提示信息,恢复外币业务的办理。l 所有理财业务办理结束后,触发timer5。7、Button3_Clickl 退出程序。8、Timer6_Tickl 2号窗口为空,且1号窗口仍有人排队,将排在1号窗口的第一位客户转到2号窗口办理业务。l 1号窗口排队人数小于25人时,撤销提示信息,恢复个人业务的办理。l 3个窗口均为空,退出程序。9、Timer5_Tickl 3号窗口为空,1、2号窗口均不空,将排在1号窗口的第一位客户转到3号窗口办理业务。l 3号窗口为空是,2号窗口也为空,则无动作。l 1号窗口排队人数小于25人时,撤销提示信息,恢复个人业务的办理。l 3个窗口均为空,退出程序。10、Timer4_Tickl 数字时钟,显示当前时间。(三)交互关系客户选择业务类型客户获得编号并排队显示排队情况工作人员办理业务银行排队模拟系统结束当前客户的业务办理刷新叫号五、 测试分析提示:在各窗口下的第一个编号,即是在该窗口正在办理业务的客户的编号。(一)测试数据和测试结果测试1:客户(G)办理个人业务时,3个窗口都为空。测试2:客户(G)办理个人业务时,只有2号窗口有人在办理业务。测试3:客户(G)办理个人业务时,只有3号窗口有人在办理业务。测试4:客户(G)办理个人业务时,2号、3号窗口都有人在办理业务。测试5:客户(L)办理理财业务。测试6:客户(W)办理外币业务。测试:7:客户(G-2)来办理个人业务时,3个窗口均有人在办理业务。测试8:3个窗口都在办理业务过程中,3号窗口结束接待后,1号、2号窗口都有客户在排队。测试9:3个窗口都在办理业务过程中,2号窗口结束接待后, 1号、3号窗口仍有客户在排队。测试10:3个窗口都在办理业务过程中,3号和2号窗口同时结束接待后, 1号窗口仍有客户在排队。测试11:某窗口排对人数超过25人。(二)遇到的问题和解决方法:问题1:当2号、3号窗口同为空时,排在1号窗口的第一为客户的编号会出现在2号、3号两个窗口中。方法:经分析,这是由于没有考虑两个窗口的优先级所致,于是我设置办理理财业务的2号窗口的优先级高于办理外币业务的3号窗口。当两窗口同为空时,先给2号窗口分配客户,之后,若1号窗口仍有人排队,再分配给3号窗口。问题2:各窗口无限排队问题。方法:通过判断显示排队情况的文本的字符长度,来确定各窗口正在排队人数,多于25人时,系统显示提示信息,同时暂停接收对应业务的办理。六、 实验总结通过为期10天的数据结构课程设计,在老师们的指导帮助下,我完成了银行排队模拟系统的程序设计,在这次课程设计中,我收获良多。课程设计不同于平时的编程实验,它的要求更多更全面,需要程序编写者在前期做出准确的需求分析,还有后期全面的程序测试,这些都是在过去的学习中很少接触到的。通过老师的讲解和自身在编程中的实践,我深刻体会到需求分析可以使得程序更贴近生活,更具实用性,而全面到位的程序设计则可以保证程序的实用性和健壮性。起初我对所选题目的理解不够到位,只设计了系统中的客户界面,也因此不能确定每个客户办理业务所需具体时间,只能通过时间控件,以固定的时间频率刷新队伍,也就是所有将客户办理业务的时间限制在同样的时间里(5分钟),这使得程序不够人性化,后经过老师的提醒和指导,我添加了工作人员界面,由工作人员通过来控制客户的办理时间,这样也就实现了系统的“叫号”功能,也使得客户和工作人员通过系统有了信息的交换。这次课程设计使我加强了自身的编程能力的同时,也让我认识到要将所学灵活的应用到实际生活中去,不可以凭空想象,要着眼实际,找到生活所需,理论里联系实际,才可以编写出真正有价值的程序。感谢各位老师在这些天来对我的指导和帮助,让我及时看到错误并得以改正。在今后的学习中我会更加仔细认真,真正做到学以致用。附:程序代码Public Class Form1 Dim a, b, c, num1, num2, num3 As Integer Dim geren(1000), licai(1000), waibi(1000) As String 分别为用来存储排在个人业务理财业务外币业务窗口的客户的数组 Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick TextBox4.Text = TimeOfDay() 数字时钟 End Sub Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click num1 = num1 + 1 Label3.Text = 您的的编号为:G- & num1 num1为办理个人业务客户的编号 通过判断各窗口有无业务正在办理,安排办理个人业务客户的排队位置 If Me.TextBox1.Text.Trim = String.Empty Then Call g() 调用函数g() ElseIf Me.TextBox2.Text.Trim = String.Empty Then licai(b) = num1 将该客户编号存入licai数组,b为licai数组的数组元素标号 TextBox2.Text = TextBox2.Text & G- & licai(b) TextBox2.Text = TextBox2.Text & vbCrLf b = b + 1 排在号窗口,并将其号码显示在文本框输出 ElseIf Me.TextBox3.Text.Trim = String.Empty Then waibi(c) = num1 将该客户编号存入waibi数组,c为weibi数组的数组元素标号() TextBox3.Text = TextBox3.Text & G- & waibi(c) TextBox3.Text = TextBox3.Text & vbCrLf c = c + 1 排在号窗口,并将其号码显示在文本框输出 Else Call g() End If 提醒客户要排队的窗口前排队等候的人数多于 If TextBox1.TextLength 125 Then Label7.Visible = True Label7.Text = 排队等候多于人! Button6.Enabled = False Else Label9.Visible = False End If End Sub Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click num2 = num2 + 1 num2为办理理财业务客户的编号 Label3.Text = 您的的编号为:L- & num2 licai(b) = num2 将该客户编号存入licai数组 TextBox2.Text = TextBox2.Text & L- & licai(b) TextBox2.Text = TextBox2.Text & vbCrLf b = b + 1 排在号窗口,并将其号码显示在文本框输出 If TextBox2.TextLength 125 Then Label8.Visible = True Label8.Text = 排队等候多于人! Button7.Enabled = False End If End Sub Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click num3 = num3 + 1 num2为办理理财业务客户的编号 Label3.Text = 您的的编号为:W- & num3 waibi(c) = num3 将该客户编号存入waibi数组 TextBox3.Text = TextBox3.Text & W- & waibi(c) TextBox3.Text = TextBox3.Text & vbCrLf c = c + 1 排在号窗口,并将其号码显示在文本框输出 提醒客户要排队的窗口前排队等候的人数多于 If TextBox3.TextLength 125 Then Label9.Visible = True Label9.Text = 排队等候的人数多于! Button8.Enabled = False Else Label9.Visible = False End If End Sub Private Sub g() geren(a) = num1 将该客户编号存入geren数组,a为geren数组的数组元素标号 TextBox1.Text = TextBox1.Text & G- & geren(a) TextBox1.Text = TextBox1.Text & vbCrLf a = a + 1 排在号窗口,并将其号码显示在文本框输出 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 将号窗口办完业务的客户的编号从文本框中撤除 Dim a1, a2 As String a1 = TextBox1.GetFirstCharIndexFromLine(0) 第一行第一个字符的索引 a2 = TextBox1.GetFirstCharIndexFromLine(1) 第二行第一个字符的索引 TextBox1.Select(a1, a2) 选中第一行 TextBox1.SelectedText = 设置第一行的内容为空 If TextBox1.TextLength = 125 Then 排队人数小于等于人时,撤除提醒 Label7.Visible = False Button6.Enabled = True End If If TextBox1.TextLength = 0 Then If TextBox2.TextLength = 0 Then If TextBox3.TextLength = 0 Then End End If End If End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 将号窗口办完业务的客户的编号从文本框中撤除 Dim b1, b2 As String b1 = TextBox2.GetFirstCharIndexFromLine(0) b2 = TextBox2.GetFirstCharIndexFromLine(1) TextBox2.Select(b1, b2) TextBox2.SelectedText = 当号窗口前为空时,触发timer6 If TextBox2.TextLength = 0 Then Timer6.Enabled = True Else Timer6.Enabled = False End If If TextBox2.TextLength = 125 Then Label8.Visible = False End If If TextBox2.TextLength = 125 Then Label8.Visible = False Button7.Enabled = True End If If TextBox1.TextLength = 0 Then If TextBox2.TextLength = 0 Then If TextBox3.TextLength = 0 Then End End If End If End If End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click 将号窗口办完业务的客户的编号从文本框中撤除 Dim c1, c2 As String c1 = TextBox3.GetFirstCharIndexFromLine(0) c2 = TextBox3.GetFirstCharIndexFromLine(1) TextBox3.Select(c1, c2) TextBox3.SelectedText = 当号窗口前为空时,触发timer5 If TextBox3.TextLength = 0 Then Timer5.Enabled = True Else Timer5.Enabled = False End If If TextBox3.TextLength 5 Then If TextBox2.TextLength 0 Then d1 = TextBox1.GetFirstCharIndexFromLine(1) d2 = TextBox1.GetFirstCharIndexFromLine(1) TextBox1.Select(d1, d2) TextBox1.Cut() f1 = TextBox3.GetFirstCharIndexFromLine(0) f2 = TextBox3.GetFirstCharIndexFromLine(1) TextBox3.Select(f1, f2) TextBox3.Paste()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论