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

📄 postoffice_1.cpp

📁 show to use C/C++ do system test.
💻 CPP
字号:
#include  "PerformSeer.h"

class POST_OFFICE : public SIMMODEL {
public:
	void   initiate();
};

class GENERATOR : public PROCESS {
public:
	void   process();
};

class CUSTOMER : public PROCESS {
public:
	void   process();
};

POST_OFFICE   PostOffice;
RESOURCE     *Clerks = NULL;

RANDOM   R1(1);
RANDOM   R2(2);
RANDOM   R3(3);

real64   DayLength;
real64   MeanInterArrival;
real64   MinServiceTime;
real64   MaxServiceTime;
uint16   MinClerkNum;
uint16   MaxClerkNum;
uint16   ClerkNum;
uint16   ChairNum;

uint32   LeavedNum;
uint32   ServedNum;

METER <real64>   DelayInQueue;

void  Read_Parameter();
void  Print_Result();

int  main( int argc, char** argv )
{
	Read_Parameter();

	for (ClerkNum = MinClerkNum; ClerkNum <= MaxClerkNum; ClerkNum += 1) {
		PostOffice.clear();
		PostOffice.initiate();
		PostOffice.simulate();
		Print_Result();
	}
	return 0;
}

void  Read_Parameter()
{
	DayLength        = 540;
	MeanInterArrival = 4;
	MinServiceTime   = 5;
	MaxServiceTime   = 10;
	MinClerkNum      = 1;
	MaxClerkNum      = 5;
	ChairNum         = 10;

	printf( "\nCLERKS    CLERKS    CUSTOMERS NUMBER    DELAY IN QUEUE     NUMBER IN QUEUE" );
	printf( "\nNUMBER  UTILIZATION  SERVED / LEAVED   AVERAGE / MAXIMUM  AVERAGE / MAXIMUM" );
	printf( "\n===========================================================================\n" );
}

void  Print_Result()
{
	printf( "\n %3d    %7.3f     %4d     %4d    %7.3f    %7.3f    %7.3f   %4d",
			ClerkNum, Clerks->get_utilization(), ServedNum, LeavedNum,
			DelayInQueue.get_average(), DelayInQueue.get_maximum(),
			Clerks->get_avgquelen(), Clerks->get_maxquelen() );
}

void  POST_OFFICE::initiate()
{
	GENERATOR   *generator;

	LeavedNum = 0;
	ServedNum = 0;

	R1.reset();
	R2.reset();
	R3.reset();

	DelayInQueue.clear();

	if (Clerks != NULL)
		delete Clerks;
	Clerks = new RESOURCE( ClerkNum );

	create_process( generator );
	generator->activated();
}

void  GENERATOR::process()
{
	CUSTOMER   *customer;
	real64      interval;

	while (1) {
		interval = R1.exponential( (real64)1 / MeanInterArrival );
		if (SIMTIME + interval > DayLength)
			exit();

		pass_time( interval );

		create_process( customer );
		customer->activated();
	}
}

void  CUSTOMER::process()
{
	real64  arrivTime;
	real64  leavProb;
	real64  servTime;

	arrivTime = SIMTIME;
	leavProb  = (real64)(Clerks->get_quelen()) / (real64)ChairNum;
	servTime  = ( R2.uniform(MinServiceTime, MaxServiceTime) );

	if (R3.bernoulli(leavProb) == 1) {
		LeavedNum += 1;
		exit();
	}
	ServedNum += 1;
	request_resource( Clerks, 1 );

	DelayInQueue = SIMTIME - arrivTime;
	pass_time( servTime );

	release_resource( Clerks, 1 );
}

⌨️ 快捷键说明

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