myQueue,cpp不变 main126.cpp
#include
#include “myQueue.cpp”
#include
#include
using namespace std;
static const int MIN_PER_HR=60;
bool newCustomer(double x)//每隔x次,rand()/RAND_max会有一次值<1
{
return rand()*x/RAND_MAX<1;
}
void main126()
{
srand(time(0));//初始化rand();
cout<<”Case Study:Bank of Heather Automatic Teller”<<endl;
cout<<”Enter maximum size of queue:”;
int qs;
cin>>qs;
Queue line(qs);
Queue line2(qs);//视为同样大小的队列
cout<<”Enter the number of simulation hours:”;
int hours;
cin>>hours;
long cyclelimit=MIN_PER_HR*hours;//循环的分钟数
cout<<”Enter the average number of customers per hour:”;//一个小时来的人数
double perhour;
cin>>perhour;
double min_per_cust;
min_per_cust=MIN_PER_HR/perhour;//平均多少分钟来一个人
Item temp;
long turnaways=0;
long customers=0;
//long served=0;
long served=0;
long sum_line=0;
int wait_time=0;
int wait_time2=0;//等待时间要+1个
long line_wait=0;
for(int cycle=0;cycle<cyclelimit;cycle++)//cycle每循环一次,代表过了一分钟
{
//line.s();
if(newCustomer(min_per_cust))
{
if(line.isFull()&&line2.isFull())//当两个队列都满了的时候才拒绝服务
turnaways++;//拒绝服务???//恩,应该就是拒绝服务的人数
else
{
customers++;//队列人数//应该是顾客人数+1而不是队列人数+1
temp.set(cycle);//cycle是到达时间
if(line.queuecount()>=line2.queuecount())
line2.enQueue(temp);
else
line.enQueue(temp);//这里的items++才是队列人数+1
//cout<<”after insert “<<line;//test
}
}
if(wait_time<=0&&!line.isEmpty())//队列1中有用户处理完了业务
{
line.deQueue(temp);
//cout<<”after the delete”<<line;//test
wait_time=temp.ptime();//wait_time是该客户处理业务所用时间
line_wait+=cycle-temp.when();//cycle-temp.when();是该客户一共在队列中等了多久
//一开始wait_time初始化是0,然后进入这里之后,又重新设置了使其=processtime
//line_wait是该队列一共等了多久??哦,应该是所有客户的等待时间
//line_wait是客户等待总时间
served++;//服务人数+1
}
if(wait_time2<=0&&!line2.isEmpty())//队列1中有用户处理完了业务
{
line2.deQueue(temp);
wait_time2=temp.ptime();//wait_time是该客户处理业务所用时间
line_wait+=cycle-temp.when();//cycle-temp.when();是该客户一共在队列中等了多久
served++;//服务人数+1
}
if(wait_time>0)//队列1正在处理业务的处理时间-1,因为过了一分钟
wait_time–;
if(wait_time2>0)//队列2正在处理业务的处理时间-1,因为过了一分钟
wait_time2–;
//wait_time=temp.ptime()这里随机设置了wait-time
sum_line+=line.queuecount()+line2.queuecount();//sum_line又是神马东东??
//sum_line是队伍总长度,每分钟计算一次队伍长度
}
if(customers>0)
{
cout<<”customers accepted:”<<customers<<endl;
cout<<”customers served:”<<served<<endl;
cout<<”turnaways:”<<turnaways<<endl;
cout<<”average queue size:”;
cout.precision(2);
cout.setf(ios_base::fixed,ios_base::floatfield);
cout<<(double)sum_line/cyclelimit<<endl;
cout<<”average wait time:”<<(double)line_wait/served<<” minutes”<<endl;
}//我机器上面是18人最接近1分钟,队列长度10,时间100
else
cout<<”No coustomer!”<<endl;
cout<<”Done!”<<endl;
system(“pause”);
}
—————————————————————————————————————————————————— //写的错误或者不好的地方请多多指导,可以在下面留言或者给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。 转载请注明出处:https://www.royalchen.com/ author:royalchen Email:royalchen@royalchen.com ———————————————————————————————————————————————————
- 本文作者: royalchen
- 本文链接: http://www.royalchen.com/2016/02/24/cprimerplus第六版课后编程题答案126/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!