交通信息查询详细设计说明书Word格式文档下载.docx

上传人:b****6 文档编号:18663820 上传时间:2022-12-31 格式:DOCX 页数:20 大小:171.94KB
下载 相关 举报
交通信息查询详细设计说明书Word格式文档下载.docx_第1页
第1页 / 共20页
交通信息查询详细设计说明书Word格式文档下载.docx_第2页
第2页 / 共20页
交通信息查询详细设计说明书Word格式文档下载.docx_第3页
第3页 / 共20页
交通信息查询详细设计说明书Word格式文档下载.docx_第4页
第4页 / 共20页
交通信息查询详细设计说明书Word格式文档下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

交通信息查询详细设计说明书Word格式文档下载.docx

《交通信息查询详细设计说明书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《交通信息查询详细设计说明书Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。

交通信息查询详细设计说明书Word格式文档下载.docx

模块名称

模块标示符

管理员添加城市

Model1

管理员删除城市

Model2

管理员添加航班

Model3

管理员删除航班

Model4

普通用户查询最少花费航班

Model5

普通用户查询最短时间航班

Model6

3.2模块1(model1)

3.2.1模块描述

该模块所要实现的功能为将一个新城市加入到交通信息库当中。

适用对象为信息库管理员,要求通过键盘输入所要添加的新城市,并将信息保存到对应的文件中去。

同时要求有一定判错功能。

3.2.2输入项

要求输入一个城市名作为添加城市名,为了方便起见,这里运用STRING类作为变量类型。

3.2.3输出项

输出项为添加的string类城市名,要求输出到文件中去,并修改文件中的城市数

3.2.4流程逻辑

3.2.5接口

本模块与其他模块以及整个数据结构的接口为城市文件,通过本模块修改文件以及初始化操作与数据结构关联起来

3.2.6初步代码

intaddcity(graph&

t)//返回1表示添加失败,因为城市已经存在

