校園導(dǎo)航系統(tǒng)源代碼課件_第1頁
校園導(dǎo)航系統(tǒng)源代碼課件_第2頁
校園導(dǎo)航系統(tǒng)源代碼課件_第3頁
校園導(dǎo)航系統(tǒng)源代碼課件_第4頁
校園導(dǎo)航系統(tǒng)源代碼課件_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結(jié)構(gòu)-校園導(dǎo)航系統(tǒng)簡介:本系統(tǒng)采用C語言編寫,運(yùn)行環(huán)境為Dev-C+; 內(nèi)容以西安電子科技大學(xué)南校區(qū)為例; 主要功能有:1.查詢景點(diǎn)信息;2.查詢兩景點(diǎn)間最短距離;3.查詢兩景點(diǎn)間所有路線;4.查詢西電校園地圖;5.修改景點(diǎn)和路徑信息.注意事項(xiàng):在進(jìn)行修改景點(diǎn)和路徑信息操作前,請?jiān)诳蓤?zhí)行文件目錄下用記事本創(chuàng)建”superUser.CODE”文件來存放用戶名與密碼(中間以空格隔開),否則無法進(jìn)入.源代碼:#include #include #include #include #include #define Max 20000typedef struct ArcCellint adj; /兩

2、個景點(diǎn)間的距離ArcCell;typedef struct VertexTypeint number; /景點(diǎn)編號 char sight100; /景點(diǎn)名稱 char description1000; /景點(diǎn)簡介char particular11000;char particular21000;char particular31000; /景點(diǎn)詳情VertexType;typedef structVertexType vex20; /最多存放20個景點(diǎn)信息 ArcCell arcs2020; /兩個景點(diǎn)間的距離 int vexnum,arcnum;MGraph;MGraph G;char na

3、meofschool100; /學(xué)校名稱int NUM=9;int P2020;int p20;int visited20;int a=0;long int D20;int x20=0; /函數(shù)聲明 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 Searchpath1(MGraph g);voi

4、d disppath(MGraph g,int i,int j);void path(MGraph g,int i,int j,int k);void NextValue(int); void display();int Addnewsight(int n);int Deletesight(int n);void Changesight();char Changemenu();char Sightmenu();int Maintain(void); int VerificatianIdentity(void); void map(); /主函數(shù) int main() int v0,v1;int

5、 MaintainFlag; char ck; system(color 0F); CreateUDN(NUM,11); do ck=Menu(); switch(ck)case 1: search(); break; case 2:system(cls);narrate(); printf(nnttt請選擇起點(diǎn)景點(diǎn)(0%d):,NUM-1); scanf(%d,&v0); printf(ttt請選擇終點(diǎn)景點(diǎn)(0%d):,NUM-1); scanf(%d,&v1); ShortestPath(v0); output(v0,v1); printf(nntttt請按任意鍵繼續(xù).n); getcha

