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

📄 usedline.cpp

📁 航空订票系统 学校大作业开发的
💻 CPP
字号:
#include "stdafx.h"

#ifndef SYSLINE_H
#define SYSLINE_H
#include "SysLine.h"
#endif

#ifndef  USEDLINE_H
#define  USEDLINE_H
#include "UsedLine.h"
#endif

#include <string>
#include <fstream.h>


extern SysLine sysLine;
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////

bool UsedFlightQueue::enQueue(COleDateTime Time,int i,int j)    //进队列
  {
   if(((rear+2)%31)==front)return false;   //full
   rear=(rear+1)%31;   //把新的航班加进队列尾部,rear向后移动                    
   flight[rear].FirCNum=sysLine.flightArray[i].flightInfo[j].FirCNum;
   flight[rear].FirCFreeNum=sysLine.flightArray[i].flightInfo[j].FirCNum;
   flight[rear].FirCP=sysLine.flightArray[i].flightInfo[j].FirCP;
   flight[rear].TouCNum=sysLine.flightArray[i].flightInfo[j].TouCNum;
   flight[rear].TouCFreeNum=sysLine.flightArray[i].flightInfo[j].TouCNum;
   flight[rear].TouCP=sysLine.flightArray[i].flightInfo[j].TouCP;
   strcpy(flight[rear].PlaneNum,sysLine.flightArray[i].flightInfo[j].PlaneNum);
   strcpy(flight[rear].PlaneType,sysLine.flightArray[i].flightInfo[j].PlaneType);
   flight[rear].FlyTime.SetDateTime(Time.GetYear(),Time.GetMonth(),Time.GetDay(),
                sysLine.flightArray[i].flightInfo[j].FlyTime.GetHour(),
				sysLine.flightArray[i].flightInfo[j].FlyTime.GetMinute(),
				sysLine.flightArray[i].flightInfo[j].FlyTime.GetSecond());
   return true;
  }
/////////////////////////////////////////////////////////////////

bool UsedFlightQueue::deQueue()
  {
	  if(length()==0)return false;   //Empty
	  front=(front+1)%31;            //将过期的航班删除掉,front向后移动
	  return true;
  }
/////////////////////////////////////////////////////////////////
int  UsedFlightQueue::Find(COleDateTime Time)
{
  for(int i=front;i!=(rear+1)%31;i=(i+1)%31)
	  if(Time==flight[i].FlyTime)return i;
  return -1;
}
/////////////////////////////////////////////////////////////////
int UsedFlightQueue::insert(int beg,COleDateTime Time,int i,int j)//插入新的航班
  {
	int left,right;//分别存放beg左边的和beg右边的航班数量
	int t,k;
	for(t=beg;t!=(rear+1)%31;t=(t+1)%31)
		if(Time<flight[t].FlyTime)break;
	if(t==(rear+1)%31){beg=t;rear=(rear+1)%31;}
	else if(t==front){beg=(front+30)%31;front=(front+30)%31;}
	else 
	{
		left=((beg+31)-front+1)%31;
		right=((rear+31)-beg+1)%31;
		if(left<right)//移动队列插入元素,移动beg两边元素少的一边
		 {
			t=(t+30)%31;
			for(k=(front+30)%31;k!=t;k=(k+1)%31)flight[k]=flight[(k+1)%31];
			front=(front+30)%31;
			beg=t;
		}
		else
		 {
			for(k=(rear+1)%31;k!=t;k=(k+30)%31)flight[k]=flight[(k+30)%31];
			rear=(rear+1)%31;
			beg=t;
		}
	}

	//插入元素
   flight[beg].FirCNum=sysLine.flightArray[i].flightInfo[j].FirCNum;
   flight[beg].FirCFreeNum=sysLine.flightArray[i].flightInfo[j].FirCNum;
   flight[beg].FirCP=sysLine.flightArray[i].flightInfo[j].FirCP;
   flight[beg].TouCNum=sysLine.flightArray[i].flightInfo[j].TouCNum;
   flight[beg].TouCFreeNum=sysLine.flightArray[i].flightInfo[j].TouCNum;
   flight[beg].TouCP=sysLine.flightArray[i].flightInfo[j].TouCP;
   strcpy(flight[beg].PlaneNum,sysLine.flightArray[i].flightInfo[j].PlaneNum);
   strcpy(flight[beg].PlaneType,sysLine.flightArray[i].flightInfo[j].PlaneType);
   flight[beg].FlyTime.SetDateTime(Time.GetYear(),Time.GetMonth(),Time.GetDay(),
                sysLine.flightArray[i].flightInfo[j].FlyTime.GetHour(),
				sysLine.flightArray[i].flightInfo[j].FlyTime.GetMinute(),
				sysLine.flightArray[i].flightInfo[j].FlyTime.GetSecond());
   return beg;
  }
/////////////////////////////////////////////////////////////////

void UsedFlightQueue::remove()
  {
  }
/////////////////////////////////////////////////////////////////
void UsedLine::deleteLine(int index)  //删除航线
{
	for(int i=index;i<LineSz-1;i++)
	{
	 lineArray[i]=lineArray[i+1];        
     flightArray[i]=flightArray[i+1];
	}
	LineSz--;
}
//增加航线并同时增加一个航班
void UsedLine::addLine(int Lindex,int Findex)
{
  COleDateTime Time;
  for(int i=LineSz;i>Lindex;i--)
  {
    lineArray[i]=lineArray[i-1];
	flightArray[i]=flightArray[i-1];
  }
  for(i=0;i<10;i++)
     lineArray[Lindex].destination[i]=
	   sysLine.lineArray[sysLine.flightArray[Lindex].lineindex].destination[i];
  flightArray[Lindex].front=1;
  flightArray[Lindex].rear=0;
  for(i=0;i<7;i++)   //创建未来七天内(包括今天的航班,把第七天的最先放进去,按时间倒序排列
	 {
	  Time=GetNextNDay(i);
      flightArray[Lindex].enQueue(Time,Lindex,Findex);
	 }
  LineSz++;
}
void UsedLine::addFlight(int Lindex,int Findex) //增加航班到已存在的航线
{
  COleDateTime Time;
  int beg=flightArray[Lindex].front;
  for(int i=0;i<7;i++)
  {
	Time.SetDateTime(GetNextNDay(i).GetYear(),GetNextNDay(i).GetMonth(),GetNextNDay(i).GetDay(),
		   sysLine.flightArray[Lindex].flightInfo[Findex].FlyTime.GetHour(),
           sysLine.flightArray[Lindex].flightInfo[Findex].FlyTime.GetMinute(),
		   sysLine.flightArray[Lindex].flightInfo[Findex].FlyTime.GetSecond());
    beg=(flightArray[Lindex].insert(beg,Time,Lindex,Findex)+1)%31;  //插入航班
  }
}
//////////////////////////////////////////////////////////////////
void UsedLine::Create()
{
	COleDateTime Time=COleDateTime::GetCurrentTime();
if(0==LineSz)    //从sysLine中读取航线信息,创建航班
{  
	for(int i=0;i<sysLine.LineSz;i++)//创建航线
	{
	  strcpy(lineArray[i].destination,sysLine.lineArray[sysLine.flightArray[i].lineindex].destination);
     for(int k=0;k<7;k++)   //创建未来七天内(包括今天的航班,把第七天的最先放进去,按时间倒序排列
	 {
	  Time=GetNextNDay(k);
	  for(int j=sysLine.flightArray[i].flightN-1;j>=0;j--)  //一天之内的航班
           flightArray[i].enQueue(Time,i,j);
	 }
	}
	 LineSz=sysLine.LineSz;
 } 
else 
 {
	COleDateTime Time1=COleDateTime::GetCurrentTime();
	for(int i=0;i<LineSz;i++)
	{ 
		int temp;
		//删除过期的航班
for(temp=flightArray[i].front;flightArray[i].length()!=0 && flightArray[i].flight[temp].FlyTime<=Time1;) 
		{
		flightArray[i].deQueue();
		 temp=flightArray[i].front;
		}
		//增加新的航班
		int k=0;
		for(temp=flightArray[i].rear;k<7;k++)
		{
		   Time=GetNextNDay(k);
		   if(flightArray[i].length()==0 || flightArray[i].flight[temp].FlyTime>Time)
		   {
			   for(int j=sysLine.flightArray[i].flightN-1;j>=0;j--)  //一天之内的航班
                flightArray[i].enQueue(Time,i,j);
               temp=flightArray[i].rear;
		   }
		}  
	}
 }
}
/////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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