数据结构与算法课程设计实验报告
t[i].business = sign;//产生随机客户业务 }
}
处理客户业务函数 功能:调用打号函数对队列中的元素分配到不同的窗口办理业务。 int BankBusinses::Personnel_Distribution_Func(int n,int flag) {
int c[4] //作用是对应储存四个窗口业务办理结束的时间,在循环过程中后一个业务办理结束时间将修改当前结束时间
Ticket_Produce_Function(t,n); //调用时间生成函数 c[0]=a[0]+b[0]; //第一个窗口结束时间初值为队列中第一个客户办理业务的结束时间
waittime=b[0]; //第一个客户的逗留时间 int *d; d=new int[4]; //动态申请长度为四的一维数组,用于存放被修改结束时间的窗口的序号, 判断四个窗口中的结束时间是否大于下一个客户办理业务的开始时间, 如果小于则数组的d[j]中保存该窗口的序号,否则该地址存为-1, 判断窗口序号保存数组d[j]中是否有被保存的窗口序号, 若有则结束,且记住该窗口序号;
如果有窗口序号被修改,则继续修改当前结束时间为下一个客户的业务办理结束时间, 窗口各种业务累计, 如果当前窗口序号全未被修改,即当前所有窗口均处于忙碌状态,下一个客户需等待, 找出当前所有正在办理业务的窗口中,结束时间最早的窗口;
c[k]=c[k]+b[i+1]; //修改该窗口的结束时间,即下一个在等待的客户到该窗口办理业务, 窗口各种业务累计
}
窗口业务统计函数 功能:统计各个窗口办理业务的情况,人数以及各种业务种类。 int BankBusinses::Business_statistic_Func(Windows win[],int m) { int i,n=0,allnum=0; for(i=0;i<4;i++) {
allnum=win[i].withdrawals+win[i].deposit+win[i].reportloss+win[i].borrowed;
cout <<窗口 cout <
cout<
}
窗口业务显示函数
11
数据结构与算法课程设计实验报告
功能:显示各个窗口当天的业务办理情况。 void BankBusinses::Display_Business_Func(Windows win[],int m,int n,int coordinate)
{ int j,flag=1; cout<<窗口办理: cout<
等待时间函数 功能:计算当天所有客户在银行的平均逗留时间,和当日总共办理的客户数,和未办理完业务的客户数。
void BankBusinses::Make_waittime_Func(int n) { flag=Personnel_Distribution_Func(n,flag); if((n-flag-1)!=0){ cout<<未办理完业务的编号: aver=(waittime/(flag+1))/60.0; for(i=flag+2;i
5、编码与调试分析
编码与调试过程中遇到的问题及解决办法:
【问题一】:随机产生的时间无序,等待队列需按照有序等待。
解决办法: 定义时间结构体类型的数组存储时间,然后对时间进行排序并进入队列。
解决此问题的核心代码:
for(i = 0;i < n;i++) for(j = i+1;j < n;j++){ if(t[i].arrivaltime.hour>t[j].arrivaltime.hour) { temp=t[i].arrivaltime.hour; t[i].arrivaltime.hour=t[j].arrivaltime.hour; t[j].arrivaltime.hour=temp; temp=t[i].arrivaltime.minute; t[i].arrivaltime.minute=t[j].arrivaltime.minute; t[j].arrivaltime.minute=temp; temp=t[i].arrivaltime.second; t[i].arrivaltime.second=t[j].arrivaltime.second; t[j].arrivaltime.second=temp;}}
12
数据结构与算法课程设计实验报告
for(i = 0;i < n;i++) for(j = i+1;j < n;j++){ if(t[i].arrivaltime.hour==t[j].arrivaltime.hour && t[i].arrivaltime.minute>t[j].arrivaltime.minute){
temp=t[i].arrivaltime.minute; t[i].arrivaltime.minute=t[j].arrivaltime.minute; t[j].arrivaltime.minute=temp; temp=t[i].arrivaltime.second; t[i].arrivaltime.second=t[j].arrivaltime.second; t[j].arrivaltime.second=temp;} else continue;} for(i = 0;i < n;i++) for(j = i+1;j < n;j++){ if(t[i].arrivaltime.hour==t[j].arrivaltime.hour && t[i].arrivaltime.minute==t[j].arrivaltime.minute && t[i].arrivaltime.second>t[j].arrivaltime.second){
temp=t[i].arrivaltime.second; t[i].arrivaltime.second=t[j].arrivaltime.second;
t[j].arrivaltime.second=temp;}else continue;}
【问题二】:无法将队列元素按照出对顺序进行分配到各个窗口。
解决办法: 定义一个整型数组c[4] 作用是对应储存四个窗口业务办理结束的时间,在循环过程中后一个业务办理结束时间将修改当前结束时间。队列元素出对后,根据到达时间和办理业务的时间可判断出客户离开银行的时间。首先对数组c[4]进行初始化,找出数组中的最小元素,用对头元素修改数组c[4]中的最小值。
另动态申请数组d[4]={-1,-1,-1,-1},用来保存数组c[4]中被修改的值的地址;如果每一个客户的离开银行时间都小于下一个客户的到达时间,则下一个客户就进入当前窗口办理业务;如果离开时间大于下一个客户的到达时间,则在c[4]中找出最小值,且用下一个客户的离开时间修改当前值,同时用d[4]保存该地址。如果四个窗口均有人办理业务,则客户应在等待队列中等待。其实现方法任然是找出窗口中办理业务的客户结束时间的最小值,同时判断该窗口的闲忙情况,然后用下一个客户的结束时间修改当前最小值,并保存地址。
【问题三】:计算客户在银行的平均逗留时间问题。
解决方法: 客户在银行的平均逗留时间的计算分为两种情况。第一种情况,当天随机产生的客户都办理完了自己的业务,在这种情况下只需统计每个客户在银行的逗留时间之和再求平均值,即为平均逗留时间,计算方法为 (每个客户开始办理业务的时间—到达银行的时间+办理业务所用时间)。第二种情况,当天随机产生的客户太多在下班时还有客户没有办理业务,且在银行停止营业时离开银行;这种情况下的平均时间计算分为两部分,它包括第一种情况下已经办理完业务的客户所用时间和还没有办理业务的客户的等待时间之和,计算方法为 (已经办理完业务的每个客户开始办理业务时间—到达银行的时间+办理业务的时间)+( 未办理业务的每个客户的离开时间—到达银行时间 )。
13
数据结构与算法课程设计实验报告
6、使用说明
进入菜单,根据提示进行选择
(a).如果要自动生成业务信息,输入‘1’; (b).如果要显示客户逗留时间,输入‘2’; (c).如果要显示各窗口业务统计信息,输入‘3’; (d).如果要显示窗口一的业务办理情况,输入‘4’; (e).如果要显示窗口二的业务办理情况,输入‘5’; (f).如果要显示窗口三的业务办理情况,输入‘6’; (g).如果要显示窗口四的业务办理情况,输入‘7’; (h).如果要手动输入选择要办理的业务,输入‘8’; (j).如果要退出程序运行,输入‘0’。 7、测试结果
菜单
14
数据结构与算法课程设计实验报告
逗留时间
窗口业务统计
15
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库银行业务系统等待队列(3)在线全文阅读。
相关推荐: