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

📄 xitong.h

📁 火车定票系统
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -