全国交通咨询模拟系统源代码

合集下载

课程设计全国交通咨询模拟系统

课程设计全国交通咨询模拟系统

19级数据结构课程设计题目及要求一、课程设计目的《数据结构》是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。

《数据结构》课程的目标是使学生学会分析研究计算机加工对象的特性,选择合适的数据结构和存储表示,以及编制相应的实现算法,培养和提高学生程序设计的能力。

《数据结构》课程也是一门实践性较强的课程,设置实践环节是十分重要的。

本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。

题目八:全国交通咨询模拟系统【问题描述】出于不同目的的旅客对交通工具有不同的要求。

例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。

编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。

【基本要求】(1)提供对城市信息进行编辑(如:添加或删除)的功能。

(2)城市之间有两种交通工具:火车和飞机。

提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。

(3)提供两种最优决策:最快到达或最省钱到达。

全程只考虑一种交通工具。

(4)旅途中耗费的总时间应该包括中转站的等候时间。

(5)咨询以用户和计算机的对话方式进行。

由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。

四、设计工作要求1、课程设计完成基本的功能要求本次课程设计可以从以下的题目中任选其一,每个题目基本实现的要求是:(1)有菜单功能(2)有读写数据存盘功能(3)有数据图形显示或动画显示。

2、课程设计完成成品要求(1)程序设计书(Word格式)●包括程序设计目标●问题描述●需求分析●概要设计●详细设计●源程序清单(要求格式整齐400行以上,要有注释说明)●软件说明书(给出软件如何使用,使用时的注意事项)●测试报告(每个函数的功能测试,输入条件,输出结果)●课程设计总结。

全国交通咨询模拟系统

全国交通咨询模拟系统

全国交通咨询模拟系统系统背景随着我国经济的快速发展,交通出行已经成为人们日常生活中不可或缺的一部分。

不仅高速公路、铁路、城市轨道交通、公共汽车等交通工具不断完善,而且智能化、自动化、先进化等新兴技术也在交通领域变得越来越普及。

但是在日常出行中,人们难免会遇到交通拥堵、事故等问题,对于这些问题,如果及时得到准确可靠的信息,将大大缩短人们的出行时间,帮助人们更快地解决问题。

因此,我们开发了一款全国交通咨询模拟系统,帮助人们快速获取各地交通信息、查询交通路线、实时交通情况等信息,缩短出行时间,提高出行效率,让人们更加便捷的出行。

系统功能1. 查询交通信息全国交通咨询模拟系统提供了各地铁路、航班、长途汽车的信息查询功能,用户可通过输入出发地和目的地信息,查询出该区域的所有交通信息。

同时提供了乘车时间和价格等信息,方便用户选择最优出行方式。

2. 实时交通情况查询全国交通咨询模拟系统为用户提供了实时交通情况查询功能,用户可通过输入出行路线,系统将返回该路线的实时情况,包括此时此刻的路况、车流量、拥堵情况、事故情况等,方便用户对出行进行最佳规划。

3. 路线规划全国交通咨询模拟系统提供了路线规划的功能,用户输入起点和终点的位置信息,系统将为用户快速规划出一条最优的路线。

此外,该系统还提供了多条路线的选择,用户可以根据自己的需求进行选择。

4. 路况预报全国交通咨询模拟系统还提供了路况预报的功能,即用户可以预先了解某段道路的车流量、拥堵情况等。

系统通过大数据分析和深度学习等技术,对路况进行精准预测,使用户能够提前规划出行。

5. 存储建议全国交通咨询模拟系统可为用户存储出行建议,用户可以按照自己的需求,将出行建议进行收藏、备份和删除,方便后续使用。

系统优势1. 数据准确性高全国交通咨询模拟系统通过各种渠道收集、整理和分析各地交通数据,确保提供给用户的是准确可靠的信息。

2. 使用简单该系统的使用非常简单,用户只需按照系统提示输入需要查询的信息,系统将自动返回相应的结果。

中国道路交通网络信息查询系统

中国道路交通网络信息查询系统

中国道路交通网络信息查询系统【问题描述】出于不同的目的的旅客对交通工具有不同的要求。

例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。

编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。

【系统要求】(1)提供对城市信息进行编辑(如:添加或删除)的功能。

(2)城市之间有两种交通工具:火车和飞机。

提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。

(3)提供两种最优决策:最快到达或最省钱到达。

全程只考虑一种交通工具;(4)旅途中耗费的总时间应该包括中转站的等候时间;(5)咨询以用户和计算机的对话方式进行。

由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。

