⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simulate.cpp

📁 飞机场模拟飞机场模拟飞机场模拟飞机场模拟
💻 CPP
字号:
#include<iostream>
#include<fstream>
#include<queue>
#include"plane.h"
#include"is_arrive.h"
#include"data_process.h"
#include"runway.h"
using namespace std;
void simulate(int fly_time,int landing_time,double fly_p,double landing_p,time24 begin_time,time24 end_time)
{    
	 int total_time,current_time;
	 plane next;
//	 struct cmp{
 //      bool operator ()(const plane &i,const plane &j){
           // return i.get_time().get_minute()+i.get_fuel()>j.get_time().get_minute()+j.get_fuel();
        // }
//	 };

     queue<plane> fly_queue;  //起飞队列
     priority_queue<plane>  landing_queue;    //降落队列
	 runway air_runway(fly_time,landing_time);
	 is_arrive  fly_arrive(fly_p);
	 is_arrive  landing_arrive(landing_p);
	 data_process process;
	 cout<<endl;
	 cout<<"       显示小型机场及飞机信息 : "<<endl;
     cout<<"┌──────────────────┐"<<endl;
	 cout<<"       飞机起飞需要的时间: "<<fly_time<<endl;
     cout<<"       飞机降落需要的时间: "<<landing_time<<endl;
	 cout<<"       飞机起飞的概率: "<<fly_p<<endl;
	 cout<<"       飞机降落的概率: "<<landing_p<<endl;
	 cout<<"       小型机场开始模拟时间:";
	 begin_time.writeTime();
	 cout<<"     小型机场结束模拟时间:";
	 end_time.writeTime();
	 cout<<"└──────────────────┘"<<endl;
	 cout<<endl;
     total_time=end_time-begin_time;
     for(current_time=1;current_time<=total_time;current_time++)
	 {
		 if(fly_arrive.query()){
			 plane plane(time24(0,current_time+begin_time.get_minute()));
			 fly_queue.push(plane);
		 }
		 if(landing_arrive.query()){
			 int fuel = (int)((rand()/(double)RAND_MAX)*landing_time);
			 plane plane(time24(0,current_time+begin_time.get_minute()),fuel); 
			 landing_queue.push(plane);
		 }
		 if(!air_runway.is_busy() )
		 {
			 while(!landing_queue.empty())
			 {    
                  next=landing_queue.top();
				  landing_queue.pop();
				  if(next.is_falled(current_time+begin_time.get_minute())){
                        process.add_fall_count();
				  }
                  process.land_next_number(current_time+begin_time.get_minute()-next.get_time().get_minute());
				  air_runway.start_landing();
			 }
		 }
		 if(!air_runway.is_busy() &&!fly_queue.empty())
		 {
                  next=fly_queue.front();
				  fly_queue.pop();
				  process.fly_next_number(current_time+begin_time.get_minute()-next.get_time().get_minute());
				  air_runway.start_fly();
		 }
		 air_runway.one_second();
	 }
	 while(!landing_queue.empty())
	 {
		 plane next = landing_queue.top();
		 if(next.is_falled(end_time.get_minute()))
			 process.add_fall_count();
		 landing_queue.pop();
	 }
	 cout<<"    模拟结果 :"<<endl<<endl;
	 cout<<"    在模拟时间内起飞的飞机的架数 : ";
	 cout<<process.how_many_fly_numbers()<<endl;
	 cout<<"    飞机花费在起飞队列中的平均时间 : ";
	 cout<<process.fly_average()<<endl;
	 cout<<"    在模拟时间内降落的飞机的架数 : ";
	 cout<<process.how_many_land_numbers()<<endl;
	 cout<<"    飞机花费在降落队列中的平均时间 : ";
	 cout<<process.land_average()<<endl;
	 cout<<"    降落之前由于燃料用尽而发生坠毁的飞机的架数 : ";
	 cout<<process.get_fall_count()<<endl<<endl;
	 cout<<"*****************************************"<<endl;
}
int main()
{   
	int fly_time,landing_time,n;
	double fly_p,landing_p;
	time24 begin_time,end_time;
	int aa,bb,cc,dd;
	ifstream inFile;
	inFile.open("input.txt");	//打开输入文件
	inFile>>n;
	cout<<"  Begin........"<<endl<<endl;
	for (int i=0;i<n;i++)
	{   
		cout<<"       读入第"<<i+1<<"次小型机场信息.........";	
		inFile >> fly_time>>landing_time
               >>fly_p>>landing_p
			   >>aa>>bb>>cc>>dd;
		cout<<"succeed!"<<endl;
	    time24 begin_time(aa,bb) ,end_time(cc,dd);
        simulate(fly_time,landing_time,fly_p,landing_p,begin_time,end_time);
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -