




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、全國(guó)交通咨詢模擬系統(tǒng)目錄一、 需求分析4二、 個(gè)人工作4三、概要設(shè)計(jì)51主程序流程圖:52創(chuàng)建圖算法流程圖:6四、源程序14五、程序結(jié)果255.3設(shè)計(jì)和調(diào)試分析29六、程序設(shè)計(jì)體會(huì)30全國(guó)交通咨詢模擬系統(tǒng)一、 需求分析旅客對(duì)由于出行目的的不同對(duì)交通工具的要求也有不同。例如,因公事出差的旅客希望在旅途中的時(shí)間盡可能短,出門旅游的游客則希望旅費(fèi)盡可能省,而老年旅客則要求中轉(zhuǎn)次數(shù)最少。為了能滿足廣大旅客的需求,方便旅客出行,就此編制一個(gè)全國(guó)城市間的交通咨詢程序,為旅客提供兩種或者三種最優(yōu)決策的交通咨詢,達(dá)到如下的基本要求::(1) 提供對(duì)城市信息進(jìn)行編輯(如:添加和刪除)的功能.(2) 城市之間有兩
2、種交通工具:火車和飛機(jī)。提供對(duì)列車時(shí)刻表和飛機(jī)航班表進(jìn)行編輯(增加或刪除)的功能。(3) 提供兩種最優(yōu)決策:最快到達(dá)和最省錢到達(dá)。全程只考慮一種交通工具。(4) 旅途中耗費(fèi)的總時(shí)間應(yīng)該包括中轉(zhuǎn)站的等候時(shí)間。(5) 咨詢以用戶和計(jì)算機(jī)的對(duì)話方式進(jìn)行。由用戶輸入起始站、終點(diǎn)站、最優(yōu)決策原則和交通工具,輸出信息:最快需要多長(zhǎng)時(shí)間才能到達(dá)或者最少需要多少旅費(fèi)才能到達(dá),并詳細(xì)說(shuō)明依次于何時(shí)乘哪趟列車或哪一次班機(jī)到何地。(6) 通過(guò)對(duì)比以及用戶操作基本達(dá)到旅客出行的便利。二、 個(gè)人工作 此次課程設(shè)計(jì)是對(duì)全國(guó)城市交通圖列車時(shí)刻表及飛機(jī)航班表的編輯。此次課設(shè)是利用VC工具在dos環(huán)境下實(shí)現(xiàn)全國(guó)交通的咨詢與管理
3、。通過(guò)此次程序可以對(duì)全國(guó)城市之間火車與飛機(jī)進(jìn)行兩方面的咨詢,即最少的時(shí)間與最少的費(fèi)用的咨詢,從而方便旅客的出行。通過(guò)此次課程設(shè)計(jì),我要學(xué)會(huì)怎樣用在VC dos環(huán)境下編程,而且要通過(guò)此次課程設(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è)計(jì)1主程序流程圖:開(kāi)始CreateGraph(GT)CreateGraph(GP)OpenGraph_T(GT
4、)OpenGraph_P(GP)Main_Menu(GT,GP)DestoryGraph(GT) DestoryGraph(GP)結(jié)束SaveGraph_T(GT)SaveGraph_P(GP)2創(chuàng)建圖算法流程圖:N開(kāi)始iMAXVTXNUMG.FLAGI=0i+Y結(jié)束3打開(kāi)圖算法流程圖:開(kāi)始NY讀出城市的號(hào)數(shù)cityNum,標(biāo)志Flag,城市名稱cityNamejvexNum讀出圖中頂點(diǎn)數(shù)vexNum,邊數(shù)edgeNum打開(kāi)文件j+iedgeNumN讀出邊上的各信息Y 結(jié)束i+4主菜單操作算法流程圖:開(kāi)始Switch(n)Case 2:Case 0:Case 1:Inquire_Menu(GT
5、,GP)breakManage_Menu(GT,GP)5咨詢菜單流程圖Inquire_Menu(GT,GP)Switch(choice)Case 1:Case 2:Case 0:Inquire_Money(GT,GP)Inquire_Time(GT,GP)break6咨詢錢最少模塊圖Inquire_Money(GT,GP)NWhile(True)Y輸入 nYn=1NYinput_Money(GP,st, nd)n=2LeastMoneyPath (GP,st,nd,p)Ninput_Money(GT,st, nd)print_Money(GP,p)LeastMoneyPath(GT,st,nd
6、,p)Yn=2結(jié)束Nprint_Money(GT,p)結(jié)束結(jié)束結(jié)束7input_Money(Graph G, int &st,int &sn)算法流程圖While(True)輸入起始城市名稱YinputVex(G,st)=truebreakNWhile(True)輸入終止城市名稱inputVex(G,sn)=truebreakN8inputVex(G,st)算法流程圖開(kāi)始輸入城市名字 nameYLocateVex(G,name,i)=trueReturn trueN輸出城市不存在結(jié)束9LocateVex(G,name,i)算法流程圖開(kāi)始imaxvexnumYG.Flagi=1&strcmp(G
7、.Adjlisti.cityName,name)=0i+YReturn falseReturn true結(jié)束10print_Money(GT,p)算法流程圖開(kāi)始i=0ip.len打印邊p的信息Sum+=p.money i+Y結(jié)束輸錢sumN11LeastMoneyPath(GT,st,nd,p)算法流程圖結(jié)束初始化i=0inextEdgep-elem.Moneyelem.jvex重置每個(gè)頂點(diǎn)的最少錢的路徑dijkstp-elem.jvex=p-elem.Money t=p-elemSetPath(pathp-elem.jvex,st,p-elem.jvex,t)Yp=qYNFound = fa
8、lse求從st 到nd 的最短路徑算法并復(fù)制此路徑copyPath(pathw,pathv)開(kāi)始11ShortestTimePath(GT,st,nd,p)算法流程圖開(kāi)始每個(gè)點(diǎn)初始一個(gè)最大值初始每條路徑置時(shí)間0置起點(diǎn)的時(shí)間為n置p為起點(diǎn)的第一條邊檢測(cè)依附每個(gè)頂點(diǎn)的邊依據(jù)迪杰斯特求每個(gè)起點(diǎn)到終點(diǎn)的時(shí)間最少的路徑結(jié)束12Manage_Menu(GT,GP)算法流程圖開(kāi)始Switch(choice)Case 1:Case 0:Case 3:Case 2:Plane_Edit(GT,GP)breakTrain_Edit(GT,GP)City_Edit(GT,GP)13City_Edit(GT,GP)算
9、法流程圖開(kāi)始輸入n進(jìn)行選擇Nn=1NYn =2添加城市及相關(guān)信息Y刪除城市及相關(guān)信息結(jié)束輸出錯(cuò)誤輸入n進(jìn)行選擇結(jié)束Nn =0Y結(jié)束14. Train_Edit(GT,GP)算法流程圖開(kāi)始NWhile(true)YBreak 輸入n進(jìn)行選擇結(jié)束Yn=1NYn=2輸入列車的信息breakN刪除列車的信息重新輸入n進(jìn)行選擇Nn=0breakYbreak注釋:部分算法的設(shè)計(jì)思想相同,只是參數(shù)不同,故省略部分程序流程圖。四、源程序#define MAXVTXNUM 30 /圖中頂點(diǎn)數(shù)的最大值/*頂點(diǎn)、邊和圖類型*/typedef struct /定義各車次及航班的信息弧的信息int ivex; /起始點(diǎn)
10、號(hào)int jvex; /終點(diǎn)號(hào)char Number10; / 車次號(hào)int Money; /費(fèi)用int StartTime; /起始時(shí)間(秒)int EndTime; /終止時(shí)間(秒)int Time; /中途時(shí)間(秒)EdgeInfo; /邊的信息typedef struct EdgeNode /邊的信息 弧結(jié)點(diǎn) EdgeInfo elem; EdgeNode *nextEdge;EdgeNode, *EdgePtr;/邊的結(jié)點(diǎn)類型,指向邊的指針typedef struct /城市信息 頭結(jié)點(diǎn)char cityName10;int cityNumber;EdgePtr firstEdge;
11、 /指向的一條依附該頂點(diǎn)的邊的指針Vnode; /頂點(diǎn)類型typedef struct /圖的結(jié)構(gòu)Vnode AdjlistMAXVTXNUM;/鄰接表int vexNum, edgeNum; /圖中的頂點(diǎn)數(shù)和邊數(shù)int FlagMAXVTXNUM; /標(biāo)志是否是圖中的頂點(diǎn),0表示不是,1表示是 Graph; /圖類型/*圖的基本操作*/* 路徑類型 */typedef structint vx,vy; /vx為路徑的起點(diǎn),vy為路徑的終點(diǎn)EdgeInfo p; /路徑中邊的信息Edge;typedef struct Edge edgesMAXVTXNUM; /路徑中邊的序列 : edgesi
12、表示從起點(diǎn)到i的最短路徑int len; /路徑中邊的數(shù)目Path;/*/void copyPath (Path &p1,Path &p2)/復(fù)制路徑p1=p2int i;for(i=0;ip2.len;i+)p1.edgesi.vx=p2.edgesi.vx;p1.edgesi.vy=p2.edgesi.vy;p1.edgesi.p =p2.edgesi.p;p1.len=p2.len;void SetPath(Path &pa, int v, int w, EdgeInfo t)/設(shè)置pa從v到w的第一條邊,邊的信息為tpa.edges0.vx=v;pa.edges0.vy=w;pa.ed
13、ges0.p=t;pa.len=1;#include int TimeChange(int hour,int minute) /把輸入的小時(shí)和分鐘樹(shù)轉(zhuǎn)換成分鐘的形式,忽略天數(shù)if(minute60)hour=hour+minute/60;minute=minute%60;if(hour24)hour=hour%24;#include #include #include #include Graph.h#include Time.h#include Path.h#define NULL 0bool OpenGraph_T(Graph &G);bool OpenGraph_P(Graph &G);
14、int Main_Menu(Graph >,Graph &GP);bool SaveGraph_T(Graph G); bool SaveGraph_P(Graph G);void main()Graph GT; /火車交通圖Graph GP; /飛機(jī)交通圖 CreateGraph(GT); /建立空的火車交通圖CreateGraph(GP); /建立空的飛機(jī)交通圖OpenGraph_T(GT); /打開(kāi)已經(jīng)存在火車的數(shù)據(jù)OpenGraph_P(GP); /打開(kāi)已經(jīng)存在飛機(jī)的數(shù)據(jù)Main_Menu(GT,GP); SaveGraph_T(GT); /保存火車數(shù)據(jù)SaveGraph_P(GP
15、); /保存飛機(jī)數(shù)據(jù)DestoryGraph(GT);DestoryGraph(GP);/*/void LeastMoneyPath(Graph G, int st, int nd, Path &pathA) /st:起點(diǎn)號(hào),nd:終點(diǎn)號(hào),結(jié)果存儲(chǔ)在pathA中 /path包括路徑的長(zhǎng)度,起點(diǎn),終點(diǎn)和路徑信息/利用迪杰斯特拉算法的基本思想求圖G中從頂點(diǎn)st到nd的一條/最短路徑PathInfo,路徑長(zhǎng)度pathLength/設(shè)int dijkstMAXVTXNUM;Path pathMAXVTXNUM;int i;int dijkstMAXVTXNUM;bool finalMAXVTXNUM=
16、false; Path pathMAXVTXNUM; /每個(gè)頂點(diǎn)都有路徑 EdgeNode *p,*q; /邊的信息 弧結(jié)點(diǎn) EdgeInfo t; /邊的信息bool found;int min=9999,min_i,v,w;for(i=0;inextEdge;if(p-elem.Moneyelem.jvex)dijkstp-elem.jvex=p-elem.Money;t=p-elem;SetPath(pathp-elem.jvex,st,p-elem.jvex,t);p=q;found= false;while(!found)/在所有未求得最短路徑的頂點(diǎn)求使得dijksti取最小的ifo
17、r(i=0;iMAXVTXNUM;i+)if(finali=false & dijkstinextEdge;w=p-elem.jvex;if(finalw=false &(dijkstv+p-elem.Money)elem.Money;copyPath(pathw,pathv);InsertPath(pathw,v,w,p-elem);p=q; /while(p) /else/ while(!found)copyPath(pathA,pathnd);void ShortestTimePath(Graph G, int st, int nd, int n ,Path &pathA)/st:起點(diǎn)號(hào)
18、,nd:終點(diǎn)號(hào),n:當(dāng)前時(shí)間(秒),結(jié)果存儲(chǔ)在pathA中/利用迪杰斯特拉算法的基本思想求圖G中從頂點(diǎn)st到nd的一條/最短路徑PathInfo,路徑長(zhǎng)度pathLength/設(shè)int dijkstMAXVTXNUM;Path pathMAXVTXNUM;int i;int dijkstMAXVTXNUM;bool finalMAXVTXNUM=false; int nowMAXVTXNUM;Path pathMAXVTXNUM;EdgeNode *p,*q;EdgeInfo t;bool found;int min=99999,min_i,v,w,time;for(i=0;inextEdge
19、;if(p-elem.StartTimeelem.EndTime=nowst)time= 1440-TimeSub(p-elem.EndTime,nowst);elsetime= TimeSub(p-elem.EndTime,nowst);if(timeelem.jvex)dijkstp-elem.jvex=time;t=p-elem;SetPath(pathp-elem.jvex,st,p-elem.jvex,t);nowp-elem.jvex=p-elem.EndTime;p=q;found= false;while(!found)/在所有未求得最短路徑的頂點(diǎn)求使得dijksti取最小的i
20、for(i=0;iMAXVTXNUM;i+)if(finali=false & dijkstinextEdge;w=p-elem.jvex;if(finalw=false &(dijkstv+TimeSub(p-elem.EndTime,nowv)elem.EndTime,nowv);copyPath(pathw,pathv);InsertPath(pathw,v,w,p-elem);p=q; /while(p) /else/ while(!found)copyPath(pathA,pathnd);void Inquire_Money(Graph GT,Graph GP)Path p;int
21、n=5;int st,nd;while(1)cout tt 1.查詢飛機(jī);cout t 2.查詢火車;cout t 0.退出n;cout n;fflush(stdin);cout n;if(n=1)input_Money(GP,st, nd);LeastMoneyPath (GP,st,nd,p); /最少錢數(shù)print_Money(GP,p);break;else if(n=2)input_Money(GT,st, nd);LeastMoneyPath (GT,st,nd,p); /最少錢數(shù)print_Money(GT,p);break;else if (n=0)break;elsecout
22、 輸入有誤,請(qǐng)重新輸入!nn;/咨詢系統(tǒng)菜單void Inquire_Menu(Graph GT,Graph GP)while(1)int choice=5;coutt*n;coutt*咨詢系統(tǒng)菜單 *n;cout t* 1.最省錢咨詢 *n;cout t* 2.最快到達(dá)咨詢 *n;cout t* 0.退出系統(tǒng) *n;cout t*n;cout choice;fflush(stdin);if(choice=0) break;switch(choice)case 1: Inquire_Money(GT,GP);break;case 2: Inquire_Time(GT,GP);break;def
23、ault:cout 輸入錯(cuò)誤選項(xiàng),請(qǐng)重試。nn;/城市編輯void City_Edit(Graph >,Graph &GP)int n,i;char name10;while(1)cout n;cout t 1.添加城市 ;cout t 2.刪除城市 ;cout t 0.退出 ;cout n;fflush(stdin);if(n=1)cout name;fflush(stdin);InsertVex(GT,name);InsertVex(GP,name);cout n添加成功!n;break;else if(n=2)cout n請(qǐng)輸入刪除城市的名稱:;if(input_Vex(GT,i)=
24、true)DeleteVex(GT,i);DeleteVex(GP,i);cout 刪除成功!n;break;else if(n=0)cout n;break;elsecout 輸入有誤,請(qǐng)重新輸入!;/列車時(shí)刻表編輯 void Train_Edit(Graph >,Graph GP)int n,st,sn;int hour,minute;char number10;EdgeInfo q;while(1)cout n;cout t 1.添加列車 ;cout t 2.刪除列車 ;cout t 0.退出 ;cout n;fflush(stdin);if(n=1)while(1)cout n請(qǐng)輸
25、入起始城市的名稱:;if(input_Vex(GT,st)=true)break;while(1)cout n請(qǐng)輸入終點(diǎn)城市的名稱:;if(input_Vex(GT,sn)=true)break;cout number ;fflush(stdin);q.ivex=st;q.jvex=sn;strcpy(q.Number,number);cout q.Money;fflush(stdin);cout n請(qǐng)輸入起始時(shí)間:;cout hour;fflush(stdin);cout minute;fflush(stdin);q.StartTime=TimeChange(hour,minute);cou
26、t n請(qǐng)輸入到站時(shí)間:;cout hour;fflush(stdin);cout minute;fflush(stdin);q.EndTime=TimeChange(hour,minute);q.Time=TimeSub(q.EndTime,q.StartTime);cout n行車時(shí)間: q.Time/60 小時(shí) q.Time%60 分鐘;InsertEdge(GT,q);cout n添加成功! n;break;else if(n=2)while(1)cout n請(qǐng)輸入起始城市的名稱:;if(input_Vex(GT,st)=true)break;while(1)cout n請(qǐng)輸入終點(diǎn)城市的
27、名稱:;if(input_Vex(GT,sn)=true)break;cout n請(qǐng)輸入車次:;if(input_Number(GT,st,sn,number)q.ivex=st;q.jvex=sn;strcpy(q.Number,number);DeleteEdge(GT,q);cout 刪除成功!n;break;else if(n=0)cout (n);break;elsecout 輸入有誤,請(qǐng)重新輸入!;void Manage_Menu(Graph >,Graph &GP)while(1)int choice=5;cout t* n;cout t* 管理系統(tǒng)菜單 *n;cout t* 1.城市編輯 *n;cout t* 2.列車時(shí)刻表編輯 *n;cout t* 3.航班時(shí)刻表編輯 *n;cout t* 0.退出系統(tǒng) *n;cout t* n;cout choice;fflush(stdin);if(choice=0) break;switch(choice)case 1: City_Edit(GT,GP);break;case 2: Train_Edit(GT,GP);break;case 3: Plane_Edit(GT,GP);break;default:cout 輸入錯(cuò)誤
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 飼料市場(chǎng)銷售協(xié)議書(shū)
- 運(yùn)輸裝卸委托協(xié)議書(shū)
- 下水道承包合同協(xié)議書(shū)
- 公司安全責(zé)任人協(xié)議書(shū)
- 遺書(shū)財(cái)產(chǎn)分配協(xié)議書(shū)
- 食品貨物轉(zhuǎn)讓協(xié)議書(shū)
- 公共管理案例寫作
- 鋼筋承包分包協(xié)議書(shū)
- 親人間贈(zèng)予房子協(xié)議書(shū)
- 茶樓股權(quán)分配協(xié)議書(shū)
- 一起重新構(gòu)想我們的未來(lái):為教育打造新的社會(huì)契約
- 層序地層學(xué)在油氣勘探開(kāi)發(fā)中的應(yīng)用
- 青銅器的紋樣課件
- 《獻(xiàn)給阿爾吉儂的花束》讀后感優(yōu)秀5篇
- 中醫(yī)臨床路徑
- 2023年云南省腫瘤醫(yī)院醫(yī)護(hù)人員招聘筆試題庫(kù)及答案解析
- 輻射及其安全防護(hù)(共38張PPT)
- 初三中考宣誓誓詞82060
- 觸電事故桌面推演方案
- 《中興通訊績(jī)效管理制度》-人事制度表格【管理資料】
- 鐵路工務(wù)技術(shù)手冊(cè)
評(píng)論
0/150
提交評(píng)論