📄 tg.cpp
字号:
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 >,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 >,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 >,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 >,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 + -