校園導(dǎo)航系統(tǒng)課程設(shè)計(jì)報(bào)告材料_第1頁
校園導(dǎo)航系統(tǒng)課程設(shè)計(jì)報(bào)告材料_第2頁
校園導(dǎo)航系統(tǒng)課程設(shè)計(jì)報(bào)告材料_第3頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、題目石鐵大校園導(dǎo)航系統(tǒng)學(xué)院信息科學(xué)與技術(shù)學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)號(hào) 20112840學(xué)生姓名鑄輝指導(dǎo)教師娜日期: 2013-8-31題目與要求實(shí)習(xí)一校園導(dǎo)游程序 問題描述 用無向網(wǎng)表示學(xué)校的校園景點(diǎn)平面圖,圖中頂點(diǎn)表示主要景點(diǎn),存放景點(diǎn)的編號(hào) 、 名 稱 、 簡(jiǎn)介等信息 , 圖中的邊表示景點(diǎn)間的道路 , 存放路徑長度等信息 。 要求能夠回 答有關(guān)景點(diǎn)介紹、游覽路徑等問題。 游客通過終端可詢問:( 1 )從某一景點(diǎn)到另一景點(diǎn)的最短路徑 。( 2 )游客從公園進(jìn)入,選取一條最佳路線 。( 3 ) 使游客可以不重復(fù)地瀏覽各景點(diǎn),最后回到出口(出口就在入口旁邊) 。 基本 要求 ( 1 )將導(dǎo)游圖看

2、作一帶權(quán)無向圖,頂點(diǎn)表示公園的各個(gè)景點(diǎn),邊表示各景點(diǎn)之間的 道路,邊上的權(quán)值表示距離為此圖選擇適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu) 。( 2 )把各種路徑都顯示給游客,由游客自己選擇瀏覽路線 。( 3 )畫出景點(diǎn)分布圖于屏幕上 。 實(shí)現(xiàn)提示 ( 1 )構(gòu)造一個(gè)無向圖 G 并用鄰接矩陣來存儲(chǔ)。( 2 )利用迪杰斯特拉算法來計(jì)算出起點(diǎn)到各個(gè)頂點(diǎn)之間的最短路徑用二維數(shù)組 pi 來記錄,最短路徑長度就用一維數(shù)組di存放;i的圍:020。( 3 )一維數(shù)組 have 是用來記錄最短路徑出現(xiàn)頂點(diǎn)的順序。( 4 )根據(jù)起點(diǎn)和終點(diǎn)輸出最短路徑和路徑長度。需求分析本校園導(dǎo)航系統(tǒng)由C語言編寫,主要掌握最短路徑的實(shí)現(xiàn)方法,以及構(gòu)造無 向

3、圖G并用鄰接矩陣來存儲(chǔ),掌握迪杰斯特拉算法來算最短路徑。1. 輸入的形式和輸出的圍:2. 輸出的形式:3. 程序所能到達(dá)的功能:A. 圖中任意景點(diǎn)的相關(guān)信息查詢B. 任意兩個(gè)景點(diǎn)間的最短路徑C. 任意兩個(gè)景點(diǎn)間的所有路徑D. 增加有關(guān)景點(diǎn)和道路的信息E刪除更新有關(guān)景點(diǎn)和道路的信息F. 更新有關(guān)景點(diǎn)和道路的信息G. 顯示全景H. 退出該系統(tǒng)(1) 本程序包含了 10個(gè)函數(shù)三.概要設(shè)計(jì)主函數(shù)main()顯示操作菜單函數(shù) menu()景點(diǎn)名稱及其簡(jiǎn)介設(shè)置函數(shù)picture(void) 圖中任意景點(diǎn)相關(guān)信息查詢函數(shù)checksce ne(algraph g)圖中任意兩個(gè)景點(diǎn)間的最短路徑Dijkstra

4、(algraph g)alldista nce(algraph g) addsce ne(algraph g) delsce ne(algraph g) cha nge(algraph g)(2) 各函數(shù)之間的關(guān)系menupictmai n()chang()任意兩個(gè)景點(diǎn)間的全部路徑 增加有關(guān)景點(diǎn)和道路的信息 刪除有關(guān)景點(diǎn)和道路的信息 更新有關(guān)景點(diǎn)和道路的信息 顯示全景chang()cene(algraph g)h g)lldista nce(algraph g) addsce ne(algraph g) raph g) cha nge(algraph g)四.詳細(xì)設(shè)計(jì)實(shí)現(xiàn)概要設(shè)計(jì)中定義的所有的

