📄 intmain.cpp
字号:
#include<iostream>
#include<time.h>
#include"constdef.h"
#include"Queue.h"
#include"serverlist.h"
#include"waitingqueue.h"
#include"random.h"
#include<iomanip>
using namespace std;
int avetratime=0,avedurtime=0;
void InistSimulation(int &numberofserver,int &alltime,int &avetratime,int &avedurtime)//反思,要想在函数调用过程中实参的值得到改变,
//不论是类还是普通的整型什么的,除非是整型变量,否则就要用引用或者指针。
{
cout<<"请输入服务器数量:";cin>>numberofserver;
cout<<"请输入总的运营时间:";cin>>alltime;
cout<<"请输入服务的平均时间:";cin>>avetratime;
cout<<"请输入两个顾客光临的相距时间:";cin>>avedurtime;
}
void Random(int &curtratime,int &curarrtime,RAndom ran)
{
int a1=0,b1=avetratime,a2=0,b2=avedurtime;
curtratime=ran.Rand_ab_One(a1,b1);
curarrtime=ran.Rand_ab_One(a2,b2);
}
int main()
{
int choice=1;
while(1)
{
cout<<setfill('*')<<setw(20)<<"主菜单"<<setfill('*')<<setw(20)<<'*'<<endl;
cout<<"1:模拟离散事件。"<<endl;
cout<<"0:结束程序。"<<endl;
cout<<setfill('*')<<setw(40)<<'*'<<endl;
cin>>choice;
switch(choice)
{
case 0:return 0;
case 1:{
double totwaitingtime=0,totcustomernum=0;
int numberofserver=0,clock=0,count=0,count1,index=0,i=0;
int alltime=0,curarrtime=0,curtratime=0;
CUstomerType cust,cust0;
SErverList serverlist0;
WaitingCustomerQueue waitingqueue;
RAndom ran;
InistSimulation(numberofserver,alltime,avetratime,avedurtime);//初始化模拟数据
serverlist0.InitServerList(numberofserver);//初始化服务器表
waitingqueue.InitQueue();//初始化顾客等待队列
cout<<setfill('*')<<setw(20)<<"模拟开始"<<setfill('*')<<setw(20)<<'*'<<endl;
for(clock=0;clock<alltime;clock++)
{
serverlist0.UpdateAllServer();
//随机生成第一个客户的到达时间,服务时间,当一个客户到达时,同时生成下个客户的相关资料
if(totcustomernum==0)
{
totcustomernum++;
Random(curtratime,curarrtime,ran);
cust.SetCustomerInfo(curtratime,curarrtime,totcustomernum);
}
if(clock==cust.GetArriveTime())
{
waitingqueue.AddQueue(cust);//cust到达,将cust加入等待队列中,经过测试发现正确
cust.ArriveDisplay();//显示到达的客户信息
Random(curtratime,curarrtime,ran); //开始生成下一个客户的到达时间
totcustomernum++;
cust.SetCustomerInfo(curtratime,clock+curarrtime,totcustomernum);
}
//
if(serverlist0.GetFreeServerNum()&&!waitingqueue.QueueIsEmpty())
{
count=serverlist0.GetFreeServerNum();
count1=waitingqueue.QueueLen();
if(count1<count)count=count1;
for(i=0;i<count;i++)
{
index=-1;
waitingqueue.Pop(cust0);
totwaitingtime+=cust0.GetWaitingTime();
index=serverlist0.GetFreeServerIndex(index);
serverlist0.ReturnHead()[index].GetCustomer(cust0);
}
}
if(!waitingqueue.QueueIsEmpty())waitingqueue.UpdateWatingQueue();
}//for(clock=0--------
cout<<setfill('*')<<setw(20)<<"模拟结束"<<setfill('*')<<setw(20)<<'*'<<endl;
count=0;
for(i=0;i<numberofserver;i++)
if(serverlist0.ReturnHead()[i].ServerIsBusy())count++;
totwaitingtime+=waitingqueue.LeftTotWaitingTime();
cout<<"总的等待时间是:"<<totwaitingtime<<endl;
cout<<"总的顾客人数是:"<<totcustomernum<<endl;
cout<<"还在服务器的顾客人数是:"<<count<<endl;
cout<<"还在队列中的顾客人数是:"<<waitingqueue.QueueLen()<<endl;
cout<<"平均每个顾客等待的时间是:"<<totwaitingtime/totcustomernum<<endl<<endl;
};
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -