int CloseTime; //关门时间 int windowsnum = 0; //主函数 int main() { EventList ev; // 事件表 QCuEvent en; QCupp QCu = NULL; OpenForDay(ev, en, QCu); while (ev->next) { en.NType = ev->next->NType; en.OccurTime = ev->next->OccurTime; DelFirstEvent(ev); if (en.NType == 0) CustomerArrived(ev, QCu, en);
else
CustomerDeparture(ev, QCu, en); Ptint_QStatus(QCu);
}
CloseForDay();
}
//主要功能子函数
Status OpenForDay(EventList &ev, QCuEvent en, QCupp &q)
11
int temp = 0;
printf(\请输入随机数种子(或输入0使用随机种子):\scanf(\
if (temp==0) srand((unsigned)time(NULL)); else srand(temp);
printf(\请输入营业时间(单位:分钟):\scanf(\CloseTime = temp;
TotalTime = 0; CustomerNum = 0; en.OccurTime = 0; en.NType = 0; en.next = NULL;
ev = (EventList) malloc(sizeof(QCuEvent)); ev->next = NULL; OrderInser(ev, en);
printf(\请输入办理业务的窗口数(至少1个):\scanf(\
q = (QCustomerp *) malloc((windowsnum+1)*sizeof(QCustomerp)); for (int i=1;i<=windowsnum;i++) {
12
{
InitCuQueue(q[i]);
}
return OK;
}
Status CustomerArrived(EventList &ev, QCupp &q, QCuEvent en) { test(\顾客到达处理<<<<<<<<\ CustomerNum ++; // 产生随机数 //srand(54);
int durtime = rand()0+1; int intertime = rand()%5+1; // 插入到达事件表 QCuEvent enTemp;
int t = en.OccurTime + intertime; enTemp.OccurTime = t; enTemp.NType = 0; enTemp.next = NULL;
if (t < CloseTime) OrderInser(ev, enTemp); printf(\时间%d\\n\ // 插入最短队 QEptr Q;
Q = (QEptr) malloc(sizeof(QCuElem));
Q->ArrivalTime = en.OccurTime;
13
Q->Duration = durtime; Q->next = NULL; int i = MinCuQueue(q); EnCuQueue(q[i],Q); // 插入离开事件
enTemp.OccurTime = en.OccurTime + durtime; enTemp.NType = i; enTemp.next = NULL;
if(QLength(q[i]) == 1) OrderInser(ev, enTemp); return OK;
}
Status CustomerDeparture(EventList &ev, QCupp &q, QCuEvent en) { test(\顾客离开处理\ int i = en.NType;
printf(\离开时间%d\\n\ if(en.OccurTime>CloseTime) { DestoryQueue(q[i]);
} else{ QCuElem customer; DeCuQueue(q[i],customer);
// 客户逗留时间 14
TotalTime += en.OccurTime - customer.ArrivalTime; printf(\总时间为%d\\n\ if (q[i].front->next) { GetQHead(q[i],customer); QCuEvent enTemp;
enTemp.OccurTime = en.OccurTime + customer.Duration; enTemp.NType = i; OrderInser(ev, enTemp);
}
}
return OK;
}
void CloseForDay() { printf(\ printf(\
printf(\ 所有顾客业务办理总时间:%d分钟\\n\ printf(\ 业务办理顾客数:%d\\n\
printf(\ 平均每人办理时间:%f\\n\ printf(\
printf(\
}
15