




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、標準實用數(shù)據(jù)結(jié)構(gòu)課程設計報告書全國交通咨詢模擬系統(tǒng)文案大全標準實用目錄一、 需求分析3二、個人工作4三、概要設計41 .主程序流程圖:42 .創(chuàng)立圖算法流程圖: 5四、源程序13五、程序結(jié)果245.3設計和調(diào)試分析 27六、程序設計體會28文案大全標準實用全國交通咨詢模擬系統(tǒng)一、需求分析旅客對由于出行目的的不同對交通工具的要求也有不同.例如,因公事出差 的旅客希望在旅途中的時間盡可能短, 出門旅游的游客那么希望旅費盡可能省, 而 老年旅客那么要求中轉(zhuǎn)次數(shù)最少.為了能滿足廣闊旅客的需求,方便旅客出行,就 此編制一個全國城市間的交通咨詢程序,為旅客提供兩種或者三種最優(yōu)決策的交 通咨詢,到達如下的根
2、本要求:(1)提供對城市信息進行編輯(如:添加和刪除)的功能 .(2)城市之間有兩種交通工具:火車和飛機.提供對列車時刻表和飛機航班表進行編輯(增加或刪除)的功能.(3)提供兩種最優(yōu)決策:最快到達和最省錢到達.全程只考慮一種交通工 具.(4)旅途中消耗的總時間應該包括中轉(zhuǎn)站的等候時間.(5)咨詢以用戶和計算機的對話方式進行.由用戶輸入起始站、終點站、 最優(yōu)決策原那么和交通工具,輸出信息:最快需要多長時間才能到達或 者最少需要多少旅費才能到達,并詳細說明依次于何時乘哪趟列車或 哪一次班機到何地.(6)通過比照以及用戶操作根本到達旅客出行的便利.文案大全標準實用二、個人工作此次課程設計是對全國城市
3、交通圖列車時刻表及飛機航班表的編輯.此次課設是利用VC工具在dos環(huán)境下實現(xiàn)全國交通的咨詢與治理.通過此次程序可以 對全國城市之間火車與飛機進行兩方面的咨詢,即最少的時間與最少的費用的咨詢,從而方便旅客的出行.通過此次課程設計,我要學會怎樣用在VC dos環(huán)境下編程,而且要通過此次課程設計加深對數(shù)據(jù)結(jié)構(gòu)的理解, 在設計中用鄰接表作 交通圖的存儲結(jié)構(gòu),表示邊的結(jié)點中除含有鄰接點的信息外,還包括交通工具、 路程中消耗的時間和花費以及出發(fā)和到達的時間等屬性.圖中頂點城市的信息, 包括城市名稱、城市編號和依附該頂點的邊的指針.在程序中,利用迪杰斯特拉算法求花錢最少和花時間最少的交通方式.三、概要設計1
4、.主程序流程圖:文案大全標準實用2.創(chuàng)立圖算法流程圖:3.翻開圖算法流程圖:標準實用結(jié)束4主菜單操作算法流程圖:5咨詢菜單流程圖6咨詢錢最少模塊圖Inquire_Money(GT,GP)Y輸入n文案大全標準實用7. input_Money(Graph G, int &st,int &sn)算法流程圖文案大全標準實用8. inputVex(G,st算法流程圖9. LocateVex(G,name解法流程圖文案大全標準實用10. print_Money(GT,p)算法流程圖開始i=011. LeastMoneyPath(GT,st,nd,p算法流程圖文案大全標準實用11. Shor
5、testTimePath(GT,st,nd,p算法流程圖文案大全標準實用12. Manage_Menu(GT,GP)算法流程圖13. City_Edit(GT,GP)算法流程圖n=1文案大全標準實用14. Train_Edit(GT,GP)算法流程圖注釋:局部算法的設計思想相同,只是參數(shù)不同,故省略局部程序流程圖.文案大全標準實用四、源程序#define MAXVTXNUM 30圖中頂點數(shù)的最大值/*頂點、邊和圖類型*/typedef struct/定義各車次及航班的信息弧的信息int ivex;int jvex;char Number10;int Money;int StartTime;in
6、t EndTime;int Time;EdgeInfo;typedef struct EdgeNode起始點號終點號/車次號/費用起始時間秒終止時間秒中途時間秒邊的信息邊的信息 弧結(jié)點EdgeInfo elem;EdgeNode *nextEdge;EdgeNode, *EdgePtr;邊的結(jié)點類型,指向邊的指針typedef struct城市信息頭結(jié)點(char cityName10;int cityNumber;EdgePtr firstEdge;指向的一條依附該頂點的邊的指針Vnode;頂點類型typedef struct/ 圖的結(jié)構(gòu)(Vnode AdjlistMAXVTXNUM;/ 鄰
7、接表int vexNum, edgeNum;/圖中的頂點數(shù)和邊數(shù)int FlagMAXVTXNUM; /Graph;/*標志是否是圖中的頂點,0表本不是,1表不是/圖類型/* typedef struct (int vx,vy;圖的根本操作 */ 路徑類型 */vx為路徑的起點,vy為路徑的終點EdgeInfo p; /路徑中邊的信息 Edge;typedef struct文案大全標準實用(Edge edgesMAXVTXNUM;/路徑中邊白序列 :edgesi表示從起點到i的最短路徑int len;/路徑中邊的數(shù)目 Path;/*<路徑根本操作 >*/ void copyPath
8、 (Path &p1,Path &p2)(復制路徑p1=p2int i;for(i=0;i<p2.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)(/設置pa從v至ij w的第一條邊,邊的信息為t pa.edges0.vx=v;pa.edges0.vy=w;pa.edges0.p=t;pa.len=1;#include &
9、lt;iostream.h> int TimeChange(int hour,int minute)把輸入的小時和分鐘樹轉(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 "
10、Path.h"#define NULL 0文案大全標準實用bool OpenGraph_T(Graph &G);bool OpenGraph_P(Graph &G);int Main_Menu(Graph >,Graph &GP);bool SaveGraph_T(Graph G);bool SaveGraph_P(Graph G);void main()Graph GT;火車交通圖Graph GP;飛機交通圖CreateGraph(GT); /建立空的火車交通圖CreateGraph(GP); /建立空的飛機交通圖 OpenGraph_T(GT)
11、;翻開已經(jīng)存在火車的數(shù)據(jù)OpenGraph_P(GP); 翻開已經(jīng)存在飛機的數(shù)據(jù) Main_Menu(GT,GP);SaveGraph_T(GT);保存火車數(shù)據(jù)SaveGraph_P(GP);保存飛機數(shù)據(jù)DestoryGraph(GT);DestoryGraph(GP);/*< 迪杰斯特拉算法求取最少錢數(shù)和最短時間>*/void LeastMoneyPath(Graph G , int st, int nd, Path &pathA) /st:起點號,nd:終點號,結(jié)果存儲在pathA中/path包括路徑的長度,起點,終點和路徑信息 利用迪杰斯特拉算法的根本思想求圖G中從頂
12、點st到nd的一條最短路徑 PathInfo,路徑長度 pathLength設 int dijkstMAXVTXNUM;Path pathMAXVTXNUM;int i;int dijkstMAXVTXNUM;bool finalMAXVTXNUM尸false;Path pathMAXVTXNUM;每個頂點都有路徑EdgeNode *p,*q;邊的信息弧結(jié)點EdgeInfo t;邊的信息bool found; int min=9999,min_i,v,w;for(i=0;i<MAXVTXNUM;i+)初始化 dijksti=9999; InitPath(pathi);pathi.len=
13、0; p=G.Adjlistst.firstEdge; while(p)初始化dijkst數(shù)組,檢測依附于起始點的每條邊文案大全標準實用q=p->nextEdge;if(p->elem.Money<dijkstp->elem.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)(在所有未求得最短路徑的頂點求使得dijksti取最小的ifor(i=0
14、;i<MAXVTXNUM;i+) (if(finali=false && dijksti<min) min_i=i;finalmin_i=true;if(min_i=nd)found=true;else(v=min_i;p=G.Adjlistv.firstEdge;while(p) (q=p->nextEdge;w=p->elem.jvex;if(finalw=false &&(dijkstv+p->elem.Money)<dijkstw) (dijkstw=dijkstv+p->elem.Money;copyPath(
15、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:起點號,nd:終點號,n:當前時間(秒),結(jié)果存儲在pathA中文案大全標準實用利用迪杰斯特拉算法的根本思想求圖G中從頂點st到nd的一條最短路徑 PathInfo,路徑長度 pathLength設 int dijkstMAXVTXNU
16、M;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;i<MAXVTXNUM;i+)初始化 dijksti=99999; InitPath(pathi); nowi=0; nowst=n; p=G.Adjlistst.firstEdge; while(p)初始化dijkst數(shù)組
17、,檢測依附于起始點的每條邊 q=p->nextEdge; if(p->elem.StartTime<nowst&&p->elem.EndTime>=nowst) time= 1440-TimeSub(p->elem.EndTime,nowst); else time= TimeSub(p->elem.EndTime,nowst); if(time<dijkstp->elem.jvex) dijkstp->elem.jvex=time; t=p->elem; SetPath(pathp->elem.jvex,
18、st,p->elem.jvex,t); nowp->elem.jvex=p->elem.EndTime; p=q; found= false; while(!found) 在所有未求得最短路徑的頂點求使得dijksti取最小的ifor(i=0;i<MAXVTXNUM;i+) 文案大全標準實用(if(finali=false && dijksti<min) min_i=i;)finalmin_i=true;if(min_i=nd)found=true;else(v=min_i;p=G.Adjlistv.firstEdge;while(p)(q=p-&
19、gt;nextEdge;w=p->elem.jvex;if(finalw=false&&(dijkstv+TimeSub(p->elem.EndTime,nowv)<dijkstw) (dijkstw=dijkstv+TimeSub(p->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
20、,Graph GP)(Path p;int n=5;int st,nd;while(1)(cout << "tt 1.查詢飛機"cout << "t 2.查詢火車"cout << "t 0.退出 n"cout << "t 請選擇:"cin >> n;fflush(stdin);cout << "n"if(n=1)(文案大全標準實用input_Money(GP,st, nd);LeastMoneyPath (GP,st,nd,
21、p);print_Money(GP,p);break;else if(n=2)input_Money(GT,st, nd);LeastMoneyPath (GT,st,nd,p);print_Money(GT,p);break;else if (n=0)break;elsecout << "輸入有誤,請重新輸入!最少錢數(shù)最少錢數(shù)nn"咨詢系統(tǒng)菜單void Inquire_Menu(Graph GT,Graph GP)while(1)int choice=5;cout<<"t*"<<"n"cout&l
22、t;<"t* 咨詢系統(tǒng)菜單*"<<"n""<<"n""<<"n"cout << "t*1.最省錢咨詢cout << "t*2.最快到達咨詢*"<<"n"cout << "t* 0.退出系統(tǒng) :cout<< t*"<<"n"cout << "請選擇:"cin >
23、;> choice;fflush(stdin);if(choice=0) break;switch(choice)case 1: Inquire_Money(GT,GP);break;case 2: Inquire_Time(GT,GP);break;default:nn"cout << "輸入錯誤選項,請重試.文案大全標準實用)/城市編輯void City_Edit(Graph >,Graph &GP)(int n,i;char name10;while(1)(cout << "n"cout <&
24、lt; "t 1.添加城市 "cout << "t2.刪除城市"cout << "t0.退出"cout << "tttt 請選擇:"cin >> n;fflush(stdin);if(n=1)(cout << "n請輸入添加城市的名稱:cin >> name;fflush(stdin);InsertVex(GT,name);InsertVex(GP,name);cout << "n 添加成功!"<
25、<"n"break;)else if(n=2)(cout << "n請輸入刪除城市的名稱: if(input_Vex(GT,i)=true)(DeleteVex(GT,i);DeleteVex(GP,i);cout << "刪除成功! n")break;)else if(n=0)(cout << "n"break;)elsecout << "輸入有誤,請重新輸入!)文案大全標準實用)列車時刻表編輯void Train_Ed讓(Graph >,Grap
26、h 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 << "ttt 請選擇:"cin>>n;fflush(stdin);if(n=1)(while(1)(cout << "n請輸入起始城
27、市的名稱:if(input_Vex(GT,st)=true)break;)while(1)(cout << "n請輸入終點城市的名稱:if(input_Vex(GT,sn)=true)break;)cout << "n請輸入車次:"cin >> number ;fflush(stdin);q.ivex=st;q.jvex=sn;strcpy(q.Number,number);cout << "n請輸入票價:"cin >> q.Money;fflush(stdin);cout <&
28、lt; "n請輸入起始時間:"cout << "n 幾點:"cin >> hour;fflush(stdin);文案大全標準實用cout << "幾分:" cin >> minute; fflush(stdin);q.StartTime=TimeChange(hour,minute); cout << "n請輸入到站時間:" cout << "n 幾點:" cin >> hour;fflush(stdin); c
29、out << "幾分:" cin >> minute;fflush(stdin);q.EndTime=TimeChange(hour,minute);q.Time=TimeSub(q.EndTime,q.StartTime);分鐘"cout << "n 行車時間:"<< q.Time/60 << "小時"<< q.Time%60 << " InsertEdge(GT,q);cout << "n 添加成功! &q
30、uot;<< "n" break;else if(n=2)while(1) cout << "n請輸入起始城市的名稱: if(input_Vex(GT,st)=true) break;while(1) cout << "n請輸入終點城市的名稱: if(input_Vex(GT,sn)=true) break;cout << "n請輸入車次:"if(input_Number(GT,st,sn,number) q.ivex=st;q.jvex=sn;strcpy(q.Number,numbe
31、r);DeleteEdge(GT,q);cout << "刪除成功!n"break;else if(n=0)文案大全標準實用cout << ("n"); break;)elsecout << "輸入有誤,請重新輸入!")void Manage_Menu(Graph >,Graph &GP) while(1) int choice=5;cout << %*<< "n"cout << "t*cout <<
32、"t*cout << "t*cout << "t*cout << "t*治理系統(tǒng)菜單1 .城市編輯2 .列車時刻表編輯3 .航班時刻表編輯0.退出系統(tǒng)*"<<"n""<<"n""<<"n""<<"n""<<"n"cout<< "t*"<< "n"co
33、ut << " cin >> 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 << "輸入錯誤選項,請重試.nn")int Main_Menu(Graph >,Graph &GP)while(1)int choicem=3;cout
34、<< ("n");cout << %*"<< "n"*"<<"n"cout<<"t*全國交通咨詢系統(tǒng)主菜單文案大全標準實用cout << "t* 1.咨詢系統(tǒng)*"<<"n"cout << "t* 2.治理系統(tǒng)*"<<"n"cout << "t* 0.退出系統(tǒng)*"<<"
35、n"cout<< "t*<< "n"cout << "ttt請選擇:"cin >> choicem;cout << "n"fflush(stdin);/ 去除輸入流switch(choicem)case 1: Inquire_Menu(GT,GP);break;case 2: Manage_Menu(GT,GP);break;case 0: return choicem;default: cout << "輸入有誤,請重試.nn&qu
36、ot;五、程序結(jié)果5.1 操作流程DeBug1 .本程序的運行環(huán)境為DOS操作系統(tǒng),執(zhí)行文件為源程序目錄下的 子 目錄下的: Traffic.exe;雙擊了 Traffic.exe后顯示了文本方式的用戶界面如下:MM MNM M MKX M HMM HM MWM M MkKM M MkKK MiKi htMM MMf KKK MMXK »»»«M M*咨詢承統(tǒng)菜單D , * w.最快到達暫詢-* 日.退任系統(tǒng)*請選擇:在選擇1進入咨詢系統(tǒng)菜單后選才i 1:文案大全標準實用請選擇二11.查詢飛機2 .查詢火車心退出諳詵怪,在選擇1進入咨詢系統(tǒng)菜單后選才i
37、1:始發(fā):M北京&時1吩票價:元到達;3 上海ZM時25分思我費用.24SMKKPtPt XX * * M M * * * XPt M M X X Pt XM X * * X XXIMiMH咨詢系統(tǒng)菜單一H2.0. M M M M MM請選擇:二-H-H-到達密的 系統(tǒng)在選擇1進入咨詢系統(tǒng)菜單后選才i 2:詢遠律:w土-查詢飛機2 .查詢火車請選擇.2口入仙蛤城狡鉗第饕時期小點4|八分二10晨快到達路線;Nn :1 雜&始發(fā);_ 到達;第價:245元由士北京總時1H分供隔事小時共分*e咨詢系統(tǒng)菜單.晟省烤咨詢 iH髀工同 X X,* * 區(qū) X X *»=0,注1 *
38、 問 X * WWM X *.母母母 * 陽 X X *國 * *岡 X * *18|出口 * 問 X X 乜*例>>! N * 乂 X_請選擇:選才i 2進入治理系統(tǒng)后進行選擇1進行城市編輯膏編編 單表表 菜555統(tǒng) 統(tǒng)編出 理城列鬻 管1.2.3.0.請選擇二11.添加城市2 .刪除城市班退出請選擇:進入城市編輯后選擇1進行添加城市請選擇:1請輸入添加城市的名稱長沙索加成功!文案大全標準實用進入城市編輯 選才i 2去除城市請選擇:2請輸入刪除城市的名稱長沙刪除成功!進入治理菜單選擇2進行列車時刻編輯請選降二2.添加列車2.刪除列車0.退出請選擇:2請輸入起始城市的名稱.長沙請輸
39、入終點城市的名稱:南昌請輸入車次工T14?該曲里不存在I進入列車時刻表編輯添加列車產(chǎn)輸入起始城市的名稱工長沙 ,輸入終點城市的名稱,南昌 南輸入車次;1147,輸入票價s 631輸入起始時間1幾點:5幾分;55,制人到站時同幾點:12幾分:45行車時間:6小時5®分鐘 添加成功I 選才i 3進入航班編輯后選擇 1進行添加航班請輸入起始城市的名稱:長沙請輸入終點城市的名稱;南昌輸入航班號t K456請輸入起始時間,213分由中小時4 01 2=S點分幾幾曹介盟車加選才i 3進入航班編輯后選擇 2進行刪除航班文案大全標準實用請選擇二3J添加航班2.刪除航班回退出請選擇;2請輸入起始城市的名稱工長沙請輸入終點城市的名稱,南昌請輸入航班號:K4S6刪嗓成功IJ5.2 數(shù)據(jù)測試測試1:長沙一上海乘坐火車信息:最省錢:總共費用243元T147長沙一南昌63元K445南昌一上海 180元最快到達:擬出發(fā)時間早上8: 00共需48小時30分鐘T147 長沙一南昌 5:50-12:30K445 南昌一上海 16:20 8:40由于包等待時間,所以是48時30分最快到達:擬出發(fā)時間中5: 30共需27小時10分鐘T147 長沙一南昌 5:50-12:30K445 南昌一上海 16:20 8:40
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 啤酒代理加工合同范本
- 商務結(jié)算合同范本
- 醫(yī)院委托檢驗合同范本
- 供貨協(xié)議合同范本烤鴨
- 員工餐飲入股合同范例
- 商業(yè)演出冠名合同范本
- 獸醫(yī)傳染病學測試題與參考答案
- 環(huán)保營銷在校園的推廣
- 中醫(yī)基礎(chǔ)理論模擬習題+參考答案
- 人資總監(jiān)述職報告
- 華南師范大學附屬小學招聘教師筆試真題2022
- 中冶集團《工程總承包項目管理手冊》-
- 鐵路軌道與修理
- 紡織行業(yè)清潔生產(chǎn)評價指標體系色紗
- 《風景談》新教學課件
- 職場角色認知與自我定位
- 化工設備機械基礎(chǔ)復習及答案匯總
- 心肌梗死后心衰病例分享
- 四年級全冊《勞動》課程知識點匯總精排
- 人本位醫(yī)療培訓課件
- 第3課 中古時期的歐洲
評論
0/150
提交評論