?? xitong.h
字號:
#include<iostream.h>
#include"checi.h"
#include<stdlib.h>
#include<stdio.h>
CheCi CC[200];
Station stop[200][100];
char a[5000];int ac=0;
class TLxitong //代表鐵路系統類
{
public:
CheCi * tp;//指針tp指向全部車次組成的鏈表
void initial();//初始化系統:從文件checi.txt讀取各車次相關信息,并構建鏈表
CheCi *TNsearch();
CheCi *_TNsearch();
void STsearch();
void display();
int Zhida(char[],char[]);
int _Zhida(char[],char[]);
int Luguo(char[],char[]);
int _Luguo(char[],char[]);
int Zhuanche(char[],char[]);
void TicketOrder();
void TicketCancel();
void ModefyTmessage();
void InsertRecord(CheCi * value);
};
//將字符數組轉化為數字
int cti(char a[],int n)
{int sum=0,i,j,s;
for(i=0;i<=n;i++)
{
s=0;
if(a[i]=='0')sum=sum+0;
else
{
s=a[i]-48;
for(j=1;j<=n-i;j++)
s=s*10;
sum=sum+s;
}
}
return sum;
}
void TLxitong::initial()
{
char temp[15];
int y=0,i=0,k,j=0,sc=0,x=0;
for(int b=0;b<15;b++)
temp[b]='\0';
FILE * fp=fopen("checi.txt","r");
if(fp==NULL)
{
cout<<"can not open checi.txt!"<<endl;
exit(0);
}
//else cout<<"ok"<<endl;
while(!feof(fp))
{a[y]=fgetc(fp);y++;}
//cout<<"讀取文件信息完畢"<<endl;
ac=y;y=0;
while(y<=ac-2)
{ //車次號、始發站名、終點站名、始發時間、終點時間
while(x<5)
{
while(a[y]!='-'&&a[y]!=';'&&y<=ac)
{
temp[i]=a[y];i++;
y++;
}
if(a[y]=='-'||a[y]==';')y++;
switch(x)
{
case 0:strcpy(CC[j].TrainNum,temp);/*printf("%s",CC[j].TrainNum);cout<<endl;*/break;
case 1:strcpy(CC[j].start,temp);/*printf("%s",CC[j].start);cout<<endl;*/break;
case 2:strcpy(CC[j].end,temp);/*printf("%s",CC[j].end);cout<<endl;*/break;
case 3:strcpy(CC[j].Stime,temp);/*printf("%s",CC[j].Stime);cout<<endl;*/break;
case 4:strcpy(CC[j].Etime,temp);/*printf("%s",CC[j].Etime);cout<<endl;*/
}
x++;
for(k=0;k<=i;k++)
temp[k]='\0';
i=0;
}
x=0;
//全程票價
while(a[y]!='-'&&y<=ac)
{
temp[i]=a[y];i++;
y++;
}
if(a[y]=='-')y++;
CC[j].Zprice=cti(temp,i-1);
for(k=0;k<=i;k++)
temp[k]='\0';
i=0;
//票量
while(a[y]!='-')
{
temp[i]=a[y];i++;
y++;
}
if(a[y]=='-')y++;
CC[j].Count=cti(temp,i-1);
for(k=0;k<=i;k++)
temp[k]='\0';
i=0;
//讀取站點,并初始化車次的站點指針
if(a[y]=='(')
{ y++;
//cout<<"start read station information:"<<endl;
do
{
while(a[y]!='+'&&a[y]!=';'&&a[y]!=')'&&y<=ac)
{
temp[i]=a[y];i++;
y++;
}
switch(x)
{
case 0:strcpy(stop[j][sc].staname,temp);break;
case 1:strcpy(stop[j][sc].time,temp);break;
case 2:stop[j][sc].price=cti(temp,i-1);
}
for(k=0;k<=i;k++)
temp[k]='\0';
i=0;
if(a[y]==';')//為;時說明一個站點的信息讀取完畢,將站點鏈接起來
{
if(sc==0){CC[j].p=&(stop[j][sc]);stop[j][sc].next=NULL;}
else {stop[j][sc-1].next=&stop[j][sc];stop[j][sc].next=NULL;}
sc++;x=0;y++;
}
else
{
if(a[y]=='+') {x++;y++;}
else
{stop[j][sc-1].next=&stop[j][sc];
stop[j][sc].next=NULL;y++; break;
}//為')'時說明所有站點信息已讀完,跳出讀站點信息的循環
}
}while(1);
//cout<<"讀取站點信息完畢!"<<endl;
}
if(a[y]=='$')
{y++;CC[j].link=NULL;j++;sc=0;x=0;/*cout<<endl<<"此車次信息結束"<<endl;*/}//讀取車次信息的結束標記
//cout<<j<<endl;//cout<<y<<endl;
}
//將所有車次鏈接起來成為鏈表形式,并初始化指針tp,指向第一個車次
//cout<<"!!!!!!!"<<endl;
for(int m=1;m<=j;m++)
CC[m-1].link=&(CC[m]);
tp=&(CC[0]);
//cout<<"ok1111"<<endl;
}
////////////////////////
void TLxitong::display()
{
CheCi * t=tp;
Station * h=NULL;
while(t!=NULL)
{
h=t->p;
while(h!=NULL)
{
cout<<h->staname<<endl;
cout<<h->time<<endl;
cout<<h->price<<endl;
h=h->next;
}
cout<<"!!!!!!!!"<<endl;
t=t->link;
}
}
//輸入車次查詢
void ss()
{ cout<<"請輸入要查詢的車次."<<endl;
}
CheCi* TLxitong::_TNsearch()
{
char chaxuncheci[5];
cin>>chaxuncheci;
CheCi *checi=tp; int exist=0;
//checi->copy(tp);
while(checi!=NULL)
{
if(strcmp(checi->TrainNum,chaxuncheci)==0)
{
checi->display();exist=1;break;
}
checi=checi->link;
}
if(exist==0){cout<<"對不起,沒有您所查找的車次。"<<endl;return NULL;}
else return checi;
}
CheCi *TLxitong::TNsearch()
{
ss();
CheCi *checi=_TNsearch();
return checi;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void dd()
{cout<<"直達車次有 "<<endl;
}
int TLxitong ::_Zhida(char a[],char b[])//站點查詢:輸入起始地點查詢車次,若無直達車次,給出中轉建議
{
CheCi *checi;
checi=tp;int zhida=0;
while(checi->link!=NULL)
{
if(strcmp(checi->start,a)==0)
{
Station *sta1=checi->p;
while(sta1!=NULL)
{
if(strcmp(sta1->staname,b)==0)
{ dd();
checi->display();
zhida=1;
cout<<endl;
}
sta1=sta1->next;
}
}
checi=checi->link;
}
// if(zhida==0)cout<<"從此站無始發直達車。"<<endl;
return zhida;
}
int TLxitong::Zhida(char a[],char b[])
{
dd();
int z=_Zhida(a,b);
return z;
}
void ll()
{cout<<"從此站又路過車有:"<<endl;
}
int TLxitong::_Luguo(char a[],char b[])
{ CheCi *checi=new CheCi(tp); int luguo=0;
while(checi->link!=NULL)
{
if(strcmp(checi->end,b)==0)
{
Station *sta2=checi->p;
while(sta2!=NULL)
{
if(strcmp(sta2->staname,a)==0)
{ ll();
luguo=1;
checi->display();
cout<<endl;
}
sta2=sta2->next;
}
}
checi=checi->link;
}
// if(luguo==0) cout<<"此站無路過車。"<<endl;
return luguo;
}
int TLxitong::Luguo(char a[],char b[])
{
ll();
int l=_Luguo(a,b);
return l;
}
int TLxitong::Zhuanche(char a[],char b[])
{ CheCi *checi=new CheCi(tp); int zhuanche=0;
//cout<<"checi="<<checi<<endl;
checi=checi->link;
while(checi->link!=NULL)
{//while1
Station *s=checi->p;
//cout<<"p="<<checi->p<<endl;
//checi->p->STdisplay();
while(s!=NULL)
{//while2
// s->STdisplay();
if(strcmp(s->staname,a)==0)
{ Station *sta2=s->next;
while(sta2!=NULL)
{
int zd=0;
zd=_Zhida(sta2->staname,b);
if(zd==1)
{
checi->display();
cout<<endl; zhuanche=1;
cout<<"*********************"<<endl;
}
if(zd==0)
{
int lg=0;
lg=_Luguo(sta2->staname,b);
if(lg==1)
{
checi->display();
cout<<endl;zhuanche=1;
cout<<"**********************"<<endl;
}
}
sta2=sta2->next;
}
}
s=s->next;
}//while2
checi=checi->link;
}//while1*/
return zhuanche;
}
void TLxitong::STsearch()
{
cout<<"請輸入始發站點名 "<<endl;
char shifa[15];
for(int i=0;i<15;i++)
shifa[i]='\0';
cin>>shifa;
cout<<"請輸入終點站名 "<<endl;
char zhongdian[15];
for(i=0;i<15;i++)
zhongdian[i]='\0';
cin>>zhongdian;
int zhida=0;
zhida=Zhida(shifa,zhongdian);
if(zhida==0)
{
cout<<"從此站無始發直達車。"<<endl;
int luguo=0;
luguo=Luguo(shifa,zhongdian);
if(luguo==0)
{cout<<"無路過車輛。"<<endl;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -