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

📄 train_graph.c

📁 全国旅游交通查询
💻 C
字号:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define OK 1
#define TRUE 1
#define ERROR 0
#define OVERFLOW -2
#define PR printf
#define SIZE 10
typedef int status;

typedef struct time{
	int day;
	int hour;
	int minute;
}time;
typedef struct town{
	char name[9];
	time arrive;
	time leave;
	struct town *next_town;
}town;
typedef struct train{
	char train_num[8];
	char start_place[9];
	char end_place[9];
	int fare;
	int hour;
	struct train *next_train;
	struct town *next_town;
}train;

train *init_train(){//初始化链表
	train *l;
	l=(train*)malloc(sizeof(train));
	if(l==NULL){
		exit(OVERFLOW);
		}
	l->next_town =NULL;
	l->next_train =NULL;
	return l;
}

status insert_train(train *l, char *train_num,char *start_place,char *end_place,int fare,int hour)
{
	train *p;
	p=(train*)malloc(sizeof(train));
	strcpy(p->train_num ,train_num);
	strcpy(p->start_place ,start_place);
	strcpy(p->end_place ,end_place);
	p->fare =fare;
	p->hour =hour;
	p->next_town =NULL;
	p->next_train =l->next_train ;
	l->next_train =p;
	return OK;
}

status find_train_num(train *l,char *train_num)
{
	train *p;
	p=l->next_train;
	for(;p!=NULL;p=p->next_train )
	{
		if(strcmp(train_num,p->train_num )==0)
		{
			PR("   列车号  始发站  终点站    车费        时间\n");
			PR("%8s%8s%8s%8d元%8d小时\n",p->train_num ,p->start_place ,p->end_place ,p->fare ,p->hour );
						return OK;
		}
	}
	PR("对不起,无 %s 列车!\n",train_num);
	return ERROR;
}

status find_place(train *l,char *start_place,char *end_place,char choice)
{                            //choice 0:最快,1:最省钱,2:全部
	train *p;
	train *q[SIZE];
	train *r;
	int i=0,j=0;
	p=l->next_train;
	for(;p!=NULL;p=p->next_train  )
	{
		if(strcmp(start_place,p->start_place)==0&&strcmp(end_place,p->end_place)==0)
		{
//			PR("%s,%s,%s,%d,%d\n",p->train_num ,p->start_place ,p->end_place ,p->fare ,p->hour );
			q[i]=p;
			i++;
		}
	}
	if(i>0)
	{
		if(choice=='0')
		{
			r=q[0];
			for(j=1;j<i;j++)
			{
				if(q[j]->hour <r->hour )
				{
					r=q[j];
				}
			}
			PR("   列车号  始发站  终点站    车费        时间\n");
			PR("%8s%8s%8s%8d元%8d小时\n",r->train_num ,r->start_place ,r->end_place ,r->fare ,r->hour );
			return OK;
		}
		else if (choice=='1')
		{
			r=q[0];
			for(j=1;j<i;j++)
			{
				if(q[j]->fare < r->fare )
				{
					r=q[j];
				}
			}
			PR("   列车号  始发站  终点站    车费        时间\n");
			PR("%8s%8s%8s%8d元%8d小时\n",r->train_num ,r->start_place ,r->end_place ,r->fare ,r->hour );
			return OK;
		}
		else if (choice=='2')
		{
			for(j=0;j<i;j++)
			{
				PR("   列车号  始发站  终点站    车费        时间\n");
				PR("%8s%8s%8s%8d元%8d小时\n",q[j]->train_num ,q[j]->start_place ,q[j]->end_place ,q[j]->fare ,q[j]->hour );
			}	
		}
	}
	else {//当没有一辆时.
		PR("无符合条件的列车!\n");
		return ERROR;
	}
	return ERROR;
}

status creat_train(train *l)
{
	int i=0;
	char *train_num[]={"T167","T168","1363","1364","37","38","K701","K702","T61","T62"};
	char *start_place[]={"北京","南昌","北京","成都","北京","武汉","北京","太原","北京","贵阳"};
	char *end_place[]={"南昌","北京","成都","北京","武汉","北京","太原","北京","贵阳","北京"};
	int fare[]={170,170,150,150,140,140,40,40,201,201};
	int hour[]={14,14,22,22,11,11,5,5,27,27};
	for(i=0;i<10;i++)
	{
		insert_train(l,train_num[i],start_place[i],end_place[i],fare[i],hour[i]);
	}
	return OK;
}

status print_train(train *l)
{
	train *p=l;
	PR("   列车号  始发站  终点站    车费        时间\n");     
	for(p=p->next_train ;p!=NULL;p=p->next_train )
	{
		PR("%8s%8s%8s%8d元%8d小时\n",p->train_num ,p->start_place ,p->end_place ,p->fare ,p->hour );
	}
	return OK;
}

void main()
{
	char ch,ch2,choice,start_place[9],end_place[9],train_num[8];
	int t=1,tt=1;
	train *tr=init_train();
	creat_train(tr);
	while(t==1)
	{
		PR("*---------------------------------------*\n");
		PR("*--旅游交通查询系统选择菜单-------------*\n");
		PR("*	    火车信息查询---------0      *\n");
		PR("*	    城市路径查询---------1      *\n");
		PR("*	    查看所有信息---------2      *\n");
		PR("*	    退出-----------------3      *\n");
		PR("*---------------------------------------*\n");
		PR("请选择: ");
		ch = getch();
		PR("%c\n",ch);
		if(ch=='0')
		{
			while(tt==1)
			{
				PR("*--火车信息查询选择菜单-----------------*\n");
				PR("*	 按车次查询--------------0      *\n");
				PR("*	 按出发地与目的地查询----1      *\n");
				PR("*	 退出--------------------2      *\n");
				PR("*---------------------------------------*\n");
				PR("请选择: ");
				ch2 = getch();
				PR("%c\n",ch2);
				if(ch2=='0')
				{
					PR("请输入列车号: ");
					scanf("%s",train_num);
					find_train_num(tr,train_num);
				}
				else if(ch2=='1')
				{
					PR("请输入始发站: ");
					scanf("%s",start_place);
					PR("请输入终点站: ");
					scanf("%s",end_place);
					PR("*----------------------------*\n");
					PR("*--按车次查询选择菜单------*\n");
					PR("*	 最快-------0        *\n");
					PR("*	 最省钱-----1        *\n");
					PR("*	 全部-------2        *\n");
					PR("*	 退出-------3        *\n");
					PR("*----------------------------*\n");	
					PR("请选择: ");
					choice = getch();
					PR("%c\n",choice);
					find_place(tr,start_place,end_place,choice);
				}
				else if(ch2=='2'){
					tt=0;
				}
				else {
					PR("你的输入有误\n");
				}
			}//end while
		}//end ch=0:火车信息查询
		else if(ch=='1')
		{
			PR("有待完善!\n");
		}
		else if(ch=='2')
		{
			print_train(tr);
		}
		else if(ch=='3')
		{
			t=0;
		}
		else {
			PR("你的输入有误\n");
		}
	}//end while
}

⌨️ 快捷键说明

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