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

📄 tg.cpp

📁 c语言实现的全国交通咨询模拟系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		printf("该路线不存在!\n");
		return false;
	}
}


void scanf_Money(GraphType G, int &st,int &sn)
{
	while(1)
	{
		printf("请输入起始城市名称:");
		if(scanf_Vex(G,st)==true)
			break;
	}
	while(1)
	{
		printf("请输入终点城市名称:");
		if(scanf_Vex(G,sn)==true)
			break;
	}
}
	
void scanf_Time(GraphType G, int &st,int &sn,int &time)
{
	int hour,minute;
	while(1)
	{
		printf("请输入起始城市名称:");
		if(scanf_Vex(G,st)==true)
			break;
	}
	while(1)
	{
		printf("请输入终点城市名称:");
		if(scanf_Vex(G,sn)==true)
			break;
	}
	printf("请输入拟出发时间:");
	printf("\n几点>");
	scanf("%d",&hour);
	printf("几分>");
	scanf("%d",&minute);
	time=TimeChange(hour,minute);
}


/*********************************************************************************/

/***********************************< 结果打印函数 >******************************/


void Printf_city(GraphType GT)
{
   int i;
   printf("\n    ------------------------------通达城市信息---------------------------\n\n");
   for(i=0;i<MAXVTXNUM;i++)
   {
		if(GT.Flag[i]==1)
		{
			printf("编号[%d]:%s\t",GT.Adjlist[i].cityNumber,GT.Adjlist[i].cityName);
		}
   }
   printf("\n\n");
}

void Printf_train(GraphType GT)
{
	EdgeNode *q;
	
	int i;
	printf("\n    ------------------------------列车时刻表-----------------------------\n\n");
	printf("  车次号  始发城市  到达城市  价格   始发时间  到达时间   行驶时间   \n\n");
	for(i=0;i<MAXVTXNUM;i++)
	{
		if(GT.Flag[i]==1)
		{
		q=GT.Adjlist[i].firstEdge;
			while(q)
			{
				printf("    %4s  ",q->elem.Number);
				printf("%6s  ",GT.Adjlist[q->elem.ivex].cityName);
				printf("%6s  ",GT.Adjlist[q->elem.jvex].cityName);
				printf("%6d元  ",q->elem.Money);
				PrintTime(q->elem.StratTime);
				PrintTime(q->elem.EndTime);
				PrintTime(q->elem.Time);
				printf("\n");
			
				q=q->nextEdge;
			}
		}
	}
	printf("\n");
}

void Printf_plane(GraphType GP)
{
	EdgeNode *q;
	
	int i;
	printf("\n    ------------------------------飞机航班表-----------------------------\n\n");
	printf("  航班号  始发城市  到达城市  价格   始发时间  到达时间   飞行时间   \n\n");
	for(i=0;i<MAXVTXNUM;i++)
	{
		if(GP.Flag[i]==1)
		{
		q=GP.Adjlist[i].firstEdge;
			while(q)
			{
				printf("    %4s  ",q->elem.Number);
				printf("%6s  ",GP.Adjlist[q->elem.ivex].cityName);
				printf("%6s  ",GP.Adjlist[q->elem.jvex].cityName);
				printf("%6d元  ",q->elem.Money);
				PrintTime(q->elem.StratTime);
				PrintTime(q->elem.EndTime);
				PrintTime(q->elem.Time);
				printf("\n");
			
				q=q->nextEdge;
			}
		}
	}
	printf("\n");
}

void print_Money(GraphType GT, PathType p)             //最少钱输出
{
	int i;
	int sum=0;
	printf("\n最省钱路线:\n\n");
	for(i=0;i<p.len;i++)
	{
		printf("no%d.  ",i+1);
		printf("%s    ",p.edges[i].p.Number);
		printf("\n\t\t");
		printf("始发:");
		printf("\t[%d]:%4s  ",p.edges[i].p.ivex,GT.Adjlist[p.edges[i].p.ivex].cityName);
		PrintTime(p.edges[i].p.StratTime);		
		printf("\n\t\t");
		printf("到达:");
		printf("\t[%d]:%4s  ",p.edges[i].p.jvex,GT.Adjlist[p.edges[i].p.jvex].cityName);
		PrintTime(p.edges[i].p.EndTime);
		printf("%6d元  ",p.edges[i].p.Money);
		sum+=p.edges[i].p.Money;
		printf("\n\n");
	}
	printf("总共费用:%d元\n\n",sum);

}

