资源简介

VC6.0编译! 利用的算法类似于买票排队,你总会到队列最短的窗口去排队,但往往会有其他队列办事速度快,队列长度很快变得比你所在队列的还短,但你改变自己的队列去当前较短的队列时,可能没过多久刚刚你在的队列又比你现在所处的队列短了,因为队短不代表等待时间短,你无法预测每个队列你需要等待的时间。所以在该种制度下,不同于买票排队的这种可以随便更换队列的随意性,我们在第一种算法中设定:每到达一个客户将其排在队列最短的队尾,且不管其它队列是否变的更短,甚至已经空闲,该客户也只能在已队列中等待前面的客户办理完业务自己才能办理业务,很明显这种算法效率不是最好的。一是时间利用率不高,而是无法保证先到达的客户的办理业务时间一定比后到达的客户早。

资源截图

代码片段和文件信息

#include< time.h >
#include 
#include“linklist.h“
#include“linkqueue.h“



Event  en;          //事件
QElemType  customer;   //客户记录
int TotalTime;  //累计客户逗留时间
int WaitTime;  //累计客户等待时间
int CustomerNum ; //累计客户数
int CloseTime;
int StartTime;
linkList  *ev;          //事件表
linkQueue  *q[5];      //4个客户队列,q[i]指向第i号窗口的队列
int leave_num = 0;   //第leave_num个离开银行的客户

void Random( int *duration int *intertime );  //产生随机数,第一个参数代表当前客户的办理业务所需的时间,第二个参数代表下一个客户与当前客户的到达时间差
void OrderInsert( linkList *eventlist Event cur_en );  //将产生的事件按事件发生时间顺序排列
void OpenForDay();   //初始化
void CustomerArrived(  );  //对客户到达事件进行处理
void CustomerDepature(  );  //对客户离开事件进行处理
void Bank_Simulation( int CloseTime );  //排队系统模拟函数
int Minium( int num1 int num2 int num3 int num4 );//比较四个数中的最小值,若第i个参数最小,则返回i,参数相等的情况下返回序号较小的参数的序号

void main()
{



printf( “输入银行的24小时制营业时间:如营业时间为9:00--17:00,则应输入:917\n“ );
scanf( “%d%d“ &StartTime &CloseTime );

CloseTime = ( CloseTime - StartTime ) * 60;
printf(“离开客户序列  业务窗口  到达时间  办理业务时长  离开时间  停留时长  等待时长\n“);
Bank_Simulation( CloseTime );
}



//产生客户办理业务所需时间时间和两个客户到达时间的时间间隔的随机数
void Random( int *duration int *intertime )
{


srand( (unsigned)time( NULL ) );  //用时间作为种子对随机数进行操作

*duration = rand()%30 + 1;  //任何一个客户的办理业务时间在1-30之间
*intertime = rand()%5+1;   //任何两个客户到达的时间间隔不超过5分钟,1-5
Sleep(1000);  //由于随机函数的产生机制导致在一秒以内产生的随机数都是相同的,因此在一次使用Random时需要进行延时

}

//将事件cur_en按照发生时间的先后顺序有序的插入事件链表eventlist中
void OrderInsert( linkList *eventlist Event cur_en )  
{

if( ListEmpty( eventlist) ){       //当事件链表为空时,将第一个事件直接插入到第一个位置
ListInsert_L( eventlist 1 cur_en );
}
else{ //当事件链表不为空时,先将事件插入到事件表的第一个位置然后将事件表按非递减的顺序排序

ListInsert_L( eventlist 1 cur_en );  //将事件cur_en插入到eventlist的第1项
Increse( eventlist );  
}
}
//初始化操作
void OpenForDay()
{

int i;

TotalTime = 0;     //初始化累计时间为0
CustomerNum = 0;   //初始化客户总数为0
WaitTime = 0;
ev = InitList_L( );  //初始化事件链表为空
en.OccurTime = 0;    //设定第一个客户到达事件
en.NType  = 0;
OrderInsert( ev en ); //将第一个客户到达事件插入事件表
for( i = 1; i <= 4; i++ )    //初始化窗口队列
q[ i ] = InitQueue();
}



void CustomerArrived(  )
{
int duration;  //当前到达的客户办理事务所需的时间
int intertime; //下一个客户与当前客户到达时间的时间间隔
Event next;    //下一个客户项
Event first_leave;    //当前客户的离开事件
int i;

++CustomerNum;
Random( &duration &intertime );  //对duration和intertime取随机数
next.OccurTime = en.OccurTime + intertime;    //下一个客户的到达时间
next.NType = 0;                                //下一个客户的事件类型,0表示到达
if( next.OccurTime < CloseTime )             //下一个客户到达时银行还未关门
OrderInsert( ev next );            //按顺序将下一个客户的到达时间插入到事件队列中   
customer.ArriveTime = en.OccurTime;     //计算当前客户的队列项并为其分配队列
customer.Duration = duration;

i = Minium( QueueLength( q[1] ) QueueLength( q[2] ) QueueLength( q[3] ) QueueLength( q[4] ) );  //获得最短队列的队列号
InsertQueue( q[i] customer ); //将当前客户对应的队列项插入到最短队列中

//若队列长度不为1,说明有其他用户在排队,则后续客户的离开事件均与它之前的所有客户的离开事件相关,
//在此无法

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      36235  2014-06-02 11:52  3离散时间模拟银行排队问题\Debug\main.obj

     文件      50176  2014-06-02 11:52  3离散时间模拟银行排队问题\Debug\vc60.idb

     文件      69632  2014-06-02 11:52  3离散时间模拟银行排队问题\Debug\vc60.pdb

     文件     221314  2014-06-02 11:52  3离散时间模拟银行排队问题\Debug\离散时间模拟银行排队问题.exe

     文件     630540  2014-06-02 11:52  3离散时间模拟银行排队问题\Debug\离散时间模拟银行排队问题.ilk

     文件      43520  2014-06-02 09:40  3离散时间模拟银行排队问题\Debug\离散时间模拟银行排队问题.opt

     文件    2804956  2014-06-02 11:52  3离散时间模拟银行排队问题\Debug\离散时间模拟银行排队问题.pch

     文件     558080  2014-06-02 11:52  3离散时间模拟银行排队问题\Debug\离散时间模拟银行排队问题.pdb

     文件       5459  2014-06-02 09:44  3离散时间模拟银行排队问题\linklist.h

     文件       3782  2014-06-02 11:52  3离散时间模拟银行排队问题\linkqueue.h

     文件       7999  2014-06-02 12:56  3离散时间模拟银行排队问题\main.c

     文件       4605  2014-05-31 20:01  3离散时间模拟银行排队问题\离散时间模拟银行排队问题.dsp

     文件        573  2014-05-31 15:03  3离散时间模拟银行排队问题\离散时间模拟银行排队问题.dsw

     文件      66560  2014-06-02 12:56  3离散时间模拟银行排队问题\离散时间模拟银行排队问题.ncb

     文件      49664  2014-06-02 12:56  3离散时间模拟银行排队问题\离散时间模拟银行排队问题.opt

     文件        955  2014-06-02 11:52  3离散时间模拟银行排队问题\离散时间模拟银行排队问题.plg

     文件     444339  2014-06-02 14:33  3离散时间模拟银行排队问题\银行排队问题总结.docx

     目录          0  2014-06-02 11:52  3离散时间模拟银行排队问题\Debug

     目录          0  2014-06-03 15:32  3离散时间模拟银行排队问题

----------- ---------  ---------- -----  ----

              4998389                    19


评论

共有 条评论