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

📄 sysline.cpp

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

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

int SysLine::insertLine(CString name)
{
    char Name[10];
	for(int i=0;i<10;i++)
		if(i<name.GetLength())Name[i]=name.GetAt(i);
	     else Name[i]=' ';
    int l=-1,r=AllLineSz;
	int mid;
	while(l+1<r)
	{
		mid=(l+r)/2;
		if(0==compare(lineArray[mid].destination,Name))return -1;
		 else if(compare(lineArray[mid].destination,Name)<0)l=mid;
		     else r=mid;
	}
	for(i=r;i<AllLineSz;i++)
	   if(lineArray[i].isEmpty==false)break;
	if(i<AllLineSz)
		{
			int temp=FindLine(i);
			for(i=temp;i<LineSz;i++)flightArray[i].lineindex++;   //更新下标
		}

    for(i=AllLineSz;i>r;i--)
         lineArray[i]=lineArray[i-1];
	for(i=0;i<10;i++)
		if(i<name.GetLength())lineArray[r].destination[i]=Name[i]; 
		  else lineArray[r].destination[i]=' ';   //将后面的字符赋为空,以避免产生乱码
    lineArray[r].isEmpty=true;
	AllLineSz++;
	return r;
}

bool SysLine::deleteLine(int Lindex)
{
	int temp;
	for(int i=Lindex;i<AllLineSz;i++)if(lineArray[i].isEmpty==false)break;
	if(i<AllLineSz)//更新flightArray数组中的下标,删除对应的航班
	{
		bool isLindex=false;
		if(i==Lindex)isLindex=true;
		temp=FindLine(i);
		for(int i=temp;i<LineSz-1;i++)
		{
			if(isLindex==true)flightArray[i]=flightArray[i+1]; 
			flightArray[i].lineindex--;
		}
		if(isLindex==true)LineSz--;
		  else flightArray[LineSz-1].lineindex--;
	}
	for(i=Lindex;i<AllLineSz-1;i++)
       lineArray[i]=lineArray[i+1];
    AllLineSz--;
	return true;
}
int SysLine::FindFlightIndex(int Line)
{
 int l=-1,r=LineSz;
 int mid;
  while(l+1<r)
  {
	  mid=(l+r)/2;
	  if(flightArray[mid].lineindex==Line)//该航班的航线已经存在flightArray中
	  {
		  if(flightArray[mid].flightN>3)return -1;   //一天之中只能有4个航班
		    else return mid;								
	  }
	   else if(flightArray[mid].lineindex<Line)l=mid;
	      else r=mid;
  }
  for(int i=LineSz;i>r;i--)
	  flightArray[i]=flightArray[i-1];
  flightArray[r].flightN=0;
  flightArray[r].lineindex=Line;          //把航班所对应的航线下表赋给lineindex
	return r;
}
bool SysLine::deleteFlight(int Findex)
{
	return true;
}
int SysLine::compare(char a[],char b[])    //a和b的长度是相同的,都是10
{
	for(int i=0;i<10;i++)
	  if(a[i]>b[i])return 1;
	    else if(a[i]<b[i])return -1;
		return 0;
}

int SysLine::FindLine(int index)
{
	
 int l=-1,r=LineSz;
 int mid;
  while(l+1<r)
  {
	  mid=(l+r)/2;
	  if(flightArray[mid].lineindex==index)return mid;//该航班的航线已经存在flightArray中
	   else if(flightArray[mid].lineindex<index)l=mid;
	      else r=mid;
  }
  return -1;//找不到
}

⌨️ 快捷键说明

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