6、r(); getchar();break; case3:system(cls); narrate(); x0=1; Searchpath1(G); printf(nntttt請按任意鍵繼續(xù).n); getchar(); getchar(); break; case4: system(cls);map(); printf(nnttttt請按任意鍵繼續(xù).n); getchar(); getchar();break; case5: system(cls); narrate(); MaintainFlag = Maintain();switch(MaintainFlag)case1: system(c

7、ls); narrate(); NUM=Addnewsight(NUM); system(cls); narrate(); break; case2: NUM=Deletesight(NUM); break; case3: Changesight(); break; break;while(ck!=e); return 0; /主菜單 char Menu() char c; int flag; do flag=1; system(cls); narrate(); printf(ntttn); printf(ttt n); printf(ttt 1、查詢景點(diǎn)信息 n); printf(ttt 2

8、、查詢兩景點(diǎn)間最短路徑 n); printf(ttt 3、查詢兩景點(diǎn)間所有路線 n); printf(ttt 4、查看西電校園地圖 n); printf(ttt 5、修改景點(diǎn)和路徑信息 n); printf(ttt e、退出 n); printf(ttt n); printf(tttn); printf(tttt請輸入您的選擇:); scanf(%c,&c); if(c=1|c=2|c=3|c=4|c=5|c=e) flag=0; while(flag); return c;/查詢菜單 char SearchMenu() char c; int flag; do flag=1; system(

9、cls); narrate(); printf(ntttn); printf(ttt n); printf(ttt 1、按照景點(diǎn)編號查詢 n); printf(ttt 2、按照景點(diǎn)名稱查詢 n); printf(ttt e、返回 n); printf(ttt n); printf(tttn); printf(tttt請輸入您的選擇:); scanf(%c,&c); if(c=1|c=2|c=e) flag=0; while(flag); return c;/查詢信息 void search() int num; int i; char c; char name20; do system(cls

10、); c=SearchMenu(); switch (c) case 1: system(cls); narrate(); printf(nntt請輸入您要查找的景點(diǎn)編號:); scanf(%d,&num); for(i=0;iNUM;i+) if(num=G.vexi.number) printf(ntt您要查找景點(diǎn)信息如下:); printf(ntt(%d)%-5s:%-25snn,i,G.vexi.sight,G.vexi.description); printf(ttttt詳情介紹:ntt%-sn,G.vexi.particular1); printf(tt%-sn,G.vexi.pa

11、rticular2); printf(tt%-sn,G.vexi.particular3); printf(ntt按任意鍵返回.); getchar(); getchar(); break; if(i=NUM) printf(nnttt沒有找到!); printf(nnttt按任意鍵返回.); getchar(); getchar(); break; case 2: system(cls); narrate(); printf(nntt請輸入您要查找的景點(diǎn)名稱:); scanf(%s,name); for(i=0;iNUM;i+) if(!strcmp(name,G.vexi.sight) p

12、rintf(ntt您要查找景點(diǎn)信息如下:); printf(ntt(%d)%-5s:%-25snn,i,G.vexi.sight,G.vexi.description); printf(ttttt詳情介紹:ntt%-sn,G.vexi.particular1); printf(tt%-sn,G.vexi.particular2); printf(tt%-sn,G.vexi.particular3); printf(ntt按任意鍵返回.); getchar(); getchar(); break; if(i=NUM) printf(nnttt沒有找到!); printf(nnttt按任意鍵返回.

13、); getchar(); getchar(); break; while(c!=e);/構(gòu)造圖形 void CreateUDN(int v,int a) int i,j; strcpy(nameofschool,西安電子科技大學(xué)); G.vexnum=v; G.arcnum=a; for(i=0;io ); strcpy(G.vex3.particular1, 海棠宿舍位于學(xué)校西北面,所以距離北操,新綜,北門較近,); strcpy(G.vex3.particular2,準(zhǔn)大一的學(xué)弟學(xué)妹們將會主要居住在5.6號樓(還有一部分會在); strcpy(G.vex3.particular3,9.1

14、0號樓).海棠宿舍為兩室一廳,每室各四人.); strcpy(G.vex4.sight,大活); strcpy(G.vex4.description,大學(xué)生活動中心的簡稱,小劇場就在這里. ); strcpy(G.vex4.particular1, 大活建設(shè)在學(xué)校人工湖旁邊,里面有實(shí)驗(yàn)室、舞蹈室等專用); strcpy(G.vex4.particular2,教室,也是學(xué)校舉辦室內(nèi)大型活動的常用地點(diǎn),曾經(jīng)陳一冰,周鴻); strcpy(G.vex4.particular3,祎,黃曉明等人在此與同學(xué)們見面.); strcpy(G.vex5.sight,北操); strcpy(G.vex5.desc

15、ription,跑步 踢球 狼人殺.等等有趣的活動,超熱鬧. ); strcpy(G.vex5.particular1, 北操基礎(chǔ)設(shè)施齊全,有足球場 跑道 觀眾臺 羽毛球場等,是); strcpy(G.vex5.particular2,學(xué)校舉行大型體育賽事的場地,例如:運(yùn)動會 足球賽等.每天晚上); strcpy(G.vex5.particular3,也會有許多同學(xué)在此運(yùn)動 玩耍,非常有趣.); strcpy(G.vex6.sight,觀光塔); strcpy(G.vex6.description,南校區(qū)最顯眼的建筑物,可以俯視整個校園. ); strcpy(G.vex6.particular

16、1, 觀光塔是西電南校區(qū)最負(fù)盛名的建筑物,位處南校區(qū)最為中); strcpy(G.vex6.particular2,間的位置,走在校園里,總是能夠看到觀光塔,到了晚上塔上的時); strcpy(G.vex6.particular3,鐘會亮起,很遠(yuǎn)都能看到,在月光下特別的漂亮.); strcpy(G.vex7.sight,體育館); strcpy(G.vex7.description,今年剛剛建成,外觀融合了天圓地方的思想. ); strcpy(G.vex7.particular1, 考慮到學(xué)校的所在地西安是十三朝古都,亦應(yīng)融入中國傳統(tǒng)); strcpy(G.vex7.particular2,文

17、化的理念,以及體育館主館和訓(xùn)練館的功能需求,最終決定以中); strcpy(G.vex7.particular3,國傳統(tǒng)文化的天圓地方為設(shè)計(jì)思路.美觀大氣.); strcpy(G.vex8.sight,行政樓); strcpy(G.vex8.description,可以進(jìn)行蓋章,補(bǔ)辦一卡通等眾多操作. ); strcpy(G.vex8.particular1, 從東門進(jìn)入學(xué)校,左手邊的那棟樓就是行政樓,往后稍小一點(diǎn)); strcpy(G.vex8.particular2,的就是行政輔樓.教務(wù)處、學(xué)工處、電院辦公室在行政樓,一卡通); strcpy(G.vex8.particular3,中心、戶

18、籍管理、財(cái)務(wù)處、一些學(xué)院的辦公室在行政輔樓.); for(i=0;i20;+i) for(j=0;j20;+j) G.arcsij.adj=Max; G.arcs08.adj=G.arcs80.adj=150; G.arcs01.adj=G.arcs10.adj=600; G.arcs17.adj=G.arcs71.adj=800; G.arcs16.adj=G.arcs61.adj=50; G.arcs14.adj=G.arcs41.adj=600; G.arcs32.adj=G.arcs23.adj=300; G.arcs62.adj=G.arcs26.adj=350; G.arcs35.

19、adj=G.arcs53.adj=300; G.arcs45.adj=G.arcs54.adj=400; G.arcs87.adj=G.arcs78.adj=250;/導(dǎo)圖模塊 void narrate() int i,k=0; printf(nt*歡迎使用%s校園導(dǎo)游程序*nn,nameofschool); printf(t|n); printf(t* 景點(diǎn)名稱 |ttt景點(diǎn)描述tt *n); printf(t|n); for(i=0;iNUM;i+) printf(t* (%d)%-15s|t%-43s *n,i,G.vexi.sight,G.vexi.description); k=k+

20、1; printf(t|n);/迪杰斯特拉算法 void ShortestPath(int num) int v,w,i,t; int final20; int min; for(v=0;vNUM;v+) finalv=0; Dv=G.arcsnumv.adj; for(w=0;wNUM;w+) Pvw=0; if(Dv20000) Pvnum=1; Pvv=1; Dnum=0; finalnum=1; for(i=0;iNUM;+i) min=Max; for(w=0;wNUM;+w) if(!finalw) if(Dwmin) v=w; min=Dw; finalv=1; for(w=0;

21、wNUM;+w) if(!finalw&(min+G.arcsvw.adj)Dw) Dw=min+G.arcsvw.adj; for(t=0;tNUM;t+) Pwt=Pvt; Pww=1; /輸出函數(shù) void output(int sight1,int sight2)int a,b,c,d,q=0; a=sight2; if(a!=sight1)printf(ntt從%s到%s的最短路徑是,G.vexsight1.sight,G.vexsight2.sight); printf(最短距離為 %dm.)nnt,Da); printf(tt%s,G.vexsight1.sight); d=si