{

chardd;

charch;

intk;

intp=0;

stringc;

fstreamfile;

printf("

\n\n\n"

);

cout<

<

"

==========================这里是城市添加管理页面================================\n\n\n"

;

outputcities(t);

警告:

您的操作将改变交通信息库,输入1继续操作,否则离开"

:

ch=getchar();

dd=ch;

for(;

ch!

='

\n'

)ch=getchar();

if(dd!

1'

)return2;

\n\n"

-----------------请输入想要添加的城市名:

cin>

>

c;

getchar();

for(k=1;

k<

=t.citynum;

k++)

if(c==str[k])

{

抱歉!

您所添加的城市已经存在\n"

Sleep(800);

return1;

}

file.open("

file.txt"

file<

setw(6)<

t.citynum+1<

endl;

file.seekg(0,ios:

end);

file.close();

initialcities(t);

initialflights(t);

initialtrains(t);

**********************城市已成功添加了呢~**********************"

return0;

}//添加城市函数,运行完之后不必调用城市初始化,初始化已包含在函数中

3.2.7测试计划

测试时通过各种不符合要求的输入来检验本模块的判错能力。

同时注意文件中新生成的信息是否与预想的吻合。

3.3.模块2(model2)

3.3.1模块描述

该模块所要实现的功能为将一个已有城市从交通信息库当中删除。

适用对象为信息库管理员,要求通过键盘输入所要删除的城市,并将信息保存到对应的文件中去。

3.3.2输入项

要求输入一个城市名作为删除城市名,为了方便起见,这里运用STRING类作为变量类型。

3.3.3输出项

输出项为整个城市列表,要求输出到文件中去,并修改城市数

3.3.4流程逻辑

3.3.5初步代码

intdeletecity(graph&

t)//返回1表示删除失败,因为城市不存在

unsignedinthour;

unsignedintminute;

intdecreasef=0;

//删除城市后减少的航班数

intdecreaset=0;

//删除城市后减少的列车数

inti,j;

intm;

//以上为变量声明

cout<

这里是城市删除管理页面\n\n\n\n"

-----------------请输入想要删除的城市:

cout<

if(c==str[k]){m=k;

//m为想要删除城市的下标break;

if(k==t.citynum){cout<

抱歉!

您想要删除的城市不存在\n"

//以上为判定城市是否存在

fstream:

out|ios:

trunc);

t.citynum-1<

for(i=1;

i<

i++)//现在的城市数还是未删之前的

if(i!

=m)file<

str[i]<

elsecontinue;

for(i=m,j=1;

j<

j++)

{decreasef+=t.map[i][j].flightnum;

decreaset+=t.map[i][j].trainnum;

for(i=1,j=m;

i++)

{decreasef+=t.map[i][j].flightnum;

decreasef=decreasef-t.map[m][m].flightnum;

decreaset=decreaset-t.map[m][m].trainnum;

//以上已经将数据结构更新完毕

接下来将文件全数更新一下即可

3.3.6测试计划

3.4.模块3(model3)

3.4.1模块描述

该模块所要实现的功能为将一个新航班加入到交通信息库当中。

适用对象为信息库管理员,要求通过键盘输入所要添加的新航班,并将信息保存到对应的文件中去。

3.4.2输入项

要求输入一连串信息作为航班信息:

string类型的出发地、目的地、航班号,以钟点形式输入起止时间,以整型输入花费。

3.4.3输出项

输出项为整个型航班信息,要求输出到文件中去,并修改相应量值。

3.4.4流程逻辑

3.4.5初步代码

intaddflight(graph&

t)//若返回1则说明所要添加航班已经存在

{chardd;

intk,k1,k2;

intj;

inti;

stringc,c1,c2;

flight.txt"

这里是航班添加管理页面"

outputflights(t);

p==0;

for(k=1;

{

if(c==str[k]){k1=k;

p=1;

break;

if(k==t.citynum)

{

cout<

-此城市尚未添加,请输入已有的城市作为航班出发点:

cin>

}

}

请输入所要添加航班目的地:

c1;

for(p=0;

if(c1==c)

---------出发点与目的地不可相同,请重新输入航班目的地:

if(c1==str[k]){k2=k;

---------此城市尚未添加,请输入已有的城市作为航班目的地:

}}

---------请输入所要添加的航班号:

c2;

=t.map[k1][k2].flightnum;

if(t.map[k1][k2].flightinf[i].code==c2)

cout<

您所要添加的航班已经存在,请核实后再进行添加!

\n"

Sleep(800);

}}接下来将航班列表文件更新即可

3.4.6测试计划

3.5.模块4(model4)

模块4与模块2的思想与流程基本一致这里只提供初步代码

intdeleteflight(graph&

t)//若返回值为1,则说明指定删除的航班不存在

unsignedintminute;

intk1,k2;

//k1k2用来记录出发点与目的地

这里是航班删除管理页面"

{if(c==str[k])

{p=1;

k1=k;

此城市尚未添加,请输入已有的城市作为航班出发点:

---------请输入删除航班目的地:

{if(c1==c)

}

if(c1==str[k]){p=1;

k2=k;

输入删除航班航班号"

{if(c2==t.map[k1][k2].flightinf[i].code){m=i;

}

if(i==t.map[k1][k2].flightnum)

{cout<

您所要删除的航班不存在!

"

return1;

}}

nflight--;

for(i=m;

t.map[k1][k2].flightnum;

i++)t.map[k1][k2].flightinf[i]=t.map[k1][k2].flightinf[i+1];

t.map[k1][k2].flightnum--;

接下来更新文件即可

3.5.1模块描述

在这个模块中,普通用户可以查询两座城市之间的最少花费路径。

通过输入两城市名,程序会列出一条花费最短路径以供参考。

3.5.2模块主要算法分析

本模块用到了图论中求解最短路径的迪杰斯特拉算法。

迪杰斯特拉算法需要三个辅助数组来完成最短路径求解。

首先为FINAL[i]数组,它的作用是判断起点到i号结点的最短路径是否已经求解完毕,若FINAL[i]等于1则说明已经结束。

一开始final中只有起点值为1,其余均为0.第二个辅助数组为weight[i],他存储的的是当前到达i结点的路径最短权值。

由图论可推得,起点到某顶点的最短路径要不是起点直达,要不就是当前weight中权值最小顶点路径加上该顶点到i号顶点路径。

所以利用这一思想,不断更新weight与final,并把每条最短路径存在第三个辅助数组PATH中,直到起点到终点的最短路径被求出为止。

3.5.3流程逻辑

3.5.4初步代码

intcostleast(graph&

t)//p为传入的出发点,q为传入的终点,若返回值为1的话说明输入城市尚未添加

{charch;

charcharway;

intjian=1;

intp;

intq;

usingnamespacestd;

stringchu;

stringdao;

stringc;

intmincost=MAX;

intmin;

unsignedintn;

Sleep(1000);

请输入您的出发城市:

chu;

请输入您的目标城市:

dao;

{if(chu==str[i]){p=i;

elseif(i==t.citynum)

{cout<

对不起,您输入的出发城市尚未添加!

!

\n"

Sleep(1000);

}}

{if(dao==str[i]){q=i;

对不起,您输入的目标城市尚未添加\n"

//以上输入并匹配了出发点目的地

for(i=1;

for(j=1;

{if(t.map[i][j].flightnum==0||i==j)t.map[i][j].weight=MAX;

else

{for(k=1,mincost=MAX;

=t.map[i][j].flightnum;

{if(t.map[i][j].flightinf[k].cost<

=mincost)

{mincost=t.map[i][j].flightinf[k].cost;

t.map[i][j].mincostflight=k;

//当前最小花费的航班编号被记录下来}}

t.map[i][j].weight=mincost;

}}//二维数组map的权值已经赋值完毕

{final[i]=0;

weight[i]=t.map[p][i].weight;

if(t.map[p][i].weight!

=MAX)

{path[i][1]=p;

path[i][2]=i;

}final[p]=1;

//以上为各个辅助数组的初始化

for(;

N<

t.citynum;

{min=MAX;

for(i=1;

{if(weight[i]<

=min&

&

final[i]!

=1){min=weight[i];

j=i;

}}

final[j]=1;

N++;

if(j==q){N=1;

break;

//以上程序段对当前已更新的辅助数组们进行处理,选出当前weight数组中的最小项

{if(final[i]!

=1&

weight[i]>

weight[j]+t.map[j][i].weight)

{weight[i]=weight[j]+t.map[j][i].weight;

for(m=1;

path[j][m]!

=j;

m++)path[i][m]=path[j][m];

path[i][m]=path[j][m];

m++;

path[i][m]=i;

}}N=1;

//以上程序段作用为更新各辅助数组中的数据,每次对每个未结束求解顶点对应的数据进行审查

接下来将path[终点]的路径及其信息一一打出即可。

3.5.5测试计划

测试时通过各种情况的交通图来测试算法的正确性。

特别是一些特殊情况一定要多多测试。

3.6.模块5(model5)

3.6.1模块描述

在这个模块中,普通用户可以查询两座城市之间的最少时间路径。

通过输入两城市名,程序会列出一条时间最短路径以供参考。

3.6.2模块主要算法分析

这个模块用的也是迪杰斯特拉算法。

但是由于路径时间与前一趟航班到达时间有关,所以图的权值必须在运行过程中慢慢赋值,这是这一个算法与模块4最大的区别。

3.6.3流程逻辑

若j为终点

inttimeleast(graph&

t)//pq为始末城市

{charcharway;

intq;

unsignedintmin=MAX;

unsignedintmintime=MAX;

unsignedintdtime;

inta,b,c,d;

intn;

unsignedinth;

if(chu==str[i]){p=i;

{f(dao==str[i]){q=i;

}}

for(j=1;

if(t.map[i][j].flightnum==0||i==j)t.map[i][j].weight=MAX;

elset.map[i][j].weight=0;

}//对不连通的城市进行赋值MAX,连通城市初始权值为0

i++,mintime=MAX)

if(i==p)weight[i]=MAX;

elseif(t.map[p][i].flightnum!

=0)

{for(j=1;

=t.map[p][i].flightnum;

{dtime=(t.map[p][i].flightinf[j].time2-t.map[p][i].flightinf[j].time1+24*3600)%(24*3600);

if(dtime<

=mintime){mintime=dtime;

t.map[p][i].mintimeflight=j;

}

weight[i]=mintime;

t.map[p][i].flightinf[j].realwaitingtime=mintime;

elseif(t.map[p][i].flightnum==0)weight[i]=MAX;

if(weight[i]!

=MAX){path[i][1]=p;

p

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1