5、數(shù)據(jù)類型,對(duì)每個(gè)操作給出偽代碼,對(duì)主程序 和其他模塊也都需要寫出偽代碼算法。(1)結(jié)點(diǎn)類型和指針類型typedef struct int adj;int *info;sce neinfo;typedef struct adjlistint num;char *sight;char *description;adjlist;typedef struct algraphadjlist verMAXNUM;sceneinfo arcsMAXNUMMAXNUM; int vexnum,arcnum; algraph; (2)圖的基本操作 主菜單 / 主菜單 int menu(void) int i;p

6、rintf("n 歡 迎 來 到 萊 震 德 瑞 hui 校 園 導(dǎo) 航 系統(tǒng)!n");printf("1. 圖中任意景點(diǎn)的相關(guān)信息查尋 n");printf("2.任意兩個(gè)景點(diǎn)間的最短路徑n");printf("3.任意兩個(gè)景點(diǎn)間的所有路徑n");printf("4.增加有關(guān)景點(diǎn)和道路的信息n");printf("5. 刪除更新有關(guān)景點(diǎn)和道路的信息 n");printf("6.更新有關(guān)景點(diǎn)和道路的信息n");printf("7.顯示全景 n &

7、quot;);printf("8.退出該系統(tǒng) n ");printf(" 讓 輝 哥 帶 大 家 在 鐵 道 大 學(xué) 翱 翔吧!n");printf(" 請(qǐng)輸入你要進(jìn)行的操作: "); scanf("%d",&i);return(i); 景點(diǎn)名稱及其簡(jiǎn)介void picture(void) int i,j;m.vexnum=11;m.arcnum=16;for(i=0;i<m.vexnum;i+)m.veri.num=i;m.ver0.sight="xiaomen"m.ver1.s

8、ight="學(xué)校大門,一教 "m.ver2.sight="圖書館 "m.ver3.sight="操場(chǎng) "m.ver4.sight="體育館 "m.ver5.sight="青春苑 "m.ver6.sight="辦公樓 "m.ver7.sight="第一實(shí)驗(yàn)樓 "m.ver8.sight="第九實(shí)驗(yàn)樓 "m.ver9.sight="第九宿舍樓 "m.ver10.sight="家屬院 "m.ver1.d

9、escription="m.ver2.description="m.ver3.description="m.ver4.description="進(jìn)入學(xué)校大門就可以看見一教, 一教西面是二教和三教 " 自習(xí)和閱讀的心靈家園,后身是第二實(shí)驗(yàn)樓 跑道和足球場(chǎng) " 室籃球場(chǎng)和游泳場(chǎng) "m.ver5.description="學(xué)生活動(dòng)中心和綜合餐廳 "m.ver6.description="m.ver7.description="m.ver8.description="辦公中心,包括開

10、元樓和春暉樓挨著醫(yī)院和綜合教學(xué)樓,物理實(shí)驗(yàn) 計(jì)算機(jī)和電工實(shí)驗(yàn),西鄰機(jī)械學(xué)院m.ver9.description="m.ver10.description="生活區(qū)中心,西鄰超市水房澡堂,東臨一,二三食堂 教職工住處,在學(xué)校最北面for(i=0;i<m.vexnum;+i)for(j=0;j<m.vexnum;+j)m.arcsij.adj=INF;m.arcs12.adj=m.arcs21.adj=100;m.arcs13.adj=m.arcs31.adj=300;m.arcs26.adj=m.arcs62.adj=500;m.arcs35.adj=m.arcs

11、53.adj=600;m.arcs14.adj=m.arcs41.adj=220;m.arcs45.adj=m.arcs54.adj=600;m.arcs49.adj=m.arcs94.adj=450;m.arcs46.adj=m.arcs64.adj=650;m.arcs57.adj=m.arcs75.adj=300;m.arcs68.adj=m.arcs86.adj=600;m.arcs109.adj=m.arcs910.adj=100;m.arcs710.adj=m.arcs107.adj=250;m.arcs79.adj=m.arcs97.adj=280;m.arcs89.adj=m.