void print_Time(GraphType GT, PathType p, int now)    //now是用户自定义的查询时间,和求取时候的参数now一致
{	
	int i,sum_Time=0,hour=0,minute=0;
	printf("\n最快到达路线:\n\n");
	for(i=0;i<p.len;i++)                   //最短时间输出
	{
		printf("no%d.  ",i+1);
		printf("%s    ",p.edges[i].p.Number);
		printf("\n\t\t");
		printf("始发:");
		printf("\t[%d]:%4s  ",p.edges[i].p.ivex,GT.Adjlist[p.edges[i].p.ivex].cityName);
		PrintTime(p.edges[i].p.StratTime);		
		printf("\n\t\t");
		printf("到达:");
		printf("\t[%d]:%4s  ",p.edges[i].p.jvex,GT.Adjlist[p.edges[i].p.jvex].cityName);
		PrintTime(p.edges[i].p.EndTime);
		printf("%6d元  ",p.edges[i].p.Money);

		if(p.edges[i].p.StratTime<now&&p.edges[i].p.EndTime>=now)
			sum_Time+=(1440+TimeSub(p.edges[i].p.EndTime,now));
		else
			sum_Time+=TimeSub(p.edges[i].p.EndTime,now);
		now=p.edges[i].p.EndTime;
		printf("\n\n");
	}
	
	hour=sum_Time/60;
	minute=sum_Time%60;
	printf("共需%d小时%d分\n\n",hour,minute);
}
/*************************************************************************************/

/************************************<菜单函数>***************************************/


void Inquire_Money(GraphType GT,GraphType GP)
{
	PathType p;
	int n=5;
	int st,nd;
	while(1)
	{
		printf("\t\t1.查询飞机");
		printf("\t2.查询火车");
		printf("\t0.退出");
		printf("\t    请选择:");
		scanf("%d",&n);
		fflush(stdin);
		printf("\n");
		if(n==1)
		{
			scanf_Money(GP,st, nd);
			GetMoneyLeastPath (GP,st,nd,p);   //最少钱数
			print_Money(GP,p);
			break;
		}
		else if(n==2)
		{
			scanf_Money(GT,st, nd);
			GetMoneyLeastPath (GT,st,nd,p);   //最少钱数
			print_Money(GT,p);
			break;
		}
		else if (n==0)
			break;
		else
			printf("输入有误,请重新输入!\n\n");
	}
}
void Inquire_Time(GraphType GT,GraphType GP)
{
	PathType p;
	int n=5;
	int st,nd;
	int time;
	while(1)
	{
		printf("\t\t1.查询飞机");
		printf("\t2.查询火车");
		printf("\t0.退出");
		printf("\t    请选择:");
		scanf("%d",&n);
		fflush(stdin);
		printf("\n");
		if(n==1)
		{
			scanf_Time(GP,st,nd,time);
			GetTimeShortestPath (GP,st,nd,time,p);  //最短时间
			print_Time(GP,p,time);
			break;
		}
		else if(n==2)
		{
			scanf_Time(GT,st,nd,time);
			GetTimeShortestPath (GT,st,nd,time,p);  //最短时间
			print_Time(GT,p,time);
			break;
		}
		else if (n==0)
			break;
		else
			printf("输入有误,请重新输入!\n\n");
	}	
		
}

void Inquire_All(GraphType GT,GraphType GP)
{
	int n=5;
	while(1)
	{
		n=5;
		printf("\n\t\t1.查询通达城市\n");
		printf("\t\t2.查询列车时刻表\n");
		printf("\t\t3.查询航班时刻表\n");
		printf("\t\t0.退出\n");
		printf("\t    请选择:");
		scanf("%d",&n);
		fflush(stdin);
		if(n==1)
		{
			Printf_city(GT);
			break;
		}
		else if(n==2)
		{
			Printf_train(GT);
			break;
		}
		else if(n==3)
		{
			Printf_plane(GP);
			break;
		}
		else if(n==0)
			break;
		else
			printf("\n输入有误,请重新输入!\n");
	}
}

