📄 engine.cpp
字号:
{
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 + -