12、arcs98.adj=400;m.arcs84.adj=m.arcs48.adj=100; 圖中任意景點(diǎn)相關(guān)信息查詢 void checkscene(algraph g) int i,j;char ch; while(1) sceneplace(); printf(" 請(qǐng)輸入你要查詢的景點(diǎn)的編號(hào) :");scanf("%d",&i);if(i>p | i<0) printf(" 輸入錯(cuò)誤! n"); elsefor(j=0;j<=p;j+) if(i=j)n"); printf(" 你要查

13、詢的景點(diǎn)的相關(guān)信息如下: printf("%dtt%sn",g.veri.num,g.veri.sight); printf("%sn",g.veri.description); printf(" 是否繼續(xù)查詢 ?(y|n):");scanf("%s",&ch); if(ch='N'|ch='n') break; 圖中任意兩個(gè)景點(diǎn)間的最短路徑 void Dijkstra(algraph g) char ch;int path1MAXNUM;int distMAXNUM;int

14、 sMAXNUM;int mindis,i,j,u,n=p;int l,k;int v0,po;while(1)sceneplace();printf(" 請(qǐng)輸入出發(fā)景點(diǎn)的序號(hào): "); scanf("%d",&v0);printf(" 請(qǐng)輸入目的景點(diǎn)的序號(hào): "); scanf("%d",&po);for(i=0;i<n;i+) disti=g.arcsv0i.adj; si=0;if(g.arcsv0i.adj!=INF) path1i=v0;elsepath1i=-1;sv0=1;pat

15、h1v0=0; for(i=0;i<n;i+) mindis=INF;u=-1;for(j=0;j<n;j+)if(sj=0 && distj < INF) u=j;mindis=distj;su=1;for(j=0;j<n;j+) if(sj=0)INF&&if(g.arcsuj.adj < distu+g.arcsuj.adj<distj) distj=distu+g.arcsuj.adj; path1j=u; dispath(g,dist,path1,s,n,v0,po);printf("n 是否繼續(xù)查詢 ?(

16、y|n):"); scanf("%s",&ch);if(ch='N'|ch='n')break; 任意兩個(gè)景點(diǎn)間的全部路徑 void path(algraph g,int i,int j,int k) int s,ko;if(rk=j)a+;printf(”第 條:",a);for(s=0;s<=k-1;s+)printf("%s",g.verrs.sight);printf("->"); printf("%sn",g.verrs.sight)

17、; s=0; while(s<g.vexnum)if(s!=i) ko=rk;if(g.arcskos.adj != INF && visiteds=0) visiteds=1; rk+1=s;path(g,i,j,k+1); visiteds=0; s+; void alldistance(algraph g) int i,j,k,l;char sh; while(1) sceneplace();printf("n請(qǐng)選擇出發(fā)景點(diǎn)的序號(hào):");scanf("%d",&i);printf("n請(qǐng)選擇目地景點(diǎn)的序號(hào):&

18、quot;);scanf("%d",&j);for(k=0;k<g.vexnum;k+) if(i=g.verk.num) i=k;for( l=0;l<g.vexnum;l+)if(j=g.verl.num) j=l;prin tf(”從$到 s 的所有游覽路徑有:n",g.veri.sight,g.verj.sight);r0=i;for(k=0;k<1;k+) visitedi=0;a=0;path(g,i,j,0);printf(" 繼續(xù)查詢 ?(y|n):"); scanf("%s",&a

19、mp;sh);if(sh='N'|sh='n')break; 增加有關(guān)景點(diǎn)和道路的信息void addscene(algraph g)int j,i,b;char yi,mon10,moh100;while(1) sceneplace();g.verp.num=p;printf(" 請(qǐng)輸入新景點(diǎn)的名稱: ");scanf("%s",mon);m.verp.sight=(char*)malloc(10); strcpy(m.verp.sight,mon);printf("n 請(qǐng)輸入新景點(diǎn)的相關(guān)簡(jiǎn)介: ")

