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

📄 engine.cpp

📁 SYMBIAN S60 2ND列车时刻表软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	if (aStation.Length()<2 || aStation == _L("?") || aStation == _L("*") ||
	aStation == _L("*?") || aStation == _L("?*") || aStation == _L("**")
	|| aStation == _L("??")) return -1;
	
	TBuf16<12> des1;
	TBuf16<12> des2;
	TInt b1,b2,b3,b;
	TInt c1,c2,c3,c;
	TInt stationid;
	TInt trainid = -1;
	TInt err;
	des1.Append(aStation);

	TBool found1 = EFalse;
	
	CArrayFixFlat<TInt>* timearray = new (ELeave) CArrayFixFlat<TInt>(10);
	
	for (TInt i = 0 ;i<iStationCount;i++) {
		if ( iStationArray->operator [](i)->iName->Des().Match(des1) != KErrNotFound ) {
			stationid = iStationArray->operator [](i)->iID;
			found1 = ETrue;
			break;
		}
	}
	if (!found1) return EFalse;
	
	for (TInt i=0;i<iTrainLineCount;i++) {
		if (trainid != iTrainDetailArray->operator [](i)->iTrainID) {
			trainid = iTrainDetailArray->operator [](i)->iTrainID;
		}
		if (iTrainDetailArray->operator [](i)->iStationID == stationid) {
			found1 = EFalse;
			for (TInt j=0;j<timearray->Count();j++) {
				if (iTrainDetailArray->operator [](i)->iArriveTime != 8800 && iTrainDetailArray->operator [](i)->iArriveTime < timearray->operator[](j)) {
					timearray->InsertL(j,iTrainDetailArray->operator [](i)->iArriveTime);
					COSResult* result = new COSResult();
					result->iTime = iTrainDetailArray->operator [](i)->iArriveTime;
					result->iTrain = GetTrainByTrainID(iTrainDetailArray->operator [](i)->iTrainID);
					aOSResult->Insert(result,j);
					found1 = ETrue;
					break;
				}else if (iTrainDetailArray->operator [](i)->iArriveTime == 8800 && iTrainDetailArray->operator [](i)->iStartTime < timearray->operator[](j)) {
					timearray->InsertL(j,iTrainDetailArray->operator [](i)->iStartTime);
					COSResult* result = new COSResult();
					result->iTime = iTrainDetailArray->operator [](i)->iStartTime;
					result->iTrain = GetTrainByTrainID(iTrainDetailArray->operator [](i)->iTrainID);
					aOSResult->Insert(result,j);
					found1 = ETrue;
					break;
				}
			}
			if (!found1) {
				
				COSResult* result = new COSResult();
				if (iTrainDetailArray->operator [](i)->iArriveTime != 8800) {
					timearray->AppendL(iTrainDetailArray->operator [](i)->iArriveTime);
					result->iTime = iTrainDetailArray->operator [](i)->iArriveTime;
				}else {
					timearray->AppendL(iTrainDetailArray->operator [](i)->iStartTime);
					result->iTime = iTrainDetailArray->operator [](i)->iStartTime;
				}
				result->iTrain = GetTrainByTrainID(iTrainDetailArray->operator [](i)->iTrainID);
				aOSResult->Append(result);
			}	
			
		}
	}

	return ETrue;
}

TBool Engine::GetTrainByTrainName(const TDesC& aTrainName,RPointerArray<COTResult>* aOTResult)
{
	if (aTrainName.Length()<2 || aTrainName == _L("?") || aTrainName == _L("*") ||
	aTrainName == _L("*?") || aTrainName == _L("?*") || aTrainName == _L("**")
	|| aTrainName == _L("??")) return EFalse;
	
	TBuf<12> des1;
	TBuf<12> des2;
	TBuf<12> des3;
	_LIT(Kxin,"*");
	_LIT(Kgang,"/");
	des1.Append(Kxin);
	des1.Append(Kgang);
	des1.Append(aTrainName);
	des2.Append(aTrainName);
	des2.Append(Kgang);
	des2.Append(Kxin);
	des3.Append(aTrainName);
	
	TInt trainid = -1;
	TInt traindetailid = -1;
	
	for (TInt i = 0 ;i<iTrainCount;i++) {

		if ( iTrainArray->operator [](i)->iName->Des().MatchF(des3) != KErrNotFound 
		  || iTrainArray->operator [](i)->iName->Des().MatchF(des1) != KErrNotFound 
		  || iTrainArray->operator [](i)->iName->Des().MatchF(des2) != KErrNotFound) {
			trainid = iTrainArray->operator [](i)->iID;
			break;
		}
	}

	if (trainid < 0) return EFalse;

	for (TInt i=0;i< iTrainLineCount;i++)
		if (iTrainDetailArray->operator[](i)->iTrainID == trainid) {
			traindetailid = i;
			break;
		}
	
	if (traindetailid < 0 ) return EFalse;
	
	TInt nexttrainid;
	do {
		aOTResult->Append(iTrainDetailArray->operator[](traindetailid));
		traindetailid += 1;
		nexttrainid = iTrainDetailArray->operator[](traindetailid)->iTrainID;
	}while (nexttrainid == trainid);

	return ETrue;
}
CTrain* Engine::GetTrainByTrainID(TInt aTrainID)
{
	for (TInt i=0;i<iTrainArray->Count();i++)
		if (iTrainArray->operator [](i)->iID == aTrainID)
			return iTrainArray->operator [](i);
}

