版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、百度文库-让每个人平等地提升自我一、问题描述 全国交通咨询模拟:处于对不同目的的旅客对交通工具有不同的要求。 例如, 因公出差的旅客希望在旅途中的时间尽可能短,、出门旅游的游客则希望旅费尽可 能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序, 为旅客提供两种或三种最优决策的交通咨询。【基本要求】(1)提供对城市信息进行编辑(如:添加或删除)的功能(2)城市之间有两种交通工具:火车和飞机。提供对列车时刻表和 飞机航班进行编辑(增设或删除)的功能。(3)提供两种最优决策:最快到达或最省钱到达。全程只考虑一种 交通工具。(4)旅途中耗费的总时间应该包括中转站的等候时间。(5)咨询
2、以用户和计算机的对话方式进行。由用户输入起始站、终 点站、最优决策原则和交通工具,输出信息:最快需要多长时 间才能到达或者最少需要多少旅费才能到达,并详细说明依次 于何时乘坐哪一趟列车或哪一次班机到何地。2*木齐2161892110011456651上海409福州深圳255 /柳州 672 酷宁704贵阳 607639昆明842534967907305349 a4津黑242,哈尔滨长春二、数据结构设计和核心算法设计描述:1、根据题目中的基本要求分析,可以创建系统概念模型,流程设计框图如下:百度文库-让每个人平等地提升自我百度文库-让每个人平等地提升自我3、核心设计:根据上面的流程图和逻辑拆分,
3、对这个问题有了一个比较直观,详细地了解。并且从中也可得知路线的添加即数据的存储是这个系统进行运作的 一个基础。而为了便于数据的存储、添加、删除等操作,我选择了储存文件对这 些数据进行了存储。将每个信息量放在不同的文件中, 可以更有效、直观地对这 些数据进行处理。流程图中的7个主要功能模块在主函数中,采用输入选项进入子菜单,但是 其他操作都是在路线添加好后进行的, 并且为了每一项功能进行完后,系统可以25及时回到主交互界面,我采用的是无限循环形式,即 while (1)。以邻接表作交通图的存储结构,表示边的结点内除含有邻接点的信息外, 包括交通工具、路程中消耗的时间和花费以及出发和到达的时间等多
4、项属性。三、主控及功能模块层次结构:1、模块说明:本系统分为个模块1、)主函数2、)添加城市3、)查找城市并返回序号4、)删除城市5、)添加列车6、)添加航班7、)删除列车或航班8、)找出最小费用路线9、)初始化系统数据(读入内存)10、)找出最快路线11、)计算最快路线耗费的时间并打印12、)计算最小费用路线13、)主界面14、)存储信息到文件15、)退出、2、下面是各模块示意图:*找出国力簧用环式即出一小 苒用睽就m询帚中|:间路线初始化系项曼据从文计覃导快西 线耗普的时 到芦立也他信息到文件基本操作:trafficnodedat交通工具 信息char namemax_string_n u
5、m班次int starttime出发时间 /int starttime到达时间/int cost票价unodedat路线 信息short int city城市编号1int trainnum/火车路线数int flightnum航班路线数trafficnodedat trainmax_traffic_ num火车路线信息trafficnodedatflightmax traffic航班路线信息num函数变量声明:#include /#include /# define err 0# define ok 1# define dij_maxn 33# define max_vertex_num 31
6、# define max_string_num 10# define max_traffic_num 10const char cityfile口 =d:;const char trainfile口 =d:;const char flightfile口 =d:;typedef short int citytype;typedef struct trafficnodechar namemax_string_num; rainnum;fprintf(fp,%dn,total);for (i=0;icitynum;i+)for (j=0;jadjlisti.trainnum;j+)fprintf(f
7、p,%s %s %s , adjlisti.t, citynamei, /%dn,citynameadjlisti.trainj.endcity);fprintf(fp,%2d:%2d%2d:%2dadjlisti.trainj.starttime/60,adjlisti.trainj.starttime%60,adjlisti.trainj.stoptime/60, adjlisti.trainj.stoptime%60, adjlisti.trainj.cost);fclose(fp);total=0;fp=fopen(flightfile,w);for (i=0;ic
8、itynum;i+)total+=adjlisti.flightnum;fprintf(fp,%dn,total);for (i=0;icitynum;i+)for (j=0;jadjlisti.flightnum;j+)fprintf(fp,%s %s %s , adjlisti.f, citynamei, citynameadjlisti.flightj.endcity);fprintf(fp,%2d:%2d%2d:%2d%dn,adjlisti.flightj.starttime/60,adjlisti.flightj.starttime%60, adjlisti.
9、flightj.stoptime/60, adjlisti.flightj.stoptime%60, adjlisti.flightj.cost); fclose(fp);return 1;(4)添加城市:int insertcity (char *name) /strcpy(citynamecitynum,name);adjlistcitynum.city=citynum;adjlistcitynum.flightnum=0;adjlistcitynum.trainnum=0;citynum+; /return 1;(5)删除城市:int delcity (char *name) int c
10、ity,i,j;city=seekcity(name);for (i=city;icitynum-1;i+) strcpy(citynamei,citynamei+1);adjlisti.flightnum=adjlisti+1.flightnum;adjlisti.trainnum=adjlisti+1.trainnum; for (j=0;jadjlisti.flightnum;j+)adjlisti.flightj.cost=adjlisti+1.flightj.cost;adjlisti.flightj.endcity=adjlisti+1.flightj.endcity;strcpy
11、(adjlisti.f,adjlisti+1.f);adjlisti.flightj.starttime=adjlisti+1.flightj.starttime;adjlisti.flightj.stoptime=adjlisti+1.flightj.stoptime; citynum-;return 1;(6)添加火车路线:int inserttrain (char *train,char *startcity,char *endcity,int starttime,int endtime,int cost)int i,j;i=seekcity(
12、startcity);j=seekcity(endcity);adjlisti.trainadjlisti.trainnum.cost=cost;adjlisti.trainadjlisti.trainnum.endcity=j;adjlisti.trainadjlisti.trainnum.starttime=starttime;adjlisti.trainadjlisti.trainnum.stoptime=endtime; strcpy(adjlisti.trainadjlisti.trainn,train);adjlisti.trainnum+;return 1;star
13、ttime,int(7)添加航班路线:int insertflight(char *flight,char *startcity,char *endcity,intendtime,int cost)int i,j;i=seekcity(startcity);j=seekcity(endcity);adjlisti.flightadjlisti.flightnum.cost=cost;adjlisti.flightadjlisti.flightnum.endcity=j;adjlisti.flightadjlisti.flightnum.starttime=starttime;adjlisti.
14、flightadjlisti.flightnum.stoptime=endtime; strcpy(adjlisti.flightadjlisti.flightn,flight);adjlisti.flightnum+;return 1;(8)删除路线:int delpath (char *name)int i,j,flag=0;for (i=0;icitynum;i+)for (j=0;jadjlisti.flightnum;j+)if (strcmp(adjlisti.f,name)=0)flag=1;break; /if (flag)for (;jad
15、jlisti.flightnum-1;j+)adjlisti.flightj.cost=adjlisti.flightj+1.cost;adjlisti.flightj.endcity=adjlisti.flightj+1.endcity;strcpy(adjlisti.f,adjlisti.flightj+1.name);adjlisti.flightj.starttime=adjlisti.flightj+1.starttime;adjlisti.flightj.stoptime=adjlisti.flightj+1.stoptime;adjlisti.flightn
16、um-;break;for (j=0;jadjlisti.trainnum;j+)if (strcmp(adjlisti.t,name)=0)flag=1;break;if (flag)for (;jadjlisttracki.traink.co st)min=adjlisttracki.traink.cost; tmp=k;printf(%s ,adjlisttracki.t);starth = adjlisttracki.traintmp.starttime/60 ;startm = adjlisttracki.traintmp.starttim
17、e%60;endh = adjlisttracki.traintmp.stoptime/60 ;endm = adjlisttracki.traintmp.stoptime%60 ;if( !(starth/10)printf(0);printf(%d:,starth);if( !(startm/10)printf(0); printf(%d - ,startm);if( !(endh/10)printf(0);printf(%d:,endh);if( !(endm/10)printf(0);printf(%dn,endm);raintmp.starttime/60,adjlisttracki
18、.traintmp.starttime%60,adjlisttrac ki.traintmp.stoptime/60,adjlisttracki.traintmp.stoptime%60);elsefor(i-;i0;i-)printf(n%s:,citynametracki); end=tracki-1;min=32767;for (k=0;kadjlisttracki.flightk.co st)/ */ if(adjlisttracki.flightk.endcity=end&minadjlisttracki.flightk.c ost) min=adjlisttracki.flight
19、k.cost; tmp=k; printf(%s,adjlisttracki.f);starth = adjlisttracki.flighttmp.starttime / 60 ; startm = adjlisttracki.flighttmp.starttime % 60;endh = adjlisttracki.flighttmp.stoptime / 60 ;endm = adjlisttracki.flighttmp.stoptime % 60 ;if( !(starth/10) printf(0);printf(%d:,starth);if( !(sta
20、rtm/10) printf(0); printf(%d - ,startm);if( !(endh/10) printf(0); printf(%d:,endh);if( !(endm/10) printf(0); printf(%dn,endm);lighttmp.starttime60,adjlisttracki.flighttmp.starttime60,adjlisttracki.flighttmp.stoptime60,adjlisttracki.flighttmp.stoptime % 60);printf(n%s: destination!,citynametrack0); p
21、rintf(nmin cost : %dn,cost);p_end,int(10)找出最小费用路线void dijkstra(int matxdij_maxndij_maxn,int p_start,int traveltype)int precitydij_maxn; .n);/return -1; fscanf(fp,%d,&citynum);for (i=0;icitynum;i+) /fscanf(fp,%s,&citynamei);adjlisti.city=i;adjlisti.trainnum=0;adjlisti.flightnum=0; fclose(fp);fp=fopen
22、(trainfile,r); if (!fp)printf(nerror:cannot open train filen);return -1;fscanf(fp,%d,&num); for (i=0;inum;i+)fscanf(fp,%s,&stmp1);fscanf(fp,%s,&stmp2);fscanf(fp,%s,&stmp3);j=seekcity(stmp2);adjlistj.trainadjlistj.trainnum.endcity=seekcity(stmp3);strcpy(adjlistj.trainadjlistj.trainn,stmp1); fs
23、canf(fp,%d:%d,&hour,&minute);adjlistj.trainadjlistj.trainnum.starttime=hour*60+minute; fscanf(fp,%d:%d,&hour,&minute);adjlistj.trainadjlistj.trainnum.stoptime=hour*60+minute;fscanf(fp,%d,&cost);adjlistj.trainadjlistj.trainnum.cost=cost;adjlistj.trainnum+; fclose(fp);/fp=fopen(flightfile,r); / if (!f
24、p) printf(nerror:cannot open flight filen); return -1;fscanf(fp,%d,&num);for (i=0;icurtime-starttime)for (i=0;i=curpathno;i+)minpathi.city=pathi.city;minpathi.trano=pathi.trano; curpath=curpathno;mintime=curtime-starttime;elsecurpathno+;pathcurpathno.city=city;if (!traveltype)for (i=0;i=(curtime%144
25、0)&(adjlistcity.train i.stoptime+(curtime/1440)*1440-starttimemintime)pathcurpathno.trano=i;searchmintime(adjlistcity.traini.endcity,endcity,adjlistcity.traini.s toptime+(curtime/1440)*1440,curpathno,traveltype);if(adjlistcity.traini.starttime(curtime%1440)&(adjlistcity.traini .stoptime+(curtime/144
26、0)*1440-starttimemintime)pathcurpathno.trano=i;searchmintime(adjlistcity.traini.endcity,endcity,adjlistcity.traini.s toptime+(curtime/1440+1)*1440,curpathno,traveltype);elsefor (i=0;i=curtime)&(adjlistcity.flighti.stopt ime+(curtime/1440)*1440-starttimemintime)pathcurpathno.trano=i;searchmintime(adj
27、listcity.flighti.endcity,endcity,adjlistcity.flighti. stoptime+(curtime/1440)*1440,curpathno,traveltype);if(adjlistcity.flighti.starttimecurtime)&(adjlistcity.flighti.stopti me+(curtime/1440)*1440-starttimemintime)pathcurpathno.trano=i;searchmintime(adjlistcity.flighti.endcity,endcity,adjlistcity.fl
28、ighti. stoptime+(curtime/1440+1)*1440,curpathno,traveltype);return 1;(13)计算最快路线所需时间并打印:int calcmintime (int startcity,int endcity,int traveltype)int i;int starth, startm, endh, endm;ity=startcity;if (!traveltype) /for (i=0;iadjliststartcity.trainnum;i+)path0.trano=i;starttime=adjliststartcity.traini
29、.starttime;searchmintime(adjliststartcity.traini.endcity,endcity,adjliststartcity .traini.stoptime,0,traveltype); else for (i=0;iadjliststartcity.flightnum;i+)path0.trano=i;starttime=adjliststartcity.flighti.starttime;searchmintime(adjliststartcity.flighti.endcity,endcity,adjliststartcity .flighti.s
30、toptime,0,traveltype);if (mintime=32767)printf(nno access to that destination!);return 0;rainminpath0.trano.starttime;lightminpath0.trano.starttime; /printf(npath:n);for (i=0;i=curpath;i+)if (!traveltype) printf(%s /:%s”,citynameminpathi.city,adjlistminpathi.city.trainminpathi.trano .name);elseprint
31、f(%s:%s”,citynameminpathi.city,adjlistminpathi.city.flightminpathi.trano .name);starth=adjlistminpathi.city.trainminpathi.trano.starttime / 60 ; startm=adjlistminpathi.city.trainminpathi.trano.starttime % 60 ; endh=adjlistminpathi.city.trainminpathi.trano.stoptime / 60 ; endm=adjlistminpathi.city.tr
32、ainminpathi.trano.stoptime % 60 ;if( !(starth/10) printf(0);printf(%d:,starth);if( !(startm/10) printf(0);printf(%d - ,startm);if( !(endh/10) )/printf(0); printf(%d:,endh);if( !(endm/10) printf(0); printf(%dn,endm);rainnum)min=32767;end=adjlisti.trainj.endcity; while(end=adjlisti.trainj.endcity&jadj
33、listi.trainnum)if (adjlisti.trainj.costmin)min=adjlisti.trainj.cost; j+; maiend=min;elsefor (i=0;icitynum;i+) min=32767;j=0;while (jadjlisti.flightnum) min=32767;/end=adjlisti.flightj.endcity;while百度文库-让每个人平等地提升自我(end=adjlisti.flightj.endcity&jadjlisti.flightnum) if (adjlisti.flightj.costmin)min=adj
34、listi.flightj.cost;j+;maiend=min;dijkstra(ma,startcity,endcity,traveltype);return 1;五、功能模块间函数的调用关系,如下图所示:calcmincost(startci百度文库-让每个人平等地提升自我32删除路线:initsysdata() delpath(name) savesysinfo()calcmincost():dijkstra(ma,stertc ity,endcity,travelt ype)添加路线:initsysdata()insertflight(name,s_city,e_city,s_hou
35、r*60+s_ minute,e_hour*60+e_minute,cost)insertflight(name,s_city,e_city,s_hour*60+s_ minute,e_hour*60+e_minute,cost)savesysinfo()六、调试结果:1、主界面:dijkstra():dijkstra_output(m atx,precity,p_end, traveltype)seekcity(startcity)seekcity(endcity)insertflight():seekcity(startcity)seekcity(endcity)s .口语据省域交遢模拟壮
36、趋亲步七犯he,杳退mr戈由二ktr品矍昼路、币市道里来ype in sfniap qonmand;、添加城市:输入命令1后,按提示输入城市名,而后返回主界面type in youf lomnand: 半:-一1贺春奇都变道模现oebj八交通妄力代mke -回 sz线线岸线 h 、!&.%冬备冒耐 加除加雷询出 添望用线路 市直r,艮 虬圣咨钟豪 除加康间食出 州苏t香city文件:city.txt -用都3、删除城市:输入命令2后,按提示输入城市名,而后返回主界面 * x 解 m x,; m俞入城由名;成都iitfu sdye oktt ype in yuujt ccimki idiid-2
37、type in your cmnand:兽用线、市宜城支支基羲 除加鲁询出 胞添亶查退* 圣ehu线线劈 快 一做城交4答i双 一加除加噜询出 一涿删添查退4、添加路线:输入命令3后,按提示依次输入起始站、终点站、类型、起始时刻、到达时刻、票价等信息,而后返回主界面回 sz9j“市市通诵小快 m城城文。日取 “日加暑询出 -添胭淙删香舌丑线nj望路亶路mmmnvue in volir comnand-3翦簿翳髓业制车削航班i) :0嚏轧(列副一,.丁时刻的测时.24小时前 票杵:如ystem info save okt:91”,我客矛代运模寿nmbe.交名臬肛代科ustern lnf9 sau
38、e uktllu添加路线后的train文件:5、删除路线:输入命令4后按提示输入,而后返回主界面百度文库-让每个人平等地提升自我 口:通普用友道模那debj八交那票玄代码足线nlil中市通调小快球城交,we除加,向出邓添香强r2 34:e 60:fype in 丫口迷肝 comnand:4 输入班次门也system iifu sdye ok?毂 443 mi- 线线中线 、1-* 箱支一备膏双 加除加雷询出 添胆添胆查退type in voulf lomnand删除路线后的train文件:346、查找最小费用花费:输入命令 5后,按提示输入起始城市、终点城市、类型,而后返回主界面百度文库-让每个人平等地提升自我回 szvstem inta save
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度年福建省高校教师资格证之高等教育法规提升训练试卷B卷附答案
- 2023年重铬酸钠资金筹措计划书
- 中级经济师(运输经济)《专业知识与实务》考前冲刺必会试题及答案
- 三年级数学(上)计算题专项练习附答案集锦
- 办公用品质量保证书
- 2024年公司迁移服务协议模板
- 村会议决议模板5篇
- 2024详细土建工程承揽协议模板
- 2024年事业单位正式协议样式
- 岗位聘任职责与权益详解协议样本
- 四上第1课 身边的数据 教案 浙教版(2023)信息科技
- 2024国机资本控股限公司招聘高频考题难、易错点模拟试题(共500题)附带答案详解
- DB11-T854-2023占道作业交通安全设施设置技术要求
- 2024年广东省高中学业水平合格考语文试卷真题(含答案详解)
- 自动报警合同范本
- (初级)航空油料计量统计员技能鉴定理论考试题库(含答案)
- 《海上渔业养殖设施指南》2024
- 五年级上册小学高年级学生读本第1讲《伟大事业始于梦想》说课稿
- 2024过敏性休克抢救指南(2024)课件干货分享
- 2024年纪委监委招聘笔试必背试题库500题(含答案)
- 教科版五年级上册科学期中测试卷及完整答案【易错题】
评论
0/150
提交评论