20、; scanf("%s",moh);m.verp.description=(char*)malloc(100); strcpy(m.verp.description,moh);g.vexnum=g.vexnum+1;for(j=0;j<p;+j) m.arcspj.adj=INF;m.arcsjp.adj=INF;printf("n請(qǐng)問有幾個(gè)景點(diǎn)與該景點(diǎn)直接相通: ");scanf("%d",&i);printf("n請(qǐng)輸入與該景點(diǎn)相通的景點(diǎn)的序號(hào)及它們之間的距離:");for(j=0;j<i;

21、j+) printf("n請(qǐng)輸入第d個(gè)景點(diǎn)的序號(hào):",j+1);scanf("%d",&b);printf("n請(qǐng)輸入該兩個(gè)景點(diǎn)之間的距離: ");scanf("%d",&g.arcspb.adj);g.arcsbp.adj=g.arcspb.adj;m.arcsbp.adj=g.arcspb.adj; m.arcspb.adj=m.arcsbp.adj;printf(" 你輸入的景點(diǎn)信息是: n");printf("%dt%st%snng.verp.num,m.ver

22、p.sight,m.verp.description);g.arcnum=g.arcnum+i;p=p+1;m.vexnum=p;sceneplace();printf(" 是否繼續(xù)添加 ?(y|n):");scanf("%s",&yi);if(yi='N'|yi='n')break; 刪除有關(guān)景點(diǎn)和道路的信息void delscene(algraph g) int i,j,k,l;char sh;while(1)sceneplace();printf("n 請(qǐng)輸入你將要?jiǎng)h除的景點(diǎn)序號(hào) :");

23、 scanf("%d",&i);for(k=0;k<g.vexnum;k+)if(i=g.verk.num) j=k; m.verj.sight=NULL;for(l=1;l<m.vexnum;+l) m.arcslj.adj=INF; m.arcsjl.adj=INF; m.vexnum=m.vexnum-1; sceneplace();printf(" 刪除繼續(xù) ?(y|n):"); scanf("%s",&sh);if(sh='N'|sh='n')break; 更新有關(guān)

24、景點(diǎn)和道路的信息void change(algraph g) int i,b,j,th,fh,k;char sh,mon10,moh100;while(1) sceneplace();printf(" 請(qǐng)輸入你將要修改信息的景點(diǎn)序號(hào) :"); scanf("%d",&i);for(k=0;k<g.vexnum;k+)if(i=g.verk.num) j=k;printf("n");printf("1. 景點(diǎn)名稱 t2. 景點(diǎn)簡(jiǎn)介 t3. 道路消息 n"); printf("n");

25、printf(" 請(qǐng)輸入你要進(jìn)行的操作的序號(hào): "); scanf("%d",&th);switch(th) case 1:printf(" 請(qǐng)輸入新景點(diǎn)名稱: "); scanf("%s",mon);g.verj.sight=mon;m.verj.sight=g.verj.sight;break;case 2:printf(" 請(qǐng)輸入新景點(diǎn)簡(jiǎn)介: ");scanf("%s",moh); m.verj.description=(char*)malloc(100);st

26、rcpy(m.verj.description,moh);break;case 3:printf(" 請(qǐng)輸入要修改的與該景點(diǎn)相通的景點(diǎn)的距離的序號(hào)個(gè)數(shù): "); scanf("%dn",&fh);for(k=0;k<fh;k+) printf(”請(qǐng)輸入要修改的第d個(gè)景點(diǎn)的序號(hào):",j+1);scanf("%dn",&b);printf(" 請(qǐng)重新輸入該兩個(gè)景點(diǎn)之間的距離: ");scanf("%d",&m.arcsjb.adj);m.arcsbj.adj=

27、m.arcsjb.adj;sceneplace();printf(" 繼續(xù)修改 ?(y|n):");scanf("%s",&sh);if(sh='N'|sh='n')break; 顯示全景略 主函數(shù)int main()picture();printf("n 校 園 導(dǎo) 航 系 統(tǒng)n");sceneplace();for(;)switch(menu() case 1:checkscene(m);break;case 2:Dijkstra(m);break;case 3:alldistance(m)

28、;break;case 4:addscene(m);break;case 5:delscene(m);break;case 6:change(m);break;case 7:chang(m);break;case 8:printf("感你使用輝哥校園導(dǎo)航系統(tǒng) ! 輝哥又一次帶大家拯救了世界 ! 再見 !n");exit(0);default:printf(" 輸入錯(cuò)誤 ! 請(qǐng)重新輸入你要進(jìn)行的操作 !n");五調(diào)試分析在調(diào)試刪除修改功能過程中,刪除的總是不正確,刪除的結(jié)果顯示,沒有將 要?jiǎng)h除的景點(diǎn)刪掉, 最后發(fā)現(xiàn)刪除的結(jié)點(diǎn)不正確, 刪除應(yīng)該與輸入的值和頭

29、結(jié)點(diǎn) next 比較,而不是頭結(jié)點(diǎn)。還有就是刪除結(jié)點(diǎn)不知道如何循環(huán),最后又看看了 記得筆記和書,才知道如何繼續(xù)刪除而不出錯(cuò)誤。六使用說明進(jìn)入校園導(dǎo)航系統(tǒng),首先看到的就是用戶歡迎界面,然后根據(jù)提示:1. 圖中任意景點(diǎn)的相關(guān)信息查尋; 2.任意兩個(gè)景點(diǎn)間的最短路徑; 3. 任意兩個(gè)景點(diǎn)間的 所有路徑; 4.增加有關(guān)景點(diǎn)和道路的信息; 5. 刪除更新有關(guān)景點(diǎn)和道路的信息; 6.更新有關(guān)景點(diǎn)和道路的信息 7.顯示全景; 8.退出該系統(tǒng)如 1,圖中任意景點(diǎn)的相關(guān)信息查尋。 根據(jù)本系統(tǒng)提供的 10 個(gè)景點(diǎn), 輸入景 點(diǎn)編號(hào),可以得到景點(diǎn)信息和景點(diǎn)介紹;如 2 ,任意兩個(gè)景點(diǎn)間的最短路徑。提示依次輸入出發(fā)景

30、點(diǎn)序號(hào)和目的景點(diǎn) 序號(hào),錄入完畢后,按回車輸出最短游覽路徑,以及路徑長度,并提示是否繼續(xù) 查詢;如 3 ,任意兩個(gè)景點(diǎn)間的所有路徑。提示依次輸入出發(fā)景點(diǎn)序號(hào)和目的景點(diǎn)序號(hào),錄入完畢后,按回車輸出所有游覽路徑,并記數(shù)路徑條數(shù),最后提示是否 繼續(xù)查詢;如4,增加有關(guān)景點(diǎn)和道路的信息。提示依次輸入 1.新景點(diǎn)的名稱;2新景 點(diǎn)相關(guān)簡(jiǎn)介;3.有幾個(gè)景點(diǎn)與該景點(diǎn)相通;4.依次輸入相通景點(diǎn)的序號(hào)和兩個(gè)景 點(diǎn)間的距離,添加成功后,提示是否繼續(xù)添加。如5,刪除有關(guān)景點(diǎn)和道路的信息,會(huì)提示要?jiǎng)h除景點(diǎn)的編號(hào);如6,更新有關(guān)景點(diǎn)和道路的信息,可以更新有關(guān)景點(diǎn)和道路的信息;如7,顯示全景。顯示鐵道大學(xué)的平面圖。如8,

31、退出該系統(tǒng)。退出校園導(dǎo)航系統(tǒng)。七.調(diào)試結(jié)果及部分截圖1.進(jìn)入主界面,校園導(dǎo)航系統(tǒng)。 # # # #4* Ml#H-* Is M- -NH-«4- -K歡世光臨石嶺宦抵週天學(xué)* vvvt f *r*anrh b iJBSSW切知Ifl1戶喝$=12.圖中任意景點(diǎn)的相關(guān)信息查詢44*MMJI-r=i!7sr.Ql*T4怎門四凹點(diǎn)天 4 «fl杠 IKEVI 剤點(diǎn)整?< *歩蠡-山婀哥帶產(chǎn)辭片耳穿n說in丈豈斡73圖中任意兩個(gè)景點(diǎn)的最短路徑丹.盯,=.!=社和-;-r.UH-r:*.* "還A? nI2j<6t7e-社is哥帶燈陸石寶莊俅道大孝輝弭眄1卡十一,4任意兩個(gè)景點(diǎn)間的所有路徑檯陜ME 亍r-.:4譽(yù) -鋁r-Bi螫卿九忙一魚一一->->-L->>->一 44 -衛(wèi)nn* 弓 霍;->1樓K Mr朝 篇.二陀冗 雷一ZT 1嚴(yán)HT -I A > 二 V:. 1-LA 1補(bǔ) V->M.1;<底匡貶T':rR4.變 燭帚經(jīng)亠二罷R丄e .K->&g

溫馨提示

  • 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)論