【程序结构图】【算法分析】1.新建数据void creat_data1() //新建数据{int i;printf("请输入添加火车个数: ");scanf("%d",&t);for(i=1;i<=t;i++){printf("请输入添加火车列次: ");scanf("%s",hc[i].hnum); printf("\n"); printf("\n请输入始站:");scanf("%s",hc[i].kname); printf("\n"); printf("请输入终站:");scanf("%s",hc[i].dname); printf("\n");printf("请输入开车时间:");scanf("%s",hc[i].ktime); printf("\n"); printf("请输入到站时间:");scanf("%s",hc[i].dtime); printf("\n"); printf("请输入经历时间:");scanf("%s",hc[i].ltime); printf("\n"); }print();}2.添加数据void add1() //添加数据{char ch;do{printf("请输入添加火车列次: ");scanf("%s",hc[t+1].hnum); printf("\n"); printf("\n请输入始站:");scanf("%s",hc[t+1].kname); printf("\n"); printf("请输入终站:");scanf("%s",hc[t+1].dname); printf("\n");printf("请输入开车时间:");scanf("%s",hc[t+1].ktime); printf("\n");printf("请输入到站时间:");scanf("%s",hc[t+1].dtime); printf("\n");printf("请输入经历时间:");scanf("%s",hc[t+1].ltime); printf("\n");t++;printf("是否继续添加y/n:");getchar();ch=getchar();printf("\n");}while(ch=='y');print();}3.删除数据void delet1()//删除数据{char num1[10];int i,j,count=0;printf("输入想要删除的火车列次");scanf("%s",num1);for (i=1;i<=t;i++)if(strcmp(num1,hc[i].hnum)==0){for(j=i;j<t+1;j++)hc[j]=hc[j+1];count++;t--;}if(count==0) printf("没有列车信息!");else print();}4.迪杰斯特拉算法void ShortwstPath(int num) /*迪杰斯特拉算法最短路径函数*/ {int v,w,i,t;int final[25];int min;for(v=0;v<25;++v)/*初始化*/{final[v]=0; /*标志数组初始化*/D[v]=G.arcs[num][v].adj;for(w=0;w<25;++w)P[v][w]=0;/*设空路径*/if(D[v]<20000)/*v,v0间有边存在*/{P[v][num]=1;P[v][v]=1;/*到v的最短路径上包含v0及v*/}/*if*/}D[num]=0;final[num]=1;/*初始化,v0顶点属于B集*//*开始主循环,每次求得v0到某个v顶点的最短路径,并加v到B集*/for(i=0;i<25;++i)/*其余G.vexnum-1各顶点*/{min=20000;for(w=0;w<25;++w)if(!final[w])/*w顶点在V-S中*/if(D[w]<min){v=w;min=D[w];}/*w顶点离v0更近*/final[v]=1;/*离v0顶点最近的v加入B*/for(w=0;w<25;++w)/*更新当前最短路径及距离*/if(!final[w]&&((min+G.arcs[v][w].adj)<D[w])){D[w]=min+G.arcs[v][w].adj;/*修改D和P数组*/for(t=0;t<25;t++)P[w][t]=P[v][t];P[w][w]=1;}/*if*/}/*for*/}【程序测试】建立如下图所示的全国交通图:0.哈尔滨 1.长春 2.沈阳 3.大连 4.天津 5.北京 6.徐州7.呼和浩特8.兰州9.乌鲁木齐10.西宁11.西安 12.郑州13.上海14.南昌15.福州16.株洲17.武汉18.广州19.深圳20.柳州21.贵阳22.南宁23.成都24.昆明测试结果截图:【源代码】#include"string.h"#include"stdio.h"struct hcar{char hnum[10];char kname[10];char dname[10];char ktime[10];char dtime[10];char ltime[10];}hc[60]={{"k89", "哈尔滨", "长春", "1:00", "3:00", "2"}, {"k89", "长春", "哈尔滨", "1:00", "3:00", "2"},{"u78", "长春", "沈阳", "3:30", "6:00", "2.5"},{"u78", "沈阳", "长春", "3:30", "6:00", "2.5"},{"j67", "沈阳", "大连", "6:30", "9:00", "2.5"}, {"j67", "大连", "沈阳", "6:30", "9:00", "2.5"},{"v78", "沈阳", "天津", "9:30", "14:00", "4.5"}, {"v78", "天津", "沈阳", "9:30", "14:00", "4.5"},{"g67", "天津", "北京", "14:30", "16:00", "1.5"},{"g67", "北京", "天津", "14:30", "16:00", "1.5"},{"f67", "北京", "呼和浩特", "16:30", "23:00", "6.5"},{"f67", "呼和浩特", "北京", "16:30", "23:00", "6.5"},{"j56", "呼和浩特", "兰州", "1:00", "3:00", "2"},{"j56", "兰州", "呼和浩特", "1:00", "3:00", "2"},{"v67", "兰州", "乌鲁木齐", "1:00", "3:00", "2"},{"v67", "乌鲁木齐", "兰州", "1:00", "3:00", "2"},{"f46", "兰州", "西宁", "1:00", "3:00", "2"},{"f46", "西宁", "兰州", "1:00", "3:00", "2"},{"d49", "天津", "徐州", "1:00", "3:00", "2"},{"d49", "徐州", "天津", "1:00", "3:00", "2"},{"c44", "徐州", "郑州", "1:00", "3:00", "2"},{"c44", "郑州", "徐州", "1:00", "3:00", "2"},{"h47", "郑州", "北京", "1:00", "3:00", "2"},{"h47", "北京", "郑州", "1:00", "3:00", "2"},{"d46", "郑州", "西安", "1:00", "3:00", "2"},{"d46", "西安", "郑州", "1:00", "3:00", "2"},{"v46", "西安", "兰州", "1:00", "3:00", "2"},{"v46", "兰州", "西安", "1:00", "3:00", "2"},{"s45", "徐州", "上海", "1:00", "3:00", "2"},{"s45", "上海", "徐州", "1:00", "3:00", "2"},{"t84", "上海", "南昌", "1:00", "3:00", "2"},{"t84", "南昌", "上海", "1:00", "3:00", "2"},{"f43", "南昌", "株洲", "1:00", "3:00", "2"},{"f43", "株洲", "南昌", "1:00", "3:00", "2"},{"i45", "株洲", "武汉", "1:00", "3:00", "2"},{"i45", "武汉", "株洲", "1:00", "3:00", "2"},{"d53", "武汉", "郑州", "1:00", "3:00", "2"},{"d53", "郑州", "武汉", "1:00", "3:00", "2"},{"f67", "株洲", "广州", "1:00", "3:00", "2"},{"f67", "广州", "株洲", "1:00", "3:00", "2"},{"h76", "广州", "深圳", "1:00", "3:00", "2"},{"h76", "深圳", "广州", "1:00", "3:00", "2"},{"s45", "株洲", "贵阳", "1:00", "3:00", "2"},{"s45", "贵阳", "株洲", "1:00", "3:00", "2"},{"o56", "株洲", "柳州", "1:00", "3:00", "2"},{"o56", "柳州", "株洲", "1:00", "3:00", "2"},{"d65", "贵阳", "柳州", "1:00", "3:00", "2"},{"d65", "柳州", "贵阳", "1:00", "3:00", "2"},{"r44", "南宁", "柳州", "1:00", "3:00", "2"},{"r44", "柳州", "南宁", "1:00", "3:00", "2"},{"f56", "贵阳", "成都", "1:00", "3:00", "2"},{"f56", "成都", "贵阳", "1:00", "3:00", "2"},{"g06", "西安", "成都", "1:00", "3:00", "2"},{"g06", "成都", "西安", "1:00", "3:00", "2"},{"d97", "贵阳", "昆明", "1:00", "3:00", "2"},{"d97", "昆明", "贵阳", "1:00", "3:00", "2"},{"d67", "成都", "昆明", "1:00", "3:00", "2"},{"d67", "昆明", "成都", "1:00", "3:00", "2"}};struct plane{char pnum[10];char kname[10];char dname[10];char ktime[10];char dtime[10];char ltime[10];}pl[60]={{"k89", "哈尔滨", "长春", "1:00", "3:00", "2"}, {"k89", "长春", "哈尔滨", "1:00", "3:00", "2"},{"u78", "长春", "沈阳", "3:30", "6:00", "2.5"},{"u78", "沈阳", "长春", "3:30", "6:00", "2.5"},{"j67", "沈阳", "大连", "6:30", "9:00", "2.5"}, {"j67", "大连", "沈阳", "6:30", "9:00", "2.5"},{"v78", "沈阳", "天津", "9:30", "14:00", "4.5"}, {"v78", "天津", "沈阳", "9:30", "14:00", "4.5"},{"g67", "天津", "北京", "14:30", "16:00", "1.5"},{"g67", "北京", "天津", "14:30", "16:00", "1.5"},{"f67", "北京", "呼和浩特", "16:30", "23:00", "6.5"},{"f67", "呼和浩特", "北京", "16:30", "23:00", "6.5"},{"j56", "呼和浩特", "兰州", "1:00", "3:00", "2"},{"j56", "兰州", "呼和浩特", "1:00", "3:00", "2"},{"v67", "兰州", "乌鲁木齐", "1:00", "3:00", "2"},{"v67", "乌鲁木齐", "兰州", "1:00", "3:00", "2"},{"f46", "兰州", "西宁", "1:00", "3:00", "2"},{"f46", "西宁", "兰州", "1:00", "3:00", "2"},{"d49", "天津", "徐州", "1:00", "3:00", "2"},{"d49", "徐州", "天津", "1:00", "3:00", "2"},{"c44", "徐州", "郑州", "1:00", "3:00", "2"},{"c44", "郑州", "徐州", "1:00", "3:00", "2"},{"h47", "郑州", "北京", "1:00", "3:00", "2"},{"h47", "北京", "郑州", "1:00", "3:00", "2"},{"d46", "郑州", "西安", "1:00", "3:00", "2"},{"d46", "西安", "郑州", "1:00", "3:00", "2"},{"v46", "西安", "兰州", "1:00", "3:00", "2"},{"v46", "兰州", "西安", "1:00", "3:00", "2"},{"s45", "徐州", "上海", "1:00", "3:00", "2"},{"s45", "上海", "徐州", "1:00", "3:00", "2"},{"t84", "上海", "南昌", "1:00", "3:00", "2"},{"t84", "南昌", "上海", "1:00", "3:00", "2"},{"f43", "南昌", "株洲", "1:00", "3:00", "2"},{"f43", "株洲", "南昌", "1:00", "3:00", "2"},{"i45", "株洲", "武汉", "1:00", "3:00", "2"},{"i45", "武汉", "株洲", "1:00", "3:00", "2"},{"d53", "武汉", "郑州", "1:00", "3:00", "2"},{"d53", "郑州", "武汉", "1:00", "3:00", "2"},{"f67", "株洲", "广州", "1:00", "3:00", "2"},{"f67", "广州", "株洲", "1:00", "3:00", "2"},{"h76", "广州", "深圳", "1:00", "3:00", "2"},{"h76", "深圳", "广州", "1:00", "3:00", "2"},{"s45", "株洲", "贵阳", "1:00", "3:00", "2"},{"s45", "贵阳", "株洲", "1:00", "3:00", "2"},{"o56", "株洲", "柳州", "1:00", "3:00", "2"},{"o56", "柳州", "株洲", "1:00", "3:00", "2"},{"d65", "贵阳", "柳州", "1:00", "3:00", "2"},{"d65", "柳州", "贵阳", "1:00", "3:00", "2"},{"r44", "南宁", "柳州", "1:00", "3:00", "2"},{"r44", "柳州", "南宁", "1:00", "3:00", "2"},{"f56", "贵阳", "成都", "1:00", "3:00", "2"},{"f56", "成都", "贵阳", "1:00", "3:00", "2"},{"g06", "西安", "成都", "1:00", "3:00", "2"},{"g06", "成都", "西安", "1:00", "3:00", "2"},{"d97", "贵阳", "昆明", "1:00", "3:00", "2"},{"d97", "昆明", "贵阳", "1:00", "3:00", "2"},{"d67", "成都", "昆明", "1:00", "3:00", "2"},{"d67", "昆明", "成都", "1:00", "3:00", "2"}};; int t;//全局变量typedef struct ArcCell{int adj;char *info;}ArcCell; /*定义边的类型*/typedef struct VertexType{int number;char *place;}VertexType; /*定义顶点的类型*/typedef struct{VertexType vex[25];ArcCell arcs[25][25];int vexnum,arcnum;}MGraph; /*定义图的类型*/MGraph G; /*把图定义为全局变量*/char*sa[30]={"a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a"," a","a","a","a","a","a","a","a","a","a","a","a","a","a"};int P[25][25];long int D[25];void print(){int n;void printh();void printp();void print1();void print2();do{printf("\t\t\t时刻表\n");printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t\t\t1.火车时刻表\n") ;printf("\t\t\t2.飞机时刻表\n");printf("\t\t\t3.退出\n");printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("请输入序号选择相应操作:");scanf("%d",&n);switch(n){case 1:print1();printh();break;case 2:print2();printp();break;case 3:printf("欢迎使用\n");break;default: printf("输入错误");}}while(n!=3);}void printh(){int n;void creat_data1();void add1();void delet1();do{printf("\t\t\t火车时刻表\n");printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t\t\t1.新建数据\n") ;printf("\t\t\t2.添加\n");printf("\t\t\t3.删除\n");printf("\t\t\t4.退出\n");printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("请输入序号选择相应操作:");scanf("%d",&n);switch(n){case 1:creat_data1();break;case 2:add1();break;case 3:delet1();break;case 4:printf("欢迎使用\n");break;default: printf("输入错误");}}while(n!=4);}void printp(){int n;void creat_data2();void add2();void delet2();do{printf("\t\t\t飞机时刻表\n");printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t\t1.新建数据\n") ;printf("\t\t\t2.添加\n");printf("\t\t\t3.删除\n");printf("\t\t\t4.退出\n");printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("请输入序号选择相应操作:");scanf("%d",&n);switch(n){case 1:creat_data2();break;case 2:add2();break;case 3:delet2();break;case 4:printf("欢迎使用\n");break;default: printf("输入错误");}}while(n!=4);}void print1(){int i;printf("\t\t列次始站终站开车到站历时\n");printf("\t\t---------------------------------------------------\n");for(i=0;i<58;i++)printf("\t\t %s %s %s %s %s %s\n",hc[i].hnum,hc[i].kname,hc[i].dname,hc[i].ktime,hc[i].dtime,hc[i].l time);for(i=58;i<=(58+t);i++)printf("\t\t %s %s %s %s %s %s\n",hc[i].hnum,hc[i].kname,hc[i].dname,hc[i].ktime,hc[i].dtime,hc[i].l time);printf("\t\t---------------------------------------------------\n\n");}void creat_data1() //新建数据{int i;printf("请输入添加火车个数: ");scanf("%d",&t);for(i=1;i<=t;i++){printf("请输入添加火车列次: ");scanf("%s",hc[i].hnum); printf("\n"); printf("\n请输入始站:");scanf("%s",hc[i].kname); printf("\n"); printf("请输入终站:");scanf("%s",hc[i].dname); printf("\n");printf("请输入开车时间:");scanf("%s",hc[i].ktime); printf("\n"); printf("请输入到站时间:");scanf("%s",hc[i].dtime); printf("\n"); printf("请输入经历时间:");scanf("%s",hc[i].ltime); printf("\n"); }//sum_stu();print();}void add1() //添加数据{char ch;do{printf("请输入添加火车列次: ");scanf("%s",hc[t+1].hnum); printf("\n"); printf("\n请输入始站:");scanf("%s",hc[t+1].kname); printf("\n"); printf("请输入终站:");scanf("%s",hc[t+1].dname); printf("\n");printf("请输入开车时间:");scanf("%s",hc[t+1].ktime); printf("\n");printf("请输入到站时间:");scanf("%s",hc[t+1].dtime); printf("\n");printf("请输入经历时间:");scanf("%s",hc[t+1].ltime); printf("\n");t++;printf("是否继续添加y/n:");getchar();ch=getchar();printf("\n");}while(ch=='y');//sum_stu();print();}void delet1()//删除数据{char num1[10];int i,j,count=0;printf("输入想要删除的火车列次");scanf("%s",num1);for (i=1;i<=t;i++)if(strcmp(num1,hc[i].hnum)==0){for(j=i;j<t+1;j++)hc[j]=hc[j+1];count++;t--;}if(count==0) printf("没有列车信息!");else print();}void print2(){int i;printf("\t\t航次始站终站开机到场历时\n");printf("\t\t---------------------------------------------------\n");for(i=0;i<58;i++)printf("\t\t %s %s %s %s %s %s\n",pl[i].pnum,pl[i].kname,pl[i].dname,pl[i].ktime,pl[i].dtime,pl[i].l time);for(i=58;i<=(58+t);i++)printf("\t\t %s %s %s %s %s %s\n",pl[i].pnum,pl[i].kname,pl[i].dname,pl[i].ktime,pl[i].dtime,pl[i].l time);printf("\t\t---------------------------------------------------\n\n"); }void creat_data2() //新建数据{int i;printf("请输入添加飞机个数: ");scanf("%d",&t);for(i=1;i<=t;i++){printf("请输入添加飞机列次: ");scanf("%s",pl[i].pnum); printf("\n");printf("\n请输入始站:");scanf("%s",pl[i].kname); printf("\n");printf("请输入终站:");scanf("%s",pl[i].dname); printf("\n");printf("请输入开车时间:");scanf("%s",pl[i].ktime); printf("\n");printf("请输入到站时间:");scanf("%s",pl[i].dtime); printf("\n");printf("请输入经历时间:");scanf("%s",pl[i].ltime); printf("\n");}//sum_stu();print();}void add2() //添加数据{char ch;do{printf("请输入添加飞机列次: ");scanf("%s",pl[t+1].pnum); printf("\n"); printf("\n请输入始站:");scanf("%s",pl[t+1].kname); printf("\n"); printf("请输入终站:");scanf("%s",pl[t+1].dname); printf("\n");printf("请输入开车时间:");scanf("%s",pl[t+1].ktime); printf("\n"); printf("请输入到站时间:");scanf("%s",pl[t+1].dtime); printf("\n"); printf("请输入经历时间:");scanf("%s",pl[t+1].ltime); printf("\n"); t++;printf("是否继续添加y/n:");getchar();ch=getchar();printf("\n");}while(ch=='y');//sum_stu();print();}void delet2()//删除数据{char num2[10];int i,j,count=0;printf("输入想要删除的飞机列次");scanf("%s",num2);for (i=1;i<=t;i++)if(strcmp(num2,pl[i].pnum)==0){for(j=i;j<t+1;j++)pl[j]=pl[j+1];count++;t--;}if(count==0) printf("没有飞机信息!");else print();}void CreateUDN(int v,int a) /*造图函数*/ { int i,j; G.vexnum=v;G.arcnum=a;for(i=0;i<G.vexnum;++i)G.vex[i].number=i;G.vex[0].place="哈尔滨";G.vex[1].place="长春";G.vex[2].place="沈阳";G.vex[3].place="大连";G.vex[4].place="天津";G.vex[5].place="北京";G.vex[6].place="徐州";G.vex[7].place="呼和浩特";G.vex[8].place="兰州";G.vex[9].place="乌鲁木齐";G.vex[10].place="西宁";G.vex[11].place="西安";G.vex[12].place="郑州";G.vex[13].place="上海";G.vex[14].place="南昌";G.vex[15].place="福州";G.vex[16].place="株洲";G.vex[17].place="武汉";G.vex[18].place="广州";G.vex[19].place="深圳";G.vex[20].place="柳州";G.vex[21].place="贵阳";G.vex[22].place="南宁";G.vex[23].place="成都";G.vex[24].place="昆明";for(i=0;i<G.vexnum;++i)for(j=0;j<G.vexnum;++j)G.arcs[i][j].adj=20000;G.arcs[0][1].adj=G.arcs[1][0].adj=242;G.arcs[1][2].adj=G.arcs[2][1].adj=305;G.arcs[2][3].adj=G.arcs[3][2].adj=397;G.arcs[2][4].adj=G.arcs[4][2].adj=704;G.arcs[4][5].adj=G.arcs[5][4].adj=137;G.arcs[4][6].adj=G.arcs[6][4].adj=674;G.arcs[5][7].adj=G.arcs[7][5].adj=668;G.arcs[7][8].adj=G.arcs[8][7].adj=1145; G.arcs[8][9].adj=G.arcs[9][8].adj=1892;G.arcs[8][10].adj=G.arcs[10][8].adj=216; G.arcs[6][12].adj=G.arcs[12][6].adj=319; G.arcs[5][12].adj=G.arcs[12][5].adj=695; G.arcs[11][12].adj=G.arcs[12][11].adj=511;G.arcs[8][11].adj=G.arcs[11][8].adj=676;G.arcs[6][13].adj=G.arcs[13][6].adj=651; G.arcs[13][14].adj=G.arcs[14][13].adj=325;G.arcs[14][15].adj=G.arcs[15][14].adj=622;G.arcs[14][16].adj=G.arcs[16][14].adj=367;G.arcs[16][17].adj=G.arcs[17][16].adj=409;G.arcs[17][12].adj=G.arcs[12][17].adj=534;G.arcs[16][21].adj=G.arcs[21][16].adj=902;G.arcs[21][23].adj=G.arcs[23][21].adj=967;G.arcs[23][11].adj=G.arcs[11][23].adj=842;G.arcs[21][24].adj=G.arcs[24][21].adj=639;G.arcs[23][24].adj=G.arcs[24][23].adj=1100;G.arcs[18][16].adj=G.arcs[16][18].adj=675;G.arcs[18][19].adj=G.arcs[19][18].adj=140;G.arcs[16][20].adj=G.arcs[20][16].adj=672;G.arcs[20][21].adj=G.arcs[21][20].adj=607;G.arcs[20][22].adj=G.arcs[22][20].adj=255; }void narrate() /*说明函数*/{int i,k=0;printf("\n以下是选项:\n\n");for(i=0;i<25;i++){printf("(%d) %-10s",i,G.vex[i].place);k=k+1;if(k%4==0)printf("\n\n");}}void ShortwstPath(int num) /*弗洛伊德算法最短路径函数*/{int v,w,i,t;int final[25];int min;for(v=0;v<25;++v)/*初始化*/{final[v]=0; /*标志数组初始化*/D[v]=G.arcs[num][v].adj;for(w=0;w<25;++w)P[v][w]=0;/*设空路径*/if(D[v]<20000)/*v,v0间有边存在*/{P[v][num]=1;P[v][v]=1;/*到v的最短路径上包含v0及v*/}/*if*/}D[num]=0;final[num]=1;/*初始化,v0顶点属于B集*//*开始主循环,每次求得v0到某个v顶点的最短路径,并加v到B集*/ for(i=0;i<25;++i)/*其余G.vexnum-1各顶点*/{min=20000;for(w=0;w<25;++w)if(!final[w])/*w顶点在V-S中*/if(D[w]<min){v=w;min=D[w];}/*w顶点离v0更近*/final[v]=1;/*离v0顶点最近的v加入B*/for(w=0;w<25;++w)/*更新当前最短路径及距离*/if(!final[w]&&((min+G.arcs[v][w].adj)<D[w])) {D[w]=min+G.arcs[v][w].adj;/*修改D和P数组*/for(t=0;t<25;t++)P[w][t]=P[v][t];P[w][w]=1;}/*if*/}/*for*/}void output(int place1,int place2) /*输出函数*/{int i=1, a,b,c,d,q=0;a=place2;if(a!=place1){printf("\n最短路径从%s到%s\n",G.vex[place1].place,G.vex[place2].place);printf("\n最短距离%dm.\n",D[a]);printf("%s",G.vex[place1].place);sa[0]=G.vex[place1].place;d=place1;for(c=0;c<30;++c){gate:;P[a][place1]=0;for(b=0;b<25;b++){if(G.arcs[d][b].adj<20000&&P[a][b]) {printf("----->%s",G.vex[b].place);sa[i]=G.vex[b].place;i++;q=q+1;P[a][b]=0;d=b;if(q%4==0) printf("\n"); goto gate;}}}}}void hcaroutput() /*输出函数*/{printf("\n火车时刻表:\n");printf("\t\t列次始站终站开车到站历时\n");printf("\n\t\t---------------------------------------------------\n"); for(int k=0;k<30;k++){for(int i=0;i<58;i++)if(strcmp(sa[k],hc[i].kname)==0 && strcmp(sa[k+1],hc[i].dname)==0) {printf("\t\t %s %s %s %s %s %s\n",hc[i].hnum,hc[i].kname,hc[i].dname,hc[i].ktime,hc[i].dtime,hc[i].l time);}}printf("\n\t\t---------------------------------------------------\n");}void planeoutput() /*输出函数*/{printf("\n飞机时刻表:\n");printf("\t\t航次始站终站开机到场历时\n");printf("\n\t\t---------------------------------------------------\n"); for(int k=0;k<30;k++){for(int i=0;i<58;i++)if(strcmp(sa[k],pl[i].kname)==0 && strcmp(sa[k+1],pl[i].dname)==0) {printf("\t\t %s %s %s %s %s %s\n",pl[i].pnum,pl[i].kname,pl[i].dname,pl[i].ktime,pl[i].dtime,pl[i].l。

