版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 數(shù) 據(jù) 結(jié) 構(gòu)</b></p><p> 課 程 設(shè) 計(jì) 說(shuō) 明 書</p><p> 2011 年 9月 2 日</p><p> 學(xué) 院:電子與計(jì)算機(jī)科學(xué)技術(shù)學(xué)院</p><p> 專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)</p><p> 題 目:全國(guó)交通咨詢模擬系
2、統(tǒng)</p><p> 指導(dǎo)教師:</p><p> 組長(zhǎng)姓名:學(xué)號(hào)</p><p> 組員姓名:學(xué)號(hào)</p><p> 組員姓名:學(xué)號(hào)</p><p> 組員姓名:學(xué)號(hào)</p><p> 組員姓名:學(xué)號(hào)</p><p><b> 1. 設(shè)計(jì)目的1</b
3、></p><p> 1.1 項(xiàng)目說(shuō)明1</p><p> 1.2 設(shè)計(jì)目標(biāo)1</p><p> 1.3 項(xiàng)目設(shè)計(jì)進(jìn)度說(shuō)明1</p><p><b> 2. 需求分析1</b></p><p> 2.1 項(xiàng)目需求1</p><p> 2.2 項(xiàng)目
4、業(yè)務(wù)要求1</p><p> 3. 總體設(shè)計(jì)和分工說(shuō)明1</p><p> 3.1 總體設(shè)計(jì)1</p><p> 3.2 分工說(shuō)明1</p><p> 4. 設(shè)計(jì)內(nèi)容和要求1</p><p> 5.功能模塊詳細(xì)設(shè)計(jì)2</p><p> 5.1本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)2&l
5、t;/p><p> 5.2詳細(xì)設(shè)計(jì)思想2</p><p><b> 5.3源代碼2</b></p><p> 6.功能模塊詳細(xì)設(shè)計(jì)2</p><p> 6.1本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)2</p><p> 6.2詳細(xì)設(shè)計(jì)思想2</p><p><b>
6、 6.3源代碼2</b></p><p> 7.功能模塊詳細(xì)設(shè)計(jì)2</p><p> 7.1本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)3</p><p> 7.2詳細(xì)設(shè)計(jì)思想3</p><p><b> 7.3源代碼3</b></p><p> 8.功能模塊詳細(xì)設(shè)計(jì)3</p&
7、gt;<p> 8.1本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)3</p><p> 8.2詳細(xì)設(shè)計(jì)思想3</p><p><b> 8.3源代碼3</b></p><p> 9.程序完整源代碼及圖示..............................................3</p><p>
8、 (正文宋體五號(hào)字,1.5倍行距)(打印時(shí)刪除本行)</p><p><b> 1. 設(shè)計(jì)目的</b></p><p><b> 1.1 項(xiàng)目說(shuō)明</b></p><p> 由于不同目的旅客對(duì)交通工具有不同的要求,應(yīng)自己的要求可能是需要用最短的時(shí)間達(dá)到目的地,也可能是用最少的費(fèi)用,本程序就是通過(guò)編制一個(gè)全國(guó)幾大城市的
9、交通咨詢系統(tǒng)來(lái)實(shí)</p><p> 現(xiàn)不同旅客對(duì)自己的不同需求。利用鄰接矩陣存儲(chǔ)航班、列次、時(shí)間等信息,使用迪杰斯特拉算法編寫程序算出最短路徑得出最快或最省錢的路徑,從而達(dá)到滿足廣大客戶交通咨詢的要求。</p><p><b> 1.2 設(shè)計(jì)目標(biāo)</b></p><p> 能對(duì)有關(guān)城市信息進(jìn)行編輯,并且在火車和飛機(jī)兩種交通工具中能夠提供相
10、應(yīng)的火車或飛機(jī)</p><p> 的航班車次以及相關(guān)的線路等基本信息編輯功能,能夠?qū)崿F(xiàn)用戶花費(fèi)最少和用戶所需時(shí)間最</p><p> 少的需求等基本目標(biāo)。</p><p> 1.3 項(xiàng)目設(shè)計(jì)進(jìn)度說(shuō)明</p><p> 首先在2011年8月22日到8月23日下午討論本課程設(shè)計(jì)的相關(guān)需求分析由組員各個(gè)發(fā)表自己的意見(jiàn)來(lái)實(shí)現(xiàn)對(duì)全國(guó)交通咨詢模擬
11、系統(tǒng)的相關(guān)想法,以求使程序盡可能完善全面;</p><p> 在2011年8月24全組討論本課程設(shè)計(jì)所需要用到的數(shù)據(jù)結(jié)構(gòu),全程序的主要思路,以及全程序的思路分析以及各個(gè)思路可能用到的數(shù)據(jù)結(jié)構(gòu),然后畫出程序的主體思路,以及各個(gè)組員的詳細(xì)分工任務(wù);</p><p> 8月25日到28日由各個(gè)組員來(lái)負(fù)責(zé)編輯自己的分配的任務(wù),通過(guò)查詢書本網(wǎng)上資料或是圖書館一些課外資料或向值班老師詢問(wèn)來(lái)盡可能完
12、善的編輯自己的程序;</p><p> 8月29到9月1日上午將各個(gè)組員編輯的程序進(jìn)行整合糾錯(cuò),來(lái)實(shí)現(xiàn)完整程序的編輯以及輸出結(jié)果。然后打印相關(guān)的課程設(shè)計(jì)說(shuō)明書,將說(shuō)明書進(jìn)行整合。</p><p><b> 2. 需求分析</b></p><p><b> 2.1 項(xiàng)目需求</b></p><p&g
13、t; 1、設(shè)計(jì)最短路徑的算法及其需要信息的存儲(chǔ):本設(shè)計(jì)中最短路徑的算法利用迪杰斯特拉算法,存儲(chǔ)方法利用鄰接矩陣存儲(chǔ)。</p><p> 2、 該程序所做的工作的是模擬全國(guó)交通咨詢,為旅客提供種最優(yōu)決策的交通咨詢。此程序規(guī)定:</p><p> 在程序中輸入城市名稱時(shí),需輸入10個(gè)字母以內(nèi)的字母串;輸入列車或飛機(jī)編號(hào)時(shí)需輸入一個(gè)字符串類型;輸入列車或飛機(jī)的費(fèi)用時(shí)需輸入一個(gè)實(shí)型數(shù)據(jù);輸入
14、列車或飛機(jī)開(kāi)始時(shí)間和到達(dá)時(shí)間時(shí)均需輸入一個(gè)整型數(shù)據(jù),在選擇功能時(shí),應(yīng)輸入與所選功能對(duì)應(yīng)的一個(gè)整型數(shù)據(jù)。</p><p> 程序的輸出信息主要是:最快需要多少時(shí)間才能到達(dá),或最少需要多少旅費(fèi)才能到達(dá),說(shuō)明在途中經(jīng)過(guò)的城市名稱;</p><p> 程序的功能包括:提供對(duì)城市信息的編輯,提供列車時(shí)刻表和飛機(jī)航班表的編輯,提供兩種最優(yōu)決策:最快到達(dá)、最省錢到達(dá)。</p><
15、p> 2.2 項(xiàng)目業(yè)務(wù)要求</p><p> 模擬全國(guó)交通咨詢模擬系統(tǒng),能實(shí)現(xiàn)現(xiàn)實(shí)生活中對(duì)火車和飛機(jī)以及旅客的各種需求做出相應(yīng)的程序;能實(shí)現(xiàn)選擇功能。 </p><p><b> 3.1 總體設(shè)計(jì)</b></p><p> 本系統(tǒng)整體上分為存儲(chǔ)系統(tǒng)和求最短路徑兩部分,存儲(chǔ)系統(tǒng)運(yùn)用到數(shù)組和結(jié)構(gòu)體。該系統(tǒng)分別存儲(chǔ)火車列次,航班,出發(fā)點(diǎn)
16、與目的地以及所需要走的路程和所用費(fèi)用。最短路徑使用迪杰斯特拉算法編程求算得出最近或最便宜路徑。該算法主要分為三步:1、起始點(diǎn)(V0)與其相鄰點(diǎn)的權(quán)值(即當(dāng)前最短路徑)。2、求出當(dāng)前最短路徑中的最小值即是該起始點(diǎn)(V0)與另一點(diǎn)(Vi)的最短路徑。3、V0到Vi的距離加上Vi到Vj的距離小于V0到Vj則將V0到Vi的距離加上Vi到Vj的距離記為V0到Vj當(dāng)前最短路徑,循環(huán)第二、三步。如此得到V0到各點(diǎn)的最短路徑,進(jìn)而可以得到想要的一條。&
17、lt;/p><p><b> 3.2 分工說(shuō)明</b></p><p> 易棟:用迪杰斯特拉算法設(shè)計(jì)查找最短路徑的程序。</p><p> 吳會(huì)敏:設(shè)計(jì)編輯地圖、火車、飛機(jī)、出游路線、返回等信息存儲(chǔ)程序。</p><p> 趙佳:設(shè)計(jì)結(jié)構(gòu)體存儲(chǔ)及查找函數(shù)的程序。</p><p> 李益:主頁(yè)
18、面地整理及設(shè)計(jì)界面。</p><p> 4. 設(shè)計(jì)內(nèi)容和要求</p><p> (1)設(shè)計(jì)若干個(gè)城市的平面圖,所含城市不少于7個(gè)。以圖中頂點(diǎn)表示城市,存放城市的名稱、代號(hào)、簡(jiǎn)介等信息;以邊表示路徑,存放路徑長(zhǎng)度和行程費(fèi)用等相關(guān)信息。</p><p> ?。?)為來(lái)訪客人提供圖中任意城市相關(guān)信息的查詢。</p><p> ?。?)查詢從任一
19、給定城市到其他任意城市之間的最短路徑、或費(fèi)用最低路徑(Dijkstra算法)。</p><p> ?。?)查詢?nèi)我鈨蓚€(gè)城市之間的最短路徑、或費(fèi)用最低路徑(Floyd算法)。</p><p> …………………………</p><p> 5.功能模塊詳細(xì)設(shè)計(jì)</p><p> 界面以及主函數(shù)功能板塊</p><p>
20、 5.1本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)</p><p> 本設(shè)計(jì)采用的是在界面上通過(guò)輸入相應(yīng)的字符表示的要求來(lái)實(shí)現(xiàn)對(duì)于不同目的不同函數(shù)的調(diào)用,主要用到的數(shù)據(jù)結(jié)構(gòu)有圖中的交通網(wǎng)的各種信息的鄰接矩陣的存儲(chǔ)。</p><p><b> 5.2詳細(xì)設(shè)計(jì)思想</b></p><p> 通過(guò)顧客輸入不同的字符來(lái)實(shí)現(xiàn)不同的功能,主界面上注釋著這個(gè)程序的系統(tǒng)名稱
21、,組員以及指導(dǎo)老師等基本學(xué)生信息,用星號(hào)來(lái)加以修飾;然后就是用一個(gè)swich語(yǔ)句來(lái)實(shí)現(xiàn)多功能的選取以及程序的退出;主要有一:1:修改地圖 2:編輯火車時(shí)刻表 \t3:編輯飛機(jī)航班表 \t4:選擇出游路線 t5:退出;繼而通過(guò)選中其中的數(shù)字來(lái)實(shí)現(xiàn)自己的目的;然后再引用程序再用一個(gè)switch case語(yǔ)句來(lái)實(shí)現(xiàn)1 2 3選項(xiàng)中的添加刪除以及退出功能,然后在4中再用if語(yǔ)句來(lái)實(shí)現(xiàn)自己的需求考慮??梢噪S時(shí)退出程序。最后再經(jīng)調(diào)用函數(shù)再
22、來(lái)輸出結(jié)果;</p><p><b> ;5.3源代碼</b></p><p> # include<stdio.h></p><p> #include<string.h></p><p> #include<float.h></p><p> co
23、nst float max=FLT_MAX;</p><p> };void main ()</p><p><b> { </b></p><p> int i,j,k,m,n,cn=5,tn=6,fn=6;</p><p> printf("\t\t**********************
24、********************\n");</p><p> printf("\t\t* *\n");</p><p> printf("\t\t* 歡迎使用全國(guó)交通查詢系統(tǒng) *\n");</p><p&
25、gt; printf("\t\t* 制作人:甲、乙、丙、丁 *\n");</p><p> printf("\t\t* TIME:2011.8.20----2011.9.1 *\n");</p><p> printf("\t\t*
26、*\n");</p><p> printf("\t\t******************************************\n");</p><p><b> loop1:</b></p><p> printf("\t請(qǐng)選擇所需功能:\n\t\t1:修改地圖 \n\t\t2:
27、編輯火車時(shí)刻表 \n\t\t3:編輯飛機(jī)航班表 \n\t\t4:選擇出游路線 \n\t\t5:退出");</p><p> switch(i) //switch語(yǔ)句</p><p><b> {</b></p><p> case 1:{ //第一種情況,修改地圖*****</p><p
28、> while(j!=1&&j!=2&&j!=3)</p><p><b> {</b></p><p> case 2:{ //修改火車時(shí)間表</p><p> case 3:{//修改飛機(jī)航班表,和列車相似</p><p><b> case 4:{</
29、b></p><p> printf("\t\t請(qǐng)選擇交通工具(1.火車 2.飛機(jī)):");</p><p> scanf("%d",&j);</p><p> printf("\n");</p><p> if(j==1&&k==1)short
30、_path(train,city[m-1],city[n-1],city,6,5,0);</p><p> if(j==1&&k==2) short_path(train,city[m-1],city[n-1],city,6,5,1);</p><p> if(j==2&&k==1) short_path(flight,city[m-1],city[n-
31、1],city,6,5,0);</p><p> if(j==2&&k==2) short_path(flight,city[m-1],city[n-1],city,6,5,1);</p><p> goto loop1;//回到主菜單</p><p> case5:return;//退出系統(tǒng)}</p><p> 6.
32、功能模塊詳細(xì)設(shè)計(jì)</p><p> 查找函數(shù)以及在部分子函數(shù)以及主函數(shù)中調(diào)用函數(shù)的功能模塊</p><p> 6.1本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)</p><p> 應(yīng)用二維數(shù)組來(lái)實(shí)現(xiàn)對(duì)城市名稱的編輯,應(yīng)用數(shù)組來(lái)實(shí)現(xiàn)對(duì)城市的調(diào)用;利用圖的信息對(duì)輸入的函數(shù)信息進(jìn)行查找以便再后面的程序中加以應(yīng)用;</p><p><b> 6.2詳細(xì)設(shè)
33、計(jì)思想</b></p><p> 首先定義一個(gè)火車或者飛機(jī)的結(jié)構(gòu)體,在主程序中便于輸出交通網(wǎng)上各個(gè)頂點(diǎn)的相關(guān)的邊的權(quán)值信息,利用一個(gè)for循環(huán)語(yǔ)句,通過(guò)客戶輸入一個(gè)城市信息來(lái)在所有保存的城市信息中進(jìn)行查找,應(yīng)用庫(kù)函數(shù),strcmp來(lái)進(jìn)行比較;成功則輸出用戶輸入的城市的位置,并且將這個(gè)位置進(jìn)行返回;然后以便后面的程序引用;不成功則返回—1。</p><p><b>
34、 .3源代碼</b></p><p> # include<stdio.h></p><p> #include<string.h></p><p> #include<float.h></p><p> const float max=FLT_MAX;</p><
35、p> struct Tra{ </p><p> char cc[20]; </p><p> char start[20]; </p><p> char destination[20];</p><p> float time; </p&g
36、t;<p> float price; </p><p><b> };</b></p><p> char city[15][20]={"北京","上海","天津","武漢","廣州"};//現(xiàn)有城市,最多15個(gè)城市</p>&
37、lt;p> struct Tra train[20]={</p><p> {"T1","武漢","北京",10,90},</p><p> {"T2","上海","北京",8,70},</p><p> {"T3"
38、;,"北京","天津",3,30},</p><p> {"T4","廣州","北京",25,200}, </p><p> {"T5","廣州","武漢",14,120},</p><p> {&qu
39、ot;T6","武漢","上海",8,80}</p><p><b> };</b></p><p> struct Tra flight[20]={</p><p> {"F1","武漢","北京",3,500},</p&
40、gt;<p> {"F2","上海","北京",2.5,400},</p><p> {"F3","北京","天津",1,200},</p><p> {"F4","廣州","北京",6,14
41、00},</p><p> {"F5","廣州","武漢",5,700},</p><p> {"F6","武漢","上海",3,450}</p><p><b> };</b></p><p>
42、 int search(char citytable[][20],char* city,int cn) { </p><p><b> int i;</b></p><p> for(i=0;i<cn;i++)</p><p>
43、;<b> {</b></p><p> if(strcmp(citytable[i],city)==0)</p><p><b> return i;</b></p><p><b> }</b></p><p> return -1;</p><
44、;p><b> }</b></p><p> for(i=0;i<tn;i++)/*dijkstra算法*/</p><p><b> {</b></p><p> j=search(city,timetable[i].start,cn);</p><p> k=search(
45、city,timetable[i].destination,cn);</p><p> st=search(city,start,cn);</p><p> et=search(city,dest,cn);</p><p> printf("\t\t現(xiàn)有城市"); </p><p> for(j=0;
46、j<cn;j++)</p><p> printf("%d.%s\t",j+1,city[j]);</p><p> printf("\n\n");</p><p> 7.功能模本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)</p><p> 7.1本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)</p><p>
47、 本設(shè)計(jì)采用的數(shù)據(jù)結(jié)構(gòu)有圖中的最短路徑。</p><p><b> 7.2詳細(xì)設(shè)計(jì)思想</b></p><p> (1、)開(kāi)始-----</p><p> (2)、得到存儲(chǔ)最少花費(fèi)或最短時(shí)間信息的鄰接矩陣------</p><p> (3)、得到起始點(diǎn)與相鄰的點(diǎn)的權(quán)值(即當(dāng)前最短路徑)并記錄點(diǎn)-----<
48、;/p><p> (4)、求出當(dāng)前最短路徑中的最小值即是該起始點(diǎn)(V0)與另一點(diǎn)(Vi)的最短路徑-----</p><p> (5)、V0到Vi的距離加上Vi到Vj的距離小于V0到Vj則將V0到Vi的距離加上Vi到Vj的距離記為V0到Vj當(dāng)前最短路徑并且記錄前一個(gè)點(diǎn)。</p><p> (6)、重復(fù)(4),(5)步得到所有點(diǎn)最短路徑。</p>&l
49、t;p> ?。?)、以終點(diǎn)開(kāi)始逐步向前賦值得到所需路徑并輸出該路徑的權(quán)值。</p><p><b> 7.3源代碼</b></p><p> void short_path(struct Tra* timetable,char* start,char* dest,char city[][20],int tn,int cn,int choice)</p&
50、gt;<p><b> { </b></p><p> int i,j,k,st,et;</p><p> float min,t;</p><p> char pcity[10][20];</p><p> float edge[15][15],dist[15];</p><
51、;p> int path[15],s[15];</p><p> for(i=0;i<cn;i++)</p><p> for(j=0;j<cn;j++)</p><p><b> { </b></p><p> edge[i][j]=max;</p><p>&l
52、t;b> } </b></p><p> for(i=0;i<tn;i++) {</p><p> j=search(city,timetable[i].start,cn);</p><p> k=search(city,timetable[i].destination,cn);</p><p>
53、if(choice==0)</p><p> { t=timetable[i].time;</p><p> if(t<edge[j][k]) edge[j][k]=t;</p><p><b> }</b></p><p><b> else </b></p&g
54、t;<p> {t=timetable[i].price;</p><p> if(t<edge[j][k]) edge[j][k]=t;</p><p><b> }</b></p><p><b> }</b></p><p> st=search(city,
55、start,cn);</p><p> et=search(city,dest,cn);</p><p> for(i=0;i<cn;i++){</p><p> dist[i]=edge[st][i];</p><p><b> s[i]=0;</b></p><p> if(i
56、!=st&&dist[i]<max) path[i]=st;</p><p> else path[i]=-1;</p><p><b> }</b></p><p> s[st]=1; dist[st]=0;</p><p> for(i=0;i<cn-1;i++){</p&g
57、t;<p><b> min=max;</b></p><p><b> k=st;</b></p><p> for(j=0;j<cn;j++)</p><p> if(!s[j]&&dist[j]<min)</p><p> {k=j;min=
58、dist[j];}</p><p><b> s[k]=1;</b></p><p> for(j=0;j<cn;j++)</p><p> if(!s[j]&&edge[k][j]<max&&dist[k]+edge[k][j]<dist[j]){</p><p>
59、; dist[j]=dist[k]+edge[k][j]; path[j]=k;</p><p><b> }</b></p><p><b> }</b></p><p><b> k=et;</b></p><p><b> i=0;</b>
60、</p><p> if(path[k]==-1){</p><p> printf("\t\t對(duì)不起,不存在從 %s 到 %s 的路線\n\n",start,dest);</p><p><b> return;</b></p><p><b> }</b></p
61、><p> while(path[k]!=-1)</p><p><b> {</b></p><p> strcpy(pcity[i++],city[k]);</p><p> k=path[k];</p><p><b> }</b></p><
62、p> strcpy(pcity[i++],city[st]);</p><p> printf("\t\t最佳路線為:\n\t\t");</p><p> for(j=i-1;j>=0;j--)</p><p> printf("%s ",pcity[j]);</p><p>
63、printf("\n");</p><p> if(choice==0) printf("\t\t所需總時(shí)間為:%5.1f小時(shí)\n",dist[et]);</p><p> else printf("\t\t所需的總費(fèi)用為:%7.2f元\n",dist[et]);</p><p> printf(&q
64、uot;\n");</p><p><b> }</b></p><p> 8.功能模塊詳細(xì)設(shè)計(jì)</p><p> 主程序中的火車飛機(jī)各種車次航班情況,并且可以進(jìn)行對(duì)于火車飛機(jī)的各種添加刪除以及返回功能,以及選擇出游路線和最終系統(tǒng)的返回功能模塊;。</p><p> 8.1本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)<
65、/p><p> 本部分主要引用到數(shù)據(jù)結(jié)構(gòu)中的數(shù)組部分的數(shù)據(jù)以及相關(guān)部分的數(shù)據(jù)引用。</p><p><b> 8.2詳細(xì)設(shè)計(jì)思想</b></p><p> 本程序主要利用一個(gè)大的switch case 以及if else 和while語(yǔ)句來(lái)實(shí)現(xiàn)對(duì)于火車飛機(jī)的添加,刪除以及因?yàn)檩斎脲e(cuò)誤可以退出的不同功能的實(shí)現(xiàn)。在添加城市或者火車車次或者飛機(jī)航班
66、中主要用到一個(gè)if語(yǔ)句,然后再添加,使得城市或者火車車次或者飛機(jī)航班次數(shù)增加一;刪除中可以用將刪除這個(gè)名稱之后的所有數(shù)據(jù)都用循環(huán)語(yǔ)句向上依次賦值。</p><p><b> 8.3源代碼</b></p><p> …printf("\t請(qǐng)選擇所需功能:\n\t\t1:修改地圖 \n\t\t2:編輯火車時(shí)刻表 \n\t\t3:編輯飛機(jī)航班表 \n\
67、t\t4:選擇出游路線 \n\t\t5:退出");</p><p> printf("\n\t請(qǐng)選擇:");</p><p> scanf("%d",&i);</p><p> while(i!=1&&i!=2&&i!=3&&i!=4&&
68、i!=5)</p><p><b> {</b></p><p> printf("\t\t輸入有誤,請(qǐng)重新輸入:");</p><p> scanf("%d",&i);</p><p><b> } </b></p><
69、p> switch(i) //switch語(yǔ)句</p><p><b> {</b></p><p> case 1:{ //,修改地圖*****</p><p><b> loop2:</b></p><p> printf("\t現(xiàn)有城市:\n\t\t&
70、quot;);</p><p> for(j=0;j<cn;j++)</p><p> printf("%d.%s ",j+1,city[j]);</p><p> printf("\n\n");</p><p> printf("\t\t功能:\n\t\t 1:添加 **
71、2:刪除 ** 3:返回\n");</p><p> printf("\t\t請(qǐng)選擇:");</p><p> scanf("%d",&j);</p><p> while(j!=1&&j!=2&&j!=3)</p><p><b>
72、{</b></p><p> printf("\t\t輸入有誤,請(qǐng)重新輸入:");</p><p> scanf("%d",&j);</p><p><b> } </b></p><p> printf("\n");</p
73、><p><b> if(j==1)</b></p><p><b> {</b></p><p> printf("\t請(qǐng)輸入城市名:");</p><p> scanf("%s",city[cn]);</p><p><b
74、> cn++;</b></p><p> goto loop2;</p><p><b> } </b></p><p><b> if(j==2) </b></p><p><b> {</b></p><p> prin
75、tf("\t請(qǐng)選擇要?jiǎng)h除的城市的編號(hào):");</p><p> scanf("%d",&k);</p><p> while(k>cn||k<1)</p><p><b> {</b></p><p> printf("\t\t輸入有誤,請(qǐng)重新
76、輸入:");</p><p> scanf("%d",&k);</p><p><b> } </b></p><p> if(k==cn) cn--;</p><p><b> else { </b></p><p>
77、 for(int m=k-1;m<cn-1;m++) </p><p> strcpy(city[m],city[m+1]); </p><p> cn--; }//else</p><p> goto loop2; </p><p> else goto loop1; //回到主菜單</p&
78、gt;<p><b> }</b></p><p> case 2:{ //修改火車時(shí)間表</p><p><b> loop3:</b></p><p> printf("\n\t\t現(xiàn)有火車時(shí)刻表:\n");</p><p> printf("
79、;\t\t 車次 起點(diǎn)站 終點(diǎn)站 路途時(shí)間(h) 票價(jià)(元)\n"); //輸出各火車時(shí)刻表</p><p> for(j=0;j<tn;j++)</p><p> printf("\t\t%d: %s\t%s\t%s\t%5.1f\t\t%5.2f\t\n",j+1,train[j].cc,train[j].start,train[
80、j].destination,train[j].time,train[j].price);</p><p> printf("\n\n");</p><p> printf("\t功能:1.添加\t2.刪除\t3.返回\n");</p><p> printf("\t請(qǐng)選擇:");</p>
81、<p> scanf("%d",&j);</p><p> while(j!=1&&j!=2&&j!=3)</p><p><b> {</b></p><p> printf("\t\t輸入有誤,請(qǐng)重新輸入:");</p>&l
82、t;p> scanf("%d",&j);</p><p> } printf("\n");</p><p><b> if(j==1)</b></p><p><b> {</b></p><p> printf("
83、\t\t現(xiàn)有城市:\n\t\t");</p><p> for(k=0;k<cn;k++)</p><p> printf("%d.%s ",k+1,city[k]);</p><p> printf("\n");</p><p> printf("\t請(qǐng)分別輸入下列
84、數(shù)據(jù):\n");</p><p> printf("\n\t\t車次:");</p><p> scanf("%s",train[tn].cc);</p><p> printf("\n\t\t起點(diǎn)站:");</p><p> scanf("%s"
85、;,train[tn].start);</p><p> printf("\n\t\t終點(diǎn)站:");</p><p> scanf("%s",train[tn].destination);</p><p> printf("\n\t\t路途時(shí)間(h):");</p><p>
86、 scanf("%f",&train[tn].time);</p><p> printf("\n\t\t票價(jià)(元):");</p><p> scanf("%f",&train[tn].price);</p><p> tn++; //火車車次加一</p>&
87、lt;p> goto loop3; //,查看修改后的列車信息</p><p><b> }</b></p><p> else if(j==2)</p><p><b> {</b></p><p> printf("\t請(qǐng)選擇所需刪除車次編號(hào):");<
88、/p><p> scanf("%d",&k);</p><p> while(k>tn||k<1)</p><p><b> {</b></p><p> printf("\t\t輸入有誤,請(qǐng)重新輸入:");</p><p> sc
89、anf("%d",&k);</p><p><b> } </b></p><p> if(k==tn) tn--; //火車車次減一</p><p><b> else{</b></p><p> for(m=k-1;m<tn-1;m++) <
90、;/p><p> train[m]=train[m+1];</p><p><b> tn--; </b></p><p><b> }</b></p><p> goto loop3; //回到loop3,查看修改后的列車信息</p><p><b>
91、 }</b></p><p> else goto loop1; //回到主菜單</p><p> }//case 2 ,修改火車時(shí)刻表</p><p> case 3:{//修改飛機(jī)航班表,和列車相似</p><p><b> loop4:</b></p><p> pr
92、intf("\t\t現(xiàn)有飛機(jī)航班表:\n");</p><p> printf("\t\t 班次 起點(diǎn) 終點(diǎn) 路途時(shí)間(h) 票價(jià)(元)\n");</p><p> for(j=0;j<fn;j++)</p><p> printf("\t\t%d: %s\t%s\t%s\t%5.1
93、f\t\t%5.2f\t\n",j+1,flight[j].cc,flight[j].start,flight[j].destination,</p><p> flight[j].time,flight[j].price);</p><p> printf("\n\n");</p><p> printf("\t\t功
94、能:1.添加\t2.刪除\t3.返回\n");</p><p> printf("\t\t請(qǐng)選擇:");</p><p> scanf("%d",&j);</p><p> while(j!=1&&j!=2&&j!=3)</p><p><b
95、> {</b></p><p> printf("\t\t輸入有誤,請(qǐng)重新輸入:");</p><p> scanf("%d",&j);</p><p> } //避免按錯(cuò)而導(dǎo)致程序錯(cuò)誤</p><p> printf("\n");</
96、p><p><b> if(j==1){</b></p><p> printf("\t\t現(xiàn)有城市:");</p><p> for(k=0;k<cn;k++)</p><p> printf("%d.%s ",k+1,city[k]);</p><
97、;p> printf("\n");</p><p> printf("\t請(qǐng)分別輸入下列數(shù)據(jù):\n");</p><p> printf("\n\t\t班次:");</p><p> scanf("%s",flight[fn].cc);</p><p&g
98、t; printf("\n\t\t起點(diǎn)站:");</p><p> scanf("%s",flight[fn].start);</p><p> printf("\n\t\t終點(diǎn)站:");</p><p> scanf("%s",flight[fn].destination);&
99、lt;/p><p> printf("\n\t\t路途時(shí)間(h):");</p><p> scanf("%f",&flight[fn].time);</p><p> printf("\n\t\t票價(jià)(元):");</p><p> scanf("%f&quo
100、t;,&flight[fn].price);</p><p> fn++; //班次加一</p><p> goto loop4;</p><p><b> }</b></p><p> else if(j==2) </p><p><b> {</b>
101、;</p><p> printf("\t\t請(qǐng)選擇所要?jiǎng)h除的編號(hào):");</p><p> scanf("%d",&k);</p><p> while(k>fn||k<1)</p><p><b> {</b></p><p>
102、; printf("\t\t輸入有誤,請(qǐng)重新輸入:");</p><p> scanf("%d",&k);</p><p> } //避免按錯(cuò)而導(dǎo)致程序錯(cuò)誤</p><p> if(k==fn) fn--;</p><p><b> else{</b><
103、;/p><p> for(m=k-1;m<fn-1;m++) </p><p> flight[m]=flight[m+1];</p><p><b> fn--;</b></p><p><b> }//else</b></p><p> goto loop4;
104、</p><p> }//else if</p><p> else goto loop1;</p><p> }//case 3,修改飛機(jī)航班表</p><p><b> case 4:{</b></p><p> printf("\t\t請(qǐng)選擇交通工具(1.火車 2.飛機(jī))
105、:");</p><p> scanf("%d",&j);</p><p> while(j!=1&&j!=2)</p><p><b> {</b></p><p> printf("\t\t輸入有誤,請(qǐng)重新輸入:");</p>
106、;<p> scanf("%d",&j);</p><p> } printf("\t\t請(qǐng)選擇決策方案(1.最短時(shí)間 2.最少花費(fèi)):");</p><p> scanf("%d",&k);</p><p> while(k!=1&&k!=2)&
107、lt;/p><p><b> {</b></p><p> printf("\t\t輸入有誤,請(qǐng)重新輸入:");</p><p> scanf("%d",&k);</p><p> } printf("\t現(xiàn)有城市:\n");</p&g
108、t;<p> for(i=0;i<cn;i++)</p><p> printf("\t\t%d.%s\n",i+1,city[i]);</p><p> printf("\n");</p><p> printf("\t\t出發(fā)地編號(hào):");</p><p&
109、gt; scanf("%d",&m);</p><p> while(m>cn||m<1) //cn為現(xiàn)有城市數(shù)目</p><p><b> {</b></p><p> printf("\t\t輸入有誤,請(qǐng)重新輸入:");</p><p> scan
110、f("%d",&m);</p><p> } printf("\t\t目的地編號(hào):");</p><p> scanf("%d",&n);</p><p> while(n>cn||n<1) //cn為現(xiàn)有城市數(shù)目</p><p><b
111、> {</b></p><p> printf("\t\t輸入有誤,請(qǐng)重新輸入:");</p><p> scanf("%d",&n);</p><p> }printf("\n");</p><p> case 5: return;}
112、 </p><p><b> 9.程序完整源代碼</b></p><p> # include<stdio.h></p><p> #include<string.h></p><p> #include<float.h></p><p> const
113、 float max=FLT_MAX;</p><p> struct Tra{ //火車或飛機(jī)的存儲(chǔ)結(jié)構(gòu)</p><p> char cc[20]; //用"車次"的前兩個(gè)字母表示火車或飛機(jī)航班的代碼</p><p> char start[20]; //出發(fā)點(diǎn)</p>
114、;<p> char destination[20]; //目的地</p><p> float time; //路途時(shí)間</p><p> float price; //價(jià)錢</p><p><b> };</b></p><p> int search(char
115、 citytable[][20],char* city,int cn) //在城市數(shù)中查找某個(gè)城市</p><p> { </p><p><b> int i;</b></p><p> for(i=0;i<cn;i++)
116、</p><p><b> {</b></p><p> if(strcmp(citytable[i],city)==0)</p><p><b> return i;</b></p><p><b> }</b></p><p> retur
117、n -1;</p><p><b> }</b></p><p> void short_path(struct Tra* timetable,char* start,char* dest,char city[][20],int tn,int cn,int choice)</p><p><b> {//最優(yōu)路線</b&g
118、t;</p><p> //start表示出發(fā)地,dest表示目的地,tn表示表示航班或車次的總次數(shù),cn表示城市的總數(shù)</p><p> //choice=0表示求最短時(shí)間路線,choice=1表示求最少花費(fèi)路線</p><p> int i,j,k,st,et;</p><p> float min,t;</p>&
119、lt;p> char pcity[10][20];</p><p> float edge[15][15],dist[15];</p><p> int path[15],s[15];</p><p> for(i=0;i<cn;i++)</p><p> for(j=0;j<cn;j++)</p>
120、<p><b> { </b></p><p> edge[i][j]=max;</p><p><b> } </b></p><p> for(i=0;i<tn;i++)/*dijkstra算法*/</p><p><b> {</b>&l
121、t;/p><p> j=search(city,timetable[i].start,cn);</p><p> k=search(city,timetable[i].destination,cn);</p><p> if(choice==0)</p><p><b> {/*最短時(shí)間*/</b></p>
122、;<p> t=timetable[i].time;</p><p> if(t<edge[j][k]) edge[j][k]=t;</p><p><b> }</b></p><p><b> else </b></p><p><b> {/*最少花費(fèi)*
123、/</b></p><p> t=timetable[i].price;</p><p> if(t<edge[j][k]) edge[j][k]=t;</p><p><b> }</b></p><p><b> }</b></p><p>
124、st=search(city,start,cn);</p><p> et=search(city,dest,cn);</p><p> for(i=0;i<cn;i++){</p><p> dist[i]=edge[st][i];</p><p><b> s[i]=0;</b></p>
125、<p> if(i!=st&&dist[i]<max) path[i]=st;</p><p> else path[i]=-1;</p><p><b> }</b></p><p> s[st]=1; dist[st]=0;</p><p> for(i=0;i<cn-
126、1;i++){</p><p><b> min=max;</b></p><p><b> k=st;</b></p><p> for(j=0;j<cn;j++)</p><p> if(!s[j]&&dist[j]<min)</p><p
127、> {k=j;min=dist[j];}</p><p><b> s[k]=1;</b></p><p> for(j=0;j<cn;j++)</p><p> if(!s[j]&&edge[k][j]<max&&dist[k]+edge[k][j]<dist[j]){</
128、p><p> dist[j]=dist[k]+edge[k][j]; path[j]=k;</p><p><b> }</b></p><p><b> }</b></p><p><b> k=et;</b></p><p><b>
129、 i=0;</b></p><p> if(path[k]==-1){</p><p> printf("\t\t對(duì)不起,不存在從 %s 到 %s 的路線\n\n",start,dest);</p><p><b> return;</b></p><p><b> }&
130、lt;/b></p><p> while(path[k]!=-1)</p><p><b> {</b></p><p> strcpy(pcity[i++],city[k]);</p><p> k=path[k];</p><p><b> }</b>&
131、lt;/p><p> strcpy(pcity[i++],city[st]);</p><p> printf("\t\t最佳路線為:\n\t\t");</p><p> for(j=i-1;j>=0;j--)</p><p> printf("%s ",pcity[j]);</p&g
132、t;<p> printf("\n");</p><p> if(choice==0) printf("\t\t所需總時(shí)間為:%5.1f小時(shí)\n",dist[et]);</p><p> else printf("\t\t所需的總費(fèi)用為:%7.2f元\n",dist[et]);</p><p
133、> printf("\n");</p><p><b> }</b></p><p> void main ()</p><p><b> { </b></p><p> int i,j,k,m,n,cn=5,tn=6,fn=6;</p><
134、;p> printf("\t\t******************************************\n");</p><p> printf("\t\t* *\n");</p><p> printf("\t\t* 歡
135、迎使用全國(guó)交通查詢系統(tǒng) *\n");</p><p> printf("\t\t* 制作人:易;吳 ;趙;李 *\n");</p><p> printf("\t\t* TIME:2011.8.20----2011.9.1 *\n");</p><p> printf(&qu
136、ot;\t\t* *\n");</p><p> printf("\t\t******************************************\n");</p><p> char city[15][20]={"北京","上海&quo
137、t;,"天津","武漢","廣州"};//現(xiàn)有城市,最多15個(gè)城市</p><p> struct Tra train[20]={</p><p> {"T1","武漢","北京",10,90},</p><p> {"T2&quo
138、t;,"上海","北京",8,70},</p><p> {"T3","北京","天津",3,30},</p><p> {"T4","廣州","北京",25,200}, </p><p> {&quo
139、t;T5","廣州","武漢",14,120},</p><p> {"T6","武漢","上海",8,80}</p><p><b> };</b></p><p> struct Tra flight[20]={</p&
140、gt;<p> {"F1","武漢","北京",3,500},</p><p> {"F2","上海","北京",2.5,400},</p><p> {"F3","北京","天津",1,20
141、0},</p><p> {"F4","廣州","北京",6,1400},</p><p> {"F5","廣州","武漢",5,700},</p><p> {"F6","武漢","上海&q
142、uot;,3,450}</p><p><b> };</b></p><p> printf("\t\t現(xiàn)有城市"); //輸出現(xiàn)有地圖上的城市,便于后面的輸入和修改</p><p> for(j=0;j<cn;j++)</p><p> printf("
143、%d.%s\t",j+1,city[j]);</p><p> printf("\n\n");</p><p><b> loop1:</b></p><p> printf("\t請(qǐng)選擇所需功能:\n\t\t1:修改地圖 \n\t\t2:編輯火車時(shí)刻表 \n\t\t3:編輯飛機(jī)航班表 \n
144、\t\t4:選擇出游路線 \n\t\t5:退出");</p><p> printf("\n\t請(qǐng)選擇:");</p><p> scanf("%d",&i);</p><p> while(i!=1&&i!=2&&i!=3&&i!=4&&
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)說(shuō)明書(全國(guó)交通咨詢模擬系統(tǒng))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-----全國(guó)交通咨詢系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)全國(guó)交通模擬
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---成績(jī)分析與全國(guó)交通咨詢模擬
- 排序算法數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)說(shuō)明書
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)說(shuō)明書--- 車廂調(diào)度問(wèn)題
- 排序算法數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)說(shuō)明書
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)說(shuō)明書--進(jìn)制轉(zhuǎn)換的實(shí)現(xiàn)
- 校園導(dǎo)游咨詢系統(tǒng)-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 校園導(dǎo)游咨詢系統(tǒng)---數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——校園導(dǎo)游咨詢系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---銀行模擬系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(銀行模擬系統(tǒng))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---校園交通導(dǎo)游系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--校園導(dǎo)游咨詢
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-校園導(dǎo)游咨詢
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--校園導(dǎo)游咨詢
- 教學(xué)計(jì)劃編制問(wèn)題數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)說(shuō)明書
- 校園導(dǎo)游咨詢系統(tǒng)-中南大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-全國(guó)著名景點(diǎn)導(dǎo)游咨詢01
評(píng)論
0/150
提交評(píng)論