全國(guó)交通咨詢模擬系統(tǒng)_第1頁
全國(guó)交通咨詢模擬系統(tǒng)_第2頁
全國(guó)交通咨詢模擬系統(tǒng)_第3頁
全國(guó)交通咨詢模擬系統(tǒng)_第4頁
全國(guó)交通咨詢模擬系統(tǒng)_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

通系1目錄需求分析........................................................................................................................個(gè)人工作........................................................................................................................概要設(shè)計(jì)..主程序流程圖:.創(chuàng)建圖算法流程圖:源程序............................................................................................................................13程序結(jié)果.245.3設(shè)計(jì)和調(diào)試分析27六、程序設(shè)計(jì)體會(huì).................................................................................................................282一、

全國(guó)交通詢模擬系統(tǒng)需求分析旅客對(duì)由于出行目的的不同對(duì)交通工具的要求也有不同。例如,因公事出差的旅客希望在旅途中的時(shí)間盡可能短出門旅游的游客則希望旅費(fèi)盡可能省而老年旅客則要求中轉(zhuǎn)次數(shù)最少為了能滿足廣大旅客的需求方便旅客出行就此編制一個(gè)全國(guó)城市間的交通咨詢程序旅客提供兩種或者三種最優(yōu)決策的交通咨詢,達(dá)到如下的基本要求::提供對(duì)城市信息進(jìn)行編輯(如:添加和刪除)的功能城市之間有兩種交通工具:火車和飛機(jī)。提供對(duì)列車時(shí)刻表和飛機(jī)航班表進(jìn)行編輯(增加或刪除)的功能。提供兩種最優(yōu)決策:最快到達(dá)和最省錢到達(dá)。全程只考慮一種交通工具。旅途中耗費(fèi)的總時(shí)間應(yīng)該包括中轉(zhuǎn)站的等候時(shí)間。咨詢以用戶和計(jì)算機(jī)的對(duì)話方式進(jìn)行。由用戶輸入起始站、終點(diǎn)站、最優(yōu)決策原則和交通工具,輸出信息:最快需要多長(zhǎng)時(shí)間才能到達(dá)或者最少需要多少旅費(fèi)才能到達(dá),并詳細(xì)說明依次于何時(shí)乘哪趟列車或哪一次班機(jī)到何地。通過對(duì)比以及用戶操作基本達(dá)到旅客出行的便利。3二、

個(gè)人工作此次課程設(shè)計(jì)是對(duì)全國(guó)城市交通圖列車時(shí)刻表及飛機(jī)航班表的編輯此次課設(shè)是利用具在環(huán)境下實(shí)現(xiàn)全國(guó)交通的咨詢與管理。通過此次程序可以對(duì)全國(guó)城市之間火車與飛機(jī)進(jìn)行兩方面的咨詢最少的時(shí)間與最少的費(fèi)用的咨詢,從而方便旅客的出行。通過此次課程設(shè)計(jì),我要學(xué)會(huì)怎樣用在dos環(huán)境下編程而且要通過此次課程設(shè)計(jì)加深對(duì)數(shù)據(jù)結(jié)構(gòu)的理解在設(shè)計(jì)中用鄰接表作交通圖的存儲(chǔ)結(jié)構(gòu),表示邊的結(jié)點(diǎn)中除含有鄰接點(diǎn)的信息外,還包括交通工具、路程中消耗的時(shí)間和花費(fèi)以及出發(fā)和到達(dá)的時(shí)間等屬性。圖中頂點(diǎn)城市的信息,包括城市名稱、城市編號(hào)和依附該頂點(diǎn)的邊的指針。在程序中,利用迪杰斯特拉算法求花錢最少和花時(shí)間最少的交通方式。三、概要設(shè)1.

主序程:開始OpenGraph_P(GP)SaveGraph_P(GP)DestoryGraph(GT)DestoryGraph(GP)結(jié)束42

創(chuàng)圖法程:開始NYi++

