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

📄 完成.cpp

📁 全副交通管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			  printf("\n请输入起始城市的名称:");
              scanf("%s",name);

			  for(i=0;i<MAXNODE;i++)  
			  {
				  if(strcmp(GP.Adjlist[i].cityname,name)==0&&GP.Flag[i]==1)
                   break;
				  else if(i==MAXNODE-1){printf("\n该城市不存在,请添加!");break;}
              }
		 
              
			  printf("\n请输入终点城市的名称:");
               scanf("%s",name);

              for(j=0;j<MAXNODE;j++)  
			  {
				  if(strcmp(GP.Adjlist[j].cityname,name)==0&&GP.Flag[j]==1)
                   break;
				  else if(j==MAXNODE-1){printf("\n该城市不存在,请添加!");break;}
              }

			  printf("\n请输入航班号:");
		       scanf("%s",number);
              
			   q.infor.ivex=i;
			   q.AdjVertex=j;

               strcpy(q.infor.Number,number);

			   printf("\n请输入票价:");
		        scanf("%d",&q.infor.Money);

				printf("\n请输入起飞时间:");
		              printf("\n几点:");
		          scanf("%d",&hour);
		
		          printf("几分: ");
		         scanf("%d",&minute);
	
		     q.infor.StratTime=TimeChange(hour,minute);
	
		   printf("\n请输入到站时间:");
	     	   printf("\n几点: ");
		    scanf("%d",&hour);
		
		   printf("几分: ");
		   scanf("%d",&minute);
		
		q.infor.EndTime=TimeChange(hour,minute);

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

		 printf("\n行车时间: %d分钟",q.infor.Time);
		
		InsertEdge(GP,q);  
          printf("\n添加成功!");
		break;
	}

	  if(n==2)
	  {
          
			  printf("\n请输入起始城市的名称:");
              scanf("%s",name);

			  for(i=0;i<MAXNODE;i++)  
			  {
				  if(strcmp(GP.Adjlist[i].cityname,name)==0&&GP.Flag[i]==1)
                   break;
				  else if(i==MAXNODE-1){printf("\n该城市不存在,请添加!");break;}
              }
		 
              
			  printf("\n请输入终点城市的名称:");
               scanf("%s",name);

              for(j=0;j<MAXNODE;j++)  
			  {
				  if(strcmp(GP.Adjlist[j].cityname,name)==0&&GP.Flag[j]==1)
                   break;
				  else if(j==MAXNODE-1){printf("\n该城市不存在,请添加!");break;}
              }
   
            	printf("\n请输入车次:");
				if(LocateEdage(GP,i,j,number))
				{
					q.infor.ivex=i;
					q.AdjVertex=j;
					strcpy(q.infor.Number, number);
					DeleteEdge(GP,q);  
		            printf("删除成功!\n");
		          break;
				}
	}
                  
     
	  else if(n==0)
	  {
		  printf("\n");
		break;
	  }
	
	 
	  else
		printf("输入有误,请重新输入!");
   }//while ends	

}//Edit_Plane ends




//=============================================================================
//=============================<信息查询>==================================
void GetInfor_Train(GraphType G)  //火车时刻表查询
{
	
    arctype *p;
	int i;

	
    printf("\n                火车时刻表                 \n");
	printf("车次  出发城市 到达城市 价格  发车时间  到达时间  行驶时间\n");
	
	for(i=0;i<MAXNODE;i++)
	{
		if(G.Flag[i]==1) 
		{
			p=G.Adjlist[i].FirstArc;
	     	while(p)
			{
			   printf("%s\t",p->infor.Number);
			   printf("%s\t",G.Adjlist[p->infor.ivex].cityname);
		       printf("%s\t",G.Adjlist[p->AdjVertex].cityname);
			   printf("%d\t",p->infor.Money);
			   PrintTime(p->infor.StratTime);
               PrintTime(p->infor.EndTime);
			   PrintTime(p->infor.Time);
			   printf("\n");
			
				p=p->NextArc;
			}
		}
	}
	printf("\n");
}
	
void GetInfor_Plane(GraphType G)  //航班时刻表查询	
{
   arctype *p;
	
	int i;

	printf("\n                 飞机航班表                    \n");
	printf("航班号  始发城市  到达城市  价格  始发时间  到达时间  飞行时间\n");
	for(i=0;i<MAXNODE;i++)
	{
		if(G.Flag[i]==1)
		{
		p=G.Adjlist[i].FirstArc;
			while(p)
			{
				
			   printf("%s\t",p->infor.Number);
			   printf("%s\t",G.Adjlist[p->infor.ivex].cityname);
		       printf("%s\t",G.Adjlist[p->AdjVertex].cityname);
			   printf("%d\t",p->infor.Money);
			   PrintTime(p->infor.StratTime);
               PrintTime(p->infor.EndTime);
			   PrintTime(p->infor.Time);
			   printf("\n");
			
				p=p->NextArc;
			}
		}
	}
	printf("\n");
} 	
	
void GetInfor_City(GraphType G) //城市信息查询
{
	
   int i;
   printf("\n                     城市信息                     \n");
   for(i=0;i<MAXNODE;i++)
   {
		if(G.Flag[i]==1)
		{
			printf("%s\t",G.Adjlist[i].cityname);
		}
   }
   printf("\n\n");
}


