各种交通工具旅游路线查询程序(C++)

#include<iostream>
#include<fstream>
#include<string>
#define MaxVerNum 100//最大结点个数
#define INF 65535
#define MM "2222"
using namespace std;

typedef char VertexType;//图中顶点的数据类型
typedef int eInfoType;//权值的数据类型

//栈
typedef struct IsNode
{
    int data;
    struct IsNode * inext;
}sNode;


//时间
typedef struct 
{
    int hours;
    char synbol;
    int minutes;
}Time;


//班次
typedef struct
{
    int divisions;//班次
    Time firstBusTime;//首班车的出发时间
}schedules;
typedef schedules Schedules[MaxVerNum];


//城市
typedef struct node//边链表节点
{
    int adjvex;
    eInfoType eInfo;
    struct node * next;
}EdgeNode;
typedef struct//顶点表节点
{
    VertexType vertex[20];
    EdgeNode * firstedge;
}VertexNode;
typedef VertexNode AdjList[MaxVerNum];
typedef struct
{
    AdjList adjlist;
    int n,e;
}ALGraph;


//火车
typedef struct trainTime
{
    int trainName;
    int time;
    int stopTime;
    int money;
    int distance;
    struct trainTime * nextStation;
}train;
typedef struct
{
    int trainName;
    train * trainRoute;
}trainN;
typedef trainN trainS[MaxVerNum];
typedef struct
{
    trainS trainSchedule;
    int m;
    Schedules Train;
}trainlist;


//飞机
typedef struct planeTime
{
    int planeName;
    int platime;
    int plastoptime;
    int plamoney;
    int pladistance;
    struct planeTime * planextStation;
}plane;
typedef struct
{
    int planeName;
    plane * planeRoute;
}planeN;
typedef planeN planeS[MaxVerNum];
typedef struct
{
    planeS planeSchedule;
    int x;
    Schedules Plane;
}planelist;

//函数声明
void create(ALGraph * & G);
void printA(ALGraph * G);
void new_line();
void createTrainSchedule(ALGraph * G,trainlist * & T,int **,int **);
void printTrain(ALGraph * G,trainlist * T);
void createplaneSchedule(ALGraph * G,planelist * & H,int **,int **);
void printplane(ALGraph * G,planelist * H);
void administrator(ALGraph * G,trainlist * T,planelist * H,int **,int **,int **,int **,int **,int **,int **,int **);
void user();
void establishFigure(ALGraph * G);
void estFigure(ALGraph * G);
void establishTrain(ALGraph * G,trainlist * T,int **,int **);
void estTrain(ALGraph * G,trainlist * T,int **,int **);
void establishPlane(ALGraph * G,planelist * H,int **,int **);
void estPlane(ALGraph * G,planelist * H,int **,int **);
void printTime(ALGraph * G,trainlist * T);
void initializeTrainPathMatrix(ALGraph * G,int **,int **);
void createTrainPathMatrix(trainlist * T,int **,int **,int *,int num,int k);
void printTrainPathMatrix(ALGraph * G,int **,int **,int *);
void trainFloyd(ALGraph * G,int **,int **,int **);
void initialStack(sNode * & top);
void pushStack(sNode * & top,int x);
void popStack(sNode * & top,int &x);
void printTFloyd(ALGraph * G,int **,int **);
void estffile(ALGraph * &G);
void estffileTrain(ALGraph * G,trainlist * & T,int **,int **);//文件输入建立火车时刻表
void initializePlanePathMatrix(ALGraph * G,int **,int **);
void createPlanePathMatrix(planelist * H,int **,int **,int *,int num,int k);
void printPlanePathMatrix(ALGraph * G,int **,int **,int *);
void estffilePlane(ALGraph * G,planelist * & H,int **,int **);
void addCity(ALGraph * &G);
void deleteCity(ALGraph * &G);
void addTrainPath(ALGraph * G,trainlist * & T,int **,int **);
void deleteTrainPath(ALGraph * G,trainlist * & T,int **,int **);
void addPlanePath(ALGraph * G,planelist * & T,int **,int **);
void deletePlanePath(ALGraph * G,planelist * & H,int **,int **);
void printPlane(ALGraph * G,planelist * H);

//输入、输出流声明
ifstream in_stream;
ofstream out_stream;

