ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:171.94KB ,
资源ID:5676730      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5676730.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(交通信息查询详细设计说明书.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

交通信息查询详细设计说明书.docx

1、交通信息查询详细设计说明书交通咨询系统详细设计说明书 设计成员 孙坤-13111196叶嘉伟13111198余富林13111197原赫-13111195 详细设计说明书1.引言1.1编写目的 在概要设计设定的大纲与数据结构上进一步完成每一个模块的功能。写出对应的算法及其伪代码,为下一步细化到代码做准备。本说明书为程序实现提供细化的参考。1.2背景待开发系统名称:交通信息查询系统本系统开发人员为本小组全体成员:13111195 原赫 13111196 孙坤 13111197 余富林 13111198 叶嘉伟1.3定义迪杰斯特拉算法:本系统采用的求解最短路径的算法。1.4参考资料数据结构(c语言版

2、) 严蔚敏 吴伟民 清华大学出版社 C语言程序设计(第四版) 谭浩强 清华大学出版社2.系统结构以上为本系统的主要结构组成,详细的结构说明参见交通信息查询系统概要设计说明书3.模块详细设计3.1模块列表说明:以下模块详细设计均以航班一种交通工具为例,对于列车以此类推 模块名称 模块标示符 管理员添加城市 Model1 管理员删除城市 Model2 管理员添加航班 Model3 管理员删除航班 Model4 普通用户查询最少花费航班 Model5 普通用户查询最短时间航班 Model63.2模块1 (model1)3.2.1模块描述 该模块所要实现的功能为将一个新城市加入到交通信息库当中。适用对

3、象为信息库管理员,要求通过键盘输入所要添加的新城市,并将信息保存到对应的文件中去。同时要求有一定判错功能。 3.2.2输入项 要求输入一个城市名作为添加城市名,为了方便起见,这里运用STRING类作为变量类型。3.2.3输出项 输出项为添加的string类城市名,要求输出到文件中去,并修改文件中的城市数 3.2.4流程逻辑 3.2.5接口 本模块与其他模块以及整个数据结构的接口为城市文件,通过本模块修改文件以及初始化操作与数据结构关联起来3.2.6初步代码int addcity(graph &t) /返回1表示添加失败,因为城市已经存在 char dd; char ch; int k; int

4、 p=0; string c; fstream file; printf(nnn); cout=这里是城市添加管理页面=nnn; outputcities(t); cout !警告:您的操作将改变交通信息库,输入1继续操作,否则离开:; ch=getchar();dd=ch; for(;ch!=n;) ch=getchar(); if(dd!=1) return 2; coutnn; coutc; getchar(); for(k=1;k=t.citynum;k+) if(c=strk) cout抱歉!您所添加的城市已经存在n; Sleep(800); return 1; file.open(

5、file.txt); filesetw(6)t.citynum+1endl; file.seekg(0,ios:end); fileendl; filec; file.close(); initialcities(t); initialflights(t); initialtrains(t); cout*城市已成功添加了呢*; Sleep(800); return 0; /添加城市函数,运行完之后不必调用城市初始化,初始化已包含在函数中3.2.7测试计划 测试时通过各种不符合要求的输入来检验本模块的判错能力。同时注意文件中新生成的信息是否与预想的吻合。3.3模块2(model2)3.3.1模块

6、描述 该模块所要实现的功能为将一个已有城市从交通信息库当中删除。适用对象为信息库管理员,要求通过键盘输入所要删除的城市,并将信息保存到对应的文件中去。同时要求有一定判错功能。3.3.2输入项 要求输入一个城市名作为删除城市名,为了方便起见,这里运用STRING类作为变量类型。3.3.3输出项 输出项为整个城市列表,要求输出到文件中去,并修改城市数3.3.4流程逻辑3.3.5初步代码int deletecity(graph &t) /返回1表示删除失败,因为城市不存在 char dd; unsigned int hour;unsigned int minute; int decreasef=0;

7、 /删除城市后减少的航班数 int decreaset=0; /删除城市后减少的列车数 int i,j; string c; char ch; int k; int m; fstream file; /以上为变量声明 cout这里是城市删除管理页面nnnn; coutc; getchar();coutnn; for(k=1;k=t.citynum;k+) if(c=strk) m=k; /m为想要删除城市的下标break; if(k=t.citynum) cout抱歉!您想要删除的城市不存在n; Sleep(800); return 1; /以上为判定城市是否存在 file.open(file

8、.txt, fstream:out | ios:trunc); filesetw(6)t.citynum-1endl; for(i=1;i=t.citynum;i+) /现在的城市数还是未删之前的 if(i!=m) filestriendl; else continue; file.close(); for(i=m,j=1;j=t.citynum;j+)decreasef+=t.mapij.flightnum; decreaset+=t.mapij.trainnum; for(i=1,j=m;i=t.citynum;i+) decreasef+=t.mapij.flightnum; decre

9、aset+=t.mapij.trainnum; decreasef=decreasef-t.mapmm.flightnum; decreaset=decreaset-t.mapmm.trainnum;/以上已经将数据结构更新完毕 接下来将文件全数更新一下即可3.3.6测试计划 测试时通过各种不符合要求的输入来检验本模块的判错能力。同时注意文件中新生成的信息是否与预想的吻合。3.4模块3(model3)3.4.1模块描述 该模块所要实现的功能为将一个新航班加入到交通信息库当中。适用对象为信息库管理员,要求通过键盘输入所要添加的新航班,并将信息保存到对应的文件中去。同时要求有一定判错功能。3.4.

10、2输入项 要求输入一连串信息作为航班信息:string类型的出发地、目的地、航班号,以钟点形式输入起止时间,以整型输入花费。3.4.3输出项 输出项为整个型航班信息,要求输出到文件中去,并修改相应量值。3.4.4流程逻辑3.4.5初步代码int addflight(graph &t) /若返回1则说明所要添加航班已经存在 char dd; char ch; int p=0; int k,k1,k2; int j; int i; string c,c1,c2; fstream file;/以上为变量声明 file.open(flight.txt); cout这里是航班添加管理页面; output

11、flights(t); for(;p=0;) for(k=1;k=t.citynum;k+) if(c=strk) k1=k; p=1; break; if(k=t.citynum) coutc; getchar();coutnn; coutc1; getchar();coutnn; for(p=0;p=0;) for(k=1;k=t.citynum;k+) if(c1=c) coutc1; getchar();coutnn; break; if(c1=strk) k2=k; p=1; break; if(k=t.citynum) coutc1; getchar();coutnn; coutc

12、2; getchar(); for(i=1;i=t.mapk1k2.flightnum;i+) if(t.mapk1k2.flightinfi.code=c2) cout您所要添加的航班已经存在,请核实后再进行添加! n; Sleep(800); return 1; 接下来将航班列表文件更新即可3.4.6测试计划 测试时通过各种不符合要求的输入来检验本模块的判错能力。同时注意文件中新生成的信息是否与预想的吻合。3.5模块4(model4)模块4与模块2的思想与流程基本一致这里只提供初步代码int deleteflight(graph &t) /若返回值为1,则说明指定删除的航班不存在 char

13、 dd; char ch; unsigned int hour; unsigned int minute; fstream file; int m; int i,j; int k1,k2; /k1 k2用来记录出发点与目的地 int p=0; string c,c1,c2; int k;/以上为变量声明 cout这里是航班删除管理页面; outputflights(t); for(;p=0;) for(k=1;k=t.citynum;k+) if(c=strk) p=1; k1=k; break; if(k=t.citynum) coutc; getchar();coutnn; coutc1;

14、 getchar();coutnn; for(p=0;p=0;) for(k=1;k=t.citynum;k+) if(c1=c) coutc1; getchar();coutnn; break; if(c1=strk) p=1; k2=k; break; if(k=t.citynum) coutc1; getchar();coutnn; coutc2; getchar();coutnn; for(i=1;i=t.mapk1k2.flightnum;i+) if(c2=t.mapk1k2.flightinfi.code) m=i; break; if(i=t.mapk1k2.flightnum

15、) cout您所要删除的航班不存在! ; Sleep(800); return 1; nflight-;for(i=m;ichu; getchar();coutdao; getchar();coutnn; for(i=1;i=t.citynum;i+) if(chu=stri) p=i; break; else if(i=t.citynum) cout对 不 起,您 输 入 的 出 发 城 市 尚 未 添 加!n; Sleep(1000); return 1; for(i=1;i=t.citynum;i+) if(dao=stri) q=i; break; else if(i=t.citynu

16、m) cout对 不 起,您 输 入 的 目 标 城 市 尚 未 添 加n; Sleep(1000); return 1; /以上输入并匹配了出发点目的地 for(i=1;i=t.citynum;i+) for(j=1;j=t.citynum;j+) if(t.mapij.flightnum=0|i=j) t.mapij.weight=MAX; else for(k=1,mincost=MAX;k=t.mapij.flightnum;k+) if(t.mapij.flightinfk.cost=mincost) mincost=t.mapij.flightinfk.cost; t.mapij.

17、mincostflight=k; /当前最小花费的航班编号被记录下来 t.mapij.weight=mincost; /二维数组map的权值已经赋值完毕 for(i=1;i=t.citynum;i+) finali=0; weighti=t.mappi.weight; if(t.mappi.weight!=MAX) pathi1=p; pathi2=i; finalp=1; /以上为各个辅助数组的初始化 for(;Nt.citynum;) min=MAX; for(i=1;i=t.citynum;i+) if(weighti=min&finali!=1) min=weighti; j=i; f

18、inalj=1; N+; if(j=q) N=1;break; /以上程序段对当前已更新的辅助数组们进行处理,选出当前weight数组中的最小项 for(i=1;iweightj+t.mapji.weight) weighti=weightj+t.mapji.weight; for(m=1;pathjm!=j;m+) pathim=pathjm; pathim=pathjm; m+;pathim=i; N=1;/以上程序段作用为更新各辅助数组中的数据,每次对每个未结束求解顶点对应的数据进行审查接下来将path终点的路径及其信息一一打出即可。3.5.5测试计划 测试时通过各种情况的交通图来测试算

19、法的正确性。特别是一些特殊情况一定要多多测试。 3.6模块5(model5)3.6.1模块描述 在这个模块中,普通用户可以查询两座城市之间的最少时间路径。通过输入两城市名,程序会列出一条时间最短路径以供参考。3.6.2模块主要算法分析这个模块用的也是迪杰斯特拉算法。但是由于路径时间与前一趟航班到达时间有关,所以图的权值必须在运行过程中慢慢赋值,这是这一个算法与模块4最大的区别。3.6.3流程逻辑若j为终点3.5.4初步代码int timeleast(graph &t)/p q为始末城市 char charway; char ch; int jian=1; int p; int q; strin

20、g chu; string dao; unsigned int min=MAX; unsigned int mintime=MAX; unsigned int dtime; int i; int a,b,c,d; int k; int j; int m; int n; unsigned int minute; unsigned int hour; unsigned int h; printf(请 输 入 您 的 出 发 城 市:); cinchu; getchar(); printf(请 输 入 您 的 目 标 城 市:); cindao; getchar();coutendl; for(i=

21、1;i=t.citynum;i+) if(chu=stri) p=i; break; else if(i=t.citynum) cout对 不 起,您 输 入 的 出 发 城 市 尚 未 添 加!n; Sleep(1000); return 1; for(i=1;i=t.citynum;i+) f(dao=stri) q=i; break; else if(i=t.citynum) cout对 不 起,您 输 入 的 目 标 城 市 尚 未 添 加n; Sleep(800); return 1; for(i=1;i=t.citynum;i+) for(j=1;j=t.citynum;j+) i

22、f(t.mapij.flightnum=0|i=j) t.mapij.weight=MAX; else t.mapij.weight=0; /对不连通的城市进行赋值MAX,连通城市初始权值为0 for(i=1;i=t.citynum;i+,mintime=MAX) finali=0; if(i=p) weighti=MAX; else if(t.mappi.flightnum!=0) for(j=1;j=t.mappi.flightnum;j+) dtime=(t.mappi.flightinfj.time2-t.mappi.flightinfj.time1+24*3600)%(24*3600); if(dtime=mintime) mintime=dtime; t.mappi.mintimeflight=j; weighti=mintime; t.mappi.flightinfj.realwaitingtime=mintime; else if(t.mappi.flightnum=0) weighti=MAX; if(weighti!=MAX) pathi1=p; p

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

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