交通咨询系统课程设计

//**********************//
//                  交通咨询系统v1.0               ///
//              作者:钱策 Author by QianCe        ///
//   班级 05计算机一班 学号:05205020120    ///
///         mail:[email protected]  QQ:185028076   ///
/***********************//

///
//邻接矩阵类

//AdiMatrix.h

#ifndef ADJMATRIX_H
#define ADJMATRIX_H
#include<vector>
#include<string>
using namespace std;

const int MaxValue=100;//最大值
struct EdgeType{
 int iDistance;//路程
 int iCost;    //费用
 float fTime;  //所花费的时间
};
//城市结构体,包括城市名字以及城市在图中的编号
struct City{
 int Number;
 char *Name;

};
//交通网络图,有iVexNum个城市,城市之间有iEdgNum条路线,每条路线上的时间路程费用为
//Route[MaxValue][MaxValue]
class AdjMatrix{
public:
 //AdjMatrix();//图的初始化,构造函数
 AdjMatrix(int n);
 int   GetVexNum();//取得交通图的城市个数
 int   GetEdgNum();//取得交通图的路线数目
 char*  GetCityName  (const int i);//通过序号取得城市的名字
 int   GetCityNum(char* cityname);//通过城市名字取得城市的编号
 //EdgeType GetRoute (const int v1,const int v2);
 void Check(int &i,int &j);//检查输入的边的序号是否越界,若越界就重输
 void CreateGraph();//构造交通图
 void PrintGragh();//**************************供测试用
 void ShowRouteLength();//向用户显示路程长度
 void ShowRouteCost();//向用户显示路程车票
 void ShowRouteTime();//向用户显示路程时间
 void Dijkstra(int v,int dist[],int path[]);//求一个源点到其他点的最短性质
 void DijkstraShortDistance();//一个城市到其他城市的最短距离
 void DijkstraLessTime();//一个城市到其他城市的最少时间
 void DijkstraLessCost();//一个城市到其他城市的最少花费
 void Floyd(int dist[MaxValue][MaxValue],int path[MaxValue][MaxValue]);
 //两个点之间的最短性质
 void FloydShortDistance();//两个城市之间的最段距离
 void FloydLessTime();//两个城市之间的最少时间
 void FloydLessCost();//两个城市之间的最少花费
private:
 int iVexNum;//顶点数,即城市个数
 int iEdgNum;//边数,即城市间的路线
 City city[MaxValue];//图的顶点,即城市
 EdgeType Route[MaxValue][MaxValue];//各边的权值,即路线的时间费用以及路程
};
#endif 

 

 

 

//AdjMatrix.cpp

#include "AdjMatrix.h"
#include<iostream>
using namespace std;
AdjMatrix::AdjMatrix(int n)//初始化有n个顶点的邻接矩阵
{
 for(int i=0;i<n;i++)
  for(int j=0;j<n;j++)
  {
   if(i==j)
   {
    Route[i][j].fTime=0;
    Route[i][j].iCost=0;
    Route[i][j].iDistance=0;
   }    
   else
   {
    Route[i][j].fTime=MaxValue;
    Route[i][j].iCost=MaxValue;
    Route[i][j].iDistance=MaxValue;
   }     
  }
 iVexNum=iEdgNum=0;
}

int AdjMatrix::GetVexNum()
{
 return iVexNum; 
}
int AdjMatrix::GetEdgNum()
{
 return iEdgNum;
}
char* AdjMatrix::GetCityName(const int i)//取城市的名字
{
 if(i<0||i>iVexNum)
 {
  cerr<<"参数越界,发生错误了!"<<endl;
  exit(1);
 }
 return city[i].Name;
}

int AdjMatrix::GetCityNum(char* cityname)
{
 for(int i=1;i<=iVexNum;i++)
 {
  if (strcmp(city[i].Name,cityname)==0)
   return city[i].Number;   
 }
 cerr<<"您输入的城市有错误"<<endl;
   
  
 return -1;
}
void AdjMatrix::PrintGragh()//将图打印出来,最初测试之用
{
 for(int i=0;i<iVexNum;i++)
 {
  for(int j=0;j<iVexNum;j++)
  {
   if(100==Route[i+1][j+1].iDistance)
   {
    Route[i+1][j+1].iDistance=1000;

   }
    cout<<Route[i+1][j+1].iDistance<<"/t";

  }
  cout<<endl;
 }
}
 

void AdjMatrix::Check(int &i,int &j)//检查输入的边的序号是否越界,若越界就重输
{
 while(1)
 {
  if(i<0||i>iVexNum||j<0||j>iVexNum)
   cerr<<"参数越界,发生错误了,请重输!"<<endl;
  else return;
  cin>>i>>j;
 }
}
done//
void AdjMatrix::CreateGraph()
//为了方便真是先把时间跟费用这两个权值给屏蔽掉了
{
 City city1,city2;
 int time,distance,cost;
 char flag='y';
 char *ch=new char(10);
 cout<<"请输入城市的数目:";
 cin>>iVexNum;

 cout<<"输入城市的信息:"

  • 12
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
交通咨询系统可以分为客户端和服务器端两部分。客户端提供用户界面,允许用户查询交通信息;服务器端提供数据访问接口,负责查询数据并返回结果。 以下是一个基本的交通咨询系统的设计: 1. 数据库设计 - city 表:城市信息表,包含城市名称、经纬度等信息。 - station 表:车站信息表,包含车站名称、所在城市、经纬度等信息。 - line 表:线路信息表,包含线路名称、起点、终点、途经车站等信息。 - schedule 表:班次信息表,包含班次名称、班次号、班次时间、所属线路、始发站、终点站等信息。 2. 客户端设计 客户端提供用户查询界面,允许用户输入起点、终点、出发时间等信息进行查询,并显示查询结果。客户端可以使用Java Swing或JavaFX等GUI框架实现。 3. 服务器端设计 服务器端负责查询数据库并返回结果。可以使用Java的Servlet技术实现一个RESTful API,提供查询接口。具体实现可以参考以下步骤: - 根据起点和终点查询所有可能的线路。 - 对于每条线路,查询所有班次信息,并筛选出符合出发时间的班次。 - 对于每个班次,查询班次的经停站信息,并计算出到达时间。 - 根据查询结果生成一个包含所有班次信息的列表,并按照出发时间排序。 - 将列表返回给客户端。 4. 技术选型 - 数据库:MySQL、Oracle等关系型数据库。 - 客户端:Java Swing、JavaFX等GUI框架。 - 服务器端:Java Servlet技术、Spring MVC等Web框架。 - 数据访问层:MyBatis、Hibernate等ORM框架。 以上是一个基本的交通咨询系统的设计思路,具体实现细节还需要根据实际情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值