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

📄 ~highwaydlg.~cpp

📁 实现的从宝鸡到西安高速公路的模拟.能够动态显示运行车辆的当前位置,车内人数等信息.
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
				  {   c->nowRunTime--;
					  c->t++;   c->f1=false;
					  temp1.Format("到达虢镇");
				  }
		 else  {  c->t=0;  c->f1 =true;}
		}
		 if(c->downGzNum==0)   {c->f1=true;}
        if((dista>24)&&(dista<45)&&c->f1)    //车辆从虢镇出站后的位置信息
		{   
			distance=distance-24;	
			temp1.Format("虢镇以东%f公里",distance);
			distance=dista;
		}

		//-----------------显示在到达蔡家坡后的车辆的位置信息---------------//
        if((c->downCpNum!=0)&&(((c->nowRunTime==24)&&(a==W))||((c->nowRunTime==33)&&(a==Y))))
         { if((c->t==0)||(c->t==1))
				  {   c->nowRunTime--;
					  c->t++;   c->f1=false;
					  temp1.Format("到达蔡家坡");
				  }
		 else  {  c->t=0;   c->f1=true;}
		}
		if(c->downCpNum==0)   {c->f1=true;}
        if((dista>45)&&(dista<107)&&c->f1)
		{   
			distance=distance-45;	
			temp1.Format("蔡家坡以东%f公里",distance);
			distance=dista;
		}
 
		//-----------------显示在到达武功后的车辆的位置信息---------------//
        if((c->downWgNum!=0)&&(((c->nowRunTime==57)&&(a==W))||((c->nowRunTime==77)&&(a==Y))))
         { if((c->t==0)||(c->t==1))
				  {   c->nowRunTime--;
					  c->t++;   c->f1=false;
					  temp1.Format("到达武功");
				  }
		 else  {  c->t=0;   c->f1=true;}
		}
        if(c->downWgNum==0)   {c->f1=true;}
        if((dista>107)&&(dista<128)&&c->f1)
		{   
			distance=distance-107;	
			temp1.Format("武功以东%f公里",distance);
			distance=dista;
		}

		//-----------------显示在到达兴平后的车辆的位置信息---------------//
        if((c->downXpNum!=0)&&(((c->nowRunTime==68)&&(a==W))||((c->nowRunTime==92)&&(a==Y))))
         { if((c->t==0)||(c->t==1))
				  {   c->nowRunTime--;
					  c->t++;   c->f1=false;
					  temp1.Format("到达兴平");
				  }
		 else  {  c->t=0;   c->f1=true;}
		}
		if(c->downXpNum==0)   {c->f1=true;}
        if((dista>128)&&(dista<152)&&c->f1)
		{   
			distance=distance-128;	
			temp1.Format("兴平以东%f公里",distance);
			distance=dista;
		}

	   //-----------------显示在到达咸阳后的车辆的位置信息---------------//
       if((c->downXyNum!=0)&&(((c->nowRunTime==80)&&(a==W))||((c->nowRunTime==109)&&(a==Y))))
         { if((c->t==0)||(c->t==1))
				  {   c->nowRunTime--;
					  c->t++;   c->f1=false;
					  temp1.Format("到达咸阳");
				  }
		 else  {  c->t=0;   c->f1=true;}
		}
	   if(c->downXyNum==0)   {c->f1=true;}
       if((dista>=152)&&(dista<174)&&c->f1)
		{   
			if(dista==152)
			{
			    c->nowRunTime++;
			    distance=c->nowRunTime*c->speed;
			    dista=distance;
			}
			distance=distance-152;	
			temp1.Format("咸阳以东%f公里",distance);
			distance=dista;
		}
        
	     //到达西安车站后的情况
    	 if(distance>174)  
		 { temp1.Format("到达西安车站");
		 c->f1=false;
		 c->t=0;}
         m_runcar.SetItemText(i,3,temp1);

		 //----------------------显示首发站-------------------//
	 	 if(c->direction==0)  m_runcar.SetItemText(i,4,"宝鸡");
		 else  m_runcar.SetItemText(i,4,"西安");

		 //---------到达西安后,把该车辆加入到相应的车辆队列---------//
		 if(distance<174)   m_Bj_runQueue.append(c);
		 else  if(a==W)   {  
			                 c->direction=1; 
							 c->f1=false;
		                     c->nowRunTime=0;
                             c->nowPerson=0;
                             c->downBjNum=0;
	                         c->downCpNum=0;
	                         c->downGzNum=0;
	                         c->downWgNum=0;
                             c->downXnNum=0;
	                         c->downXpNum=0;
	                         c->downXyNum=0;
		                     m_Xn_wewQueue.append(c);
		                   }
		       else       {  
				             c->f1=false;
			                 c->direction=1; 
		                     c->nowRunTime=0;
                             c->nowPerson=0;
                             c->downBjNum=0;
	                         c->downCpNum=0;
	                         c->downGzNum=0;
	                         c->downWgNum=0;
                             c->downXnNum=0;
	                         c->downXpNum=0;
	                         c->downXyNum=0;m_Xn_ywkQueue.append(c); 
			               }
	 }

	 //------------------------西安出发的车辆---------------------------//
	 //说明:显示时,将西安依维柯队列中的对象加到西安沃尔沃队列后面//
	 j=m_Bj_runQueue.getLength();
	 for(i=j;i<(j+m_Xn_runQueue.getLength());i++)
	 {
	     CCar  *c=m_Xn_runQueue.getHead();
		 c->nowRunTime++;
		 CarStyle a=c->carStyle;
		 CString str;
		 if(a==W)    str="沃尔沃";
		 else   str="依维柯";
		 m_runcar.InsertItem(i,str);
		 if(a==W)  temp.Format("%d",c->wewNumber);
		 else   temp.Format("%d",c->ywkNumber);
		 m_runcar.SetItemText(i,1,temp);

         double   distance=c->speed*c->nowRunTime;    //计算行驶距离
		 int nus=XnDownPeople(c,distance);
         
		 //在列表中显示剩余乘客的数量
         temp.Format("%d",nus);
		 m_runcar.SetItemText(i,2,temp);
		 CString temp2;
		 
		 //在列表中显示当前位置的信息
		 double dista=distance;
		 //
         if(distance<22)  temp2.Format("西安以西%f公里",distance);

		 //说明:通过车辆运行时间和有无乘客下车来判断是否要停站//
		 
         //-----------------显示在到达咸阳后的车辆的位置信息---------------//
         if((c->downXyNum!=0)&&(((c->nowRunTime==12)&&(a==W))||((c->nowRunTime==16)&&(a==Y))))
         { if((c->t==0)||(c->t==1))
				  {   c->nowRunTime--;
					  c->t++;   c->f1 =false;
					  temp2.Format("到达咸阳");
				  }
		 else  {  c->t=0;   c->f1=true;}
		}
		 if(c->downXyNum==0)   {c->f1=true;}
        if((dista>22)&&(dista<46)&&c->f1)
		{   
			distance=distance-22;	
			temp2.Format("咸阳以西%f公里",distance);
			distance=dista;
		}

       //-----------------显示在到达兴平后的车辆的位置信息---------------//
        if((c->downXpNum!=0)&&(((c->nowRunTime==25)&&(a==W))||((c->nowRunTime==33)&&(a==Y))))
         { if((c->t==0)||(c->t==1))
				  {   c->nowRunTime--;
					  c->t++;   c->f1=false;
					  temp2.Format("到达兴平");
				  }
		 else  {  c->t=0;   c->f1=true;}
		}
		if(c->downXpNum==0)  {c->f1=true;}
        if((dista>46)&&(dista<67)&&c->f1)
		{   
			distance=distance-46;	
			temp2.Format("兴平以西%f公里",distance);
			distance=dista;
		}
 
		//-----------------显示在到达武功后的车辆的位置信息---------------//
        if((c->downWgNum!=0)&&(((c->nowRunTime==36)&&(a==W))||((c->nowRunTime==48)&&(a==Y))))
         { if((c->t==0)||(c->t==1))
				  {   c->nowRunTime--;
					  c->t++;   c->f1=false;
					  temp2.Format("到达武功");
				  }
		 else  {  c->t=0;   c->f1=true;}
		}
		if(c->downWgNum==0)  {c->f1=true;}
        if((dista>67)&&(dista<129)&&c->f1)
		{   
			distance=distance-67;	
			temp2.Format("武功以西%f公里",distance);
			distance=dista;
		}

		//-----------------显示在到达蔡家坡后的车辆的位置信息---------------//
        if((c->downCpNum!=0)&&(((c->nowRunTime==68)&&(a==W))||((c->nowRunTime==93)&&(a==Y))))
         { if((c->t==0)||(c->t==1))
				  {   c->nowRunTime--;
					  c->t++;   c->f1=false;
					  temp2.Format("到达蔡家坡");
				  }
		 else  {  c->t=0;   c->f1=true;}
		}
		if(c->downCpNum==0)    {c->f1=true;}
        if((dista>129)&&(dista<150)&&c->f1)
		{   
			distance=distance-129;	
			temp2.Format("蔡家坡以西%f公里",distance);
			distance=dista;
		}

       //-----------------显示在到达虢镇后的车辆的位置信息---------------//
       if((c->downGzNum!=0)&&(((c->nowRunTime==79)&&(a==W))||((c->nowRunTime==108)&&(a==Y))))
         { if((c->t==0)||(c->t==1))
				  {   c->nowRunTime--;
					  c->t++;   c->f1=false;
					  temp2.Format("到达虢镇");
				  }
		 else  {  c->t=0;   c->f1=true;}
		}
	   if(c->downGzNum==0)   {c->f1=true;}
       if((dista>150)&&(dista<174)&&c->f1)
		{   
			distance=distance-150;	
			temp2.Format("虢镇以西%f公里",distance);
			distance=dista;
		}
	   //到达宝鸡车站的情况
		 if(distance>174)   
		 {temp2.Format("到达宝鸡车站");
		 c->f1=false;
		 c->t=0;}
         m_runcar.SetItemText(i,3,temp2);

		 if(c->direction==0)  m_runcar.SetItemText(i,4,"宝鸡");
		 else  m_runcar.SetItemText(i,4,"西安");

		 //---------到达宝鸡后,把该车辆加入到相应的车辆队列---------//
		 if(distance<174)   m_Xn_runQueue.append(c);
		 else  if(a==W)    {  
			                 c->direction=0; 
							 c->f1=false;
		                     c->nowRunTime=0;
                             c->nowPerson=0;
                             c->downBjNum=0;
	                         c->downCpNum=0;
	                         c->downGzNum=0;
	                         c->downWgNum=0;
                             c->downXnNum=0;
	                         c->downXpNum=0;
	                         c->downXyNum=0;
		                     m_Bj_wewQueue.append(c);
		                   }
		       else       {  
				             c->f1 =false;
			                 c->direction=0; 
		                     c->nowRunTime=0;
                             c->nowPerson=0;
                             c->downBjNum=0;
	                         c->downCpNum=0;
	                         c->downGzNum=0;
	                         c->downWgNum=0;
                             c->downXnNum=0;
	                         c->downXpNum=0;
	                         c->downXyNum=0;
							 m_Bj_ywkQueue.append(c); 
			               }
	 }

}

