1 題目介紹
1.1 問題描述
出于不同目的的旅客對交通工具和交通路徑有不同的要求。例如,因公出差的旅客希望在旅途中的時間盡可能短,出門旅游的游客則期望旅費盡可能省,而老年旅客則要求中轉次數最少。編制一個交通咨詢系統程序,為旅客提供最優決策的交通咨詢。
1.2 需求分析提供對城市信息進行編輯的功能,包括交通信息的增加,刪除,修改。
城市之間有兩種交通工具:火車和飛機。
提供兩種最優決策 : 最快到達或最省錢到達。全程只考慮一種交通工具。
咨詢以用戶和計算機的對話方式進行。由用戶輸入起始站、終點站、最優決策原則和交通工具 , 輸出信息 : 最快需要多長時間才能到達或者最少需要多少旅費才能到達。
2 系統功能分析
2.1 概要分析
交通咨詢系統包括交通信息的查詢,交通信息的增加與修改,最省時間與最省錢的路線的生成。
2.2 功能結構分析
為了實現交通咨詢系統的作用,系統包含功能如圖所示。
3 數據結構設計
3.1 抽象數據類型定義typedefstructunDiGraph
{
intnumVerts;//結點
costAdj cost;//鄰接矩陣
}unDiGraph,*UNG;
基本操作:
unDiGraph*CreateCostG()
操作結果:構造帶權(費用)圖。
unDiGraph*CreateTimeG()
操作結果:構造帶權(時間)圖。
構造飛機帶權(費用)圖。
PathMat*Floyed(unDiGraph*D)
操作結果:Floyed函數 求任意兩點的最短路徑。
3.2 預存數據結構
為了便于系統測試使用,在系統初始化時便存入了預留的數據。
3.2.1 預存城市信息及編號
1.成都
2.蘭州
3.石家莊
4.鄭州
5.武漢
6.貴陽
3.2.2預存交通信息
成都與鄭州之間的火車行程的時間為2,費用為4。
成都與蘭州之間的火車行程的時間為3,費用為5。
成都與武漢之間的火車行程的時間為1,費用為3。
武漢與鄭州之間的火車行程的時間為1,費用為2。
蘭州與武漢之間的火車行程的時間為3,費用為6。
蘭州與石家莊之間的火車行程的時間為1,費用為3。
武漢與貴陽之間的火車行程的時間為5,費用為2。
貴陽與石家莊之間的火車行程的時間為2,費用為4。
貴陽與蘭州之間的火車行程的時間為4,費用為1。
成都與武漢之間的飛機行程的時間為3,費用為3。
成都與蘭州之間的飛機行程的時間為1,費用為1。
蘭州與石家莊之間的飛機行程的時間為2,費用為5。
蘭州與貴陽之間的飛機行程的時間為4,費用為2。
石家莊與貴陽之間的飛機行程的時間為3,費用為1。
武漢與貴陽之間的飛機行程的時間為2,費用為3。
武漢與石家莊之間的飛機行程的時間為3,費用為4。
4 功能模塊設計
實現全國交通咨詢模擬系統的開發,采用圖結構類型存儲城市的信息。其中,各城市間的鄰接關系用圖的鄰接矩陣類型存儲;城市信息用結構體數組存儲,其中每個數組元素是一個結構體變量,包含時間和費用三個分量;圖的頂點的個數和邊的個數由變量費用、時間大小表示,它們是整型數據。
4.1 主要功能模塊設計
全國交通咨詢模擬系統由4個功能模塊組成:添加城市、刪除程序、采用火車出行、采用飛機出行
下面給出功能模塊圖,如圖所示。
4.2 主要函數調用關系圖
ADT內基本操作函數之間的函數調用關系圖,如圖所示。
4.3 費洛伊德算法求最小路徑初始化:D[u,v]=A[u,v]
For k:=1 to n
For i:=1 to n
For j:=1 to n
If D[i,j]>D[i,k]+D[k,j] Then
D[i,j]:=D[i,k]+D[k,j];
算法結束:D即為所有點對的最短路徑矩陣
5 調試與運行結果
5.1 主界面設計
為了實現全國交通咨詢模擬系統,需要設計一個含有多菜單項的主控菜單子程序,以鏈接系統中各個子項目的調用,為了方便用戶使用本系統,本系統主控菜單的運行界面如圖所示。
5.2 運行結果及分析
交通資訊系統調試成功后在本地運行結果如下:
查看城市
選擇最短時間路線的兩種方式
選擇以火車的方式出行
坐火車從石家莊到貴陽的最短時間路線與所花費的金額
從成都到貴陽的最少花費與時間
管理員程序
增添新城市 滄州
增添石家莊到滄州的火車費用
增添石家莊到滄州的火車時間
坐火車從石家莊到滄州的最短時間