void GetInfor(GraphType &GT,GraphType &GP)
{
	int n;
	while(1)
	{
	
		printf("\n\t\t    1.查询通达城市\n");
		printf("\t\t    2.查询列车时刻表\n");
		printf("\t\t    3.查询航班时刻表\n");
		printf("\t\t    0.退出\n");
		printf("\t        请选择:");

		scanf("%d",&n);
		
		if(n==1)
		{
			GetInfor_City(GT);
			break;
		}
		else if(n==2)
		{
			GetInfor_Train(GT);
			break;
		}
		else if(n==3)
		{
			GetInfor_Plane(GP);
			break;
		}
		else if(n==0)
			break;
		else
			printf("\n输入有误,请重新输入\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");
		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");
		printf("到达:");
		printf("\t[%d]:%4s  ",p.edges[i].vy,GT.Adjlist[p.edges[i].vy].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)    
{	
	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");
		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");
		printf("到达:");
		printf("\t[%d]:%4s  ",p.edges[i].vy,GT.Adjlist[p.edges[i].vy].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);
}

//========================================================================
/***************************<PathType 基本操作>********************************/
void InitPath (PathType &pa)
{
	//初始化pa为一条空路径(pa.len=0)
	pa.len=0;
}

void copyPath (PathType &p1,PathType &p2)
{
	//复制路径p1=p2
	int i;
	for(i=0;i<p2.len;i++)
	{
		p1.edges[i].vx=p2.edges[i].vx;
		p1.edges[i].vy=p2.edges[i].vy;
		p1.edges[i].p =p2.edges[i].p;
	}
	p1.len=p2.len;
}

void InsertPath (PathType &pa, int v, int w, EdgeType t)
{
	//在路径pa中插入一条边(v, w)
	pa.edges[pa.len].vx=v;
	pa.edges[pa.len].vy=w;
	pa.edges[pa.len].p=t;
	pa.len++;
}

void SetPath(PathType &pa, int v, int w, EdgeType t)
{
	//设置第一条边使用
	pa.edges[0].vx=v;
	pa.edges[0].vy=w;
	pa.edges[0].p=t;
	pa.len=1;

}

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

//=======================<Dijkstra算法求最省钱路线>===============
void  GetMoneyLeastPath (GraphType G,int i,int j, PathType &Path)
{
	int k;
	int dist[MAXNODE];
    int whetherfind[MAXNODE]={0}; 
	PathType path[MAXNODE];
	arctype *p,*q;
	EdgeType t;
	int flg;
	int  find_i,v,w;
	for(k=0;k<MAXNODE;k++)             //初始化
	{
		dist[k]=MAXCOST;
		InitPath(path[k]);
	}
	p=G.Adjlist[i].FirstArc;
	while(p)                            //初始化dist数组,检测依附于起始点的每一条边
	{
		q=p->NextArc;
		if(p->infor.Money<dist[p->AdjVertex])
		{
			dist[p->AdjVertex]=p->infor.Money;
			t=p->infor;
			SetPath(path[p->AdjVertex],i,p->AdjVertex,t);
		}
		p=q;		
	}
	flg= 0;
	while(!flg)
	{
		//在所有未求得最短路径的顶点求使得dist[i]取最小的i
		for(k=0;k<MAXNODE;k++)
		{
			if(whetherfind[k]==0 && dist[k]<MAXCOST)
				find_i=k;
		}

		whetherfind[find_i]=1;

		if(find_i==j) 
			flg=1;

		else
		{
			v=find_i;
			p=G.Adjlist[v].FirstArc;
			while(p)
			{
				q=p->NextArc;
				w=p->AdjVertex;
				if(whetherfind[w]==0 &&((dist[v]+p->infor.Money)<dist[w]))
				{
					dist[w]=dist[v]+p->infor.Money;
					copyPath(path[w],path[v]);
					InsertPath(path[w],v,w,p->infor);
				}
				p=q;
			} //while(p)
		} //else
	}// while(!found)

	copyPath(Path,path[j]);
}

void GetTimeShortestPath (GraphType G, int i, int j, int n ,PathType &Path)
{
			
	int k;
	int dist[MAXNODE];
     int  whetherfind[MAXNODE]={0}; 
	int now[MAXNODE];
	PathType path[MAXNODE];
	arctype *p,*q;
	EdgeType t;
	int flg;
	int find_i,v,w,time;
	for(k=0;k<MAXNODE;k++)             //初始化
	{
		dist[k]=MAXCOST;
		InitPath(path[k]);
		now[k]=0;
	}
	now[i]=n;

	p=G.Adjlist[i].FirstArc;
	while(p)                            //初始化dist数组,检测依附于起始点的每一条边
	{
		q=p->NextArc;
		if(p->infor.StratTime<now[i]&&p->infor.EndTime>=now[i])
		{
			time= 1440-TimeSub(p->infor.EndTime,now[i]);
		}
		else
			time= TimeSub(p->infor.EndTime,now[i]);
			

		if(time<dist[p->AdjVertex])
		{
			dist[p->AdjVertex]=time;
			t=p->infor;
			SetPath(path[p->AdjVertex],i,p->AdjVertex,t);
			now[p->AdjVertex]=p->infor.EndTime;
		}
		p=q;		
	}
	flg= 0;
	while(!flg)
	{
		//在所有未求得最短路径的顶点求使得dist[i]取最小的i
		for(k=0;k<MAXNODE;k++)
		{
			if(whetherfind[k]==0 && dist[k]<MAXCOST)
				find_i=k;
		}

		whetherfind[find_i]=1;

		if(find_i==j) 
			flg=1;
		else
		{
			v=find_i;
			p=G.Adjlist[v].FirstArc;
			while(p)
			{
				q=p->NextArc;
				w=p->AdjVertex;

				if(whetherfind[w]==0 &&(dist[v]+TimeSub(p->infor.EndTime,now[v])<dist[w]))
				{
					dist[w]=dist[v]+TimeSub(p->infor.EndTime,now[v]);
					copyPath(path[w],path[v]);
					InsertPath(path[w],v,w,p->infor);
				}
				p=q;
			} //while(p)

⌨️ 快捷键说明

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