//---------------------控制车辆运行的函数-------------------//
void CHighWayDlg::RunCar()
{
      if(((hour>=8)&&(minute%20==0)&&(hour<18))||((hour==18)&&(minute==0)))    //宝鸡的依维柯发车
	  {
		  if(m_Bj_ywkQueue.isEmpty())   {    }       //判断在宝鸡站内的依维柯队列是否为空
		  else
		  {
			  CCar   *a=m_Bj_ywkQueue.getHead();   //取出队列首车辆

              if(m_Bj_passengerQueue.getLength()>21)    //开始上乘客
		          {  a->nowPerson=21;    }
			  else
			      {  a->nowPerson=m_Bj_passengerQueue.getLength();  }

			  for(int i=0;i<a->nowPerson;i++)        //记录上车乘客的目的地信息
					{
						CPassenger *p=m_Bj_passengerQueue.getHead();
						 switch (p->sta_dest )
						 {
						     case GZ:      {  a->downGzNum++;   break;}
							 case CP:      {  a->downCpNum++;   break;}
							 case WG:      {  a->downWgNum++;   break;}
							 case XP:      {  a->downXpNum++;   break;}
							 case XY:      {  a->downXyNum++;   break;}
							 case XN:      {  a->downXnNum++;   break;}
						 }   
					}
              m_Bj_runQueue.append(a);    //把当前出站的依维柯加入到从宝鸡出发的运行车辆的队列
		  }
	  }

	  if((hour>=8)&&(minute==30)&&(hour<=17))      //宝鸡的沃尔沃发车
	  {
		  if(m_Bj_wewQueue.isEmpty())    {}        //判断在宝鸡站内的沃尔沃队列是否为空
		  else
		  {
		      CCar   *a=m_Bj_wewQueue.getHead();         //取出队列首车辆
			   if(m_Bj_passengerQueue.getLength()>48)    //开始上乘客
		           {  a->nowPerson=48;   }
	           else
			   {   a->nowPerson=m_Bj_passengerQueue.getLength();}
			        
			  for(int i=0;i<a->nowPerson;i++)      //记录上车乘客的目的地信息
			  {
					CPassenger *p=m_Bj_passengerQueue.getHead();
						 switch (p->sta_dest )
						 {
						     case GZ:      {  a->downGzNum++;   break;}
							 case CP:      {  a->downCpNum++;   break;}
							 case WG:      {  a->downWgNum++;   break;}
							 case XP:      {  a->downXpNum++;   break;}
							 case XY:      {  a->downXyNum++;   break;}
							 case XN:      {  a->downXnNum++;   break;}
						 }
			  }
			  m_Bj_runQueue.append(a);             //把当前出站的沃尔沃加入到从宝鸡出发的运行车辆的队列
		  }
	  }

	  if(((hour>=8)&&(minute%20==0)&&(hour<18))||((hour==18)&&(minute==0)))    //西安的依维柯发车
	  {
		  if(m_Xn_ywkQueue.isEmpty())   {}      //判断在西安站内的依维柯队列是否为空
		  else
		  {
			  CCar   *a=m_Xn_ywkQueue.getHead();   //取出队列首车辆
			  if(m_Xn_passengerQueue.getLength()>21)    //开始上乘客
		      {      a->nowPerson=21;   }
			  else
			  {   a->nowPerson=m_Xn_passengerQueue.getLength();  }

			  for(int i=0;i<a->nowPerson;i++)         //记录上车乘客的目的地信息
			  {
					CPassenger *p=m_Xn_passengerQueue.getHead();
						 switch (p->sta_dest )
						 {
						     case GZ:      {  a->downGzNum++;   break;}
							 case CP:      {  a->downCpNum++;   break;}
							 case WG:      {  a->downWgNum++;   break;}
							 case XP:      {  a->downXpNum++;   break;}
							 case XY:      {  a->downXyNum++;   break;}
							 case BJ:      {  a->downBjNum++;   break;}
						 }
              }
			  m_Xn_runQueue.append(a);     
		  }
	  }

	  if((hour>=8)&&(minute==30)&&(hour<=17))      //西安的沃尔沃发车
	  {
		  if(m_Xn_wewQueue.isEmpty())    {   }
		  else
		  {
		      CCar   *a=m_Xn_wewQueue.getHead();
			   if(m_Xn_passengerQueue.getLength()>48)    //开始上乘客
		      {    a->nowPerson=48;    }
			  else
			  {a->nowPerson=m_Xn_passengerQueue.getLength();}
			  
			  for(int i=0;i<a->nowPerson;i++)        //记录上车乘客的目的地信息
			  {
                        CPassenger *p=m_Xn_passengerQueue.getHead();
						 switch (p->sta_dest )
						 {
						     case GZ:      {  a->downGzNum++;   break;}
							 case CP:      {  a->downCpNum++;   break;}
							 case WG:      {  a->downWgNum++;   break;}
							 case XP:      {  a->downXpNum++;   break;}
						     case XY:      {  a->downXyNum++;   break;}
							 case BJ:      {  a->downBjNum++;   break;}
						 }
			  }
			  m_Xn_runQueue.append(a);    
		  }
	  } 

	  if((hour>=18)&&(minute>0))      //最后一趟车出站后,清空宝鸡和西安的乘客队列
	  {
	      m_Bj_passengerQueue.clean();
		  m_Xn_passengerQueue.clean();
		  ifshow=false;

	  }
}




