大数据结构全国交通模拟系统.docx
- 文档编号:7540118
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:37
- 大小:83.36KB
大数据结构全国交通模拟系统.docx
《大数据结构全国交通模拟系统.docx》由会员分享,可在线阅读,更多相关《大数据结构全国交通模拟系统.docx(37页珍藏版)》请在冰豆网上搜索。
大数据结构全国交通模拟系统
全国交通模拟系统课程设计报告
姓名:
唐文龙
班级:
2班
学号:
411417080216
学院:
华信学院
专业:
计算机科学与技术
指导:
日期:
2013.06.20
3.3.1主函数流程图6
附录:
源程序.........................................................................................................................11
1需求分析
出于不同目的的旅客对交通工具有不同的要求。
例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。
编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
1.1概述
程序的功能包括:
提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供两种最优决策:
最快到达、最省钱到达。
1.2数据需求
输入列车或飞机编号时需输入一个整型数据;输入列车或飞机的费用时需输入一个实型数据;输入列车或飞机开始时间和到达时间时均需输入两个整型数据;在选择功能时,应输入与所选功能对应的一个整型数据。
1.3功能性需求
总体功能描述
(1)提供对城市信息进行编辑的功能。
(2)城市之间有两种交通工具:
火车和飞机。
提供对列车时刻表和飞机航班进行编辑的功能。
(3)提供两种最优决策:
最快到达或最省钱到达。
全程只考虑一种交通工具,不考虑回程;(4)旅途中耗费的总时间应该包括中转站的等候时间。
(5)咨询以用户和计算机的对话方式进行。
由用户输入起始站、终点站、最优决策原
则和交通工具,输出信息:
最快需要多长时间才能到达或者最少需要多少旅费才能到达。
1.4其他需求
(1)具有可靠性,可用性。
(2)简单,便捷。
(3)清晰,易懂。
2概要设计
采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。
划分出来的模块相对独立但又相关,且容易理解。
图1模块1
图1.模块1
图2.模块2
(1)数据存储。
城市信息、交通信息存储于磁盘文件。
(2)数据的逻辑结构。
根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是城市之间所耗费的时间或旅费。
(3)数据的存储结构。
这里建议采用邻接表作为数据的存储结构。
(4)用不同的功能模块对城市信息和交通信息进行编辑。
(5)最优决策功能模块。
①读入城市信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放城市名及对方城市到达该元素所代表城市的所有信息;表头数组中的元素所对应的单链表存放与该元素所代表的城市有交通联系的城市。
②根据具体最优决策的要求,用Dijkstra算法求出出发城市到其它各城市的最优值,搜索过程中所经过城市的局部最优信息都保存在邻接表的表头数组中。
其目的城市所代表的元素中就保存了所需的最优决策结果。
③输出结果。
从目的城市出发,搜索到出发城市,所经过的城市均入栈,再逐一出栈栈中的城市,输出保存在表头数组中对应城市的信息及最终结果。
即最终所需的最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间。
(6)主程序可以有系统界面、菜单;在程序运行过程中可以反复操作。
3详细设计
3.1结构体的定义
本程序运用了关于图这种数据结构。
他的抽象数据类型定义如下:
typedefstructunDiGraph
{
intnumVerts;//结点
costAdjcost;//邻接矩阵
}unDiGraph,*UNG;
基本操作:
unDiGraph*CreateCostG()
操作结果:
构造带权(费用)图。
unDiGraph*CreateTimeG()
操作结果:
构造带权(时间)图。
PathMat*Floyed(unDiGraph*D)
操作结果:
Floyed函数求任意两点的最短路径。
3.2基本操作
typedefstructunDiGraph
{
intnumVerts;//结点
costAdjcost;//邻接矩阵
}unDiGraph,*UNG;//图的定义
costAdjB,L;
voidpr(inti)//选择城市
voidpri()//输出城市
unDiGraph*CreateCostG()
操作结果:
构造带权(费用)图返回首地址G:
unDiGraph*CreateTimeG()
操作结果:
构造带权(时间)图返回首地址G:
unDiGraph*CreateFlyG()
操作结果:
飞机的相关信息
voidFloyed(unDiGraph*D,unDiGraph*M)
操作要求:
图G存在
操作结果:
Floyed函数求任意两点的最短路径
voidprn_pass(inti,intj)/
基本操作:
为了求从i到j的最短路径,只需要调用如下的过程
voidtime()
操作结果:
求最少时间路径。
。
voidmoney()
操作结果:
求最少花费路径
voidadministrator()
操作结果:
管理员功能
voidmain()//main函数
3.3算法说明
利用Floyed函数求带权图两点之间的最短路径。
通过对带权费用图和带权时间图求最短路径,就可以最短道从一城市到另一城市之间最省时间和最省费用的走法
3.3.1主函数流程图
图3.主函数流程图
3.3.2pri函数流程图
图4pri函数流程图
3.3.3增加城市流程图
图5增加城市函数流程图
4系统实现
本节介绍了系统实现的开发环境,包括硬件环境,软件环境,以及运行界面展示。
最后显示了该系统实现后每个功能的实现结果
4.1开发环境
1.硬件环境
电脑型号:
组装机.
处理器:
PentiumG6302.7GHz
主板:
技嘉H61m—ds2
内存:
4G
显卡:
HDGraphicsFamily
2.软件环境
操作系统:
WindowsXP.
开发软件:
MicrosoftVisualC++6.0.
4.2运行界面
图6主菜单界面
图7查看城市
图8石家庄到北京火车
图9石家庄到北京飞机
图10管理员界面
图11飞机花费编辑
4.3测试用例
时间的最少花费和最短时间的铁路乘车路线。
例如:
在最短时间路线选择时,如果输入11(北京)和8(广州),系统就会自动给出最短路径为:
北京郑州武汉株洲广州。
当输入出错时,系统会提示出错信息,并返回输入窗口让用户重新输入。
5.总结
.构造带权图CreateFlyGCreateCostG和CreateTimeG:
T(MAX)=O((MAX)2)
通过实习让我了解到任何事情只有努力之后才能完成的更好。
6.参考文献
[1]许卓群等,《数据结构》,高等教育出版社,2000年
[2]刘坤起.张有华.数据结构题型.题集.题解[M].科学出版社2005年11月
附录.源程序
#include
#include
#include
#include
#include
#include
#defineINF65535//定义一个最大数定为无穷值
#defineMAX23
staticintc_number=14;
staticintk=0;
staticintv=0,z=0,r=0,t=0;
typedefstructzhu
{
intc_cost;
intc_time;
intf_cost;
intf_time;
}zhu;
zhum[20],x[20],n[20];
typedefintcostAdj[MAX+1][MAX+1];//图邻接矩阵从1开始记数
intPath[MAX+1][MAX+1];//图邻接矩阵从1开始记数
typedefstructunDiGraph
{
intnumVerts;//结点
costAdjcost;//邻接矩阵
}unDiGraph,*UNG;//图的定义
typedefstructc_edit
{
chara[10];
}c_edit;
c_editadd[10];
costAdjB,L;
intpr(inti,intj)
{
inth=0;
if(j==0)
{
h=i;
}
elseif(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;
case(11):
cout<<"北京";
break;
case(12):
cout<<"天津";
break;
case(13):
cout<<"上海";
break;
case(14):
cout<<"石家庄";
break;
default:
cout< } return1; } //输出城市列表及相应代码 voidpri() { inti; cout<<"城市及其代码"< cout<<"*********************************************************"< for(i=1;i<=c_number;i++) { cout< pr(i,0); } cout< } //构造带权(费用)图返回首地址G: unDiGraph*CreateCostG(into)//火车的花费的存贮和编辑功能 { unDiGraph*G; inti,j; inta=0,b=0,f,h=1; if(! (G=(unDiGraph*)malloc(sizeof(unDiGraph))))//为G分配存储空间。 { return(NULL); } for(i=1;i { for(j=1;j { G->cost[i][j]=INF;//初始化使G->cost[i][j]为无穷。 } } G->numVerts=c_number; G->cost[1][6]=G->cost[6][1]=96; G->cost[1][2]=G->cost[2][1]=84; G->cost[2][3]=G->cost[3][2]=51; G->cost[3][4]=G->cost[4][3]=53; G->cost[4][5]=G->cost[5][4]=40; G->cost[5][6]=G->cost[6][5]=90; G->cost[5][8]=G->cost[8][5]=67; G->cost[5][7]=G->cost[7][5]=67; G->cost[6][7]=G->cost[7][6]=60; G->cost[7][9]=G->cost[9][7]=25; G->cost[3][11]=G->cost[11][3]=69; G->cost[11][12]=G->cost[12][11]=13; G->cost[12][10]=G->cost[10][12]=67; G->cost[3][10]=G->cost[10][3]=34; G->cost[13][10]=G->cost[10][13]=65; G->cost[13][5]=G->cost[5][13]=118; G->cost[14][11]=G->cost[11][14]=43; G->cost[14][2]=G->cost[2][14]=110; G->cost[14][3]=G->cost[3][14]=60; if(o){ while(h==1) { v=v+1; pri(); cout<<"火车花费编辑"< cout<<"请输入开始城市的代码"< cin>>a; cout<<"请输入结尾城市的代码"< cin>>b; cout<<"请输入你的两地花费"< cin>>m[v].c_cost; n[v].c_cost=a; x[v].c_cost=b; cout<<"请选择"< cout<<"*********************************************************"< cout<<"1: 继续更改城市费用"< cout<<"0: 返回上一级菜单"< cout<<"*********************************************************"< cin>>h; switch(h){ case1: h=1; break; case0: h=0; break; default: { cout<<"选择出错"< } } } } 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(into)//火车的时间的存贮和编辑功能 { unDiGraph*G; inti,j; inta=0,b=0,f,h=1; if(! (G=(unDiGraph*)malloc(sizeof(unDiGraph))))//为G分配存储空间。 { return(NULL); } for(i=1;i { for(j=1;j { G->cost[i][j]=INF;//初始化使G->cost[i][j]为无穷。 } } G->numVerts=c_number; G->cost[1][6]=G->cost[6][1]=9; G->cost[1][2]=G->cost[2][1]=8; G->cost[2][3]=G->cost[3][2]=5; G->cost[3][4]=G->cost[4][3]=5; G->cost[4][5]=G->cost[5][4]=4; G->cost[5][6]=G->cost[6][5]=9; G->cost[5][7]=G->cost[7][5]=6; G->cost[5][8]=G->cost[8][5]=6; G->cost[6][7]=G->cost[7][6]=6; G->cost[7][9]=G->cost[9][7]=2; G->cost[3][11]=G->cost[11][3]=6; G->cost[11][12]=G->cost[12][11]=1; G->cost[12][10]=G->cost[10][12]=6; G->cost[3][10]=G->cost[10][3]=3; G->cost[13][10]=G->cost[10][13]=6; G->cost[13][5]=G->cost[5][13]=11; G->cost[14][11]=G->cost[11][14]=3; G->cost[14][2]=G->cost[2][14]=7; G->cost[14][3]=G->cost[3][14]=3; if(o){ while(h==1) { z=z+1; pri(); cout<<"火车时间编辑"< cout<<"请输入开始城市的代码"< cin>>a; cout<<"请输入结尾城市的代码"< cin>>b; cout<<"请输入你的两地时间"< cin>>m[z].c_time; n[z].c_time=a; x[z].c_time=b; cout<<"请选择"< cout<<"*********************************************************"< cout<<"1: 继续更改城市时间"< cout<<"0: 返回上一级菜单"< cout<<"*********************************************************"< cin>>h; switch(h){ case1: h=1; break; case0: h=0; break; default: { cout<<"选择出错"< } } } } f=z+1; while(z--){ G->cost[n[z].c_time][x[z].c_time]=m[z].c_time; } z=f; return(G); } unDiGraph*CreateTimeF(into)//飞机的时间的存贮和编辑功能 { unDiGraph*G; inti,j; inta=0,b=0,f,h=1; if(! (G=(unDiGraph*)malloc(sizeof(unDiGraph))))//为G分配存储空间。 { return(NULL); } for(i=1;i { for(j=1;j { G->cost[i][j]=INF;//初始化使G->cost[i][j]为无穷。 } } G->numVerts=c_number; G->cost[1][6]=G->cost[6][1]=3; G->cost[1][2]=G->cost[2][1]=2; G->cost[2][3]=G->cost[3][2]=1; G->cost[3][4]=G->cost[4][3]=2; G->cost[4][5]=G->cost[5][4]=4; G->cost[5][6]=G->cost[6][5]=3; G->cost[5][7]=G->cost[7][5]=6; G->cost[5][8]=G->cost[8][5]=6; G->cost[6][7]=G->cost[7][6]=6; G->cost[7][9]=G->cost[9][7]=2; G->cost[3][11]=G->cost[11][3]=6; G->cost[11][12]=G->cost[12][11]=1; G->cost[12][10]=G->cost[10][12]=2; G->cost[3][10]=G->cost[10][3]=3; G->cost[13][10]=G->cost[10][13]=6; G->cost[13][5]=G->cost[5][13]=4; G->cost[14][11]=G->cost[11][14]=1; G->cost[14][2]=G->cost[2][14]=3; G->cost[14][3]=G->cost[3][14]=1; if(o){ while(h==1) { t=t+1; pri(); cout<<"飞机时间编辑"< cout<<"请输入开始城市的代码"< cin>>a; cout<<"请输入结尾城市的代码"< cin>>b; cout<<"请输入你的两地时间"< cin>>m[t].f_time; n[t].f_time=a; x[t].f_time=b; cout<<"请选择"< cout<<"*********************************************************"< cout<<"1: 继续更改城市时间"< cout<<"0: 返回上一级菜单"< cout<<"*********************************************************"< cin>>h; switch(h){ case1: h=1; break; case0: h=0; break; default: { cout<<"选择出错"< } } } } f=t+1; while(t--){ G->cost[n[t].f_time][x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 全国 交通 模拟 系统