⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bank.cpp

📁 此为数据结构课程学习中离散事件模拟的源程序。为银行业务的模拟系统。其中包括队列
💻 CPP
字号:
#include"Bank.h"
Bank::Bank()
{
	flag=1;
	cout<<endl<<"****模拟过程条件的设置*****"<<endl;
	cout<<endl<<"请输入银行营业时间长度:"<<endl;
	cin>>CloseTime;
}
Bank::Open()
{
	TotalTime=0; CustomerNum=0;
	cout<<"请输入每个客户办理业务所需最长时间:"<<endl;
	cin>>m;
	cout<<"请输入两个相邻客户到达的最长时间间隔:"<<endl;
	cin>>n;
	cout<<endl<<"*********营业模拟过程**********"<<endl;
}
int Bank::MinQueue()
{
	int min,order;
	min=q[0].length();
	order=0;
	for(int i=1;i<4;i++)
		if(min>q[i].length())
		{
			min=q[i].length();
			order=i;
		}
		return order;
}
Bank::CustomerArrived(event *en)
{
	++CustomerNum;
	int DurTime=rand()%m+1;  //办理事务所需时间, 1~m;
	int InterTime=rand()%n+1;//下一个客户到达的时间间隔, 1~n;
	int t=en->OccurTime+InterTime;//下一个客户到达的时间;
	if(t>=CloseTime)
		flag=0;              //银行停止营业标志
	else
	{
		E.OrderInsert(t,0);
		int i=MinQueue();
		q[i].EnQueue(en->OccurTime,DurTime);
		if(q[i].length()==1)
			E.OrderInsert(en->OccurTime+DurTime,i+1);
	}
	for(int i=0;i<4;i++)
			{
				cout<<"NO."<<i+1<<": ";
				q[i].QueuePrint();
			}
}
Bank::CustomerDeparture(event *en)
{
	int i=en->NType-1;
	qnode *qn=q[i].DelQueue();	
	TotalTime+=en->OccurTime-qn->ArrivalTime;
	if(!q[i].IsEmpty())
	{
		E.OrderInsert(en->OccurTime+q[i].front->Duration,i+1);
	}
	for(i=0;i<4;i++)
	{
		cout<<"NO."<<i+1<<": ";
		q[i].QueuePrint();
	}
}
Bank::Service()
{
	while(!E.IsEmpty())
	{
		//E.EventPrint();
		event *en=E.DelEvent();		
		if(en->NType==0)
		{
			CustomerArrived(en);
			if(flag==0)
				break;
		}
		else 
			CustomerDeparture(en);
	    //E.EventPrint();
		cout<<endl;
	}
}
Bank::Close()
{
	cout<<endl<<"银行已停止营业!"<<endl;
	cout<<endl<<"********模拟结果********"<<endl;
    cout<<"客户逗留总时间:  "<<TotalTime<<endl;
	cout<<"客户总数:  "<<CustomerNum<<endl;
	cout<<"每个客户逗留的平均时间:  "<<(float)TotalTime/CustomerNum<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -