數(shù)據(jù)結(jié)構(gòu)_校園導(dǎo)游系統(tǒng)課程設(shè)計(jì)_第1頁
數(shù)據(jù)結(jié)構(gòu)_校園導(dǎo)游系統(tǒng)課程設(shè)計(jì)_第2頁
數(shù)據(jù)結(jié)構(gòu)_校園導(dǎo)游系統(tǒng)課程設(shè)計(jì)_第3頁
數(shù)據(jù)結(jié)構(gòu)_校園導(dǎo)游系統(tǒng)課程設(shè)計(jì)_第4頁
數(shù)據(jù)結(jié)構(gòu)_校園導(dǎo)游系統(tǒng)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、濱江學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 題 目 校園導(dǎo)游咨詢程序設(shè)計(jì) 學(xué) 號(hào) 學(xué)生姓名 院 系 專 業(yè) 指導(dǎo)教師 二一二 年 月 日1、 題目的內(nèi)容及要求設(shè)計(jì)一個(gè)校園導(dǎo)游程序,為來訪的客人提供各種信息查詢服務(wù)。2、 需求分析(1)設(shè)計(jì)你的學(xué)校的校園平面圖,所含景點(diǎn)不少于10個(gè)。以圖中頂點(diǎn)表示學(xué)校各景點(diǎn),存放景點(diǎn)名稱、代號(hào)、簡(jiǎn)介等信息;以邊表示路徑,存放路徑長(zhǎng)度等相關(guān)信息。(2)為來訪客人提供圖中任意景點(diǎn)的問路查詢,即查詢?nèi)我鈨蓚€(gè)景點(diǎn)之間的一條最短的簡(jiǎn)單路徑。 (3)為來訪客人提供圖中任意景點(diǎn)相關(guān)信息的查詢。 3、概要設(shè)計(jì)1功能模塊圖;void CreateUDN();/創(chuàng)建無向網(wǎng)void Search();

2、/查詢景點(diǎn)信息void Shortestpath(int i);/計(jì)算最短路徑void Output(int sight1,int sight2);/輸出函數(shù)2各個(gè)模塊詳細(xì)的功能描述。CreateUDN();/創(chuàng)建無向網(wǎng)、主要用來保存各景點(diǎn)信息Search();/查詢景點(diǎn)信息、景點(diǎn)的名稱及介紹Shortestpath(int i);/計(jì)算兩景點(diǎn)間最短路徑Output(int sight1,int sight2);/輸出兩景點(diǎn)最短路徑及信息3.模塊圖4、 詳細(xì)設(shè)計(jì)一、圖的儲(chǔ)存結(jié)構(gòu)#define Max 30000#define NUM 10typedef struct ArcCell int a

3、dj; /* 相鄰接的景點(diǎn)之間的路程 */ ArcCell; /* 定義邊的類型 */ typedef struct VertexType int number; /* 景點(diǎn)編號(hào) */  char *sight; /* 景點(diǎn)名稱 */ char *description;/* 景點(diǎn)描述 */VertexType; /* 定義頂點(diǎn)的類型 */ typedef struct VertexType vexNUM; /*&#

4、160;圖中的頂點(diǎn),即為景點(diǎn) */ ArcCell arcsNUMNUM;/* 圖中的邊,即為景點(diǎn)間的距離 */ int vexnum,arcnum;/* 頂點(diǎn)數(shù),邊數(shù) */ MGraph;  /* 定義圖的類型 2、 算法1.主程序void main() int v0,v1; char ck; CreateUDN(NUM,11); do ck=Menu(); switch(ck) case '1': system("cls"); / narrate(); printf

5、("nnttt請(qǐng)選擇起點(diǎn)景點(diǎn)(09):"); scanf("%d",&v0); printf("ttt請(qǐng)選擇終點(diǎn)景點(diǎn)(09):"); scanf("%d",&v1); ShortestPath(v0);  /* 計(jì)算兩個(gè)景點(diǎn)之間的最短路徑 */ output(v0,v1);  /* 計(jì)算兩個(gè)景點(diǎn)之間的最短路徑 */ printf("nntttt請(qǐng)按任意鍵繼續(xù).n"); getchar(); getchar(); brea

