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

📄 bank.h

📁 C、C++语言实现的数据结构重要算法和程序 比较全。
💻 H
字号:
//Produce by George Lee         Feb. 28th, 2002

#if !defined(_INC_BANK_OO)
#define _INC_BANK_OO 

#include "d:\vc_h_file\Dllist.h"
#include "d:\vc_h_file\Lqueue.h"

//--------------------------//
//                          //
//        银行事件类        //
//                          //
//--------------------------//
class Event
{
	public:
		int occurtime;//事件发生时间
	    int ntype;//类型: -1 — 到达;0,1,2,3 — 服务窗口

		int operator==(Event a) {return(occurtime==a.occurtime);}
		int operator<=(Event a) {return(occurtime<=a.occurtime);}
		int operator<(Event a) {return(occurtime<a.occurtime);}
		int operator>=(Event a) {return(occurtime>=a.occurtime);}
		int operator>(Event a) {return(occurtime>a.occurtime);}
};

typedef struct
{
	int arrivaltime;//到达时刻
	int servicetime;//服务时间
}Service;

//--------------------------//
//                          //
//    银行事件驱动模拟类    //
//                          //
//--------------------------//
class Bank
{
    public:
		DLList<Event> L;
	    LQueue<Service> Q[4];
	    int totaltime,cusnum,closetime;

		Bank(int close=20);
		~Bank();
		int Empty();  
		Event Customer();  //提取事件列表的首结点
		void CustomerArrived(Event en,int servicetime,int intertime);
        void CustomerDeparture(Event en);
};

Bank::Bank(int close)
{
	Event en;
	en.occurtime=0;
	en.ntype=-1;
	L.Insert(en);
	totaltime=0;
	cusnum=0;
	closetime=close;

}

Bank::~Bank()
{
	
}

int Bank::Empty()
{
	if(L.Empty())
		return(1);
	return(0);
}

Event Bank::Customer()
{
	Event en;
	en=L.GetData(0);
	L.Delete(0);
	return(en);
}

void Bank::CustomerArrived(Event en,int servicetime,int intertime)
{
	int i,min;
	Service cn;
	Event en1;
	if(en.occurtime+intertime<=closetime)
	{
		en1.occurtime=en.occurtime+intertime;
		en1.ntype=-1;
		L.Insert(en1);
	}
	min=0;
	for(i=1;i<4;i++)
		if(Q[min].Size()>Q[i].Size())
			min=i;
	cn.arrivaltime=en.occurtime;
	cn.servicetime=servicetime;
	Q[min].Insert(cn);	
	cusnum++;
	if(Q[min].Size()==1)
	{
		en1.occurtime=en.occurtime+servicetime;
		en1.ntype=min;
		L.Insert(en1);
	}
}

void Bank::CustomerDeparture(Event en)
{
	int i;
	Service cn;
	Event en1;

    i=en.ntype;
	cn=Q[i].GetData();
    Q[i].Delete();
	totaltime=totaltime+(en.occurtime-cn.arrivaltime);
    if(!Q[i].Empty())
    {
		cn=Q[i].GetData();
		en1.occurtime=en.occurtime+cn.servicetime;
		en1.ntype=i;
        L.Insert(en1);
    }
}


#endif // _INC_BANK_OO 

⌨️ 快捷键说明

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