📄 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 + -