6、k; case '2':search(); break; case '3': system("cls"); /narrate(); x0=1; HaMiTonian(1); printf("nntttt請(qǐng)按任意鍵繼續(xù).n"); getchar(); getchar(); break; ; while(ck!='e'); 2. 輸出程序void output(int sight1,int sight2) int a,b,c,d,q=0; a=sight2; if(a!=sight1) /* 如果景點(diǎn)

7、二不和景點(diǎn)一輸入重合,則進(jìn)行 */ printf("nt從%s到%s的最短路徑是",G.vexsight1.sight,G.vexsight2.sight);/* 輸出提示信息 */  printf("t(最短距離為 %dm.)nnt",Da); printf("t%s",G.vexsight1.sight); d=sight1;  /* 將景點(diǎn)一的編號(hào)賦值給d */  for(c=0;c<NUM;+c) gate:; Pasight1=0; for

8、(b=0;b<NUM;b+) if(G.arcsdb.adj<30000&&Pab) /* 如果景點(diǎn)一和它的一個(gè)臨界點(diǎn)之間存在路徑且最短路徑 */  printf("->%s",G.vexb.sight); /* 輸出此節(jié)點(diǎn)的名稱 */  q=q+1; /* 計(jì)數(shù)變量加一,滿8控制輸出時(shí)的換行 */ Pab=0; d=b;  /* 將b作為出發(fā)點(diǎn)進(jìn)行下一次循環(huán)輸出,如此反復(fù) */ if(q%9=0) printf("n&q

9、uot;); goto gate; 3. 求最短路徑  void ShortestPath(int num) int v,w,i,t; int finalNUM; int min; for(v=0;v<NUM;v+) finalv=0; Dv=G.arcsnumv.adj; for(w=0;w<NUM;w+) Pvw=0; if(Dv<30000) Pvnum=1; Pvv=1; Dnum=0; finalnum=1; for(i=0;i<NUM;+i) min=Max; for(w=0;w<NUM;+w) if(!finalw) if(Dw<mi

10、n) v=w; min=Dw; finalv=1; for(w=0;w<NUM;+w) if(!finalw&&(min+G.arcsvw.adj)<Dw) Dw=min+G.arcsvw.adj; for(t=0;t<NUM;t+) Pwt=Pvt; Pww=1; 4. 說明函數(shù)void narrate() int i,k=0; printf("ntt*歡迎使用校園導(dǎo)游程序*n"); printf("ntt*南京信息工程大學(xué)*n"); printf("t_n"); printf("tt景點(diǎn)

11、名稱tt|t景點(diǎn)描述n"); printf("t_|_n"); for(i=0;i<NUM;i+) printf("t (%2d)%-10sttt|t%-25sn",i,G.vexi.sight,G.vexi.description); k=k+1; printf("t_|_n");5、查詢景點(diǎn)信息void search() int num; int i; char c; char name20; do system("cls"); c=SearchMenu(); switch (c) case &

12、#39;1': system("cls"); narrate(); printf("nntt請(qǐng)輸入您要查找的景點(diǎn)編號(hào):"); scanf("%d",&num); for(i=0;i<NUM;i+) if(num=G.vexi.number) printf("nnttt您要查找景點(diǎn)信息如下:"); printf("nnttt%-25snn",G.vexi.description); printf("nttt按任意鍵返回."); getchar(); get

13、char(); break; if(i=NUM) printf("nnttt沒有找到!"); printf("nnttt按任意鍵返回."); getchar(); getchar(); break; case '2': narrate(); system("cls"); printf("nntt請(qǐng)輸入您要查找的景點(diǎn)名稱:"); scanf("%s",name); for(i=0;i<NUM;i+) if(!strcmp(name,G.vexi.sight) printf(&

14、quot;nnttt您要查找景點(diǎn)信息如下:"); printf("nnttt%-25snn",G.vexi.description); printf("nttt按任意鍵返回."); getchar(); getchar(); break; if(i=NUM) printf("nnttt沒有找到!"); printf("nnttt按任意鍵返回."); getchar(); getchar(); break; while(c!='t');6. 選擇菜單char SearchMenu() cha

15、r c; int flag; do flag=1; system("cls"); narrate(); printf("ntttn"); printf("ttt n"); printf("ttt 1、按照景點(diǎn)編號(hào)查詢 n"); printf("ttt 2、按照景點(diǎn)名稱查詢 n"); printf("ttt t、返回 n"); printf("ttt n"); printf("tttn"); printf("tttt請(qǐng)輸入您的選

16、擇:"); scanf("%c",&c); if(c='1'|c='2'|c='t') flag=0; while(flag); return c;5、運(yùn)行結(jié)果及分析系統(tǒng)主界面查詢路徑查詢信息6、收獲及體會(huì) 非常高興能和同學(xué)們一起做實(shí)驗(yàn),感謝各位老師以及同學(xué)們對(duì)我的幫助,特別是老師循循善誘的教導(dǎo)和不拘一格的思路給予我無盡的啟迪;這次數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)的每個(gè)實(shí)驗(yàn)細(xì)節(jié)和每個(gè)數(shù)據(jù),都離不開老師您的細(xì)心指導(dǎo)。7、源代碼#include "string.h"#include "stdio.h&q

17、uot;#include "malloc.h"#include "stdlib.h"#define Max 30000#define NUM 10typedef struct ArcCell int adj; ArcCell;typedef struct VertexType int number; char *sight; char *description;VertexType; typedef struct VertexType vexNUM; ArcCell arcsNUMNUM; int vexnum,arcnum;MGraph; MGraph

18、 G; int PNUMNUM; long int DNUM; int x9=0;void CreateUDN(int v,int a);void narrate(); void ShortestPath(int num);void output(int sight1,int sight2);char Menu(); void search(); char SearchMenu(); void HaMiTonian(int); void NextValue(int); void display();void main() int v0,v1; char ck; CreateUDN(NUM,11

19、); do ck=Menu(); switch(ck) case '1': system("cls"); / narrate(); printf("nnttt請(qǐng)選擇起點(diǎn)景點(diǎn)(09):"); scanf("%d",&v0); printf("ttt請(qǐng)選擇終點(diǎn)景點(diǎn)(09):"); scanf("%d",&v1); ShortestPath(v0); output(v0,v1); printf("nntttt請(qǐng)按任意鍵繼續(xù).n"); getchar(

20、); getchar(); break; case '2':search(); break; case '3': system("cls"); /narrate(); x0=1; HaMiTonian(1); printf("nntttt請(qǐng)按任意鍵繼續(xù).n"); getchar(); getchar(); break; ; while(ck!='e'); char Menu() char c; int flag; do flag=1; system("cls"); narrate();

21、printf("ntttn"); printf("ttt n"); printf("ttt 1、查詢景點(diǎn)路徑 n"); printf("ttt 2、查詢景點(diǎn)信息 n"); printf("ttt 3、推薦參觀路線 n"); printf("ttt t、退出 n"); printf("ttt n"); printf("tttn"); printf("tttt請(qǐng)輸入您的選擇:"); scanf("%c"

22、;,&c); if(c='1'|c='2'|c='3'|c='t') flag=0; while(flag); return c;char SearchMenu() char c; int flag; do flag=1; system("cls"); narrate(); printf("ntttn"); printf("ttt n"); printf("ttt 1、按照景點(diǎn)編號(hào)查詢 n"); printf("ttt 2、按照景點(diǎn)名

23、稱查詢 n"); printf("ttt t、返回 n"); printf("ttt n"); printf("tttn"); printf("tttt請(qǐng)輸入您的選擇:"); scanf("%c",&c); if(c='1'|c='2'|c='t') flag=0; while(flag); return c;void search() int num; int i; char c; char name20; do system(

24、"cls"); c=SearchMenu(); switch (c) case '1': system("cls"); narrate(); printf("nntt請(qǐng)輸入您要查找的景點(diǎn)編號(hào):"); scanf("%d",&num); for(i=0;i<NUM;i+) if(num=G.vexi.number) printf("nnttt您要查找景點(diǎn)信息如下:"); printf("nnttt%-25snn",G.vexi.descriptio

25、n); printf("nttt按任意鍵返回."); getchar(); getchar(); break; if(i=NUM) printf("nnttt沒有找到!"); printf("nnttt按任意鍵返回."); getchar(); getchar(); break; case '2': narrate(); system("cls"); printf("nntt請(qǐng)輸入您要查找的景點(diǎn)名稱:"); scanf("%s",name); for(i=0;

26、i<NUM;i+) if(!strcmp(name,G.vexi.sight) printf("nnttt您要查找景點(diǎn)信息如下:"); printf("nnttt%-25snn",G.vexi.description); printf("nttt按任意鍵返回."); getchar(); getchar(); break; if(i=NUM) printf("nnttt沒有找到!"); printf("nnttt按任意鍵返回."); getchar(); getchar(); break;

27、 while(c!='t');void CreateUDN(int v,int a) int i,j; G.vexnum=v; G.arcnum=a; for(i=0;i<G.vexnum;+i) G.vexi.number=i; G.vex0.sight="東大門" G.vex0.description="學(xué)校正門。" G.vex1.sight="氣象樓" G.vex1.description="校氣象研究樓。" G.vex2.sight="體育館" G.vex2.des

28、cription="運(yùn)動(dòng),放松心情" G.vex3.sight="大學(xué)生活動(dòng)中心" G.vex3.description="競(jìng)賽、晚會(huì)舉辦地" G.vex4.sight="圖書館" G.vex4.description="閱覽,借閱圖書" G.vex5.sight="濱江樓" G.vex5.description="學(xué)習(xí),自習(xí)室" G.vex6.sight="綜合樓" G.vex6.description="學(xué)習(xí),辦公室&qu

29、ot; G.vex7.sight="老食堂" G.vex7.description="餐飲休閑" G.vex8.sight="新食堂" G.vex8.description="餐飲休閑" G.vex9.sight="文園" G.vex9.description="宿舍,休息" for(i=0;i<G.vexnum;+i) for(j=0;j<G.vexnum;+j) G.arcsij.adj=Max; G.arcs01.adj=G.arcs10.adj=2; G.

30、arcs02.adj=G.arcs20.adj=1; G.arcs03.adj=G.arcs30.adj=7; G.arcs14.adj=G.arcs41.adj=8; G.arcs24.adj=G.arcs42.adj=9; G.arcs35.adj=G.arcs53.adj=5; G.arcs57.adj=G.arcs75.adj=2; G.arcs46.adj=G.arcs64.adj=3; G.arcs47.adj=G.arcs74.adj=2; G.arcs68.adj=G.arcs86.adj=2; G.arcs78.adj=G.arcs87.adj=1; G.arcs89.adj

31、=G.arcs98.adj=1;void narrate() int i,k=0; printf("ntt*歡迎使用校園導(dǎo)游程序*n"); printf("ntt*南京信息工程大學(xué)*n"); printf("t_n"); printf("tt景點(diǎn)名稱tt|t景點(diǎn)描述n"); printf("t_|_n"); for(i=0;i<NUM;i+) printf("t (%2d)%-10sttt|t%-25sn",i,G.vexi.sight,G.vexi.descripti

32、on); k=k+1; printf("t_|_n");void ShortestPath(int num) int v,w,i,t; int finalNUM; int min; for(v=0;v<NUM;v+) finalv=0; Dv=G.arcsnumv.adj; for(w=0;w<NUM;w+) Pvw=0; if(Dv<30000) Pvnum=1; Pvv=1; Dnum=0; finalnum=1; for(i=0;i<NUM;+i) min=Max; for(w=0;w<NUM;+w) if(!finalw) if(Dw<min) v=w; min=Dw; finalv=1; for(w=0;w<NUM;+w) if(!finalw&&(min+G.arcsvw.adj)<Dw) Dw=min+G.arcsvw.adj; for(t=0;t<NUM;t+) Pwt=Pvt; Pww=1; void output(int sight1,int sight2) int a,b,c,d,q=0; a=sight2; if(a!=sight1) /*

溫馨提示

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