?? usedline.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 + -