全国交通系统查询源程序

全国交通系统查询源程序
if(!final[w])
if(D[w]<min)
{
v=w;
min=D[w];
}
final[v]=1; //更新当前最短路径及距离。
void gouzaotrain(mgraph &g) ; //构造飞机图
void addplane(mgraph &g); //增加飞机信息
int plane_money(mgraph G, int p[][max_vex],int v0,int m,int D[max_vex]) ;//求飞机费用,迪杰斯特拉算法,邻接表存储结构(费用作为权值)。
p[w][j]=w;
}
}
return D[m];
}
void inputDGTrain_TXT(mgraph g) //写入文本文档中
{
int v=0,w;
int i, min,j;
int final[100];
for ( v=0; v<G.vexnum; v++)//初始化p[][]、final[]和D[]
{
final[v]=0;
D[v]=G.arcs[v0][v].adj;
//更新当前最短路径及距离。
for(w=0;w<G.vexnum;++w)
if(!final[w]&&(min+G.arcs[v][w].adj<D[w])&&G.arcs[v][w].adj!=INFINITY+1)
{
D[w]=min+G.arcs[v][w].adj;
{
int i,j;

全国交通咨询系统C++代码

全国交通咨询系统C++代码

//全国交通咨询系统-代码部分//作者:JUNE 2011-6-11#include <iostream>#include <stdio.h>#include <windows.h>#include <string.h>#define Dij_MAXN 33#define MAX_VERTEX_NUM 31#define MAX_STRING_NUM 10#define MAX_TRAFFIC_NUM 10using namespace std;typedef short int CityType; //定义城市节点typedef struct TrafficNode /////////////////////////////////////////////////{char name[MAX_STRING_NUM]; //班次//int StartTime,StopTime; //起止时间int Time;int EndCity; //火车到达城市的编号int Cost; //票价} TrafficNodeDat;typedef struct VNode //////////////////////////////////////////////////////{CityType city; //城市编号int TrainNum,FlightNum; //标记下面Train数组和Flight数组里元素个数TrafficNodeDat Train[MAX_TRAFFIC_NUM]; //数组成员为结构体,记录了到达城市、起止时间、票价和班次TrafficNodeDat Flight[MAX_TRAFFIC_NUM];} VNodeDat;typedef struct PNode ///////////////////////////////////////////////{int City;int TraNo;} PNodeDat;char CityName[MAX_VERTEX_NUM][MAX_STRING_NUM]; //城市名,采用第一下标为该城市在本程序中的编号int CityNum; //城市数目VNodeDat AdjList[MAX_VERTEX_NUM]; //下标所在城市的线路int MinTime,StartTime;int curPath;int SeekCity(char *name)////////////////////////////////////////////{//查找城市int i;for(i=0;i<CityNum;i++)if(strcmp(name,CityName[i])==0)return i;return -1;}int SaveFile()///////////////////////////////////////////////////////////////{//将火车飞机交通信息写入文件FILE *fp;int i,j,total;if((fp=fopen("city.txt","wb"))==NULL){cout<<"\n\t无法打开文件!\n"; return -1;}fprintf(fp,"%d\n",CityNum);//在city文件中输入城市总数for(i=0;i<CityNum;i++)fprintf(fp,"%s\n",CityName[i]);//再输入城市名fclose(fp);total=0;if((fp=fopen("train.txt","wb"))==NULL){cout<<"\n\t无法打开文件!\n"; return -1;}for(i=0;i<CityNum;i++)total+=AdjList[i].TrainNum;fprintf(fp,"%d\n",total);//在train文件中输入火车总数for(i=0;i<CityNum;i++)for(j=0;j<AdjList[i].TrainNum;j++){fprintf(fp,"%s %s %s ",AdjList[i].Train[j].name,CityName[i],CityName[AdjList[i].Train[j].EndCity]);//输入火车车次,始发站和终点站fprintf(fp,"%d %d\n",AdjList[i].Train[j].Time,AdjList[i].Train[j].Cost);//输入发车时间和到站时间和费用}fclose(fp);total=0;if((fp=fopen("flight.txt","wb"))==NULL){cout<<"\n\t无法打开文件!\n";return -1;}for(i=0;i<CityNum;i++)total+=AdjList[i].FlightNum;fprintf(fp,"%d\n",total);//在flight文件中输入飞机总数for(i=0;i<CityNum;i++)for(j=0;j<AdjList[i].FlightNum;j++){fprintf(fp,"%s %s %s ",AdjList[i].Flight[j].name,CityName[i],CityName[AdjList[i].Flight[j].EndCity]);//输入飞机航班号,始发站和终点站fprintf(fp,"%d %d\n",AdjList[i].Flight[j].Time,AdjList[i].Flight[j].Cost);//输入起飞时间,到达时间和费用}fclose(fp);return 1;}int InsertCity(char *Name)///////////////////////////////////////////////////////{//添加城市strcpy(CityName[CityNum],Name);AdjList[CityNum].city=CityNum;//设置城市编号AdjList[CityNum].FlightNum=0;AdjList[CityNum].TrainNum=0;//新增城市火车数和飞机数初始为零CityNum++;//城市总数加1return 1;}int DelCity(char *Name)/////////////////////////////////////////////////////////{//删除城市int city,i,j;city=SeekCity(Name);for(i=city;i<CityNum-1;i++)strcpy(CityName[i],CityName[i+1]);AdjList[i].FlightNum=AdjList[i+1].FlightNum;AdjList[i].TrainNum=AdjList[i+1].TrainNum;for(j=0;j<AdjList[i].FlightNum;j++){AdjList[i].Flight[j].Cost=AdjList[i+1].Flight[j].Cost;AdjList[i].Flight[j].EndCity=AdjList[i+1].Flight[j].EndCity;strcpy(AdjList[i].Flight[j].name,AdjList[i+1].Flight[j].name);AdjList[i].Flight[j].Time=AdjList[i+1].Flight[j].Time;}}CityNum--;return 1;}int InsertTrain(char *train,char *StartCity,char *EndCity,int Time,int cost)//////////////////////////////////////////////{//添加火车路线int i,j;i=SeekCity(StartCity);j=SeekCity(EndCity);AdjList[i].Train[AdjList[i].TrainNum].Cost=cost;AdjList[i].Train[AdjList[i].TrainNum].EndCity= j;AdjList[i].Train[AdjList[i].TrainNum].Time=Time;strcpy(AdjList[i].Train[AdjList[i].TrainNum].name,train);AdjList[i].TrainNum++;return 1;}int InsertFlight(char *flight,char *StartCity,char *EndCity,int Time,int cost){//添加飞机路线int i,j;i=SeekCity(StartCity);j=SeekCity(EndCity);AdjList[i].Flight[AdjList[i].FlightNum].Cost=cost;AdjList[i].Flight[AdjList[i].FlightNum].EndCit y=j;AdjList[i].Flight[AdjList[i].FlightNum].Time=Time;strcpy(AdjList[i].Flight[AdjList[i].FlightNum].name,flight);AdjList[i].FlightNum++;return 1;}int DelPath(char *name)/////////////////////////////////////////////////////////////////////////{//删除路线int i,j,flag=0;for(i=0;i<CityNum;i++){for(j=0;j<AdjList[i].FlightNum;j++)if(strcmp(AdjList[i].Flight[j].name,name)==0){flag=1;break;}//找到要删除的路线,找到跳出for循环if(flag){for(;j<AdjList[i].FlightNum-1;j++){AdjList[i].Flight[j].Cost=AdjList[i].Flight[j+1].Cost;AdjList[i].Flight[j].EndCity=AdjList[i].Flight[j+1].EndCity;strcpy(AdjList[i].Flight[j].name,AdjList[i].Flight[j+1].name);AdjList[i].Flight[j].Time=AdjList[i].Flight[j+1].Time;}AdjList[i].FlightNum--;//将要删除路线后面的路线全部向前移,并将总数减1 break;}for(j=0;j<AdjList[i].TrainNum;j++)if(strcmp(AdjList[i].Train[j].name,name)==0){flag=1;break;}if(flag){for(;j<AdjList[i].TrainNum-1;j++){AdjList[i].Train[j].Cost=AdjList[i].Train[j+1].Cost;AdjList[i].Train[j].EndCity=AdjList[i].Train[j+1].EndCity;strcpy(AdjList[i].Train[j].name,AdjList[i].Train[j+1].name);AdjList[i].Train[j].Time=AdjList[i].Train[j+1].Time;}AdjList[i].TrainNum--;break;}}return 1;}void Dijkstra_Output(int s[30][30],int PreCity[30],int p_end,int TravelType)/////////////////////////// {//输出最短路径int track[30];int i=0,j,k,min,tmp,end,cost=0;j=p_end;track[i++]=j;//下标为0中存储了终点站的城市编号,i变为1while(PreCity[j]>=0){cost+=s[PreCity[j]][j];//循环后cost为总费用j=PreCity[j];track[i++]=j;}cout<<"\n\t您要查找的路线为:";cout<<"\n\t*─────────────────────────────*\n"; cout<<"\t车号起始站终点站时间花费\n";if(!TravelType)//类型为火车{for(i--;i>0;i--)//初始时i--后i为路线中的城市数目{end=track[i-1];min=32767;for(k=0;k<AdjList[track[i]].TrainNum;k++)if(AdjList[track[i]].Train[k].EndCity==end&&min>AdjList[track[i]].Train[k].Cost){min=AdjList[track[i]].Train[k].Cost;//min为路径中的最小花费tmp=k;//k为一条路径中花费最小的火车编号}printf("\n\t%s",AdjList[track[i]].Train[tmp].name);//输出火车班次printf("\t%10s",CityName[track[i]]);//输出起始城市名printf("\t%10s",CityName[track[i-1]]);//输出终点城市名printf("\t%d",AdjList[track[i]].Train[tmp].Time);//输出时间printf("\t%d\n",AdjList[track[i]].Train[tmp].Cost);//输出花费}}else//类型为飞机{for(i--;i>0;i--){end=track[i-1];min=32767;for(k=0;k<AdjList[track[i]].FlightNum;k++)if(AdjList[track[i]].Flight[k].EndCity==end&&min>AdjList[track[i]].Flight[k].Cost){min=AdjList[track[i]].Flight[k].Cost;tmp=k;}printf("\n\t%s",AdjList[track[i]].Flight[tmp].name);printf("\t%10s",CityName[track[i]]);printf("\t%10s",CityName[track[i-1]]);printf("\t%d",AdjList[track[i]].Flight[tmp].Time);printf("\t%d\n",AdjList[track[i]].Flight[tmp].Cost);}}cout<<"\n\t最终得出最少为: ";cout<<cost<<"\n";cout<<"\t*─────────────────────────────*\n"; }void Dijkstra(int s[30][30],int p_start,int p_end,int TravelType){//迪杰斯特拉算法计算最短路径int PreCity[30];//数组的值为计算出的路线中下标表示的城市中的前一个城市编号int i,j,min,pre,pos;for(i=0;i<CityNum;i++) PreCity[i]=-1;PreCity[p_start]=-2;while(PreCity[p_end]==-1){min=-1;for(i=0;i<CityNum;i++)if(PreCity[i]!=-1)//i为起始站{for(j=0;j<CityNum;j++)if(PreCity[j]==-1&&s[i][j]>0&&(min<0||s[i][j]<min)){pre=i;pos=j;//j为起始站中花费最小的到达站的城市编号min=s[i][j];}}PreCity[pos]=pre;}Dijkstra_Output(s,PreCity,p_end,TravelType);}int CalcMinCost(int StartCity,int EndCity,int TravelType){//查询最小耗费路线int s[30][30];int i,j,min,end,flag1,flag2;flag1=0;flag2=0;for(i=0;i<CityNum;i++)for(j=0;j<CityNum;j++)s[i][j]=-1;//设空路径if(TravelType==0)//判断初始城市和终点城市是否在火车交通路线中for(i=0;i<CityNum;i++)for(j=0;j<AdjList[i].TrainNum;j++){if(AdjList[i].Train[j].EndCity==StartCity) flag1=1;if(AdjList[i].Train[j].EndCity==EndCity) flag2=1;}else if(TravelType==1)//判断初始和终点城市是否在飞机交通路线中for(i=0;i<CityNum;i++)for(j=0;j<AdjList[i].FlightNum;j++){if(AdjList[i].Flight[j].EndCity==StartCity) flag1=1;if(AdjList[i].Flight[j].EndCity==EndCity) flag2=1;}if(flag1!=1&&flag2!=1){printf("\n\t抱歉!没有您要查找的路线!");return 0;}if(TravelType==0){for(i=0;i<CityNum;i++){min=32767;j=0;while(j<AdjList[i].TrainNum){min=32767;end=AdjList[i].Train[j].EndCity;while(end==AdjList[i].Train[j].EndCity&&j<AdjList[i].TrainNum) {if(AdjList[i].Train[j].Cost<min) min=AdjList[i].Train[j].Cost;j++;}//min为i城市中的最小花费,end为其路线终点站s[i][end]=min;}}}else{for(i=0;i<CityNum;i++){min=32767;j=0;while(j<AdjList[i].FlightNum){min=32767;end=AdjList[i].Flight[j].EndCity;while(end==AdjList[i].Flight[j].EndCity&&j<AdjList[i].FlightNum) {if(AdjList[i].Flight[j].Cost<min) min=AdjList[i].Flight[j].Cost;j++;}s[i][end]=min;}}}Dijkstra(s,StartCity,EndCity,TravelType);return 1;}int CalcMinRange(int StartCity,int EndCity,int TravelType){//查询最短路程int s[30][30];int i,j,min,end,flag1,flag2;flag1=0;flag2=0;for(i=0;i<CityNum;i++)for(j=0;j<CityNum;j++)s[i][j]=-1;//设空路径if(TravelType==0)//判断初始城市和终点城市是否在火车交通路线中for(i=0;i<CityNum;i++)for(j=0;j<AdjList[i].TrainNum;j++){if(AdjList[i].Train[j].EndCity==StartCity) flag1=1;if(AdjList[i].Train[j].EndCity==EndCity) flag2=1;}else if(TravelType==1)//判断初始和终点城市是否在飞机交通路线中for(i=0;i<CityNum;i++)for(j=0;j<AdjList[i].FlightNum;j++){if(AdjList[i].Flight[j].EndCity==StartCity) flag1=1;if(AdjList[i].Flight[j].EndCity==EndCity) flag2=1;}if(flag1!=1&&flag2!=1){printf("\n\t抱歉!没有您要查找的路线!");return 0;}if(TravelType==0){for(i=0;i<CityNum;i++){min=32767;j=0;while(j<AdjList[i].TrainNum){min=32767;end=AdjList[i].Train[j].EndCity;while(end==AdjList[i].Train[j].EndCity&&j<AdjList[i].TrainNum) {if(AdjList[i].Train[j].Time<min) min=AdjList[i].Train[j].Time;j++;}//min为i城市中的最短路程,end为其路线终点站s[i][end]=min;}}}else{for(i=0;i<CityNum;i++){min=32767;j=0;while(j<AdjList[i].FlightNum){min=32767;end=AdjList[i].Flight[j].EndCity;while(end==AdjList[i].Flight[j].EndCity&&j<AdjList[i].FlightNum) {if(AdjList[i].Flight[j].Time<min) min=AdjList[i].Flight[j].Time;j++;}s[i][end]=min;}}}Dijkstra(s,StartCity,EndCity,TravelType);return 1;}int InitSystem(){/////////////////////////////////////////////////////////////////////////////从文件中读信息FILE *fp;int i,j,num,cost,time;char stmp1[10];char stmp2[10];char stmp3[10];fp=fopen("city.txt","r");if(!fp){cout<<"\n\t无法打开文件!\n";return -1;}fscanf(fp,"%d",&CityNum);//读入城市总数for(i=0;i<CityNum;i++){fscanf(fp,"%s",&CityName[i]);AdjList[i].city=i;AdjList[i].TrainNum=0;AdjList[i].FlightNum=0;}fclose(fp);fp=fopen("train.txt","r");if(!fp){cout<<"\n\t无法打开文件!\n";return -1;}fscanf(fp,"%d",&num);//读入火车总数for(i=0;i<num;i++){fscanf(fp,"%s",&stmp1);//车次fscanf(fp,"%s",&stmp2);//始发站fscanf(fp,"%s",&stmp3);//终点站j=SeekCity(stmp2);//查找始发站城市编号AdjList[j].Train[AdjList[j].TrainNum].EndCity=SeekCity(stmp3); strcpy(AdjList[j].Train[AdjList[j].TrainNum].name,stmp1);fscanf(fp,"%d",&time);AdjList[j].Train[AdjList[j].TrainNum].Time=time;fscanf(fp,"%d",&cost);AdjList[j].Train[AdjList[j].TrainNum].Cost=cost;AdjList[j].TrainNum++;fclose(fp);fp=fopen("flight.txt","r");if(!fp){cout<<"\n\t无法打开文件!\n";return -1;}fscanf(fp,"%d",&num);for(i=0;i<num;i++){fscanf(fp,"%s",&stmp1);//航班号fscanf(fp,"%s",&stmp2);//始发站fscanf(fp,"%s",&stmp3);//终点站j=SeekCity(stmp2);AdjList[j].Flight[AdjList[j].FlightNum].EndCity=SeekCity(stmp3);strcpy(AdjList[j].Flight[AdjList[j].FlightNum].name,stmp1);fscanf(fp,"%d",&time);AdjList[j].Flight[AdjList[j].FlightNum].Time=time;fscanf(fp,"%d",&cost);AdjList[j].Flight[AdjList[j].FlightNum].Cost=cost;AdjList[j].FlightNum++;}fclose(fp);return 1;}void Administrators(){////////////////////////////////////////////////////////////////////////////////////////管理员的界面char name[10];char s_city[10];char e_city[10];int Command,cost,flag;int traveltype;int time;char user[10],password[10];cout<<"\n\t请输入用户名:";cin>>user;cout<<"\t请输入密码:";cin>>password;if((strcmp("june",user)!=0)||(strcmp("123",password)!=0))//主界面选择验证,用户名为:june,密码为:123{cout<<"\n\t输入信息错误!\n";system("cls");//清屏return;}do{cout<<"\t\t\t\tloading";Sleep(600);cout<<"\ .";Sleep(400);cout<<" .";Sleep(200);cout<<" ."<<endl;Sleep(100);cout<<endl;cout<<"\t\t\t\t 成功!";Sleep(1000);system("cls");//清屏cout<<"\n\t******这里是管理员的界面,欢迎进入******\n"; cout<<"\t∷━━━━━━━━━━━━━━━━━━━∷\n"; cout<<"\t 1.添加城市\n";cout<<"\t 2.删除城市\n";cout<<"\t 3.添加交通路线\n";cout<<"\t 4.删除交通路线\n";cout<<"\t 0.返回上一级菜单\n";cout<<"\t∷**************************************∷\n"; cout<<"\n\t请选择:";scanf("%d",&Command);switch(Command){case 0:system("cls");//清屏return;case 1://添加城市InitSystem();cout<<"\n\t输入城市名:";scanf("%s",&name);InsertCity(name);SaveFile();cout<<"\t系统信息输入成功!\n";break;case 2://删除城市InitSystem();cout<<"\n\t输入城市名:";scanf("%s",&name);DelCity(name);SaveFile();cout<<"\t系统信息输入成功!\n";break;case 3://添加交通路线InitSystem();cout<<"\t请输入起始站城市名:";scanf("%s",&s_city);cout<<"\t请输入终点站城市名:";scanf("%s",&e_city);cout<<"\t请选择交通工具(火车0,飞机1):";scanf("%d",&traveltype);cout<<"\t请输入火车/飞机班次:";scanf("%s",&name);cout<<"\t请输入所耗费的时间:";scanf("%d",&time);printf("\t请输入票价:");scanf("%d",&cost);if(traveltype)InsertFlight(name,s_city,e_city,time,cost);elseInsertTrain(name,s_city,e_city,time,cost);SaveFile();cout<<"\t系统信息输入成功!\n";break;case 4://删除交通路线InitSystem();cout<<"\t请输入班次:";scanf("%s",&name);DelPath(name);SaveFile();cout<<"\t系统信息输入成功!\n";break;default:cout<<"\t选择序号错误!请重新选择!\n";flag=1;}}while(flag);}void Line(int city,int traveltype)//////////////////////////////////////////////////{//////////////////////////////////////////////////////////////////////////////////查找城市中的所有路线int i;printf("\n\t您要查找的路线为:");printf("\n\t*─────────────────────────────*\n"); printf("\t车号起始站终点站时间花费\n");if(!traveltype)//类型为火车{for(i=0;i<AdjList[city].TrainNum;i++){printf("\n\t%s",AdjList[city].Train[i].name);//输出火车班次printf("\t%10s",CityName[city]);//输出起始城市名printf("\t%10s",CityName[AdjList[city].Train[i].EndCity]);//输出终点城市名printf("\t%2d",AdjList[city].Train[i].Time);//输出起止时间printf("\t%d\n",AdjList[city].Train[i].Cost);//输出花费}}else{for(i=0;i<AdjList[city].FlightNum;i++){printf("\n\t%s",AdjList[city].Flight[i].name);//输出火车班次printf("\t%10s",CityName[city]);//输出起始城市名printf("\t%10s",CityName[AdjList[city].Flight[i].EndCity]);//输出终点城市名printf("\t%2d",AdjList[city].Flight[i].Time );//输出起止时间printf("\t%d\n",AdjList[city].Flight[i].Cost);//输出花费}}printf("\t*─────────────────────────────*\n"); }void User(){//////////////////////////////////////////////////////////////////////////////////////用户界面system("cls");//清屏char name[10];int startcity,endcity;int Command,flag,traveltype;do{cout<<"\n\t*******这里是用户的界面,欢迎进入*******\n";cout<<"\t*━━━━━━━━━━━━━━━━━━━*\n";cout<<"\t 1.查询最小耗费路线\n";cout<<"\t 2.查询最短时间路线\n";cout<<"\t 3.查询城市所有路线\n";cout<<"\t 0.返回上一级菜单\n";cout<<"\t****************************************\n"; cout<<"\n\t请选择:";//用户功能选择scanf("%d",&Command);switch(Command){case 0:Sleep(100);system("cls");//清屏return;case 1://最小耗费InitSystem();cout<<"\n\t请输入起始城市:";scanf("%s",&name);startcity=SeekCity(name);if(startcity<0){cout<<"\t输入城市名错误!\n";break;}cout<<"\t请输入终点城市:";scanf("%s",&name);endcity=SeekCity(name);if(endcity<0){cout<<"\t输入城市名错误!\n";break;}cout<<"\t请选择交通工具(火车0,飞机1):";scanf("%d",&traveltype);if(traveltype!=0&&traveltype!=1){cout<<"\t输入错误!\n";break;}CalcMinCost(startcity,endcity,traveltype);cout<<"\n";system("pause");system("cls");//清屏break;case 2://最短时间InitSystem();cout<<"\n\t请输入起始城市:";scanf("%s",&name);startcity=SeekCity(name);if(startcity<0){cout<<"\t输入城市名错误!\n";break;}cout<<"\t请输入终点城市:";scanf("%s",&name);endcity=SeekCity(name);if(endcity<0){cout<<"\t输入城市名错误!\n";break;}cout<<"\t请选择交通工具(火车0,飞机1):"; scanf("%d",&traveltype);if(traveltype!=0&&traveltype!=1){printf("\t输入错误!\n");break;}CalcMinRange(startcity,endcity,traveltype); cout<<"\n";system("pause");system("cls");//清屏break;case 3://查找城市所有路线InitSystem();cout<<"\n\t请输入要查找路线的城市:"; scanf("%s",&name);startcity=SeekCity(name);if(startcity<0){cout<<"\t输入城市名错误!\n";break;}cout<<"\t请选择交通工具(火车0,飞机1):"; scanf("%d",&traveltype);if(traveltype!=0&&traveltype!=1){cout<<"\t输入错误!\n";break;}Line(startcity,traveltype);cout<<"\n";system("pause");system("cls");//清屏break;default:cout<<"\t选择序号错误!请重新选择!\n";flag=1;}}while(flag);}int main(){///////////////////////////////////////////////////////////////////////////////////////////////主界面int Command;int x=0;system("Color 3f");while(1){cout<<"\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"; cout<<"\t ※※\n"; cout<<"\t ※※\n"; cout<<"\t ※欢迎进入全国交通咨询系统※\n"; cout<<"\t ※※\n"; cout<<"\t ※※\n"; cout<<"\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"; cout<<"\n\t\t\t< 请选择登录身份>\n";cout<<"\n\t\t\t\t1: 管理员\n\n\t\t\t\t2: 旅客\n\n\t\t\t\t0: 退出\n\t您的选择是:"; cin>>Command;switch(Command){case 0:return 0;case 1:Administrators();break;case 2:User();break;default:cout<<"\t选择序号错误!请重新选择!\n"; }}}///以下是本系统用到的数据:/*Train.tet11K1 kunming huaihua 12 150K4 kunming huaihua 14 140K5 kunming huaihua 15 100K7 kunming shanghai 30 240K1 changsha shanghai 10 120K2 changsha shanghai 9 140K3 changsha shanghai 11 100K1 huaihua changsha 6 70K2 huaihua changsha 7 65K4 huaihua changsha 5 60K6 huaihua changsha 8 55city.txt4kunmingchangshahuaihuashanghaiflight.txt11F1 kunming huaihua 12 150F4 kunming huaihua 14 140F5 kunming huaihua 15 100F7 kunming shanghai 30 240F1 changsha shanghai 10 120F2 changsha shanghai 9 140F3 changsha shanghai 11 100F1 huaihua changsha 6 70F2 huaihua changsha 7 65F4 huaihua changsha 5 60F6 huaihua changsha 8 55如果对本代码有疑问之处,请下载本人文档里的《数据结构课程设计-全国交通咨询系统》以及《全国交通咨询系统测试说明》进行进一步了解。

2数据结构——全国交通咨询模拟系统实验报告

2数据结构——全国交通咨询模拟系统实验报告

2数据结构——全国交通咨询模拟系统实验报告
实验目的:
实验环境:
本次实验的开发环境为Java编程语言,使用了面向对象的编程思想,采用了数据结构中的图和链表等数据结构。

实验内容:
1.设计交通工具类:
首先,根据系统需求,设计了交通工具类,该类用于表示交通工具的
基本信息,包括交通工具的名称、班次、票价等。

在该类中,使用了链表
数据结构来存储交通工具的班次信息。

2.设计城市类:
接下来,设计了城市类,用于表示各个城市的交通信息。

在该类中,
使用了图数据结构来表示城市之间的联通关系,每个城市作为图的一个节点,城市间的交通工具作为图的边。

实验结果:
经过测试,实验系统能够准确地输出起点城市到终点城市的最短路径
和最佳交通方案,用户可以根据输出信息来决定如何安排旅行计划。

实验总结:。

C++数据结构-全国交通咨询模拟报告

C++数据结构-全国交通咨询模拟报告

数据结构课程设计报告班级:195182学号:20181003991姓名:钟欢日期:2019.12一、课程设计题目与要求1.课程设计题目:全国交通咨询模拟2.问题描述:出于不同目的的旅客对交通工具有不同的要求。

例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。

编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。

3.基本要求:3.1提供对城市信息进行编辑(如添加或删除)的功能。

3.2城市之间有两种交通工具:火车和飞机。

提供对列车时刻表和飞机航班进行编辑(增加或删除)的功能。

3.3提供两种最优决策:最快到达或最省钱到达。

全程只考虑一种交通工具。

3.4旅途中耗费的总时间应该包括中转站的等候时间。

3.5咨询以用户和计算机的对话方式进行。

二、需求分析1.问题描述搭建一个全国交通咨询模拟系统,可以实现简单的人机互动从而达到咨询的效果。

需要完成的功能有,对城市、列车时刻表、航班时刻表进行编辑(手动/文件添加,删除),能够根据出发城市以及到达城市进行相关线路推荐(花费最少线路、耗时最短线路),其中整个线路的耗时总时长包括中转等待时间。

2.程序的功能:2.1维护功能:2.1.1航班操作2.1.2列车操作2.1.3更改密码2.2咨询功能2.2.1选择出行交通工具2.2.2选择要查询的信息:○1查询花费最小的路径○2查询耗时最短的路径2.2.3进行进一步的输入得到所需要的结果三、设计1.设计思想1.1数据结构设计1.1.1逻辑结构设计采用图结构来表示该全国交通网络,用一个结构体来表示时间,结构体内有标准化的(天,时,分)的相关表示以及操作,重载的运算符“-”。

全国交通网络中的城市用结点表示,两个城市之间的航线或者列车线用两个结点之间的边来表示。

城市结点中包含城市名字、城市编号、第一条航线/列车线以及航线/列车线的数目;边结点中包含到达城市名称,指向下一航线/列车线的指针,以及指向该边所指代航线/列车线信息的指针;航班线/列车线信息结点包含航班号/列车号,出发时间,到达时间,花费时间,花费金额。

数据结构《交通咨询系统》完整代码

数据结构《交通咨询系统》完整代码

数据结构《交通咨询系统》完整代码#include#include#include#include#define zuida 32767#define max 20typedef struct lu{int distance;int cost;int time;}lu,lujin[max][max];typedef struct city{char name[20];}citys[max];typedef struct{citys clist;lujin arcs;int c_n,l_n;}Graph;typedef struct{char adjvex;int mincost;int mindistance;int mintime;}closedge;void zairu(Graph *G);void Administer(Graph G);void show(Graph G);int insertcity(Graph *G);int insertlu(Graph *G);int Located(Graph *G, char *p);void baocun(Graph G);int serchlu(Graph *G);int main(){int y,j;Graph G;zairu(&G);//载⼊交通信息while(1){system("cls");printf("\n\n\n\n\n\n");printf("**********************************欢迎使⽤交通咨询系统**************************\n\n"); printf("\t\t\t※※※※※※※※※※※※※※※※※※※※※\n");printf("\t\t\t※※ 1=管理员管理※\n");printf("\t\t\t※※ 2=⽤户咨询路径※\n");printf("\t\t\t※※ 3=显⽰交通系统信息※\n");printf("\t\t\t※※ 4=退出※\n");printf("\t\t\t※※※※※※※※※※※※※※※※※※※※※\n\n\n");printf("********************************************************************************\n");printf("\t\t\t请选择?");scanf("%d",&y);getchar();switch(y){case 1: system("cls");Administer(G);break; //管理员case 2: system("cls");j = serchlu(&G);break; //⽤户case 3: show(G);//显⽰所有路径break;case 4: system("cls");printf("\n\n\n\t\t\t\t谢谢使⽤.......\n\n\n\n");exit(0);break;default:printf("请按提⽰重新输⼊\n");}}return 0;}void Administer(Graph G)/* 显⽰管理员管理项⽬选择界⾯ */{int i,j=0,x,y;char password[5],a;printf("请输⼊登陆密码(admin)|错误三次退出|:");while(1){ for(x=0;x<5;x++){scanf("%c",&a);password[x]=a;}if(password[0]!='a'||password[1]!='d'||password[2]!='m'||password[3]!='i'||password[4]!='n') {printf("输⼊错误,请重新输⼊!\n密码:");j++;if(j==3)exit(0);scanf("%c",&a);}else break;}system("cls");while(1){ printf("\n\n\n\n\n\n");printf("********************************************************************************\n\n");printf("\t\t\t※※※※※※※请选择管理项⽬※※※※※※\n");printf("\t\t\t※※ 1=增加城市※\n");printf("\t\t\t※※ 2=增加旅游路径※\n");printf("\t\t\t※※ 3=返回上⼀级菜单※\n");printf("\t\t\t※※※※※※※※※※※※※※※※※※※※\n\n\n");printf("********************************************************************************\n");printf("选择?");scanf("%d",&y);switch(y){case 1:i =insertcity(&G); /*增加城市*/if(i == -1)printf("该城市已经存在\n");elseprintf("增加成功\n");break;case 2: i = insertlu(&G);/*增加路径*/if(i == -1)printf("增加失败、不存在此城市\n");elseprintf("增加成功\n");break;case 3: baocun (G);system("cls");main(); break; /*返回主菜单*/default:printf("请按提⽰重新输⼊\n");}}}int insertlu(Graph *G)//增加城市交通信息{char Fromc[20], Toc[20];int i, j;int d, c, t;printf("输⼊增加路径的出发城市、⽬的城市、距离(公⾥)、花费(元)、时间(⼩时): \n"); scanf("%s %s %d %d %d", Fromc, Toc, &d, &c, &t);getchar();i = Located(G, Fromc);j = Located(G, Toc);if(i == -1 || j == -1)return -1;else{G->arcs[i][j].distance = G->arcs[j][i].distance = d;G->arcs[i][j].cost = G->arcs[j][i].cost = c;G->arcs[i][j].time = G->arcs[j][i].time = t;G->l_n++;}return 1;}int insertcity(Graph *G)//增加城市{char name[20];printf("输⼊要增加的城市: ");scanf("%s", name);getchar();if(G->c_n == 0){strcpy(G->clist[0].name, name);G->c_n++;}else{for(int i = 0; i < G->c_n; i++)if(strcmp(G->clist[i].name, name) == 0)return -1;elsestrcpy(G->clist[G->c_n].name, name);G->c_n++;}return 1;void mindistance(Graph *G, int v0, int v1)//最短距离{int *d;int vd,w,i,j,v;int mind, *pred, *finald;finald = (int *)malloc(G ->c_n * sizeof(int));//判断顶点是否已求出最短路径d = (int *)malloc(G ->c_n * sizeof(int));//储存起始点到各点的最短路径pred = (int *)malloc(G ->c_n * sizeof(int));//最后⽤于输出最短路径for(v=0;v < G->c_n; v++){finald[v] =0 ;d[v] =G ->arcs[v0][v].cost ;if(d[v] < zuida)pred[v] =v0;elsepred[v] =-1;}d[v0] = 0;//到起始点⽆路径finald[v0] =1;//v0放⼊到final数组⾥for(i=1;ic_n ;i++)//从1开始、因为起始点已经在final⾥⾯、剩下n - 1个顶点、循环n - 1次。

全国交通咨询系统源代码c++版

全国交通咨询系统源代码c++版
createtrainfile();
CreateGraph(G);
break;
case 2:
CreateGraph(G);
break;
}
}
void createcityfile()//新建“城市”文件
void EnterVertex(ALGraph *G);
void ExpenditureDispose(int k,infolist (*arcs)[dingdian],ALGraph G,int v0,int v1,float *M,int *final);
void flightedit(ALGraph *G);//编辑航班
int at[2];
float mo;
} a[hu];
char city[dingdian][10];
int TTime[2],time[2],time1[2],time2[2];
int c[dingdian],d[dingdian];
void guanliyuan(ALGraph *G);
{
case 1:
guanliyuan(&G);//管理员
break;
case 2:
UserDemand(G);//用户咨询
break;
case 3:
char cityname[10];
ArcNode *planefirstarc,*trainfirstarc;
} VNode,AdjList[dingdian];
typedef struct
{
AdjList vertices;
int vexnum,planearcnum,trainarcnum;

全国交通咨询模拟 数据结构 源代码

全国交通咨询模拟 数据结构 源代码

全国交通咨询模拟数据结构源代码在进行全国交通咨询模拟的开发过程中,合理的数据结构设计是至关重要的。

本文将详细介绍一个基于数据结构的全国交通咨询模拟的源代码。

1. 数据结构设计在进行全国交通咨询模拟时,我们需要考虑以下几个关键的数据结构:1.1 城市节点城市节点是全国交通咨询模拟的基本组成单元。

每个城市节点包含以下信息:- 城市名称:用字符串表示城市的名称。

- 城市编号:用整数表示城市的唯一编号。

- 邻接城市:用链表或数组表示与当前城市直接相连的邻接城市。

- 交通方式:用枚举类型表示与邻接城市之间的交通方式,如公路、铁路、航空等。

1.2 邻接链表邻接链表是用于存储城市节点之间连接关系的数据结构。

每个城市节点都有一个邻接链表,用于存储与该城市直接相连的邻接城市。

1.3 城市图城市图是全国交通咨询模拟的核心数据结构,由所有城市节点和它们之间的连接关系组成。

城市图可以用邻接链表的数组来表示,数组的索引对应城市编号,数组的每个元素对应一个城市节点。

2. 源代码实现下面是一个简化版的全国交通咨询模拟的源代码示例:```c++#include <iostream>#include <string>#include <vector>// 定义交通方式的枚举类型enum class Transportation {Highway,Railway,Aviation};// 城市节点的定义struct CityNode {std::string name;int id;std::vector<CityNode*> adjacentCities;std::vector<Transportation> transportationModes;};// 城市图的定义class CityGraph {public:CityGraph(int numCities) {cities.resize(numCities);}void addCity(int id, const std::string& name) {CityNode* city = new CityNode;city->id = id;city->name = name;cities[id] = city;}void addConnection(int city1Id, int city2Id, Transportation mode) {CityNode* city1 = cities[city1Id];CityNode* city2 = cities[city2Id];city1->adjacentCities.push_back(city2);city2->adjacentCities.push_back(city1);city1->transportationModes.push_back(mode);city2->transportationModes.push_back(mode);}void printCityConnections(int cityId) {CityNode* city = cities[cityId];std::cout << "Connections for city " << city->name << " (ID: " << city->id << "):" << std::endl;for (int i = 0; i < city->adjacentCities.size(); i++) {CityNode* adjacentCity = city->adjacentCities[i];Transportation mode = city->transportationModes[i];std::cout << "- " << adjacentCity->name << " (ID: " << adjacentCity->id << "), Transportation: ";switch (mode) {case Transportation::Highway:std::cout << "Highway";break;case Transportation::Railway:std::cout << "Railway";break;case Transportation::Aviation:std::cout << "Aviation";break;}std::cout << std::endl;}}private:std::vector<CityNode*> cities;};int main() {// 创建城市图CityGraph graph(5);// 添加城市节点graph.addCity(0, "City A");graph.addCity(1, "City B");graph.addCity(2, "City C");graph.addCity(3, "City D");graph.addCity(4, "City E");// 添加城市连接关系graph.addConnection(0, 1, Transportation::Highway); graph.addConnection(0, 2, Transportation::Railway); graph.addConnection(1, 3, Transportation::Aviation); graph.addConnection(2, 4, Transportation::Highway); // 打印城市连接关系graph.printCityConnections(0);return 0;}```3. 示例说明上述源代码示例实现了一个简化的全国交通咨询模拟。

全国交通咨询系统设计实验报告(word文档良心出品)

全国交通咨询系统设计实验报告(word文档良心出品)

全国交通咨询模拟系统设计报告团队名称: Bug Killer团队成员:专业:时间:一.需求分析(1)提供对城市信息的的编辑功能。

(2)城市之间有两种交通工具:火车和飞机。

提供对火车时刻表和航班运行表的编辑功能。

(3)提供两种最优决策:最快到达或最省钱到达。

全程只考虑一种交通工具。

(4)旅途中耗费的总时间应该包括中转站的等候时间。

(5)咨询以用户和计算机的对话方式进行。

由用户输入起始站、终点站、最优决策原则和交通工具。

输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时坐哪一趟列车哪一次班机到何地。

二.概要设计我们结合现实生活的实际情况,根据数据结构这门课程的特点和要求。

对问题做了如下处理:以数据结构教材的交通图(参照严蔚敏版《数据结构》 P187)为基础,按照 Internet 上查找的信息对数据进行初始化。

由于这是一个查询性质的程序,所以数据要尽可能的丰富。

但是为了控制问题的规模和减少数据初始化时的查询难度,不同城市之间只包含了不大于三次的列车或航班信息。

为了突出迪杰斯特拉算法,初始数据只包含了交通网中相邻城市之间的列车和航班信息。

这是考虑到,实际生活中几乎每个城市都会有直达的出行方式。

如果全部包含进去,对算法的测试会有影响。

按照功能,本程序有三个模块:1.修改城市之间的交通信息。

包括添加列车车次和航班、删除列车车次和航班信息。

2.最少出行费用的查询。

3.最短旅行时间的查询。

根据程序分工的需要,编写过程分为四个模块:1.构建邻接矩阵,由赵锦志完成。

按照查找最短旅行时间的子模块的需求,读取 train.txt 或plane.txt 中的内容构建存储列车信息的三维数组或航班的三维数组。

构建好的数组功能比较丰富,可以作为邻接矩阵使用。

按照最少出行费用的子模块的需求,读取相应 txt 文档,构建二维的数组,即邻接矩阵。

两种数组只有在改变 txt 文档里的内容时才会重新构建。

全国交通咨询模拟 数据结构 源代码

全国交通咨询模拟 数据结构 源代码

全国交通咨询摹拟数据结构源代码在全国范围内建立一个交通咨询摹拟系统,可以为用户提供交通信息查询和路线规划的功能。

为了实现这个系统,我们需要设计和实现合适的数据结构,并编写相应的源代码。

首先,我们需要考虑的是如何表示交通网络。

一个简单而有效的方法是使用图来表示道路和交通节点。

我们可以使用邻接矩阵或者邻接表来表示图。

在这个摹拟系统中,每一个城市可以看做是一个节点,每条道路可以看做是两个节点之间的边。

邻接矩阵可以用一个二维数组来表示,其中数组的每一个元素表示两个节点之间的距离或者道路的权重。

邻接表则使用链表来表示每一个节点的邻接节点。

接下来,我们需要考虑如何实现交通信息查询功能。

用户可以输入起始城市和目的城市,系统需要返回最短路径或者最快路径。

为了实现这个功能,我们可以使用Dijkstra算法或者A*算法。

Dijkstra算法可以找到两个节点之间的最短路径,而A*算法则可以找到两个节点之间的最快路径。

这些算法需要在图的基础上进行计算,并使用合适的数据结构来存储节点和路径信息。

除了交通信息查询,用户还可以查询特定城市的交通拥堵情况。

为了实现这个功能,我们可以为每一个城市维护一个拥堵指数。

拥堵指数可以表示道路的通行能力或者交通流量。

当用户查询某个城市的交通拥堵情况时,系统可以返回该城市的拥堵指数,并根据指数的高低提供相应的建议。

在实现这个交通咨询摹拟系统时,我们还需要考虑数据的存储和更新。

可以使用数据库来存储城市、道路和拥堵指数等信息。

数据库可以提供高效的数据查询和更新功能,并且可以方便地与系统的源代码进行交互。

以下是一个简单的伪代码示例,展示了如何使用数据结构和算法实现交通咨询摹拟系统:```class City:def __init__(self, name): = nameself.adjacent_cities = []self.congestion_index = 0def add_adjacent_city(self, city, distance):self.adjacent_cities.append((city, distance))def update_congestion_index(self, index):self.congestion_index = indexclass TrafficConsultation:def __init__(self):self.cities = {}def add_city(self, name):city = City(name)self.cities[name] = citydef add_road(self, city1, city2, distance):self.cities[city1].add_adjacent_city(self.cities[city2], distance) self.cities[city2].add_adjacent_city(self.cities[city1], distance) def update_congestion_index(self, city, index):self.cities[city].update_congestion_index(index)def shortest_path(self, start_city, end_city):# 使用Dijkstra算法计算最短路径# 返回最短路径和距离def fastest_path(self, start_city, end_city):# 使用A*算法计算最快路径# 返回最快路径和时间def get_congestion_index(self, city):# 返回城市的拥堵指数# 创建交通咨询摹拟系统实例consultation = TrafficConsultation()# 添加城市consultation.add_city("北京")consultation.add_city("上海")consultation.add_city("广州")# 添加道路consultation.add_road("北京", "上海", 1000) consultation.add_road("北京", "广州", 1500) consultation.add_road("上海", "广州", 1200)# 更新拥堵指数consultation.update_congestion_index("北京", 80) consultation.update_congestion_index("上海", 70)consultation.update_congestion_index("广州", 90)# 查询最短路径和最快路径shortest_path, distance = consultation.shortest_path("北京", "广州")fastest_path, time = consultation.fastest_path("北京", "广州")# 查询拥堵指数congestion_index = consultation.get_congestion_index("北京")```以上是一个简单的交通咨询摹拟系统的设计和实现示例。

交通咨询程设计含源代码可以运行.doc

交通咨询程设计含源代码可以运行.doc

目录第一章需求分析 (1)1.1题目分析 (2)1.2实现方法 (2)1.2.1图的实现和声明 (2)1.2.2程序功能的实现 (3)第二章系统功能模块设计 (4)第三章流程图 (5)第四章运行调试 (6)第五章实验总结 (9)第六章致谢 (9)附录一.............................................. 错误!未定义书签。

附录二.............................................. 错误!未定义书签。

I交通咨询模拟第一章需求分析设计、实现一个全国大城市间的交通咨询程序,为旅客提供三种最优决策方案:一是建立交通网络图的存储结构,二实现两个城市间的最短路经问题。

程序所具有的功能特色本程序主要目的是为了给用户提供路径咨询。

实现了帮助用户了解全国各大城市间往来的最短路径问题,第二,可以提供用户查询各大城市的相关信息。

本程序最大的特点是支持用户自己添加城市信息及城市,或添加城市的路径,既就有可扩展性。

该程序所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交通咨询。

此程序规定:(1)在程序中输入城市名称时,需输入10个字母以内的字母串;输入列车或飞机编号时需输入一个整型数据;输入列车或飞机的费用时需输入一个实型数据;输入列车或飞机开始时间和到达时间时均需输入两个整型数据(以hh:mm的形式);在选择功能时,应输入与所选功能对应的一个整型数据。

(2)程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。

(3)程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供三种最优决策:最快到达、最省钱到达、最少中转次数到达。

1.1题目分析1.通过对题目的分析知,是要让我们能够通过利用所学的数据结构的基本知识和技能来解决程序设计问,因此在搞程序设计之前先好好的把书复习一遍,弄清楚各个知识之间的联系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

12050741班(郭晓湛,李佳豪,廖川,杨鹤)课题:全国交通系统咨询模拟源程序代码:#include <windows.h>#include <stdio.h>#include <string.h>#include <vector>#include<iostream>#include <malloc.h>#define INF 65535 //定义一个最大数定为无穷值#define MAX 23using namespace std;static int c_number=10;static int k=0;static int v=0,z=0,r=0,t=0;typedef struct search{int c_transer;int c_cost;int c_time;int f_cost;int f_time;}search;search m[20],x[20],n[20];typedef int costAdj[MAX+1][MAX+1];//图邻接矩阵从1开始记数int Path[MAX+1][MAX+1];//图邻接矩阵从1开始记数typedef struct unDiGraph{int numVerts; //结点costAdj cost; //邻接矩阵}unDiGraph,*UNG; //图的定义typedef struct c_edit{char a[10];}c_edit;c_edit add[10];costAdj B,L;//定位函数,输出城市列表,增添城市。

int pr(int i,int j){int h=0;if (j==0){h=i;}else if (j==1){cin>>add[i].a;}switch(h)//运用switch语句。

{case(0):cout<<"";break;case(1) : cout<<"成都 ";break; case(2) : cout<<"西安 ";break; case(3) : cout<<"郑州 ";break; case(4) : cout<<"武汉 ";break; case(5) : cout<<"株洲 ";break;case(6) : cout<<"贵阳 ";break;case(7) : cout<<"柳州 ";break;case(8) : cout<<"广州 ";break;case(9) : cout<<"南宁 ";break;case(10) : cout<<"徐州 ";break;default:cout<<add[i-10].a;}return 1;}//输出城市列表及相应代码void pri(){int i;cout<<" 城市及其代码"<<endl<<endl<<endl;cout<<"****************************"<<endl; for (i=1;i<=c_number;i++){cout<<i<<".";pr(i,0);}cout<<endl<<"***********************"<<endl<<endl<<endl< <endl<<endl<<endl;}//构造带权(费用)图返回首地址G:unDiGraph *CreateCostG(int o)//火车的花费的存贮和编辑功能{unDiGraph *G;int i,j;int a=0,b=0,f,h=1;if(!(G=(unDiGraph *)malloc(sizeof(unDiGraph)))) //为G 分配存储空间。

{return(NULL);}for(i=1;i<c_number+1;i++){for(j=1;j<c_number+1;j++){G->cost[i][j]=INF; //初始化使G->cost[i][j]为无穷。

}}G->numVerts=c_number;G->cost[1][2]=G->cost[2][1]=112;G->cost[1][6]=G->cost[6][1]=190;G->cost[2][3]=G->cost[3][2]=136;G->cost[2][5]=G->cost[5][2]=325;G->cost[3][4]=G->cost[4][3]=142;G->cost[3][5]=G->cost[5][3]=230;G->cost[3][6]=G->cost[6][3]=213;G->cost[4][7]=G->cost[7][4]=247;G->cost[4][8]=G->cost[8][4]=250;G->cost[5][7]=G->cost[7][5]=161;G->cost[5][9]=G->cost[9][5]=208;G->cost[5][10]=G->cost[10][5]=261;G->cost[6][8]=G->cost[8][6]=317;G->cost[7][8]=G->cost[8][7]=208;G->cost[8][10]=G->cost[10][8]=367;G->cost[9][10]=G->cost[10][9]=444;if (o){while(h==1){v=v+1;pri();cout<<"火车花费编辑"<<endl;cout<<"请输入开始城市的代码"<<endl;cin>>a;cout<<"请输入结尾城市的代码"<<endl;cin>>b;cout<<"请输入你的两地花费"<<endl;cin>>m[v].c_cost;n[v].c_cost=a;x[v].c_cost=b;cout<<"请选择:"<<endl;cout<<"**************************************************** *****"<<endl;cout<<"1:继续更改城市费用"<<endl;cout<<"0:返回上一级菜单"<<endl;cout<<"**************************************************** *****"<<endl;cin>>h;switch(h){case 1:h=1;break;case 0:h=0;break;default:{cout<<"选择出错"<<endl;}}}}f=v+1;while (v--){G->cost[n[v].c_cost][x[v].c_cost]=m[v].c_cost;}v=f;return(G);}//构造带权(时间)图返回首地址G:unDiGraph *CreateTimeG(int o)//火车的时间的存贮和编辑功能{unDiGraph *G;int i,j;int a=0,b=0,f,h=1;if(!(G=(unDiGraph *)malloc(sizeof(unDiGraph)))) //为G 分配存储空间。

{return(NULL);}for(i=1;i<c_number+1;i++){for(j=1;j<c_number+1;j++){G->cost[i][j]=INF;//初始化使G->cost[i][j]为无穷。

}}G->numVerts=c_number;G->cost[1][2]=G->cost[2][1]=15;G->cost[1][6]=G->cost[6][1]=16;G->cost[2][3]=G->cost[3][2]=6;G->cost[2][5]=G->cost[5][2]=20;G->cost[3][4]=G->cost[4][3]=6;G->cost[3][5]=G->cost[5][3]=9;G->cost[3][6]=G->cost[6][3]=24;G->cost[4][7]=G->cost[7][4]=13;G->cost[4][8]=G->cost[8][4]=14;G->cost[5][7]=G->cost[7][5]=8;G->cost[5][9]=G->cost[9][5]=12;G->cost[5][10]=G->cost[10][5]=17;G->cost[6][8]=G->cost[8][6]=23;G->cost[7][8]=G->cost[8][7]=13;G->cost[8][10]=G->cost[10][8]=20;G->cost[9][10]=G->cost[10][9]=33;if (o){while(h==1){z=z+1;pri();cout<<"火车时间编辑"<<endl;cout<<"请输入开始城市的代码"<<endl; cin>>a;cout<<"请输入结尾城市的代码"<<endl; cin>>b;cout<<"请输入你的两地时间"<<endl;cin>>m[z].c_time;n[z].c_time=a;x[z].c_time=b;cout<<"请选择:"<<endl;cout<<"*********************************"<<endl; cout<<"1:继续更改城市时间"<<endl;cout<<"0:返回上一级菜单"<<endl;cout<<"********************************"<<endl; cin>>h;switch(h){case 1: system("cls");h=1;break;case 0: system("cls");h=0;break;default:{cout<<"选择出错"<<endl;}}}}f=z+1;while (z--){G->cost[n[z].c_time][x[z].c_time]=m[z].c_time;}z=f;return(G);}unDiGraph *CreatetranserG(int o)//火车中转次数的存贮和编辑功能{unDiGraph *G;int i,j;int a=0,b=0,f,h=1;if(!(G=(unDiGraph *)malloc(sizeof(unDiGraph)))) //为G 分配存储空间。

相关文档
最新文档