银行排队模拟系统实验报告

北京电子科技学院

《数据结构课程设计》实验报告

题目:银行排队模拟系统

班级:0921

姓名:韩晓雪

学号:1

完成日期:2024/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、Te_tBo_控件:4个Te_tBo_控件,用于输出文本信息

5、Timer控件:3个Timer控件,用于触发事件。

6、DataTimePicker1控件1个:获取当前日期,观看日历。

四、详细设计

本程序通过数组来实现对排队客户的存储,再通过te_tbo_以文本形式将排队情况显示出来。

(一)数据

(二)事件说明

1、Button6_Click

客户选择个人业务,将客户放在数组geren()中,数组元素加1,

并给客户相应的编号,编号加1,根据排号算法,将客户排在合适的窗口并显示。

若排队人数多于25人,显示提示信息,同时停止个人业务办理。

2、Button7_Click

客户选择理财业务,将客户放在数组licai()中,数组元素加1,

并给客户相应的编号,编号加1,根据排号算法,将客户排在2号窗口并显示。

若2号窗口排队人数多于25人,显示提示信息,同时停止理财业务

3、Button8_Click

客户选择外币业务将客户放在数组waibi()中,数组元素加1,并

给客户相应的编号,编号加1,根据排号算法,将客户排在3号窗口并显示。

若3号窗口排队人数多于25人,显示提示信息,同时停止外币业务

4、Button1_Click

工作人员接待当前客户完毕后,在显示排队情况的文本中清除该客户

编号,下一位前往办理业务。

1号窗口排队人数小于25人时,撤销提示信息,恢复个人业务的办理。

5、Button2_Click

工作人员接待当前客户完毕后,在显示排队情况的文本中清除该客户

编号,下一位前往办理业务。

2号窗口排队人数小于25人时,撤销提示信息,恢复理财业务的办理。所有理财业务办理结束后,触发timer6。

6、Button4_Click

工作人员接待当前客户完毕后,在显示排队情况的文本中清除该客户

编号,下一位前往办理业务。

3号窗口排队人数小于25人时,撤销提示信息,恢复外币业务的办理。所有理财业务办理结束后,触发timer5。

7、Button3_Click

退出程序。

8、Timer6_Tick

2号窗口为空,且1号窗口仍有人排队,将排在1号窗口的第一位客

户转到2号窗口办理业务。

1号窗口排队人数小于25人时,撤销提示信息,恢复个人业务的办理。3个窗口均为空,退出程序。

9、Timer5_Tick

3号窗口为空,1、2号窗口均不空,将排在1号窗口的第一位客户转

到3号窗口办理业务。

3号窗口为空是,2号窗口也为空,则无动作。

1号窗口排队人数小于25人时,撤销提示信息,恢复个人业务的办理。3个窗口均为空,退出程序。

10、Timer4_Tick

数字时钟,显示当前时间。

(三)交互关系

五、测试分析

提示:在各窗口下的第一个编号,即是在该窗口正在办理业务的客户的编号。

(一)测试数据和测试结果

测试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分钟),这使得程序不够人性化,后经过老师的提醒和指导,我添加了工作人员界面,由工作人员通过来控制客户的办理时间,这样也就实现了系统的“叫号”功能,也使得客户和工作人员通过系统有了信息的交换。

这次课程设计使我加强了自身的编程能力的同时,也让我认识到要将所学灵活的应用到实际生活中去,不可以凭空想象,要着眼实际,找到生活所需,理论里联系实际,才可以编写出真正有价值的程序。

感谢各位老师在这些天来对我的指导和帮助,让我及时看到错误并得以改正。在今后的学习中我会更加仔细认真,真正做到学以致用。

附:程序代码

PublicClassForm1

Dima,b,c,num1,num2,num3AsInteger

Dimgeren(1000),licai(1000),waibi(1000)AsString'分别为用来存储排在个人业务\理财业务\外币业务窗口的客户的数组

PrivateSubTimer4_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTimer4.Tick

Te_tBo_4.Te_t=TimeOfDay()'数字时钟

EndSub

PrivateSubButton6_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton6.Click

num1=num1+1

Label3.Te_t="您的的编号为:G-"num1'num1为办理个人业务客户的编号

'通过判断各窗口有无业务正在办理,安排办理个人业务客户的排队位置

