#include <iostream>
#include <fstream.h>
ofstream out;
#define M 30
#define N 5
#define Range 20
#define fph 30
#define l_time 4
class Car
{
public:
int pos;
int wait;
int arrive_time;
int leave_time;
int park_time;
int fee;
}cars[24*Range];
int pos[2000];
int wait[2000];
int sum_time=0;
int sum_fee=0;
int sum_arrive=0;
int sum_leave=0;
int sum_away=0;
int pos_num=0;
int wait_num=0;
int come_num;
int l_num;
int front=0;
int now_time;
int num;
int chewei_num=M;
int biandao_num=N;
int test_time=24;
int car_range=Range;
int fee_fph=fph;
int long_time=l_time;
void leave(int pos_i)
{
int k;
int car;
car=pos[pos_i];
k=rand()%long_time;
cars[car].park_time=now_time-cars[car].arrive_time;
if(cars[car].park_time>k&&pos[pos_i]!=-1)
{ //这辆车要离开
pos[pos_i]=-1;
cars[car].leave_time=now_time;
l_num++;
cars[car].fee=(cars[car].park_time)*fee_fph;
sum_time+=cars[car].park_time;
sum_fee+=cars[car].fee;
sum_leave++;
pos_num--;
cout<<"车号:"<<car<<" 到达时间:"<<cars[car].arrive_time<<" 离开时间:"<<cars[car].leave_time<<" 车位:"<<cars[car].pos<<" 停留时间:"<<cars[car].park_time<<" 费用:"<<cars[car].fee<<endl;
out<<"车号:"<<car<<" 到达时间:"<<cars[car].arrive_time<<" 离开时间:"<<cars[car].leave_time<<" 车位:"<<cars[car].pos<<" 停留时间:"<<cars[car].park_time<<" 费用:"<<cars[car].fee<<endl;
}
}
void come()
{
int i,j;
int c_away=0; //因无车位而离开的车数
front=0;
come_num=rand()%car_range;
if(pos_num+wait_num+come_num>chewei_num+biandao_num)
{
c_away=pos_num+wait_num+come_num-chewei_num-biandao_num;
cout<<"车位已满,请车号为"<<num+come_num-c_away<<"至"<<num+come_num<<"的车主到其他停车场停车"<<endl;
out<<"车位已满,请车号为"<<num+come_num-c_away<<"至"<<num+come_num<<"的车主到其他停车场停车"<<endl;
cout<<come_num<<endl;
}
for(i=0;i<biandao_num;i++)
{
if(wait[i]==-1)
break;
}
for(j=i;j<i+come_num;j++)
{
if(num<num+come_num)
{
wait[j]=num;
num++;
}
el
break;
}
for(i=0;i<chewei_num;i++)
{
if(pos[i]==-1&&wait[front]!=-1)
{
pos[i]=wait[front];
cars[pos[i]].arrive_time=now_time;
cars[pos[i]].pos=i;
cout<<"车号:"<<pos[i]<<" 到达时间:"<<now_time<<" 进入车位:"<<i<<endl;
out<<"车号:"<<pos[i]<<" 到达时间:"<<now_time<<" 进入车位:"<<i<<endl;
pos_num++;
front++;
}
}
for(i=0;i<biandao_num;i++)
{
wait[i]=wait[front+i];
}
for(i=biandao_num;i<biandao_num+car_range;i++)
wait[i]=-1;
for(i=0;i<biandao_num;i++)
{
if(wait[i]!=-1)
{
cout<<"车号:"<<wait[i]<<" 进入便道的编号为:"<<i<<endl;
out<<"车号:"<<wait[i]<<" 进入便道的编号为:"<<i<<endl;
}
el
break;
}
sum_away+=c_away;
}
void main()
{
int i,j;
out.open("c:\\");
cout<
<"请输入车位数:"<<endl;
cin>>chewei_num;
cout<<"请输入便道数:"<<endl;
cin>>biandao_num;
cout<<"请输入测试时间数:"<<endl;
cin>>test_time;
cout<<"请输入每小时最多到达的车辆的数目:"<<endl;
cin>>car_range;
cout<<"请输入每小时停车费:"<<endl;
cin>>fee_fph;
cout<<"请输入每辆车最多停留时间:"<<endl;
cin>>long_time;
out<<"车位数:"<<chewei_num<<" 便道数:"<<biandao_num<<" 测试时间:"<<test_time<<"小时 每小时最多到达的车辆的数目:"<<car_range<<"辆 每小时停车费:"<<fee_fph<<"元 每辆车最多停留时间:"<<long_time<<"小时"<<endl;
num=0;
for(i=0;i<chewei_num;i++)
{
pos[i]=-1;
}
for(i=0;i<biandao_num+car_range;i++)
{
wait[i]=-1;
}
cout<<"第0小时"<<endl;
out<<"第0小时"<<endl;
come();
cout<<"到达停车场的车辆的数目为:"<<come_num<<endl;
out<<"到达停车场的车辆的数目为:"<<come_num<<endl;
cout<<endl;
for(now_time=1;now_time<test_time;now_time++)
{
cout<<"第"<<now_time<<"小时"<<endl;
out<<"第"<<now_time<<"小时"<<endl;
l_num=0;
for(j=0;j<chewei_num;j++)
{
leave(j);
}
cout<<"离开停车场的车辆的数目为:"<<l_num<<endl;
out<<"离开停车场的车辆的数目为:"<<l_num<<endl;
come();
cout<<"到达停车场的车辆的数目为:"<<come_num<<endl;
out<<"到达停车场的车辆的数目为:"<<come_num<<endl;
cout<<endl;
}
sum_arrive=num-sum_away;
cout<<"这一天一共到达的车辆的数目为:"<<sum_arrive<<endl;
cout<<"这一天一共离开的车辆的数目为:"<<sum_leave<<endl;
cout<<"这一天停车总时数为:"<<sum_time<<endl;
cout<<"这一天停车场的收入为:"<<sum_fee<<endl;
out<<"这一天一共到达的车辆的数目为:"<<sum_arrive<<endl;
out<<"这一天一共离开的车辆的数目为:"<<sum_leave<<endl;
out<<"这一天停车总时数为:"<<sum_time<<endl;
out<<"这一天停车场的收入为:"<<sum_fee<<endl;
out.clo();
}