Station* Engine::GetStationByStationID(TInt aStationID)
{
	for (TInt i=0;i<iStationArray->Count();i++)
		if (iStationArray->operator [](i)->iID == aStationID)
			return iStationArray->operator [](i);
}
TInt Engine::GetTrainByTwoStations(const TDesC& aStationName1,const TDesC& aStationName2,RPointerArray<CTSSResult>* aTSSResult)
{
	if (aStationName1.Length()<2 || aStationName1 == _L("?") || aStationName1 == _L("*") ||
	aStationName1 == _L("*?") || aStationName1 == _L("?*") || aStationName1 == _L("**")
	|| aStationName1 == _L("??")) return -1;
	
	if (aStationName2.Length()<2 || aStationName2 == _L("?") || aStationName2 == _L("*") ||
	aStationName2 == _L("*?") || aStationName2 == _L("?*") || aStationName2 == _L("**")
	|| aStationName2 == _L("??")) return -1;
	
	TBuf16<12> des1;
	TBuf16<12> des2;
	TInt b1,b2,b3,b;
	TInt c1,c2,c3,c;
	TInt stationid;
	TInt trainid;
	TInt err;
	_LIT16(Kxin,"*");
	des1.Append(aStationName1);
	des1.Append(Kxin);
	des2.Append(aStationName2);
	des2.Append(Kxin);

	TBool found1 = EFalse;
	TBool found2 = EFalse;
	CArrayFixFlat<TInt>* station1array = new (ELeave) CArrayFixFlat<TInt>(10);
	CArrayFixFlat<TInt>* station2array = new (ELeave) CArrayFixFlat<TInt>(10);

	
	//寻找站点名,考虑可能用户输入的是北京,找到的是北京,北京西,北京南,北京北
	//station1array:始发站的站点序列,station2array:终点站的站点序列
	for (TInt i = 0 ;i<iStationCount;i++) {
		if ( iStationArray->operator [](i)->iName->Des().MatchF(des1) != KErrNotFound ) {
			found1 = ETrue;
			if (iStationArray->operator [](i)->iName->Des().Match(aStationName1) != KErrNotFound )
				station1array->InsertL(0,iStationArray->operator [](i)->iID);  
			else
				station1array->AppendL(iStationArray->operator [](i)->iID);  
		}
		if ( iStationArray->operator [](i)->iName->Des().MatchF(des2) != KErrNotFound ) {
			found2 = ETrue;
			if (iStationArray->operator [](i)->iName->Des().Match(aStationName2) != KErrNotFound )
				station2array->InsertL(0,iStationArray->operator [](i)->iID); 
			else
				station2array->AppendL(iStationArray->operator [](i)->iID); //find a train name,save its trainid.
		}
	}
	//如果始发站和终点站都存在
	if (!found1 || !found2) {
		station1array->Reset();
		delete station1array;
		station2array->Reset();
		delete station2array;
		
		return -1;
	}
	COTResult*	traindetail1;
	COTResult*	traindetail2;
	traindetail1 = NULL;
	traindetail2 = NULL;
	
	trainid = -1;
	TBool direction;	
	for (TInt i=0;i<iTrainLineCount;i++) {
		if (trainid != iTrainDetailArray->operator [](i)->iTrainID) {
			if (traindetail1 && traindetail2) {
				CTSSResult* tssresult = new CTSSResult;
				tssresult->SetTrain(GetTrainByTrainID(trainid));
				if (direction) {
					tssresult->SetStartOTResult(traindetail1);
					tssresult->SetArriveOTResult(traindetail2);
					tssresult->iDirection = direction;
					TBool insertflag = EFalse;
					for (TInt i=0;i<aTSSResult->Count();i++) {
						if (traindetail1->iStartTime < aTSSResult->operator[](i)->iStartOTResult->iStartTime) {
							insertflag = ETrue;
							aTSSResult->Insert(tssresult,i);							
							break;
						}
					}
					if (!insertflag)
						aTSSResult->Append(tssresult);	
				}
//				else {
//					tssresult->SetStartOTResult(traindetail2);
//					tssresult->SetArriveOTResult(traindetail1);
//				}
				
			}
			traindetail1 = NULL;
			traindetail2 = NULL;
			trainid = iTrainDetailArray->operator [](i)->iTrainID;
		}
		if (!traindetail1) {
			for (TInt j = 0;j< station1array->Count();j++)
				if (station1array->operator[](j) == iTrainDetailArray->operator [](i)->iStationID) {
					traindetail1 = iTrainDetailArray->operator [](i);
					if (traindetail2) direction = EFalse;
					if (traindetail1->iTrainID == 1149) {
						TInt a;
						a =1;
					}
					if (j==0)
						break;
				}
			if (traindetail1) continue;
		}
		if (!traindetail2) {
			for (TInt k = 0;k< station2array->Count();k++) {
				TInt a = station2array->operator[](k);
				TInt b = iTrainDetailArray->operator [](i)->iStationID;
				if (station2array->operator[](k) == iTrainDetailArray->operator [](i)->iStationID) {
					traindetail2 = iTrainDetailArray->operator [](i);
					if (traindetail1) direction = ETrue;
					if (k==0)
						break;
				}
			}
		}
				
	}
		
	if (aTSSResult->Count()==0) {
		return -2;
	}
	
	return 0;
}

void Engine::ConvGbk2Uni(CCnvCharacterSetConverter* aConverter,TDesC8& original, TDes& res) {

		TInt state=CCnvCharacterSetConverter::KStateDefault;
        TPtrC8 str( original );
        HBufC* iInfoText = HBufC::NewL( str.Length() );
        TPtr16 ptr = iInfoText->Des();
        
        if(CCnvCharacterSetConverter::EErrorIllFormedInput == aConverter->ConvertToUnicode(ptr, str, state))
                User::Leave(KErrArgument);
        
        res.Zero() ; 
        res.Copy(ptr) ; 
        
        //CleanupStack::PopAndDestroy(); 
        delete iInfoText;

}

⌨️ 快捷键说明

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