結(jié)束3打圖法程:開始打開文件讀出圖中頂點(diǎn)數(shù)vexNum,數(shù)NY讀出城市的號(hào)數(shù)cityNum標(biāo)志,城市名稱cityNamej++i<edgeNumNY讀出邊上的各信息5結(jié)束i++4主單作法程:開始Switch(n)5咨菜流圖

Inquire_Money(GT,GP)6咨錢少塊

Inquire_Time(GT,GP)Inquire_Money(GT,GP)NY輸入6Yn==1NY

input_Money(GP,st,n==2NLeastMoneyPathinput_Money(GT,st,print_Money(GP,p)LeastMoneyPath(GT,st,nd,p)Yn==2

結(jié)束print_Money(GT,p)

N結(jié)束結(jié)束結(jié)束7.G,int&st,int算法程輸入起始城市名稱,st)==trueN7

Y8.法程開始輸入城市名字,name,i)==trueN輸出城市不存在結(jié)束9.)算流圖開始YG.Flag[i]==1&&strcmp(G.AdY

輸入終止城市名稱inputVex(G,sn)==trueNYi++false

結(jié)束8.print_Money(GT,p)算流圖開始i=0Sum+=p.moneyi++

i<p.len

N

輸錢打印邊信息

Y

結(jié)束.算法程9開始初始化Y每個(gè)頂點(diǎn)的最短路徑為一最大值,初始化每條路徑Y(jié)p的一條邊q=p->nextEdgeY重置每個(gè)頂點(diǎn)的最少錢的路徑dijkst[p->elem.jvex]=p->elem.Moneyt=p->elem

Np=G.Adjlist[st].firstEdgeWhile(p)p=q

NFound=求從到的短路徑算法并復(fù)制此路徑copyPath(path[w],path[v])結(jié)束11.法程10開始每個(gè)點(diǎn)初始一個(gè)最大值初始每條路徑置間置起點(diǎn)的時(shí)間為n置起點(diǎn)的第一條邊檢測(cè)依附每個(gè)頂點(diǎn)的邊依據(jù)迪杰斯特求每個(gè)起點(diǎn)到終點(diǎn)的時(shí)間最少的路徑結(jié)束.算流圖開始City_Edit(GT,GP)

Case0:Plane_Edit(GT,GP.法程開始輸入進(jìn)選擇Nn==111Y

N14.

添加城市及相關(guān)信息結(jié)束輸出錯(cuò)誤輸入n進(jìn)選擇NTrain_Edit(GT,GP)算流圖開始NYBreak輸入進(jìn)選擇結(jié)束

==2Y刪除城市及相關(guān)信息結(jié)束==0Y結(jié)束Yn==1NY

輸入列車的信息n==2刪除列車的信息

NN

重新輸入進(jìn)選擇

n==0Y注釋:部分算法的設(shè)計(jì)思想相同,只是參數(shù)不同,故省略部分程序流程圖。12四、源程序MAXVTXNUM//圖頂點(diǎn)數(shù)的最大值/************點(diǎn)、邊和圖類**********************************///定義各車次及航班的信息弧信{intivex;//始點(diǎn)號(hào)intjvex;終點(diǎn)號(hào)//車號(hào)int//費(fèi)int//起時(shí)間(秒)int//終止時(shí)(秒)int//中途時(shí)間(秒)}EdgeInfo;邊的信息EdgeNode//邊的信弧點(diǎn){elem;EdgeNode*nextEdge;//的結(jié)點(diǎn)類型,指向邊的指針//市信息頭結(jié)點(diǎn){intEdgePtrfirstEdge;//指向的一條依附該頂點(diǎn)的邊的指針//頂類型圖的結(jié)構(gòu){鄰表intvexNum,edgeNum;//圖中的頂點(diǎn)數(shù)和邊數(shù)int//志是否是圖中的頂0表不是,1表是}Graph;圖型/*****************的本操**********************//************路類型*************************/{intvx,vy;//vx為徑的起,vy為徑終點(diǎn)p;//路徑中邊的信息}Edge;13{Edgeedges[MAXVTXNUM];中的列:點(diǎn)到i的路徑int中的目}Path;路本操作>**********************/voidcopyPath&p1,Path&p2){路p1=p2inti;for(i=0;i<p2.len;i++){p1.edges[i].vx=p2.edges[i].vx;p1.edges[i].vy=p2.edges[i].vy;p1.edges[i].p=p2.edges[i].p;}p1.len=p2.len;}voidSetPath(Pathv,intw,{pa從v到w的條息為tpa.edges[0].vx=v;pa.edges[0].vy=w;pa.edges[0].p=t;pa.len=1;}#include<iostream.h>intTimeChange(intminute){入時(shí)和分鐘樹轉(zhuǎn)成分鐘的形式,忽略天數(shù)if(minute>60){hour=hour+minute/60;minute=minute%60;}if(hour>24){hour=hour%24;}#include<stdio.h>#include<stdlib.h>#include<string.h>#include"Graph.h"#include"Time.h"#include"Path.h"#define014OpenGraph_T(Graph&G);OpenGraph_P(GraphintMain_Menu(Graph>,Graph&GP);G);SaveGraph_P(Graphvoid{GT;//車交通圖//機(jī)交通圖建立空的火車交通圖CreateGraph(GP);//立空的飛機(jī)交通圖//打開已經(jīng)存火車的數(shù)據(jù)OpenGraph_P(GP);//打開經(jīng)存在飛機(jī)的數(shù)據(jù)Main_Menu(GT,GP);SaveGraph_T(GT);//保存火車數(shù)據(jù)SaveGraph_P(GP);//保存飛機(jī)數(shù)據(jù)DestoryGraph(GP);}/****<迪斯特拉算法求最少錢數(shù)和最短時(shí)間>*********/voidG,intintnd,Path&pathA):起點(diǎn),:終點(diǎn)號(hào),結(jié)果存儲(chǔ)在pathA中//path包路徑的長(zhǎng)度,起點(diǎn),點(diǎn)和路徑信息{//利用迪杰斯特拉算法的基本思想圖中頂點(diǎn)st到nd的條//最短路徑PathInfo,路長(zhǎng)度pathLength//設(shè)intdijkst[MAXVTXNUM];Pathinti;intdijkst[MAXVTXNUM];final[MAXVTXNUM]={false};//個(gè)頂點(diǎn)都有路徑EdgeNode//邊的信息弧點(diǎn)t;//邊信息intmin=9999,min_i,v,w;//初化{dijkst[i]=9999;//path[i].len=0;}p=G.Adjlist[st].firstEdge;//初始化dijkst數(shù)檢測(cè)依附于起始點(diǎn)的每一條邊{15if(p->elem.Money<dijkst[p->elem.jvex]){}}while(!found){//在所有未求得最短路徑的頂點(diǎn)求得最小的i{if(final[i]==false&&dijkst[i]<min)min_i=i;}final[min_i]=true;if(min_i==nd)found=true;{{w=p->elem.jvex;&&((dijkst[v]+p->elem.Money)<dijkst[w])){dijkst[w]=dijkst[v]+p->elem.Money;}}//while(p)}}//}voidShortestTimePath(Graphintst,intint&pathA){:起點(diǎn),:終點(diǎn)號(hào),n:當(dāng)前時(shí)間(秒果儲(chǔ)在中16//利用迪杰斯特拉算法的基本思想圖中頂點(diǎn)st到nd的條//最短路徑PathInfo,路長(zhǎng)度pathLength//設(shè)intdijkst[MAXVTXNUM];Pathinti;intdijkst[MAXVTXNUM];final[MAXVTXNUM]={false};intnow[MAXVTXNUM];EdgeNodet;int//初化{dijkst[i]=99999;now[i]=0;}p=G.Adjlist[st].firstEdge;//初化dijkst數(shù)組檢測(cè)依附于起始點(diǎn)的每一條邊{if(p->elem.StartTime<now[st]&&p->elem.EndTime>=now[st]){1440-TimeSub(p->elem.EndTime,now[st]);}TimeSub(p->elem.EndTime,now[st]);if(time<dijkst[p->elem.jvex]){}}while(!found){//在所有未求得最短路徑的頂點(diǎn)求得最小的i17{if(final[i]==false&&dijkst[i]<min)min_i=i;}final[min_i]=true;if(min_i==nd)found=true;{{w=p->elem.jvex;&&(dijkst[v]+TimeSub(p->elem.EndTime,now[v])<dijkst[w])){}}//while(p)}}//}voidGT,Graph{intn=5;intst,nd;{cout<<查詢飛機(jī)"cout<<"\t查火車";cout<<"\t退\n";cout<<"\t請(qǐng)選擇";cin>>n;cout<<"\n";{18input_Money(GP,st,nd);LeastMoneyPath//最少錢數(shù)print_Money(GP,p);break;}if(n==2){input_Money(GT,st,nd);LeastMoneyPath(GT,st,nd,p);//最少錢數(shù)print_Money(GT,p);break;}ifbreak;cout<<"輸入有誤,請(qǐng)重新輸入\n\n";}}//咨詢系統(tǒng)菜單voidGP){{intcout<<"\t***************************"<<"\n";cout<<"\t*咨系統(tǒng)菜單*"<<"\n";cout<<"\t*1.最省錢咨詢*"<<"\n";cout<<"\t*2.最快到達(dá)咨詢*"<<"\n";cout<<"\t*退系統(tǒng)*"<<"\n";\t******************************"<<"\n";cout<<"

請(qǐng)選擇";cin>>choice;switch(choice){Inquire_Money(GT,GP);break;Inquire_Time(GT,GP);break;{cout<<"

輸入錯(cuò)誤選請(qǐng)?jiān)嘰n\n";}}}19}//城市編輯voidCity_Edit(Graph>,Graph&GP){intn,i;{cout<<"\n";cout<<"\t添城市";cout<<"\t刪城市";cout<<"\t退";cout<<"\t\t\t\t請(qǐng)擇:";cin>>n;{cout<<"\n請(qǐng)入添加城市名稱";cin>>name;cout<<"\n添成功!"<<"\n";break;}if(n==2){cout<<"\n請(qǐng)入刪除城市名稱";{DeleteVex(GT,i);cout<<"刪除成功!\n";}break;}if(n==0){cout<<"\n";break;}cout<<"輸入有誤,請(qǐng)重新輸入";}20}//列車時(shí)刻表編輯void>,GraphGP){intn,st,sn;inthour,minute;q;{cout<<"\n";cout<<"\t添列車

";cout<<"\t刪列車cout<<"\t退cout<<請(qǐng)擇:cin>>n;{{

";";cout<<"\n請(qǐng)入起始城市名稱";if(input_Vex(GT,st)==true)break;}{cout<<"\n請(qǐng)入終點(diǎn)城市名稱";break;}cout<<"\n請(qǐng)入車次:";cin>>number;q.ivex=st;cout<<"\n請(qǐng)入票價(jià):";cin>>q.Money;cout<<"\n請(qǐng)入起始時(shí)間";cout<<"\n幾:";cin>>hour;21cout<<"幾分";cin>>minute;q.StartTime=TimeChange(hour,minute);cout<<"\n請(qǐng)入到站時(shí)間";cout<<"\n幾:";cin>>hour;cout<<"幾分";cin>>minute;q.Time=TimeSub(q.EndTime,q.StartTime);cout<<"\n行時(shí)間:"<<q.Time/60<<"小時(shí)"<<q.Time%60"分鐘"cout<<"\n添成功!"<<break;}if(n==2){{cout<<"\n請(qǐng)入起始城市名稱";if(input_Vex(GT,st)==true)break;}{cout<<"\n請(qǐng)入終點(diǎn)城市名稱";break;}cout<<"\n請(qǐng)入車次:";{q.ivex=st;cout<<"刪除成功!\n";break;}}if(n==0)22{cout<<break;}cout<<"輸入有誤,請(qǐng)重新輸入";}}void&GP){{intcout<<"\t***********************************"<<"\n";cout<<"\t*管系菜單cout<<"\t*1.城市編輯cout<<"\t*2.列車時(shí)刻表編輯cout<<"\t*3.航班時(shí)刻表編輯cout<<"\t*0.退出系統(tǒng)"\t********************************"<<"\n";

*"<<"\n";*"<<"\n";*"<<"\n";*"<<"\n";*"<<"\n";cout<<"

請(qǐng)選擇";cin>>choice;switch(choice){Plane_Edit(GT,GP);break;cout<<"輸錯(cuò)誤選請(qǐng)?jiān)嘰n\n";}}}}int>,Graph{{intchoicem=3;cout<<cout<<"\t****************************************"<<cout<<"\t*全國(guó)交通咨詢系統(tǒng)主單*"<<"\n";23cout<<"\t*咨系統(tǒng)cout<<"\t*管系統(tǒng)cout<<"\t*退系統(tǒng)

*"<<"\n";*"<<"\n";*"<<"\n";"\t**************************************"<<cout<<cin>>cout<<"\n";fflush(stdin);//清輸入流{

請(qǐng)選擇";Inquire_Menu(GT,GP);break;Manage_Menu(GT,GP);break;{cout<<"

輸入有請(qǐng)重試。\n\n";}}}}五、程序結(jié)5.1操作流程.

本程序的運(yùn)行環(huán)境為DOS操作系統(tǒng)行文件為源程序目錄下的子目錄下的:雙擊了Traffic.exe后顯示了文本方式的用戶界面如下:選擇1進(jìn):選擇2進(jìn):在選擇入咨詢系統(tǒng)菜單后

選擇124在選擇入咨詢系統(tǒng)菜單后

選擇1在選擇入咨詢系統(tǒng)菜單后

選擇2選擇2進(jìn)管理系統(tǒng)后行選擇進(jìn)城市編輯進(jìn)入城市編輯后選擇進(jìn)行添加城市25進(jìn)入城市編輯選清除城市進(jìn)入管理菜單選進(jìn)行列車時(shí)刻編輯進(jìn)入列車時(shí)刻表編輯添列車選擇3進(jìn)航班編輯后擇行添加航班選擇3進(jìn)航班編輯后擇行刪除航班265.2據(jù)測(cè)試測(cè)試1:長(zhǎng)沙—上海乘火信

:最省錢:總共費(fèi)用243元T147長(zhǎng)沙—南昌63元K445南昌—上海180元最快到出發(fā)時(shí)間早上8:00共需48小時(shí)30分鐘T147長(zhǎng)沙—南昌5:50---12:30K445南昌—上海16:20—8:40因?yàn)榘却龝r(shí)間,所以是時(shí)30分最快到出發(fā)時(shí)間中5:30共需27小時(shí)10分鐘T147長(zhǎng)沙—南昌5:50---12:30K445南昌—上海16:20—8:40乘飛信

:長(zhǎng)沙―上海最省錢:總共費(fèi)用860元K888長(zhǎng)沙—南昌320K999南昌—上海540最快到出發(fā)時(shí)間上午11:30)共需6小時(shí)40分K888長(zhǎng)沙—南昌始發(fā)時(shí)間:12:20到站時(shí)間:13:30K999南昌—上海始發(fā)時(shí)間:16:20到站時(shí)間:18:105.3計(jì)和調(diào)分析在咨詢系統(tǒng)的設(shè)計(jì)中主要涉及到下面兩個(gè)部分:.圖的建立(文件讀取建立,添加邊,添加點(diǎn)).最小路徑的求取在這兩個(gè)部分設(shè)計(jì)和實(shí)現(xiàn)中都遇到了一些困難,調(diào)試分析如下:1.圖的結(jié)構(gòu)建立采取鄰接表結(jié)構(gòu),為了便于刪除,加入域標(biāo)志是否是圖中頂點(diǎn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論