IfMe.Te_tBo_1.Te_t.Trim=String.EmptyThen

Callg()'调用函数g()

ElseIfMe.Te_tBo_2.Te_t.Trim=String.EmptyThen

licai(b)=num1'将该客户编号存入licai数组,b为licai数组的数组元素标号

Te_tBo_2.Te_t=Te_tBo_2.Te_t"G-"licai(b)

Te_tBo_2.Te_t=Te_tBo_2.Te_tvbCrLf

b=b+1'排在号窗口,并将其号码显示在文本框输出

ElseIfMe.Te_tBo_3.Te_t.Trim=String.EmptyThen

waibi(c)=num1'将该客户编号存入waibi数组,c为weibi数组的数组元素标号()

Te_tBo_3.Te_t=Te_tBo_3.Te_t"G-"waibi(c)

Te_tBo_3.Te_t=Te_tBo_3.Te_tvbCrLf

c=c+1'排在号窗口,并将其号码显示在文本框输出

Else

Callg()

EndIf

'提醒客户要排队的窗口前排队等候的人数多于

IfTe_tBo_1.Te_tLength>125Then

Label7.Visible=True

Label7.Te_t="排队等候多于人!"

Button6.Enabled=False

Else

Label9.Visible=False

EndIf

EndSub

PrivateSubButton7_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton7.Click

num2=num2+1'num2为办理理财业务客户的编号

Label3.Te_t="您的的编号为:L-"num2

licai(b)=num2'将该客户编号存入licai数组

Te_tBo_2.Te_t=Te_tBo_2.Te_t"L-"licai(b)

Te_tBo_2.Te_t=Te_tBo_2.Te_tvbCrLf

b=b+1'排在号窗口,并将其号码显示在文本框输出

IfTe_tBo_2.Te_tLength>125Then

Label8.Visible=True

Label8.Te_t="排队等候多于人!"

Button7.Enabled=False

EndIf

EndSub

PrivateSubButton8_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton8.Click

num3=num3+1'num2为办理理财业务客户的编号

Label3.Te_t="您的的编号为:W-"num3

waibi(c)=num3'将该客户编号存入waibi数组

Te_tBo_3.Te_t=Te_tBo_3.Te_t"W-"waibi(c)

Te_tBo_3.Te_t=Te_tBo_3.Te_tvbCrLf

c=c+1'排在号窗口,并将其号码显示在文本框输出

'提醒客户要排队的窗口前排队等候的人数多于

IfTe_tBo_3.Te_tLength>125Then

Label9.Visible=True

Label9.Te_t="排队等候的人数多于!"

Button8.Enabled=False

Else

Label9.Visible=False

EndIf

EndSub

PrivateSubg()

geren(a)=num1'将该客户编号存入geren数组,a为geren数组的数组元素标号

Te_tBo_1.Te_t=Te_tBo_1.Te_t"G-"geren(a)

Te_tBo_1.Te_t=Te_tBo_1.Te_tvbCrLf

a=a+1'排在号窗口,并将其号码显示在文本框输出EndSub

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click

'将号窗口办完业务的客户的编号从文本框中撤除

Dima1,a2AsString

a1=Te_tBo_1.GetFirstCharInde_FromLine(0)'第一行第一个字符的索引

a2=Te_tBo_1.GetFirstCharInde_FromLine(1)'第二行第一个字符的索引

Te_tBo_1.Select(a1,a2)'选中第一行

Te_tBo_1.SelectedTe_t=""'设置第一行的内容为空

IfTe_tBo_1.Te_tLength<=125Then'排队人数小于等于人时,撤除提醒

Label7.Visible=False

Button6.Enabled=True

EndIf

IfTe_tBo_1.Te_tLength=0Then

IfTe_tBo_2.Te_tLength=0Then

IfTe_tBo_3.Te_tLength=0Then

EndIf

EndIf

EndIf

EndSub

PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles

Button2.Click

'将号窗口办完业务的客户的编号从文本框中撤除

Dimb1,b2AsString

b1=Te_tBo_2.GetFirstCharInde_FromLine(0)

b2=Te_tBo_2.GetFirstCharInde_FromLine(1)

Te_tBo_2.Select(b1,b2)

Te_tBo_2.SelectedTe_t=""

'当号窗口前为空时,触发timer6

IfTe_tBo_2.Te_tLength=0Then

Timer6.Enabled=True

