![校園導游咨詢系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計說明書_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/10/c6a2b8b0-63ae-44f1-915e-7c084dfd94a8/c6a2b8b0-63ae-44f1-915e-7c084dfd94a81.gif)
![校園導游咨詢系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計說明書_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/10/c6a2b8b0-63ae-44f1-915e-7c084dfd94a8/c6a2b8b0-63ae-44f1-915e-7c084dfd94a82.gif)
![校園導游咨詢系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計說明書_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/10/c6a2b8b0-63ae-44f1-915e-7c084dfd94a8/c6a2b8b0-63ae-44f1-915e-7c084dfd94a83.gif)
![校園導游咨詢系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計說明書_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/10/c6a2b8b0-63ae-44f1-915e-7c084dfd94a8/c6a2b8b0-63ae-44f1-915e-7c084dfd94a84.gif)
![校園導游咨詢系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計說明書_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/10/c6a2b8b0-63ae-44f1-915e-7c084dfd94a8/c6a2b8b0-63ae-44f1-915e-7c084dfd94a85.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、中北大學數(shù) 據(jù) 結(jié) 構(gòu)課 程 設(shè) 計 說 明 書學生姓名:劉安光學 號:1507084143學生姓名:劉晨馨學 號:1507084103學生姓名:古文慧學 號:1507084118學生姓名:周順帆學 號:1507084114學 院:計算機與控制工程學院專 業(yè):網(wǎng)絡(luò)工程專業(yè)題 目:校園導游咨詢系統(tǒng)指導教師梁志劍、張建華2016 年 12月30日目錄1設(shè)計目的12設(shè)計內(nèi)容13設(shè)計要求14模塊分工15數(shù)據(jù)結(jié)構(gòu)26詳細設(shè)計36.1 主函數(shù)模塊36.1.1 詳細設(shè)計思想36.1.2 核心代碼46.2 圖的建立模塊46.2.1詳細設(shè)計思想46.2.2 核心代碼56.3 信息查詢模塊66.3.1詳細設(shè)計思想
2、66.3.2 核心代碼76.4 兩景點最短路徑模塊86.4.1詳細設(shè)計思想86.4.2 核心代碼106.5 多景點最佳路徑模塊126.5.1詳細設(shè)計思想126.5.2 核心代碼126.6 求圖的關(guān)節(jié)點模塊136.6.1詳細設(shè)計思想136.6.2 核心代碼156.7 兩景點所有路徑模塊176.7.1詳細設(shè)計思想176.7.2 核心代碼186.8 游客及管理員菜單模塊196.8.1詳細設(shè)計思想196.8.2 核心代碼207源碼文件257.1 源碼257.2 文本文件307.2.1 map.txt307.2.2 liuyan.txt318運行截圖328.1 主菜單界面與功能一覽328.2 中北校園景
3、點信息查詢328.3 兩景點間最短路徑查詢328.4 兩景點間所有路徑查詢338.5 多景點間訪問路線查詢338.6 輸出校園景點圖關(guān)節(jié)點338.7 公告查看及游客留言欄348.8 景點管理員后臺管理欄358.9 退出校園導游咨詢系統(tǒng)369經(jīng)驗總結(jié)379.1 關(guān)于分工379.2 關(guān)于答辯371設(shè)計目的數(shù)據(jù)結(jié)構(gòu)課程主要介紹最常用的數(shù)據(jù)結(jié)構(gòu),闡明各種數(shù)據(jù)結(jié)構(gòu)內(nèi)在的邏輯關(guān)系,討論其在計算機中的存儲表示,以及在其上進行各種運算時的實現(xiàn)算法,并對算法的效率進行簡單的分析和討論。進行數(shù)據(jù)結(jié)構(gòu)課程設(shè)計要達到以下目的:(1)了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨立分析和設(shè)計能力;(2)初步掌握軟件開
4、發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基本方法和技能;(3)提高綜合運用所學的理論知識和方法獨立分析和解決問題的能力;訓練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進行軟件開發(fā),培養(yǎng)軟件工作者所應具備的科學的工作方法和作風。2設(shè)計內(nèi)容設(shè)計一個校園導游程序,為來訪的客人提供各種信息查詢服務。(1)設(shè)計中北大學的校園平面圖,所含景點不少于10個,以圖中頂點表示校內(nèi)各景點,存放景點名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等相關(guān)信息。(2)為來訪客人提供圖中任意景點相關(guān)信息的查詢。(3)為來訪客人提供圖中任意景點的問路查詢,即查詢?nèi)我鈨上嗑包c之間的一條最短的簡單路徑。(4)求校園圖的關(guān)節(jié)點。(5)
5、提供圖中任意景點問路查詢,即求任意兩個景點之間的所有路徑。(6)提供校園圖中多個景點的最佳訪問路線查詢,即求途經(jīng)這多個景點的最佳路徑。3設(shè)計要求(1)符合課題要求,實現(xiàn)相應功能;(2)要求界面友好美觀,操作方便易行;(3)注意程序的實用性、安全性;4模塊分工劉安光:主函數(shù)模塊、求圖的關(guān)節(jié)點模、兩景點所有路徑模塊。劉晨馨:兩景點最短路徑模塊、多景點最佳路徑模塊。古文慧:游客菜單模塊、管理員菜單模塊。周順帆:圖的建立及輸出模塊、信息查詢模塊。5數(shù)據(jù)結(jié)構(gòu)該程序用到的是圖的數(shù)據(jù)結(jié)構(gòu),其中用到的是圖的鄰接矩陣存儲結(jié)構(gòu)。#define INFINITY 9999 /*此處用9999代表無窮大*/#defi
6、ne M 20 /*最大頂點數(shù)*/typedef struct /*景點信息結(jié)構(gòu)定義*/int num; /*景點代號*/char name20; /*景點名稱*/char intro200; /*景點簡介*/vertexType; /*鄰接矩陣頂點結(jié)構(gòu)*/typedef int edgeType; /*權(quán)值類型*/typedef struct /*校園景點圖結(jié)構(gòu)體定義*/vertexType vexsM; /*頂點值類型*/edgeType edgsMM; /*邊權(quán)值類型-距離*/ int vexNum, edgNum; /*圖頂點總數(shù)與邊數(shù)*/mgraphType; /*鄰接矩陣結(jié)構(gòu)*/*
7、函數(shù)一覽表*/void main(); /*主函數(shù)*/ int Menu(); /*主菜單*/void Creat_Map(mgraphType *g); /*從文件讀取信息建立圖*/void Dis_Map(); /*顯示校園景點地圖*/void Admin_Menu(mgraphType *g); /*管理員菜單*/void Tour_Menu(mgraphType *g); /*游客菜單*/ int Judeg_Innum(int num); /*判斷輸入的編號是否合理*/void Search_Intro(mgraphType *g); /*景點信息查詢*/void ShortestP
8、ath_FLD(mgraphType *g); /*弗洛伊德算法求景點間最短的路徑*/void Floyd_Print(mgraphType,int,int); /*遞歸實現(xiàn)打印兩點間的最短路徑*/void ShortestPath_Print(mgraphType); /*輸出并打印兩點間的最短路徑*/void Dfs_Allpath(mgraphType,int,int); /*深度優(yōu)先遍歷查詢兩景點間所有路徑*/void Allpath_Print(mgraphType *g); /*查詢兩景點之間的所有路徑并打印*/void Bestpath_Multispot(mgraphType)
9、; /*多景點間求最佳路徑*/void Dfs_Coila(mgraphType *g, int i); /*深度遍歷找關(guān)節(jié)點*/void Coila_Query(mgraphType *g); /*求校園交通圖關(guān)節(jié)點*/void System_Exit(int *quit); /*退出系統(tǒng)函數(shù)*/6詳細設(shè)計6.1 主函數(shù)模塊 詳細設(shè)計思想圖1 主函數(shù)模塊6.1.2 核心代碼/*主函數(shù)*/void main()int quit=0;mgraphType g; Creat_Map(&g); /*從文件讀取信息建立圖*/ ShortestPath_FLD(&g); /*floyed求dist與pa
10、th*/ while(!quit) /*系統(tǒng)退出條件滿足判定*/ switch(menu() /*打印主菜單等待輸入項*/ case 1: Dis_Map();Search_Intro(&g);break; /*中北校園景點信息查詢*/ case 2: Dis_Map();ShortestPath_Print(&g); break;/*兩景點間最短路徑查詢*/ case 3: Dis_Map();Allpath_Print(&g); break; /*兩景點間所有路徑查詢*/ case 4: Dis_Map();Bestpath_Multispot(&g);break; /*多景點間訪問路線查
11、詢*/ case 5: Dis_Map();Coila_Query(&g);break; /*輸出校園景點圖關(guān)節(jié)點*/ case 6: Dis_Map();Tour_Menu(&g);break; /*公告查看及游客留言欄*/ case 7: Dis_Map();Admin_Menu(&g);break; /*景點管理員后臺管理欄*/ case 8: System_Exit(&quit);break; /*退出校園導游咨詢系統(tǒng)*/ default:printf(錯誤!沒有該選項對應的操作。);/*按錯選項反饋錯誤信息*/ system(pause); system(cls); 6.2 圖的建立
12、模塊6.2.1詳細設(shè)計思想當建立圖存儲結(jié)構(gòu)時,圖的信息以三元組(i,j,w)的形式輸入,i、j分別表示兩頂點的序號,w表示邊權(quán)。圖的頂點信息則時按照編號、名字、簡介的方式的方式在文件中存儲。先初始化鄰接矩陣,然后打開文件,若文件不為空則先讀入頂點數(shù)與邊數(shù)信息,然后按文件中所給信息初始化鄰接矩陣的每個頂點,處理完定點后,把文件中的邊權(quán)信息讀入到鄰接矩陣中建立無向圖,最后關(guān)閉文件,以待稍后輸出。如果文件不能打開,將無向圖的頂點賦值為零。具體流程如下圖(圖2 圖的建立)所示。圖2 圖的建立6.2.2 核心代碼/*校園景點圖的讀取與創(chuàng)建*/void Creat_Map(mgraphType *g) /
13、*從文件讀取圖的信息并建立圖*/ int i, j, k, e; FILE *rf; /*定義帶緩沖的文件指針*/rf = fopen(map.txt,r); /*從文件讀取圖的邊信息*/if(rf) /*讀入圖的頂點數(shù)和邊數(shù)*/fscanf(rf,%d%d,&g-vexNum, &g-edgNum); /*讀入圖的頂點數(shù)與邊數(shù)*/for(i=0; ivexNum; i+) /*讀入圖的頂點信息*/fscanf(rf,%d%s%s,&g-vexsi.num,,ro);for(i=0; ivexNum; i+) /*初始化領(lǐng)接矩陣*/for(j=0;
14、 jvexNum; j+)if(i=j) g-edgsij=0; /*到本點的距離為0其余不可達*/else g-edgsij=INFINITY;for(k=0; kedgNum; k+) /*讀入圖的邊權(quán),建立無向圖*/fscanf(rf,%d%d%d,&i,&j,&e); /*文件以三元組形式存儲圖信息*/g-edgsij=g-edgsji=e; /*建立無向圖*/fclose(rf); /*關(guān)閉文件*/else g-edgNum=0;6.3 信息查詢模塊6.3.1詳細設(shè)計思想信息查詢?yōu)楸境绦蚬δ芤?,在運行此功能時需要用到Judeg_Innum函數(shù)。先提示用戶按顯示的地圖上的景點輸入對應的
15、編號進行查詢。等待用戶輸入完編號后,讀入游客輸入要查詢的景點編號,然后用Judeg_Innum函數(shù)判斷輸入的編號,如果游客輸入值為-1,表示用戶結(jié)束輸入,則Judeg_Innum函數(shù)返回-1并結(jié)束信息查詢。如果游客輸入值不為-1,判斷游客輸入值是否合理(即是否在1-12范圍類以及對應景點是否關(guān)閉),不合理的話提示游客輸入有誤,返回1,等待用戶再次輸入。如果游客輸入正確的話,再次判斷查詢的景點是否關(guān)閉,如果景點關(guān)閉,輸出景點關(guān)閉及原因并返回1。如果Judeg_Innum函數(shù)返回值為1,跳回開始,返回值不為-1和1,輸出景點名稱簡介并結(jié)束。流程圖如下圖(圖3 信息查詢)所示。圖3 信息查詢6.3.
16、2 核心代碼/*景點信息查詢*/void Search_Intro(mgraphType *g) int s;doprintf(n請輸入你要查找的景點編號:);scanf(%d,&s); /*輸入的編號比實際景點編號大1*/while(judeg_Innum(s);printf(n景點名稱:%snn,);printf(景點簡介: %snn,ro);/*判斷用戶輸入的編號是否合理及對應景點是否開放*/int judeg_Innum(int num)int i=0;if(num=-1) return i;if(num12)printf(nttt
17、你輸入的景點編號有誤,請輸入1-12之間的數(shù)!nn);i=1;else if (cloNumnum-1.close=INFINITY)printf(nttt%s暫時無法游覽!n,cloN);printf(ntt關(guān)閉原因:%sn,cloNumnum-1.reason);i=1;return i;6.4 兩景點最短路徑模塊6.4.1詳細設(shè)計思想用floyed算法通過一個圖的權(quán)值矩陣求出它的每兩點間的最短路徑矩陣。從圖的帶權(quán)鄰接矩陣A=a(i,j) nn開始,遞歸地進行n次更新,即由矩陣D(0)=A,按一個公式,構(gòu)造出矩陣D(1);又用同樣地公式由D(1)構(gòu)造出D(2);最后
18、又用同樣的公式由D(n-1)構(gòu)造出矩陣D(n)。矩陣D(n)的i行j列元素便是i號頂點到j(luò)號頂點的最短路徑長度,稱D(n)為圖的距離矩陣,同時還可引入一個后繼節(jié)點矩陣path來記錄兩點間的最短路徑。具體算法思想如下:(1)從任意一條單邊路徑開始。所有兩點之間的距離是邊的權(quán),如果兩點之間沒有邊相連,則權(quán)為無窮大。(2)對于每一對頂點 u 和 v,看看是否存在一個頂點 w 使得從 u 到 w 再到 v 比已知的路徑更短。如果是更新它。(3)把圖用鄰接矩陣G表示出來,如果從Vi到Vj有路可達,則Gij=d,d表示該路的長度;否則Gij=無窮大。定義一個矩陣D用來記錄所插入點的信息,Dij表示從Vi到
19、Vj需要經(jīng)過的點,初始化Dij=j。把各個頂點插入圖中,比較插點后的距離與原來的距離,Gij = min( Gij, Gik+Gkj ),如果Gij的值變小,則Dij=k。在G中包含有兩點之間最短道路的信息,而在D中則包含了最短通路徑的信息。比如,要尋找從V5到V1的路徑。根據(jù)D,假如D(5,1)=3則說明從V5到V1經(jīng)過V3,路徑為V5,V3,V1,如果D(5,3)=3,說明V5與V3直接相連,如果D(3,1)=1,說明V3與V1直接相連。進入該功能時,系統(tǒng)會首先提醒用戶輸入起點與終點編號,具體流程如圖5所示,待編號無誤后,利用floyed算法得出兩點間最短距離,算法流程如下。圖4 弗洛伊德
20、算法求兩景點間的一條最短的路徑圖5 輸出并打印兩點間的最短路徑6.4.2 核心代碼/*弗洛伊德算法求兩景點間的一條最短的路徑*/int distMM; /*距離向量類型*/int pathMM; /*路徑類型*/void ShortestPath_FLD(mgraphType *g) /*弗洛伊德算法求兩景點間的一條最短的路徑并輸出所經(jīng)結(jié)點*/int i, j, k;for(i=0; ivexNum; i+) /*初始化距離向量與路徑向量矩陣*/for(j=0; jvexNum; j+)distij=g-edgsij;if(i!=j&distijINFINITY) pathij=i;else
21、pathij=-1; /*-1代表當前兩點不可達*/for(k=0; kvexNum; k+) /*遞推求解每兩景點的最短路徑*/for(i=0; ivexNum; i+)for(j=0; jvexNum; j+) /*更新distij的值*/if(distij(distik+distkj)distij=distik+distkj; pathij=k; /*path用于記錄最短路徑上的結(jié)點*/*遞歸實現(xiàn)打印兩點間的最短路徑*/void Floyd_Print(mgraphType *g, int sNum, int eNum) if(pathsNumeNum=-1|pathsNumeNum=e
22、Num|pathsNumeNum=sNum) return;else Floyd_Print(g,sNum,pathsNumeNum ); /*將中間點作為終點繼續(xù)打印路徑*/printf(%s-,g-vexspathsNumeN); /*打印中間景點名字*/Floyd_Print(g,pathsNumeNum,eNum); /*將中間點作為起點繼續(xù)打印路徑*/6.5 多景點最佳路徑模塊6.5.1詳細設(shè)計思想用戶依次輸入節(jié)點編號,即游覽順序。根據(jù)Floyd算法,算出第一個景點和第二個景點的最短路徑,依次類推,算出多景點的最短路徑。具體流程如下圖所示。圖6 多景點求最佳路徑6.5.
23、2 核心代碼/*多景點間求最佳路徑*/void Bestpath_Multispot(mgraphType *g) int vNumM=0,j=1; /*記錄用戶輸入的編號信息*/int d=0; /*統(tǒng)計全程總長*/printf(請輸入你要游覽的第%d個景點的編號(輸入-1結(jié)束輸入):,j);scanf(%d,&vNumj-1);while(vNumj-1!=-1&j0&vNumi+10; i+)printf(%s-,g-vexsvN); /*輸出路徑上的起點*/Floyd_Print(g,vNumi-1,vNumi+1-1); /*利用佛洛依德算法*/d+=distvN
24、umi-1vNumi+1-1;printf(%snn,g-vexsvN); /*輸出路徑上的終點*/printf(全程總長為:%dmnn,d);6.6 求圖的關(guān)節(jié)點模塊6.6.1詳細設(shè)計思想通過深搜優(yōu)先生成樹來判定。從任一點出發(fā)深度優(yōu)先遍歷得到優(yōu)先生成樹,對于樹中任一頂點而言,其孩子節(jié)點為鄰接點。由深度優(yōu)先生成樹可得出兩類割點的特性:()若生成樹的根有兩棵或兩棵以上的子樹,則此根頂點必為割點。因為圖中不存在連接不同子樹頂點的邊,若刪除此節(jié)點,則樹便成為森林;()若生成樹中某個非葉子頂點V,其某棵子樹的根和子樹中的其他節(jié)點均沒有指向V的祖先的回邊,則V為割點。因為刪去v,
25、則其子樹和圖的其它部分被分割開來。仍然利用深搜算法,只不過在這里定義visitedv表示為深度優(yōu)先搜索遍歷圖時訪問頂點v的次序號,定義lowv=Minvisitedv,loww,visitedk,其中w是頂點v在深度優(yōu)先生成樹上的孩子節(jié)點;k是頂點v在深度優(yōu)先生成樹上由回邊聯(lián)結(jié)的祖先節(jié)點。割點判定條件:如果對于某個頂點v,存在孩子節(jié)點w且loww=visitedv,則該頂點v必為關(guān)節(jié)點。因為當w是v的孩子節(jié)點時,loww=visitedv,表明w及其子孫均無指向v的祖先的回邊,那么當刪除頂點v后,v的孩子節(jié)點將于其他節(jié)點被分割開來,從來形成新的連通分量。流程圖如下。圖7 深度遍歷找關(guān)節(jié)點圖8
26、求校園交通圖關(guān)節(jié)點6.6.2 核心代碼/*深度遍歷找關(guān)節(jié)點*/#define ROOT -1 /*根節(jié)點標記*/ #define COILA 1 /*關(guān)節(jié)點標記*/int visiM,coilaM=0; /*根節(jié)點標記或訪問標記及關(guān)節(jié)點*/int coilaNum; /*統(tǒng)計校園圖關(guān)節(jié)點數(shù)目*/void Dfs_Coila(mgraphType *g, int i) int child=0; /*用于統(tǒng)計結(jié)點子樹數(shù)目*/if(visii!=ROOT)visii=1; /*將不是根結(jié)點的i結(jié)點標記為已訪問*/for(int j=0; jvexNum; j+) if(g-edgsij!= 0 &
27、g-edgsij!= INFINITY & !visij) /*表明i結(jié)點與j結(jié)點之間可達,且j結(jié)點未被訪問*/child+; /*i結(jié)點子樹加一*/Dfs_Coila(g, j); /*遞歸,對j結(jié)點執(zhí)行同樣的操作*/if(visii = ROOT & child = 2) /*若該點是根并有大于等于2的子樹*/ coilaNum+; /*關(guān)節(jié)點總數(shù)加一*/ coilai=COILA; /*將該點標記為關(guān)節(jié)點*/ /*求校園交通圖關(guān)節(jié)點*/void Coila_Query(mgraphType *g) /*關(guān)節(jié)點查詢*/coilaNum = 0; /*關(guān)節(jié)點數(shù)目初始化*/ for(int i
28、=0; ivexNum; i+) /*對每個結(jié)點進行DFS*/memset(visi, 0, sizeof(visi); /*標記數(shù)組初始化*/visii = ROOT; /*DFS之前,將該點標記為根節(jié)點*/ Dfs_Coila(g, i); /*深度遍歷找關(guān)節(jié)點*/printf(ttt校園圖的關(guān)節(jié)點個數(shù)為:%dnnttt分別為:, coilaNum);for(int i=0; ivexNum; i+) /*遍歷輸出關(guān)節(jié)點*/ if(coilai = COILA) printf(%st, ); 6.7 兩景點所有路徑模塊6.7.1詳細設(shè)計思想兩景點間所有路徑的查詢依然
29、是采用的DFS算法,每一次將起點壓入棧內(nèi),并將其標記為已訪問,然后檢查其是否有未訪問的鄰接點,然后將其鄰接點作為起點采取深度搜索做相同的操作,若遇到路不通的時候,依次將棧內(nèi)的點推出,找其下一個未訪問的鄰接點,直到找到終點,算法結(jié)束。算法結(jié)合DFS與遞歸的方式,效率不高但很容易理解,具體實現(xiàn)如下圖所示。圖9 深度優(yōu)先遍歷查詢?nèi)我鈨蓚€景點之間的所有路徑6.7.2 核心代碼/*深度優(yōu)先遍歷查詢?nèi)我鈨蓚€景點之間的所有路徑*int pathStackM,top,count /*路徑棧,棧頂及路徑計數(shù)器*/int visitedM /*入棧(訪問)標記*/ void Dfs_Allpath(mgraphT
30、ype *g,int sNum, int eNum)int dis=0;pathStacktop=sNum; top+; /*將本趟起點入棧*/visitedsNum=1; /*將入棧點標記為已入棧*/for(int i=0; ivexNum; i+) /*表明兩點可達,且該點未未被訪問*/if(g-edgssNumi0&g-edgssNumi!=INFINITY&!visitedi) if(i=eNum) /*如果深搜到了終點,就輸出剛才的路徑*/printf(第%d條路:,count+);for(int j=0; j,g-vexspathS);if(jedgspathS
31、tackjpathStackj+1; dis=dis+g-edgspathStacktop-1eNum; printf(%sn,g-vexseN);printf(總長度是:%dmnn,dis);else /*如果該點不是終點,接著深度搜索*/Dfs_Allpath(g,i,eNum); top-; /*支路全被訪問一遍后,頂點出棧*/visitedi=0; /*將出棧點標記為已出棧,允許下次訪問*/6.8 游客及管理員菜單模塊6.8.1詳細設(shè)計思想游客菜單的功能有:1.查看公告、2.我要留言。分別對應查看管理員發(fā)布的公告以及留言給管理員的功能。這兩項功能的靈感均來自校園網(wǎng)認證的網(wǎng)
32、頁,登錄校園網(wǎng)時我們不僅能及時從公告中獲取很多重要消息,也能通過留言反饋功能反饋自己在使用校園網(wǎng)中遇到的問題,對于游客來說,同樣如此,所以這兩項功能是必要的。管理員菜單的功能有:1. 關(guān)閉某景點的游覽、2.恢復某景點的游覽、3.發(fā)布公告、4.查看游客留言。管理員菜單的功能主要體現(xiàn)在能夠關(guān)閉景點的游覽和發(fā)布公告,對于現(xiàn)實生活中,這兩項功能都是比較貼合實際的。這樣游客就能及時知道哪些景點不能游覽或者哪條路無法通行。具體實現(xiàn)如下方圖10及圖11所示。圖10 游客菜單圖11 管理員菜單6.8.2 核心代碼/*管理員菜單*/structchar name20;int close;int reason10
33、0;cloNumM;char Affiche200=NULL; /*公告*/void Admin_Menu(mgraphType *g)char buf1024; /*緩沖區(qū)*/int len; /*行字符個數(shù)*/FILE *fp;int s=1,num,account=0,password=0;while(account!=150708|password!=150708)printf(請輸入你的管理賬號:);scanf(%d,&account);printf(n請輸入你的管理密碼:);scanf(%d,&password);if(account!=150708|password!=15070
34、8)printf(tttt賬號或密碼錯誤,請重新輸入!n);elseprintf(nttttttt登錄成功!nn);Sleep (1000);while(s0&s5)system(cls);Dis_Map();printf(1.關(guān)閉景點2.恢復景點3.發(fā)布公告 4.查看留言 n);printf(tn請選擇你的操作(其余按鍵返回主菜單):);scanf(%d,&s);switch(s)case 1:printf(n請輸入你要關(guān)閉景點的編號:);scanf(%d,&num);if(num12) printf(ntttt對不起,沒有該編號對應的景點n);elsecloNumnum-1.close=I
35、NFINITY;strcpy(cloN,);printf(n關(guān)閉景點成功,請輸入關(guān)閉%s的原因:,);scanf(%s,cloNumnum-1.reason);printf(n關(guān)閉景點成功!n);system(pause);break;case 2:printf(n請輸入你要恢復景點的編號:);scanf(%d,&num);if(num12) printf(ntttt對不起,沒有該編號對應的景點n);elsecloNumnum-1.close=0;printf(nt%s景點恢復成功!n,g-vexsnum-
36、1.name);system(pause);break;case 3:printf(n請輸入公告內(nèi)容:);scanf(%s,Affiche);printf(ntttt公告發(fā)布成功!n);system(pause);break;case 4:if(fp = fopen(liuyan.txt,r) = NULL)printf(ntttt目前暫無游客留言);exit (1) ; printf(n以下是游客留言:n);while(fgets(buf,1024,fp) != NULL) /*gets讀取一行*/len = strlen(buf);buflen-1 = 0; /*去掉換行符*/printf
37、(t%sn,buf,len - 1);printf(n); system(pause); break;default:printf(n); /*游客菜單*/void Tour_Menu(mgraphType *g)int s=1,i=1;char ly250; FILE *fp; /*臨時存放用戶輸入的留言*/while(s0&s3)system(cls);Dis_Map();printf(n n);printf(t 1.查看公告 2.我要留言 n);printf(t n);printf(nt請選擇你的操作(其余按鍵返回主菜單):);scanf(%d,&s);switch(s)case 1:i
38、f(!strcmp(Affiche,NULL)printf(nttttt目前暫時無任何公告n);system(pause);else printf(nn公告內(nèi)容如下:nnt%snn,Affiche);system(pause);break;case 2:fp=fopen(liuyan.txt,a); /*以追加的方式添加文本*/while(i)printf(n請輸入你的留言:);scanf(%s,ly);time_t t; /*得到從標準計時點到當前時間的秒數(shù)*/struct tm *p;t=time(NULL);p=localtime(&t); /*時間轉(zhuǎn)換后賦給p*/fprintf(fp,
39、留言時間:%s留言內(nèi)容:%sn,asctime(p),ly);printf(n留言時間:%sn留言內(nèi)容:%s,asctime(p),ly);printf(nn是否要繼續(xù)留言(是:1 否:0):);scanf(%d,&i);fclose(fp);break;default:printf(nttttt 返回主菜單!n);7源碼文件Ps:從7開始以下內(nèi)容均不用在說明書中寫明,這里僅僅做補充作用,給大家一個參考。7.1 源碼源碼說明:因代碼過多,不得已將字體與行距和縮小,全程格式無更改,拷貝可用。編譯環(huán)境:vs201x#include #include #include #include #defin
40、e INFINITY 9999 /*此處用9999代表無窮大*/#define M 20 /*最大頂點數(shù)*/typedef struct /*景點信息結(jié)構(gòu)定義*/int num; /*景點代號*/char name20; /*景點名稱*/char intro200; /*景點簡介*/vertexType; /*鄰接矩陣頂點結(jié)構(gòu)*/typedef int edgeType; /*權(quán)值類型*/typedef struct /*校園景點圖結(jié)構(gòu)體定義*/vertexType vexsM; /*頂點值類型*/edgeType edgsMM; /*邊權(quán)值類型-距離*/ int vexNum, edgNum
41、; /*圖頂點總數(shù)與邊數(shù)*/mgraphType; /*函數(shù)一覽表*/void main(); /*主函數(shù)*/ int menu(); /*主菜單*/void Creat_Map(mgraphType *g); /*從文件讀取信息建立圖*/void Dis_Map(); /*顯示校園景點地圖*/void Admin_Menu(mgraphType *g); /*管理員菜單*/void Tour_Menu(mgraphType *g); /*游客菜單*/ int judeg_Innum(int num); /*判斷用戶輸入的編號是否合理及對應景點是否開放*/void Search_Intro(mgraphType *g); /*景點信息查詢*/void ShortestPath_FLD(mgraphType *g); /*弗洛伊德算法求任意景點間最短的路徑*/void Floyd_Print(mgraphType,int,int); /*遞歸實現(xiàn)打印兩點間的最短路徑*/void ShortestPath_Print(mgraphType); /*輸出并打印兩點間的最短路徑*/void
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025股份轉(zhuǎn)讓合同
- 煤礦集中檢修方案
- 襄陽防腐木屋施工方案
- 青島垂直植物墻施工方案
- 2024-2025學年高中歷史 專題八 當今世界經(jīng)濟的全球化趨勢 第三課 經(jīng)濟全球化的世界說課稿 人民版必修2
- 凈化設(shè)備合同范例
- 28 棗核 說課稿-2023-2024學年統(tǒng)編版語文三年級下冊
- Unit 3 Fit for life Welcome to the unit 說課稿-2024-2025學年高中英語譯林版(2020)選擇性必修第二冊
- 橋面防腐木施工方案
- 線性系統(tǒng)理論鄭大鐘第二版
- 寧騷公共政策學完整版筆記
- 走進奧運奧運知識簡介
- 項目負責人考試題庫含答案
- GB/T 7251.5-2017低壓成套開關(guān)設(shè)備和控制設(shè)備第5部分:公用電網(wǎng)電力配電成套設(shè)備
- 2023年湖南高速鐵路職業(yè)技術(shù)學院高職單招(數(shù)學)試題庫含答案解析
- 中考語文非連續(xù)性文本閱讀10篇專項練習及答案
- 勇者斗惡龍9(DQ9)全任務攻略
- 經(jīng)顱磁刺激的基礎(chǔ)知識及臨床應用參考教學課件
- 小學語文人教四年級上冊第四單元群文閱讀“神話故事之人物形象”PPT
- ISO 31000-2018 風險管理標準-中文版
評論
0/150
提交評論