void Inquire_Menu(GraphType GT,GraphType GP)
{
	while(1)
	{
		int choice=5;
		printf("			        管理系统\n");
		printf("          ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
		printf("          ┃                   1.最省钱咨询                       ┃\n");
		printf("          ┃                   2.最快到达咨询                     ┃\n");
		printf("          ┃                   3.查询当前资料                     ┃\n");
		printf("          ┃                   0.退出系统                         ┃\n");
		printf("          ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
		printf("           请选择: ");
		scanf("%d",&choice);
		fflush(stdin);
		if(choice==0) break;
		switch(choice)
		{
		case 1: Inquire_Money(GT,GP);break;
		case 2: Inquire_Time(GT,GP);break;
		case 3: Inquire_All(GT,GP);break;
		default:{
					printf("	   输入错误选项,请重试。\n\n");
				}
		}
	}
}

void City_Edit(GraphType &GT,GraphType &GP)
{
	int n,i;
	char name[10];
	while(1)
	{
	printf("\n");
	printf("\t\t1.添加城市");
	printf("\t2.删除城市");
	printf("\t0.退出");
	printf("\t\t请选择:");
	scanf("%d",&n);
	fflush(stdin);
	if(n==1)
	{	
		printf("\n请输入添加城市的名称:");
		scanf("%s",&name);
		fflush(stdin);
		InsertVex(GT,name);
		InsertVex(GP,name);
		printf("\n添加成功!");
		break;
	}
	else if(n==2)
	{
		printf("\n请输入删除城市的名称:");
		if(scanf_Vex(GT,i)==true)
		{
			DeleteVex(GT,i);
			DeleteVex(GP,i);
			printf("删除成功!\n");
		}
		break;
	}
	else if(n==0)
	{
		printf("\n");
		break;
	}
	else
		printf("输入有误,请重新输入!");
	}
}


void Train_Edit(GraphType &GT,GraphType GP)
{
	int n,st,sn;
	int hour,minute;
	char number[10];
	EdgeType q;
	while(1)
	{
	printf("\n");
	printf("\t\t1.添加列车");
	printf("\t2.删除列车");
	printf("\t0.退出");
	printf("\t\t请选择:");
	scanf("%d",&n);
	fflush(stdin);
	if(n==1)
	{	
		while(1)
		{
			printf("\n请输入起始城市的名称:");
			if(scanf_Vex(GT,st)==true)
				break;
		}
		while(1)
		{
			printf("\n请输入终点城市的名称:");
			if(scanf_Vex(GT,sn)==true)
				break;
		}
		
		printf("\n请输入车次:");
		scanf("%s",&number);
		fflush(stdin);
		
		q.ivex=st;
		q.jvex=sn;
		strcpy(q.Number,number);
	
		printf("\n请输入票价:");
		scanf("%d",&q.Money);
		fflush(stdin);
	
		printf("\n请输入起始时间:");
		printf("\n几点> ");
		scanf("%d",&hour);
		fflush(stdin);
		printf("几分> ");
		scanf("%d",&minute);
		fflush(stdin);
		q.StratTime=TimeChange(hour,minute);
	
		printf("\n请输入到站时间:");
		printf("\n几点> ");
		scanf("%d",&hour);
		fflush(stdin);
		printf("几分> ");
		scanf("%d",&minute);
		fflush(stdin);
	
		q.EndTime=TimeChange(hour,minute);

		q.Time=TimeSub(q.EndTime,q.StratTime);

		printf("\n行车时间: %d分钟",q.Time);
		
		InsertEdge(GT,q);

		printf("\n添加成功!");
		break;
	}
	else if(n==2)
	{
		while(1)
		{
			printf("\n请输入起始城市的名称:");
			if(scanf_Vex(GT,st)==true)
				break;
		}
		while(1)
		{
			printf("\n请输入终点城市的名称:");
			if(scanf_Vex(GT,sn)==true)
				break;
		}

		printf("\n请输入车次:");
		if(scanf_Number(GT,st,sn,number))
		{
		q.ivex=st;
		q.jvex=sn;
		strcpy(q.Number,number);
		DeleteEdge(GT,q);
		printf("删除成功!\n");
		break;
		}
	}
	else if(n==0)
	{
		printf("\n");
		break;
	}
	else
		printf("输入有误,请重新输入!");
	}

}

void Plane_Edit(GraphType GT,GraphType &GP)
{
	int n,st,sn;
	int hour,minute;
	char number[10];
	EdgeType q;
	while(1)
	{
	printf("\n");
	printf("\t\t1.添加航班");
	printf("\t2.删除航班");
	printf("\t0.退出");
	printf("\t\t请选择:");
	scanf("%d",&n);
	fflush(stdin);
	if(n==1)
	{	
		while(1)
		{
			printf("\n请输入起始城市的名称:");
			if(scanf_Vex(GP,st)==true)
				break;
		}
		while(1)
		{
			printf("\n请输入终点城市的名称:");
			if(scanf_Vex(GP,sn)==true)
				break;
		}
		
		printf("\n请输入航班号:");
		
		scanf("%s",number);
		fflush(stdin);
	
		q.ivex=st;
		q.jvex=sn;
		strcpy(q.Number,number);
	
		printf("\n请输入票价:");
		scanf("%d",&q.Money);
		fflush(stdin);
	
		printf("\n请输入起始时间:");
		printf("\n几点> ");
		scanf("%d",&hour);
		fflush(stdin);
		printf("几分> ");
		scanf("%d",&minute);
		fflush(stdin);
		q.StratTime=TimeChange(hour,minute);
	
		printf("\n请输入到达时间:");
		printf("\n几点> ");
		scanf("%d",&hour);
		fflush(stdin);
		printf("几分> ");
		scanf("%d",&minute);
		fflush(stdin);
	
		q.EndTime=TimeChange(hour,minute);

		q.Time=TimeSub(q.EndTime,q.StratTime);

		printf("\n行车时间: %d分钟",q.Time);
		
		InsertEdge(GP,q);

		printf("\n添加成功!");
		break;
	}
	else if(n==2)
	{
		while(1)
		{
			printf("\n请输入起始城市的名称:");
			if(scanf_Vex(GT,st)==true)
				break;
		}
		while(1)
		{
			printf("\n请输入终点城市的名称:");
			if(scanf_Vex(GT,sn)==true)
				break;
		}

		printf("\n请输入航班号:");
		if(scanf_Number(GP,st,sn,number))
		{
		q.ivex=st;
		q.jvex=sn;
		strcpy(q.Number,number);
		DeleteEdge(GP,q);
		printf("删除成功!\n");
		break;
		}
	}
	else if(n==0)
	{
		printf("\n");
		break;
	}
	else
		printf("输入有误,请重新输入!");
	}

}


void Manage_Menu(GraphType &GT,GraphType &GP)
{
	while(1)
	{
		int choice=5;
		printf("			        管理系统\n");
		printf("          ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
		printf("          ┃                   1.城市编辑                         ┃\n");
		printf("          ┃                   2.列车时刻表编辑                   ┃\n");
		printf("          ┃                   3.航班时刻表编辑                   ┃\n");
		printf("          ┃                   4.查询当前资料                     ┃\n");
		printf("          ┃                   0.退出系统                         ┃\n");
		printf("          ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
		printf("           请选择: ");
		scanf("%d",&choice);
		fflush(stdin);
		if(choice==0) break;
		switch(choice)
		{
		case 1: City_Edit(GT,GP);break;
		case 2: Train_Edit(GT,GP);break;
		case 3: Plane_Edit(GT,GP);break;
		case 4: Inquire_All(GT,GP);break;
		default:{
					printf("	   输入错误选项,请重试。\n\n");
				}
		}
	}
}

int Main_Menu(GraphType &GT,GraphType &GP)
{
	while(1)
	{
		int choicem=3;
		printf("\n");
		printf("	★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
		printf("   	★                                                          ★\n");
		printf("   	★                  欢迎进入全国交通咨询系统                ★\n");
		printf("   	★                                                          ★\n");
		printf("   	★                                          <DOS 测试版>    ★\n");
		printf("   	★                                                          ★\n");
		printf("   	★                                                          ★\n");
		printf("   	★    姓 名:刘 旸    学 号:02D189    班 级:软双23        ★\n");
		printf("   	★                                                          ★\n");
		printf("	★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
		printf("\n");
		printf("          ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
		printf("          ┃                    1.咨询系统                        ┃\n");
		printf("          ┃                    2.管理系统                        ┃\n");
		printf("          ┃                    0.退出系统                        ┃\n");
		printf("          ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
		printf("           请选择: ");
		scanf("%d",&choicem);
		fflush(stdin);
		switch(choicem)
		{
		case 1: Inquire_Menu(GT,GP);break;
		case 2: Manage_Menu(GT,GP);break;
		case 0:return choicem;
		default:{
					printf("	   输入有误,请重试。\n\n");
				}
		}//switch
	}//while
}
/*************************************************************************************/

/************************************主函数*******************************************/

void main()
{
	GraphType GT;   //火车图
	GraphType GP;   //飞机图  
	
	GreateGraph (GT);
	GreateGraph (GP);

	OpenGraph_T(GT);  //打开已经存在火车的数据
	OpenGraph_P(GP);  //打开已经存在飞机的数据

	Main_Menu(GT,GP);

	SaveGraph_T(GT);     //保存火车数据
	SaveGraph_P(GP);     //保存飞机数据

	DistoryGraph (GT);
	DistoryGraph (GP);

}
/*************************************************************************************/

⌨️ 快捷键说明

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