22、ght1; for(c=0;cNUM;+c) gate:; Pasight1=0; for(b=0;bNUM;b+) if(G.arcsdb.adj%s,G.vexb.sight); q=q+1; Pab=0; d=b; if(q%8=0) printf(n); goto gate; /查詢所有路徑 void Searchpath1(MGraph g) int l=0;int k=0;int i,j;printf(t選擇出發(fā)景點(diǎn):); scanf(%d,&i);printf(t選擇目地景點(diǎn):);scanf(%d,&j);for(;kg.vexnum;k+)if(i=g.vexk.number)

23、i=k;for(;lg.vexnum;l+) if(j=g.vexl.number) j=l;printf(nt從%s到%s的所有游覽路徑有:nn,g.vexi.sight,g.vexj.sight);disppath(g,i,j);void disppath(MGraph g,int i,int j)int k;p0=i;for(k=0;kg.vexnum;k+)visitedi=0;a=0;path(g,i,j,0);void path(MGraph g,int i,int j,int k)int s;if(pk=j)a+;printf(t第%d條:t,a); for(s=0;s); pr

24、intf(%sn,g.vexps.sight); s=0;while(sg.vexnum)if(s!=i)if(g.arcspks.adj!=Max&visiteds=0)visiteds=1;pk+1=s; path(g,i,j,k+1); visiteds=0;s+;/添加模塊 int Addnewsight(int n)int i;char sight100,description1000,particular11000;char particular21000,particular31000;int length;printf(t請輸入新景點(diǎn)的名稱:nt);scanf(%s,&sigh

25、t);printf(t請輸入新景點(diǎn)的相關(guān)信息:nt);scanf(%s,&description);printf(t請輸入新景點(diǎn)的詳細(xì)介紹(每行不超過25字,且不超過3行):nt);scanf(%s,particular1);getchar();scanf(%S,particular2);getchar();scanf(%s,particular3);strcpy(G.vexn.sight,sight); strcpy(G.vexn.description,description); strcpy(G.vexn.particular1,particular1); strcpy(G.vexn.p

26、articular2,particular2); strcpy(G.vexn.particular3,particular3);G.vexn.number=n;for(i=0;in;i+) system(cls); narrate();printf(t請輸入此景點(diǎn)到第%d個景點(diǎn)的距離(單位:m)(同一景點(diǎn)或不可到達(dá)用20000表示):nt,i);scanf(%d,&length);if(length!=20000)G.arcnum+;G.arcsni.adj=G.arcsin.adj=length;n+;G.vexnum+;return n;/刪除模塊 int Deletesight(int

27、n)int i;int j;char c;int num;char name20;system(cls); c=SearchMenu(); switch (c) case 1: system(cls); narrate(); printf(nntt請輸入您要刪除景點(diǎn)的編號:); scanf(%d,&num); for(i=0;iNUM;i+)if(num=G.vexi.number)for(j=0;jNUM;j+)if(G.arcsij.adj!=20000)G.arcnum-;G.arcsij.adj=G.arcsji.adj=20000;for(;numNUM;num+)strcpy(G.

28、vexnum.sight,G.vexnum+1.sight);strcpy(G.vexnum.description,G.vexnum+1.description);n-; printf(nttt按任意鍵返回.); getchar(); getchar(); break; if(i=NUM) printf(nnttt沒有找到!); printf(nnttt按任意鍵返回.); getchar(); getchar(); break; case 2: system(cls); narrate(); printf(nntt請輸入您要刪除景點(diǎn)的名稱:); scanf(%s,name); for(i=0

29、;iNUM;i+) if(!strcmp(name,G.vexi.sight) num=i; for(j=0;jNUM;j+) if(G.arcsij.adj!=20000) G.arcnum-; G.arcsij.adj=G.arcsji.adj=20000; for(;numNUM;num+) strcpy(G.vexnum.sight,G.vexnum+1.sight);strcpy(G.vexnum.description,G.vexnum+1.description);n-; printf(nttt按任意鍵返回.); getchar(); getchar(); break; if(i

30、=NUM) printf(nnttt沒有找到!); printf(nnttt按任意鍵返回.); getchar(); getchar(); break; return n;/修改主菜單 char Changemenu() char c; int flag; do flag=1; system(cls); narrate(); printf(ntttn); printf(ttt n); printf(ttt 1、修改景點(diǎn)信息 n); printf(ttt 2、修改道路信息 n); printf(ttt e、返回 n); printf(ttt n); printf(tttn); printf(tt

31、tt請輸入您的選擇:); scanf(%c,&c); if(c=1|c=2|c=e) flag=0; while(flag); return c;/修改景點(diǎn)信息 char Sightmenu()char c;int flag;doflag=1;system(cls); narrate(); printf(ntttn); printf(ttt n); printf(ttt 1、修改景點(diǎn)名稱 n); printf(ttt 2、修改景點(diǎn)描述 n); printf(ttt e、返回 n); printf(ttt n); printf(tttn); printf(tttt請輸入您的選擇:); scanf

32、(%c,&c); if(c=1|c=2|c=e) flag=0; while(flag); return c;/修改道路信息 void Changesight()int a,b,length;char sight100;char description1000;char p;char q;int i;int num;p=Changemenu();switch(p) case1:system(cls); narrate(); printf(nntt請輸入您要修改的景點(diǎn)編號:); scanf(%d,&num); for(i=0;iNUM;i+)if(G.vexi.number=num)q=Sigh

33、tmenu();if(q=1) printf(t請輸入修改后的景點(diǎn)名稱:nt); scanf(%s,&sight);strcpy(G.vexnum.sight,sight);printf(tttt修改成功!n);else if(q=2)printf(t請輸入修改后的景點(diǎn)信息:nt);scanf(%s,&description);strcpy(G.vexnum.description,description);printf(tttt修改成功!n);else if(q=e)p=Changemenu(); printf(ntt按任意鍵返回.); getchar(); getchar(); break; if(i=NUM) printf(nntttt沒有找到!); printf(nnttt按任意鍵返回.); getchar(); getchar(); break; case 2:printf(tt請輸入道路一側(cè)的景點(diǎn)序號:);scanf(%d,&a);printf(tt請輸入道路另一側(cè)的景點(diǎn)序號:);scanf(%d,&b);printf(tt請輸入修改后的道路長度:);scanf(%d,&length);G.arcsa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論