//-----------------------从宝鸡开车后下车情况----------------------//
//说明:根据当前车辆中的乘客信息和车辆的行驶距离来计算剩余的乘客数量//
int CHighWayDlg::BjDownPeople(CCar *a,double dist)    
{
	int temp;
	if(dist<=24)	temp=a->nowPerson;
    if((dist>=24)&&(dist<=45))
	{  temp=(a->nowPerson-a->downGzNum);  }    //到达虢镇后,剩余的乘客数量
	if((dist>=45)&&(dist<=107))
	{  temp=(a->nowPerson-a->downGzNum-a->downCpNum);   }
	if((dist>=107)&&(dist<=128))
	{  temp=(a->nowPerson-a->downGzNum-a->downCpNum-a->downWgNum);}
	if((dist>=128)&&(dist<=152))
	{  temp=(a->nowPerson-a->downGzNum-a->downCpNum-a->downWgNum-a->downXpNum);}
	if((dist>=152)&&(dist<=174))
	{  temp=(a->nowPerson-a->downGzNum-a->downCpNum-a->downWgNum-a->downXpNum-a->downXyNum);  }
	if(dist>174)  temp=0;
		return temp;
}

//-----------------------从西安开车后下车情况----------------------//
int CHighWayDlg::XnDownPeople(CCar *a,double dist)
{
	int temp;
	if(dist<=22)	temp=a->nowPerson;
    if((dist>=22)&&(dist<=46))  temp=(a->nowPerson-a->downXyNum);
	if((dist>=46)&&(dist<=67))  temp=(a->nowPerson-a->downXyNum-a->downXpNum);
	if((dist>=67)&&(dist<=129))
        temp=(a->nowPerson-a->downXyNum-a->downXpNum-a->downWgNum); 
	if((dist>=129)&&(dist<=150))
        temp=(a->nowPerson-a->downXyNum-a->downXpNum-a->downWgNum-a->downCpNum);
	if((dist>=150)&&(dist<=174))
        temp=(a->nowPerson-a->downXyNum-a->downXpNum-a->downWgNum-a->downCpNum-a->downGzNum); 
	if(dist>174)   temp=0;
	return temp;
}

⌨️ 快捷键说明

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