📄 完成.cpp
字号:
} //else
}// while(!found)
copyPath(Path,path[j]);
}
void Search_Money(GraphType GT,GraphType GP)
{
int n;
int i,j;
PathType p;
char name[10];
while(1)
{
printf("\t\t 1.查询飞机");
printf("\t 2.查询火车");
printf("\t 0.退出");
printf("\t 请选择:");
scanf("%d",&n);
printf("\n");
if(n==1)
{
printf("\n请输入起始城市的名称:");
scanf("%s",name);
for(i=0;i<MAXNODE;i++)
{
if(strcmp(GP.Adjlist[i].cityname,name)==0&&GP.Flag[i]==1)
break;
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;
if(j==MAXNODE-1){printf("\n该城市不存在,请添加!");break;}
}
GetMoneyLeastPath (GP,i,j,p); //最少钱数!!!!!!!!!#@$@$@$@$@$
print_Money(GP,p);
break;
}
else if(n==2)
{
printf("\n请输入起始城市的名称:");
scanf("%s",name);
for(i=0;i<MAXNODE;i++)
{
if(strcmp(GT.Adjlist[i].cityname,name)==0&>.Flag[i]==1)
break;
if(i==MAXNODE-1){printf("\n该城市不存在,请添加!");break;}
}
printf("\n请输入终点城市的名称:");
scanf("%s",name);
for(j=0;j<MAXNODE;j++)
{
if(strcmp(GT.Adjlist[j].cityname,name)==0&>.Flag[j]==1)
break;
if(j==MAXNODE-1){printf("\n该城市不存在,请添加!");break;}
}
GetMoneyLeastPath (GT,i,j,p); //最少钱数
print_Money(GT,p);
break;
}
else if (n==0)
break;
else
printf("输入有误,请重新输入!\n\n");
}
}
void Search_Time(GraphType GT,GraphType GP)
{
int n;
int i,j;
int time,hour,minute;
PathType p;
char name[10];
while(1)
{
printf("\t\t 1.查询飞机");
printf("\t 2.查询火车");
printf("\t 0.退出");
printf("\t 请选择:");
scanf("%d",&n);
printf("\n");
printf("请输入拟出发时间:");
printf("\n几点>");
scanf("%d",&hour);
printf("几分>");
scanf("%d",&minute);
time=TimeChange(hour,minute);
if(n==1)
{
printf("\n请输入起始城市的名称:");
scanf("%s",name);
for(i=0;i<MAXNODE;i++)
{
if(strcmp(GP.Adjlist[i].cityname,name)==0&&GP.Flag[i]==1)
break;
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;
if(j==MAXNODE-1){printf("\n该城市不存在,请添加!");break;}
}
GetTimeShortestPath (GP,i,j,time,p);
print_Time(GP,p,time);
break;
}
else if(n==2)
{
printf("\n请输入起始城市的名称:");
scanf("%s",name);
for(i=0;i<MAXNODE;i++)
{
if(strcmp(GT.Adjlist[i].cityname,name)==0&>.Flag[i]==1)
break;
if(i==MAXNODE-1){printf("\n该城市不存在,请添加!");break;}
}
printf("\n请输入终点城市的名称:");
scanf("%s",name);
for(j=0;j<MAXNODE;j++)
{
if(strcmp(GT.Adjlist[j].cityname,name)==0&>.Flag[j]==1)
break;
if(j==MAXNODE-1){printf("\n该城市不存在,请添加!");break;}
}
GetTimeShortestPath (GT,i,j,time,p);
print_Time(GT,p,time);
break;
}
else if (n==0)
break;
else
printf("输入有误,请重新输入!\n\n");
}
}
//====================================================================
/******************************* < 数据存取 >*************************************/
bool SaveGraph_T(GraphType G) //保存火车图信息
{
FILE *fp;
int i,j=0;
char c = '\n';
arctype *p;
if((fp = fopen("Train.txt","w")) == NULL)
{
printf("不能建立文件:data.txt");
return false;
}
fprintf(fp,"%d\n",G.vexNum);
fprintf(fp,"%d\n",G.edgeNum);
j=0;
i=0;
while(j<G.vexNum)
{
fprintf(fp,"%d,%s%c",G.Flag[i],G.Adjlist[i].cityname,c);
if(G.Flag[i]==1)
j++;
i++;
}
i=0;
j=0;
while(j<G.vexNum)
{
p = G.Adjlist[i].FirstArc;
while(p !=NULL)
{
fprintf(fp,"%d,%d\n",p->infor.ivex,p->AdjVertex);
fprintf(fp,"%d,%d,%d,%d\n",p->infor.Money,p->infor.StratTime,p->infor.EndTime,p->infor.Time);
fprintf(fp,"%s%c",p->infor.Number,c);
p = p->NextArc;
}
if(G.Flag[i]==1)
j++;
i++;
}
fclose(fp);
return true;
}
bool SaveGraph_P(GraphType G) //保存飞机图信息
{
FILE *fp;
int i,j=0;
char c = '\n';
arctype *p;
if((fp = fopen("Plane.txt","w")) == NULL)
{
printf("不能建立文件:data.txt");
return false;
}
fprintf(fp,"%d\n",G.vexNum);
fprintf(fp,"%d\n",G.edgeNum);
j=0;
i=0;
while(j<G.vexNum)
{
fprintf(fp,"%d%s%c",G.Flag[i],G.Adjlist[i].cityname,c);
if(G.Flag[i]==1)
j++;
i++;
}
i=0;
j=0;
while(j<G.vexNum)
{
p = G.Adjlist[i].FirstArc;
while(p !=NULL)
{
fprintf(fp,"%d,%d\n",p->infor.ivex,p->AdjVertex);
fprintf(fp,"%d,%d,%d,%d\n",p->infor.Money,p->infor.StratTime,p->infor.EndTime,p->infor.Time);
fprintf(fp,"%s%c",p->infor.Number,c);
p = p->NextArc;
}
if(G.Flag[i]==1)
j++;
i++;
}
fclose(fp);
return true;
}
bool OpenGraph_T(GraphType &G) //打开火车图
{
FILE *fp;
char c='\n';
int i=0,j=0;
if((fp = fopen("Train.txt","r")) == NULL)
{
printf("Can not open the Train.txt file!\n");
return false;
}
fscanf(fp,"%d",&G.vexNum);
fscanf(fp,"%d",&G.edgeNum);
while(j<G.vexNum)
{
fscanf(fp,"%d,%s",&G.Flag[i], &G.Adjlist[i].cityname);
G.Adjlist[i].FirstArc = NULL;
if(G.Flag[i]==1)
j++;
i++;
}
for(i =0;i<G.edgeNum;i++)
{
arctype *p = new arctype ;
fscanf(fp,"%d,%d",&p->infor.ivex,&p->AdjVertex);
fscanf(fp,"%d,%d,%d,%d",&p->infor.Money,&p->infor.StratTime,&p->infor.EndTime,&p->infor.Time);
fscanf(fp,"%s",&p->infor.Number);
p->NextArc=G.Adjlist[p->infor.ivex].FirstArc;
G.Adjlist[p->infor.ivex].FirstArc=p;
}
fclose(fp);
return true;
}
bool OpenGraph_P(GraphType &G) //打开飞机图
{
FILE *fp;
char c='\n';
int i=0,j=0;
if((fp = fopen("Plane.txt","r")) == NULL)
{
printf("Can not open the Plane.txt file!\n");
return false;
}
fscanf(fp,"%d",&G.vexNum);
fscanf(fp,"%d",&G.edgeNum);
while(j<G.vexNum)
{
fscanf(fp,"%d,%s",&G.Flag[i],&G.Adjlist[i].cityname);
G.Adjlist[i].FirstArc = NULL;
if(G.Flag[i]==1)
j++;
i++;
}
for(i=0;i<G.edgeNum;i++)
{
arctype *p = new arctype ;
fscanf(fp,"%d,%d",&p->infor.ivex,&p->AdjVertex);
fscanf(fp,"%d,%d,%d,%d",&p->infor.Money,&p->infor.StratTime,&p->infor.EndTime,&p->infor.Time);
fscanf(fp,"%s",&p->infor.Number);
p->NextArc=G.Adjlist[p->infor.ivex].FirstArc;
G.Adjlist[p->infor.ivex].FirstArc=p;
}
fclose(fp);
return true;
}
/*********************************************************************************/
//===========================<界面>=====================================
void Search_Menu(GraphType GT,GraphType GP) //咨询系统界面
{
int n;
while(1)
{
printf("\n");
printf(" ==========================================================\n");
printf(" 1.最省钱咨询 \n");
printf(" 2.最快到达咨询 \n");
printf(" 3.查询当前资料 \n");
printf(" 0.返回 \n");
printf(" ===========================================================\n");
printf(" 请选择: ");
scanf("%d",&n);
if(n==0)break;
switch(n)
{
case 1:Search_Money(GT,GP);break;
case 2:Search_Time(GT,GP);break;
case 3:GetInfor(GT,GP);break;
default:printf("输入错误!重新输入!\n");
}
}
}
void Edit_Menu(GraphType >,GraphType &GP ) //编辑系统界面
{
int n;
while(1)
{
printf("\n");
printf(" ==========================================================\n");
printf(" 1.城市信息编辑 \n");
printf(" 2.列车时刻表编辑 \n");
printf(" 3.飞机航班编辑 \n");
printf(" 0.返回 \n");
printf(" ==========================================================\n");
printf(" 请选择: ");
scanf("%d",&n);
if(n==0)break;
switch(n)
{
case 1: Edit_City(GT,GP);break;
case 2: Edit_Train(GT,GP);break;
case 3: Edit_Plane(GT,GP);break;
default: printf("输入错误!重新输入!\n");
}
}
}
void The_Main_Menu(GraphType >,GraphType &GP) //程序主界面
{
int n;
printf("\n\n");
printf(" 全国交通咨询模拟系统 \n");
printf("\n\n");
printf("\n");
printf(" ==========================================================\n");
printf(" 1.咨询系统 \n");
printf(" 2.管理系统 \n");
printf(" 0.退出系统 \n");
printf(" ==========================================================\n");
printf(" 请选择: ");
scanf("%d",&n);
switch(n)
{
case 1: Search_Menu(GT,GP);break;
case 2: Edit_Menu(GT,GP);break;
case 0: exit(0);
default : printf("输入有错误!\n");
}
}
//==========================================================================================
//===========================<主函数>=============================
void main(void)
{
GraphType GTrain,GPlane; //定义列车时刻表和飞机航班表
CreateGraph(GTrain);
CreateGraph(GPlane); //表的初始化操作
OpenGraph_T(GTrain); //打开已经存在火车的数据
OpenGraph_P(GPlane); //打开已经存在飞机的数据
The_Main_Menu(GTrain,GPlane);
SaveGraph_T(GTrain); //保存火车数据
SaveGraph_P(GPlane); //保存飞机数据
}
//==================================程序结束=====================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -