石家莊鐵道大學校園導游實習報告15800字_第1頁
石家莊鐵道大學校園導游實習報告15800字_第2頁
石家莊鐵道大學校園導游實習報告15800字_第3頁
石家莊鐵道大學校園導游實習報告15800字_第4頁
石家莊鐵道大學校園導游實習報告15800字_第5頁
已閱讀5頁,還剩24頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

石家莊鐵道大學校園導游實習報告15800字

校園導游程序班級:數0701姓名:學號:20072551日期:09-6-26實習一1.需求分析編寫一個程序,可以用程序實現校園景點平面圖的展示,游客可以通過此系統進行景點信息查詢、游覽路徑查詢等。①輸入的形式和輸入值的范圍:查看所有游覽路線時,輸入所要查看景點的編號,其范圍是0~9;選擇出發地和目的地時,輸入其編號,范圍0~9。②輸出的形式:查看全景時,通過圖表的形式輸出,查看路線和選擇地點時,輸出的是景點和距離。③程序所達到的功能:瀏覽全景、查看所有游覽路線、選擇最短路線,查詢景點信息。2.概要設計1)為了實現上述程序功能,需要定義的抽象數據類型:typedefstructArCell{intadj;//路徑長度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//判斷鄰接矩陣中兩個點是否相鄰//數據結構p161頁圖的存儲結構typedefstruct//圖中頂點表示主要景點,存放景點的編號、名稱、簡介等信息,{charname[30];intnum;charintroduction[100];//簡介}infotype;typedefstruct{infotypevexs[MAX_VERTEX_NUM];//該指針或該數組的相關信息AdjMatrixarcs;intvexnum,arcnum;}MGraph;MGraphb;2)本程序包含11個函數:(1)主函數voidmain(void)(2)顯示功能函數voidcmd(void);(3)初始化函數MGraphInitGraph(void);(4)顯示操作菜單函數voidMenu(void);(5)瀏覽函數voidBrowser(MGraph*G);(6)按DIJ最短路徑查詢函數voidShortestPath_DIJ(MGraph*G);(7)按Floyd最短路徑查詢函數voidFloyd(MGraph*G);(8)查詢的景點函數voidSearch(MGraph*G);(9)intLocateVex(MGraph*G,char*v);(10)初始化圖形,接受用戶輸入函數MGraph*CreatUDN(MGraph*G);(11)顯示景點間路徑長度函數voidprint(MGraph*G);各函數間關系如下:cmdBrowserMenuMainShortestPath_DIJFloyd*CreatUDNLocateVexSearchprint4.詳細設計1)結點類型和指針類型typedefstructArCell{intadj;//路徑長度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedefstruct//圖中頂點表示主要景點,存放景點的編號、名稱、簡介等信息,{charname[30];intnum;charintroduction[100];//簡介}infotype;typedefstruct{infotypevexs[MAX_VERTEX_NUM];AdjMatrixarcs;intvexnum,arcnum;}MGraph;2)單鏈表的基本操作voidmenu()(偽碼算法)InitGraph(&L,pos,&e)(偽碼算法)LocateVex(MGraph*G,char*v)(偽碼算法)3)其他模塊偽碼算法5源程序代碼#defineINFINITY10000/*無窮大*/#defineMAX_VERTEX_NUM40//與AdjList等價adjlist鄰接矩陣轉化為鄰接表#defineMAX40#include<stdlib.h>#include<stdio.h>#include<conio.h>#include<string.h>typedefstructArCell{intadj;//路徑長度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//判斷鄰接矩陣中兩個點是否相鄰//數據結構p161頁圖的存儲結構typedefstruct//圖中頂點表示主要景點,存放景點的編號、名稱、簡介等信息,{charname[30];intnum;charintroduction[100];//簡介}infotype;typedefstruct{infotypevexs[MAX_VERTEX_NUM];//該指針或該數組的相關信息AdjMatrixarcs;intvexnum,arcnum;}MGraph;MGraphb;voidcmd(void);//意思為空的返回值void說明沒有返回值類型//C語言可以不寫,如://main()//{//}//因為默認是沒有返回值的//但C++中必須指明MGraphInitGraph(void);//hai數緊接著被用到voidMenu(void);voidBrowser(MGraph*G);voidShortestPath_DIJ(MGraph*G);voidFloyd(MGraph*G);voidSearch(MGraph*G);intLocateVex(MGraph*G,char*v);MGraph*CreatUDN(MGraph*G);voidprint(MGraph*G);/******************************************************/voidmain(void){system("color3f");system("modecon:cols=120lines=50");cmd();用cmd函數下面就是cmd函數}/******************************************************/voidcmd(void){inti;b=InitGraph();//調用雙void函數Menu();//調用menu函數scanf("%d",&i);while(i!=5){switch(i)//開始成批的調用函數{case1:system("cls");Browser(&b);Menu();break;case2:system("cls");ShortestPath_DIJ(&b);Menu();break;case3:system("cls");Floyd(&b);Menu();break;case4:system("cls");Search(&b);Menu();break;case5:exit(1);break;default:break;}scanf("%d",&i);}}//雙VOID函數結束。。。。。。。說明雙void也是起框架作用的函數MGraphInitGraph(void){MGraphG;inti,j;G.vexnum=10;G.arcnum=14;for(i=0;i<G.vexnum;i++)G.vexs[i].num=i;//vexs[MAX_VERTEX_NUM]上面這樣定義的strcpy(G.vexs[0].name,"綜合食堂");strcpy(G.vexs[0].introduction,"新建標準化食堂");strcpy(G.vexs[1].name,"東西辦公樓");strcpy(G.vexs[1].introduction,"全體教師辦公場所,樓高12層,各種設施齊全");strcpy(G.vexs[2].name,"7號學生宿舍樓");strcpy(G.vexs[2].introduction,"數理系男生宿舍樓,蘇式建筑");strcpy(G.vexs[3].name,"醫院");strcpy(G.vexs[3].introduction,"校醫院,設施不是很齊全,只能看小病,收費較貴");strcpy(G.vexs[4].name,"圖書館");strcpy(G.vexs[4].introduction,"藏書60萬冊,設施良好,2樓為電子閱覽室,環境幽雅");strcpy(G.vexs[5].name,"足球場");strcpy(G.vexs[5].introduction,"現代化塑膠跑道,人造草坪,適宜鍛煉身體的場所");strcpy(G.vexs[6].name,"沁園");strcpy(G.vexs[6].introduction,"綠樹成蔭,適宜休息和讀書");strcpy(G.vexs[7].name,"主教學樓");strcpy(G.vexs[7].introduction,"學院最大的教學樓,共5層,環形建筑,適宜學習");strcpy(G.vexs[8].name,"西教學樓");strcpy(G.vexs[8].introduction,"學院第二大教學樓,環境較差");strcpy(G.vexs[9].name,"多媒體樓");strcpy(G.vexs[9].introduction,"多媒體教學場所,設施先進,環境良好");for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[i][j].adj=INFINITY;G.arcs[0][1].adj=100;G.arcs[0][2].adj=150;G.arcs[0][3].adj=195;G.arcs[1][6].adj=210;G.arcs[1][3].adj=100;G.arcs[1][2].adj=180;G.arcs[2][3].adj=150;G.arcs[2][5].adj=350;G.arcs[3][4].adj=100;G.arcs[3][6].adj=110;G.arcs[4][6].adj=20;G.arcs[4][5].adj=100;G.arcs[4][9].adj=80;G.arcs[4][8].adj=130;G.arcs[5][9].adj=150;G.arcs[5][8].adj=200;G.arcs[6][8].adj=80;G.arcs[6][7].adj=80;G.arcs[6][9].adj=70;G.arcs[7][8].adj=80;G.arcs[7][9].adj=90;G.arcs[8][9].adj=150;for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[j][i].adj=G.arcs[i][j].adj;returnG;}//InitGraphendvoidMenu(){printf("\n石家莊鐵道學院導游圖\n");printf("┏━━━━━━━━━━━━━━━━━━━━┓\n");printf("┃1.瀏覽校園全景┃\n");printf("┃2.查看所有游覽路線┃\n");printf("┃3.選擇出發點和目的地┃\n");printf("┃4.查看景點信息┃\n");printf("┃5.退出系統┃\n");printf("┗━━━━━━━━━━━━━━━━━━━━┛\n");printf("Option-:");}voidBrowser(MGraph*G){intv;printf("┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("┃編號┃景點名稱┃簡介┃\n");for(v=0;v<G->vexnum;v++)printf("┃%-4d┃%-16s┃%-56s┃\n",G->vexs[v].num,G->vexs[v].name,G->vexs[v].introduction);printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("┃┃\n");printf("┃┏━━━━┓┏━━━━━━━━━━━━━┓┃\n");printf("┃┃5足球場┣━━━━━┓┃┏━━━━━━━━┓┃┃\n");printf("┃┗━━━━┛┣━━━━━━━━━━━━━━━━━╋┫2七號學生宿舍樓┃┃┃\n");printf("┃┃┏━━━━┓┏━━━┓┃┗━━━━━━━━┛┃┃\n");printf("┃┃┃4圖書館┃┃3醫院┃┃┃┃\n");printf("┃┃┗━━┳━┛┗━┳━┛┃┃┃\n");printf("┃┃┃┃┃┏━┻━━━┓┃\n");printf("┃┏━━━━━╋━━━━╋━━━━━━━━━┻━┳┻━━━━━━━━━┳━┫0綜合食堂┃┃\n");printf("┃┏━━┻━━┓┃┏━┻━┓┃┏━━━━━━┓┃┗━━━━━┛┃\n");printf("┃┃9多媒體樓┃┃┃6沁園┣━━━━━━━━━┻━━┫1東西辦公樓┣┫┃\n");printf("┃┗━━━━━┛┃┗━┳━┛┗━━━━━━┛┃┃\n");printf("┃┏━━━━━┓┣━━━━┻━━┓┃┃\n");printf("┃┃8西教學樓┃┃┏━━┻━━┓┃┃\n");printf("┃┗━━┳━━┛┃┃7主教學┃┃┃\n");printf("┃┃┃┗━━┳━━┛┃┃\n");printf("┃┗━━━━━┻━━━━━━━┻━━━━━━━━━━━━━━━━━━━┛┃\n");printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");}//迪杰斯特拉算法來計算出起點到各個頂點之間的最短路徑,v0為起點voidShortestPath_DIJ(MGraph*G){intv,w,i,min,t=0,x,flag=1,v0;intfinal[20],D[20],p[20][20];while(flag)//while保證輸入的數值在確定范圍內的{printf("請輸入一個起始景點編號:");scanf("%d",&v0);if(v0<0||v0>G->vexnum){printf("景點編號不存在!請重新輸入景點編號:");scanf("%d",&v0);}if(v0>=0&&v0<G->vexnum)flag=0;}//intv,w,i,min,t=0,x,flag=1,v0;//intfinal[20],D[20],p[20][20];for(v=0;v<G->vexnum;v++){final[v]=0;//當結果是1時說明已經求得v0到v的最短路徑D[v]=G->arcs[v0][v].adj;for(w=0;w<G->vexnum;w++)p[v][w]=0;//p[v][w]=1說明w是從v0到v當前求得最短路徑上的頂點if(D[v]<INFINITY){p[v][v0]=1;p[v][v]=1;}}D[v0]=0;final[v0]=1;//初始化v0頂點集為s//開始主循環,每次求得v0到某一v頂點的最短路徑,并加v到sfor(i=1;i<G->vexnum;i++)//其余G->vexnum-1個頂點{min=INFINITY;//當前所知離v0最近的距離for(w=0;w<G->vexnum;w++)if(!final[w])//確保定點w是存在是所求的if(D[w]<min){v=w;min=D[w];}//如果w點離v0更近則替換final[v]=1;//標識為離v0最近的v加入s集合for(w=0;w<G->vexnum;w++)//更新當前最短路徑及距離if(!final[w]&&(min+G->arcs[v][w].adj<D[w])){D[w]=min+G->arcs[v][w].adj;//實現累加過成for(x=0;x<G->vexnum;x++)?p[w][x]=p[v][x];p[w][w]=1;}}for(v=0;v<G->vexnum;v++){if(v0!=v)printf("%s",G->vexs[v0].name);for(w=0;w<G->vexnum;w++){if(p[v][w]&&w!=v0)printf("-->%s",G->vexs[w].name);t++;}if(t>G->vexnum-1&&v0!=v)printf("總路線長%dm\n\n",D[v]);}}//ShortestPath_DIJendvoidFloyd(MGraph*G)//求每一對頂點之間最短路徑//求有向圖中各對頂點v和w之間的最短路徑p[v][w]及帶權長度D[v][w]。//若p[v][w][u]=1則u是從v到w當前求得最短路徑上的頂點{intv,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];for(v=0;v<G->vexnum;v++)//各對結點之間初始已知路徑及距離for(w=0;w<G->vexnum;w++){D[v][w]=G->arcs[v][w].adj;for(u=0;u<G->vexnum;u++)p[v][w][u]=0;if(D[v][w]<INFINITY)//從v到w有直接路徑{p[v][w][v]=1;p[v][w][w]=1;}}for(u=0;u<G->vexnum;u++)for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++)if(D[v][u]+D[u][w]<D[v][w])//有一條路徑更短{D[v][w]=D[v][u]+D[u][w];//u就是那個捷徑之間點for(i=0;i<G->vexnum;i++)//又有什么用呢????p[v][w][i]=p[v][u][i]||p[u][w][i];}while(flag){printf("請輸入出發點和目的地的編號:");scanf("%d%d",&k,&j);if(k<0||k>G->vexnum||j<0||j>G->vexnum){printf("景點編號不存在!請重新輸入出發點和目的地的編號:");scanf("%d%d",&k,&j);}if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)flag=0;}printf("%s",G->vexs[k].name);if(k<j){for(u=0;u<G->vexnum;u++)if(p[k][j][u]&&k!=u&&j!=u)printf("-->%s",G->vexs[u].name);printf("-->%s",G->vexs[j].name);printf("總路線長%dm\n",D[k][j]);}if(j<k){for(u=G->vexnum;u>=0;u--)if(p[k][j][u]&&k!=u&&j!=u)printf("-->%s",G->vexs[u].name);printf("-->%s",G->vexs[j].name);printf("總路線長%dm\n",D[k][j]);}printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("┃┃\n");printf("┃┏━━━━┓┏━━━━━━━━━━━━━┓┃\n");printf("┃┃5足球場┣━━━━━┳━━━━━━━━━━━━━━━━━┫┏━━━━━━━━┓┃┃\n");printf("┃┗━━━━┛┃┣┫2七號學生宿舍樓┃┃┃\n");printf("┃┃┏━━━━┓┏━━━┓┃┗━━━━━━━━┛┃┃\n");printf("┃┃┃4圖書館┃┃3醫院┃┃┃┃\n");printf("┃┃┗━━┳━┛┗━┳━┛┃┃┃\n");printf("┃┃┃┃┃┏━┻━━━┓┃\n");printf("┃┏━━━━━╋━━━━╋━━━━━━━━━┻━┳┻━━━━━━━━━┳━┫0綜合食堂┃┃\n");printf("┃┏━━┻━━┓┃┏━┻━┓┃┏━━━━━━┓┃┗━━━━━┛┃\n");printf("┃┃9多媒體樓┃┃┃6沁園┣━━━━━━━━━┻━━┫1東西辦公樓┣┫┃\n");printf("┃┗━━━━━┛┃┗━┳━┛┗━━━━━━┛┃┃\n");printf("┃┏━━━━━┓┣━━━━┻━━┓┃┃\n");printf("┃┃8西教學樓┃┃┏━━┻━━┓┃┃\n");printf("┃┗━━┳━━┛┃┃7主教學┃┃┃\n");printf("┃┃┃┗━━┳━━┛┃┃\n");printf("┃┗━━━━━┻━━━━━━━┻━━━━━━━━━━━━━━━━━━━┛┃\n");printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");}//FloydendvoidSearch(MGraph*G){intk,flag=1;while(flag){printf("請輸入要查詢的景點編號:");scanf("%d",&k);if(k<0||k>G->vexnum){printf("景點編號不存在!請重新輸入景點編號:");scanf("%d",&k);}if(k>=0&&k<G->vexnum)flag=0;}printf("┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("┃編號┃景點名稱┃簡介┃\n");printf("┃%-4d┃%-16s┃%-56s┃\n",G->vexs[k].num,G->vexs[k].name,G->vexs[k].introduction);printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");}//SearchendintLocateVex(MGraph*G,char*v){intc=-1,i;for(i=0;i<G->vexnum;i++)if(strcmp(v,G->vexs[i].name)==0){c=i;break;}returnc;}MGraph*CreatUDN(MGraph*G)//初始化圖形,接

溫馨提示

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

評論

0/150

提交評論