Else

Timer6.Enabled=False

EndIf

IfTe_tBo_2.Te_tLength<=125Then

Label8.Visible=False

EndIf

IfTe_tBo_2.Te_tLength<=125Then

Label8.Visible=False

Button7.Enabled=True

EndIf

IfTe_tBo_1.Te_tLength=0Then

IfTe_tBo_2.Te_tLength=0Then

IfTe_tBo_3.Te_tLength=0Then

EndIf

EndIf

EndIf

EndSub

PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton4.Click

'将号窗口办完业务的客户的编号从文本框中撤除

Dimc1,c2AsString

c1=Te_tBo_3.GetFirstCharInde_FromLine(0)

c2=Te_tBo_3.GetFirstCharInde_FromLine(1)

Te_tBo_3.Select(c1,c2)

Te_tBo_3.SelectedTe_t=""

'当号窗口前为空时,触发timer5

IfTe_tBo_3.Te_tLength=0Then

Timer5.Enabled=True

Else

Timer5.Enabled=False

EndIf

IfTe_tBo_3.Te_tLength<=125Then

Label9.Visible=False'排队人数小于等于人时,撤除提醒

Button8.Enabled=True

EndIf

IfTe_tBo_1.Te_tLength=0Then

IfTe_tBo_2.Te_tLength=0Then

IfTe_tBo_3.Te_tLength=0Then

EndIf

EndIf

EndIf

EndSub

PrivateSubTimer5_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTimer5.Tick

Dimd1,d2,f1,f2AsString

'当号窗口为空,1号窗口仍有人排队,且号窗口不为空时,将号窗口排队的第一个客户转到号窗口IfTe_tBo_1.Te_tLength>5Then

IfTe_tBo_2.Te_tLength>0Then

d1=Te_tBo_1.GetFirstCharInde_FromLine(1)

d2=Te_tBo_1.GetFirstCharInde_FromLine(1)

Te_tBo_1.Select(d1,d2)

Te_tBo_1.Cut()

f1=Te_tBo_3.GetFirstCharInde_FromLine(0)

f2=Te_tBo_3.GetFirstCharInde_FromLine(1)

Te_tBo_3.Select(f1,f2)

Te_tBo_3.Paste()

Timer5.Enabled=False

EndIf

'当号窗口仍有人排队,且号窗口为空时,无动作

ElseIfTe_tBo_1.Te_tLength>5Then

IfTe_tBo_2.Te_tLength=0Then

EndIf

ElseIfTe_tBo_1.Te_tLength=0Then

IfTe_tBo_2.Te_tLength=0Then

IfTe_tBo_3.Te_tLength=0Then

EndIf

EndIf

Else

EndIf

IfTe_tBo_1.Te_tLength<=125Then

Label7.Visible=False'排队人数小于等于人时,撤除提醒

Button6.Enabled=True

EndIf

EndSub

PrivateSubTimer6_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTimer6.Tick

'2号窗口为空,1号窗口仍有人排队时,将号窗口排队的第一个客户转到号窗口

Dime1,e2,g1,g2AsString

IfTe_tBo_1.Te_tLength>5Then

g1=Te_tBo_1.GetFirstCharInde_FromLine(1)

g2=Te_tBo_1.GetFirstCharInde_FromLine(1)

Te_tBo_1.Select(g1,g2)

Te_tBo_1.Cut()

e1=Te_tBo_2.GetFirstCharInde_FromLine(0)

e2=Te_tBo_2.GetFirstCharInde_FromLine(1)

Te_tBo_2.Select(e1,e2)

Te_tBo_2.Paste()

Timer6.Enabled=False

EndIf

IfTe_tBo_1.Te_tLength=0Then

IfTe_tBo_2.Te_tLength=0Then

IfTe_tBo_3.Te_tLength=0Then

EndIf

EndIf

EndIf

IfTe_tBo_1.Te_tLength<=125Then

Label7.Visible=False'排队人数小于等于人时,撤除提醒

Button6.Enabled=True

EndIf

EndSub

PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.Click

End'退出程序

EndSub

EndClass

预览已结束,下载原文档直接使用
查看全文
若对以上有内容有疑问请反馈或举报举报
声明:
您购买的是此内容的word文档,付费前可通过免费阅读辨别合同。非质量问题不退款,如需帮助可咨询客服【客服微信】