//主函数
int main()
{
    int num,i;
    char n[5];
    ALGraph * G=(ALGraph *)malloc(sizeof(ALGraph));
    trainlist * T=(trainlist *)malloc(sizeof(trainlist));
    planelist * H=(planelist *)malloc(sizeof(planelist));
    int **trainPath=new int * [MaxVerNum];
    for(i=0;i<MaxVerNum;i++)
        trainPath[i]=new int[MaxVerNum];
    int ** tmPath=new int *[MaxVerNum];
    for(i=0;i<MaxVerNum;i++)
        tmPath[i]=new int[MaxVerNum];
    int ** tmDisk=new int *[MaxVerNum];
    for(i=0;i<MaxVerNum;i++)
        tmDisk[i]=new int[MaxVerNum];
    int ** tPath=new int *[MaxVerNum];
    for(i=0;i<MaxVerNum;i++)
        tPath[i]=new int[MaxVerNum];


    int **planePath=new int * [MaxVerNum];
    for(i=0;i<MaxVerNum;i++)
        planePath[i]=new int[MaxVerNum];
    int ** pmPath=new int *[MaxVerNum];
    for(i=0;i<MaxVerNum;i++)
        pmPath[i]=new int[MaxVerNum];
    int ** pmDisk=new int *[MaxVerNum];
    for(i=0;i<MaxVerNum;i++)
        pmDisk[i]=new int[MaxVerNum];
    int ** pPath=new int *[MaxVerNum];
    for(i=0;i<MaxVerNum;i++)
        pPath[i]=new int[MaxVerNum];
    do
    {
        cout<<endl;
        cout<<"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";
        cout<<endl;
        cout<<endl;
        cout<<"                                         欢迎使用全国交通咨询模拟系统"<<endl;
         cout<<endl;
        cout<<endl;
         cout<<"              1------------管理员"<<endl;
        cout<<"              2------------普通用户"<<endl;
        cout<<"              3------------退出"<<endl;
        cout<<endl;
        cout<<"              请选择序号:";
        cin>>num;
        switch(num)
        {
        case 1:do
               {
                   cout<<"              请输入密码:";
                   cin>>n;
               }while(strcmp(n,MM));
               administrator(G,T,H,trainPath,tmPath,tPath,tmDisk,planePath,pmPath,pPath,pmDisk);
               break;
        /*case 2:user();
               break;*/
        }
    }while(num!=3);
        cout<<endl;
    return 0;
}


//管理员函数
void administrator(ALGraph * G,trainlist * T,planelist * H,int ** trainPath,int ** tmPath,int ** tPath,int ** tmDisk,int ** planePath,int ** pmPath,int ** pPath,int ** pmDisk)
{
    int i;
    do
    {
        cout<<endl;
        cout<<"              1------------建立全国交通图"<<endl;
        cout<<"              2------------建立火车时刻表"<<endl;
        cout<<"              3------------建立航空时刻表"<<endl;
        cout<<"              4------------查询最省钱路线"<<endl;
        cout<<"              5------------查询最快路线"<<endl;
        cout<<"              6------------退出"<<endl;
        cout<<endl;
        cout<<"              请选择序号:";
        cin>>i;
        switch(i)
        {
            case 1:establishFigure(G);break;
            case 2:establishTrain(G,T,trainPath,tmPath);break;
            case 3:establishPlane(G,H,planePath,pmPath);break;
            case 4:
                trainFloyd(G,tmPath,tPath,tmDisk);
                printTFloyd(G,tPath,tmDisk);break;
        };
    }while(i!=6);
}


//建立全国交通图
void establishFigure(ALGraph * G)
{
    int i;
    do
    {
        cout<<endl;
        cout<<"              1------------手动输入建立"<<endl;
        cout<<"              2------------文件输入建立"<<endl;
        cout<<"              3------------添加城市"<<endl;
        cout<<"              4------------删除城市"<<endl;
        cout<<"              5------------退出"<<endl;
        cout<<endl;
        cout<<"              请选择序号:";
        cin>>i;
        switch(i)
        {
        case 1:estFigure(G);break;
        case 2:estffile(G);break;
        case 3:addCity(G);break;
        case 4:deleteCity(G);break;
        case 5:break;
        default:cout<<"              错误选择!!!请重选";
        }
    }while(i!=5);
}


//文件输入建立全国交通图
void estffile(ALGraph * &G)
{
    int v,k,i,j;
    cout<<"              *****************************************************************************************"<<endl;
    cout<<endl;
    cout<<"                                               开始创建全国交通图"<<endl;
    cout<<endl;
    in_stream.open("chengshi.dat");
    EdgeNode * s;
    in_stream>>G->n>>G->e;
    for(v=0;v<G->n;v++)
    {
        in_stream>>G->adjlist[v].vertex;
        G->adjlist[v].firstedge=NULL;
    }

    for(k=0;k<G->e;k++)
    {
        in_stream>>i;
        in_stream>>j;
        s=(EdgeNode *)malloc(sizeof(EdgeNode));
        s->adjvex=j;
        s->next=G->adjlist[i-1].firstedge;
        G->adjlist[i-1].firstedge=s;
        in_stream>>G->adjlist[i-1].firstedge->eInfo;
        s=(EdgeNode *)malloc(sizeof(EdgeNode));
        s->adjvex=i;
        s->next=G->adjlist[j-1].firstedge;
        G->adjlist[j-1].firstedge=s;
        G->adjlist[j-1].firstedge->eInfo=G->adjlist[i-1].firstedge->eInfo;
    }
    in_stream.close();
    cout<<"              建立的全国交通图的邻接表为:"<<endl;
    for(i=0;i<G->n;i++)
    {
        EdgeNode * q=G->adjlist[i].firstedge;
        cout<<"              "<<G->adjlist[i].vertex<<"->";
        while(q!=NULL)
        {
            cout<<G->adjlist[(q->adjvex)-1].vertex;
            cout<<"("<<q->eInfo<<")";
            cout<<"->";
            q=q->next;
        }
        cout<<"NULL"<<endl;
    }
    cout<<endl;
    cout<<"                                               全国交通图已创建完成"<<endl;
    cout<<endl;
    cout<<"              *****************************************************************************************"<<endl;
    cout<<endl;

    
}


//文件输入建立火车时刻表
void estffileTrain(ALGraph * G,trainlist * & T,int ** trainPath,int ** tmPath)
{
    int i,j,v;
    int traStation[MaxVerNum];
        cout<<"              *****************************************************************************************"<<endl;
    cout<<endl;
    cout<<

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值