版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、校園導(dǎo)航系統(tǒng)課程設(shè)計報告姓 名: 蔣小文 學(xué) 號:110236100123 班 級: 1班 專 業(yè): 網(wǎng)絡(luò)工程 指導(dǎo)教師:唐軼媛 蔣榮萍時 間:2012年7月5日 信息科學(xué)與工程學(xué)院目 錄摘要.1目的.2要求2題目.2任務(wù) .2 1).需求分析.3 2).概要設(shè)計.4 3).詳細設(shè)計.5 4).調(diào)試分析.8課設(shè)總結(jié).18附錄源代碼.19 目的 數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)的核心課程,是一門實踐性很強的課程。課程設(shè)計是加強學(xué)生實踐能力的一個強有力手段,要求學(xué)生掌握數(shù)據(jù)結(jié)構(gòu)的應(yīng)用、算法的編寫、類C語言的算法轉(zhuǎn)換成C(C+)程序并上機調(diào)試的基本方法,還要求學(xué)生在完成程序設(shè)計的同時能夠?qū)懗霰容^規(guī)范的設(shè)計報告。
2、 要求 2.1 課程設(shè)計時間為2周;2.2 設(shè)計語言C(C+)不限;2.3 課余時間完成源程序和課程設(shè)計報告等文檔書寫工作,上機時間只能做調(diào)試工作。上機時帶上源程序、數(shù)據(jù)結(jié)構(gòu)教材、C語言教材。2.4 上機任務(wù)(1)選擇并定義合適的數(shù)據(jù)結(jié)構(gòu);(2)根據(jù)程序所要完成的基本要求,設(shè)計出完整的算法;(3)設(shè)計出主程序(main函數(shù)),使其成為完整的程序。 2.5 上機時間:上午8:30-11:30,下午3:00-5:30 題目題目:校園導(dǎo)航系統(tǒng)設(shè)計一個校園導(dǎo)游程序,后臺操作:3.1、操作員信息管理如修改密碼等3.2、能根據(jù)學(xué)校的規(guī)模進行添加景點信息、修改景點信息等功能,3.3、若臨時有交通管制,能進行
3、交通管制的設(shè)置和撤銷(如某某時間段那條路進行那個方向的交通管制等)3.4、前臺為來訪的客人提供各種信息查詢服務(wù): 3.4.1、設(shè)計學(xué)校的校園平面圖,所含景點不少于10個。以圖中頂點表示校內(nèi)各景點,存放景點名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等相關(guān)信息。 3.4.2、為來訪客人提供圖中任意景點相關(guān)信息的查詢。 3.4.3、提供途中任意景點問路查詢,即求任意兩個景點間的一條最短的簡單路徑。任務(wù)4.1 需求分析 此系統(tǒng)使用者分為訪客與管理員,訪客按要求可直接使用本系統(tǒng)所具有的查詢兩景點間的最短距離,查詢景點的相關(guān)信息.管理員按要求在輸入密碼的情況下,可修改登錄密碼,修改景點信息,添加景
4、點,添加景點信息,交通管制,撤銷交通管制,以及新建路徑.4.1.1 登錄:訪客無需登錄,首先將密碼存在一個文件中,當(dāng)輸入的密碼與從文件cipher.txt讀取的密碼相同,管理員方可進入后臺管理員操作界面,4.1.2 修改登錄密碼:管理員進入后臺操作管理員操作界面,若需改動當(dāng)前的登錄密碼,首先必須要輸入原密碼,以確定是管理員自己修改密碼.在原密碼輸入正確的情況下輸入新密碼,為了管理員更好的確人自己的新密碼,必須兩次輸入的新密碼一致(password1=password2)才可以修改成功.4.1.3 添加新的結(jié)點:若校園有新的景點出現(xiàn),管理員須將新的景點的相關(guān)信息加入系統(tǒng),將景點編號,名字,景點介
5、紹這些信息寫入存儲景點信息的文件當(dāng)中.原來已經(jīng)有G.vernum個景點,是一個G.vernum行G.vernum列的矩陣,加一個景點后便是一個G.vernum+1行G.vernum+1列的矩陣,將新結(jié)點與其他存在的直接路徑的結(jié)點之間的路徑權(quán)值.存入鄰接矩陣中,沒有直接路徑值的存一個無窮大的數(shù)(此系統(tǒng)用10000)于矩陣中,使得訪客可以查詢到新景點的相關(guān)信息和到達新景點的最短路徑.4.1.4 修改景點信息:若學(xué)校某景點的信息有改變,管理員進入系統(tǒng)對景點的信息進行修改,從文件information.txt.中讀取出景點信息,修改之后,再把信息存入information.txt中,使訪客了解最新的景
6、點信息.4.1.5 交通管制路徑:當(dāng)學(xué)校舉辦大型活動,或者大型考試的時候,對路進行交通管制,以確?;顒拥恼Ee行,從connect.txt 讀取景點之間的鄰接矩陣,將需要進行進行交通管制的路徑賦值為一個無窮大的數(shù)(此系統(tǒng)用10000)來進行對路徑的屏蔽作用.訪客要到達目的地需要繞道而行.4.1.6 恢復(fù)撤銷路徑:在活動或者考試結(jié)束后,管理員需要對之前進行交通管制的路徑進行撤銷交通管制,此功能的實現(xiàn)過程與交通管制功能的實現(xiàn)過程剛好相反,將需要撤銷的路徑,將其路徑值有10000改成其真實路徑值,恢復(fù)正常的交通秩序.4.1.7 新建景點路徑:學(xué)??赡芸紤]為了廣大老師和學(xué)生的方面,可能會新建一些路徑,
7、例如國教樓和四坡食堂所建的風(fēng)雨橋,管理員便需要把新建的路徑加入系統(tǒng),此功能的實現(xiàn)代碼與撤銷交通管制的路徑完全相同,將景點的兩路徑值賦值為其真實值,存入connect.txt文件中.使得訪客能夠走最短的路徑到達目的地,節(jié)省時間體力,減少不必要的麻煩.4.1.8 查詢最短路徑:訪客無需密碼可直接使用本系統(tǒng),最為訪客,總是希望以最少的時間和路程到達自己的目的地,利用弗洛伊德算法,求出最短路徑,三維數(shù)組用來存儲量景點最短路徑的中間景點,二維數(shù)組用于存放兩頂點間的路徑長度.訪客在輸入自己的出發(fā)地點(或者當(dāng)前所在地點),再輸入目的地,方可在屏幕上顯示出出發(fā)地點到達目的地的最短路徑.4.1.9 查詢景點信息
8、:當(dāng)訪客進入廣西民族大學(xué)時,當(dāng)不知道該去哪個景點時,可利用本功能進行查詢各景點的信息,從information.txt中將文件讀取出來,然后將我們需要的景點信息顯示出來,訪客根據(jù)顯示的信息選擇自己感興趣的景點.4.2概要設(shè)計1). 數(shù)據(jù)對象V:V具有相同特性的數(shù)組元素的集合,稱為頂點集2). 數(shù)據(jù)關(guān)系R:R=VR VR=|P(x,y)(x,y屬于V)ADT Graph 數(shù)據(jù)對象V:一個集合,該集合中的所有元素具有相同的特性 數(shù)據(jù)關(guān)系R:R=VR VR=|P(x,y)(x,y屬于V). 基本操作:1.Void main()2.void Welcome();/開始歡迎界面3.void Select
9、();/選擇管理員和訪客4.void InputPassword();/密碼輸入5.void Administer();/管理員操作6.int Increat_point_information();/增加景點信息7.void ChagePassword();/修改密碼8.void AddPoint();/增加景點9.void DeletPath();/交通管制,刪除路徑10.void Cancel();/取消交通管制,恢復(fù)路徑11.void NewPath();/新建路徑12.int Initgraph();/初始化鄰接矩陣13.void CorrectInformation();/修改景點
10、信息14.void StartGuide();/訪客界面15.int SearchPath();/查找最短路徑16.void SearchInformation();/查找景點信息17.void Return();/返回主菜單18.int Read_sight_information();/讀取景點信息文件19.void Remeber();/密碼錯誤提示20.void Time();/時間停留21.void Goodbye();/退出系統(tǒng)4.3詳細設(shè)計4.3.1校園景點路徑平面圖4.3.2總體流程4.3.3各主要功能偽代碼;void main 1.歡迎使用本系統(tǒng); 2. Select();/
11、使用者選擇自己是管理員/訪客 3.退出本系統(tǒng)使用/密碼輸入Inputpassword password=從文件中讀取密碼 cincipher;/輸入密碼 if(cipher=password)coutcipher2if(cipher1=cipher2)coutpassword1;coutpassword2;if(password1=password2;)修改成功else修改失敗;返回主菜單/增加景點信息int Increat_point_information()依次輸入景點信息的編號,名稱,信息存入number name information中;利用C+里的ios:app,在文件末尾追加信
12、息/交通管制 void DeletPath()首先確定進行交通管制的路徑相關(guān)聯(lián)的兩個景點編號i,j;讀取矩陣文件connect.txt文件,將信息讀取到二維數(shù)組中,對應(yīng)于景點編號的位置的路徑權(quán)值賦值為10000,用以屏蔽路徑,表示進行交通管制單向交通管制:單向1 G.adjarcsij.adj=10000;單向2 G.adjarcsji.adj=10000;雙向交通管制:G.adjarcsherethat.adj=G.adjarcsthathere.adj=10000存入文件即可/取消交通管制 void Cancel()實現(xiàn)過程與進行交通管制的實現(xiàn)方式正好相反,確定于取消路徑相關(guān)聯(lián)的兩個景點標
13、號,i j;路徑長度weight;cinweight;G.adjarcsij.adj=G.adjarcsji.adj=weight;/新建路徑void NewPath()實現(xiàn)代碼與取消交通管制代碼完全一致;/修改景點信息void CorrectInformation()從information中讀取景點的編號,名稱,介紹的相關(guān)信息outfileG.vexi.numberG.G.rmationarcsvw.adj;/把v,w路徑的值放到Dvw中 v,w是,v,w路徑上的景點,所以pvwv=1;pvww=1; 如果u到v,w之間的兩條路徑之和小于v,w之間的路徑
14、,則使Dvw=Dvu+Duw 若i是v,u上的最短路徑的景點,或是u,w之間最短路徑的景點,則i是v,w之間最短路徑上的景點int flag=1;while(flag) 輸入出發(fā)點和目的地的編號:k, jif(kG-vernum|jG-vernum)景點編號不存在!請重新輸入出發(fā)點和目的地的編號:k, j if(k=0&k=0&j頂點數(shù)目) flag=0; 逐個輸出最短路徑上的景點名字以及總路線長/查詢景點信息void SearchInformation()從information將全部的數(shù)據(jù)讀取出來請輸入要查詢的景點編號n;if(nG.vernum)該景點不存在,請重新輸入:else 根據(jù)編
15、號輸出對應(yīng)的景點信息;4.4調(diào)試分析4.1.密碼輸入正確:4.2.密碼修改成功:例:(將原密碼wwww改為aaaa)4.3.添加景點和景點信息:例:把八坡側(cè)門加入景點添加前:添加過程:添加后,information.txt和connect.txt里面的內(nèi)容自動修改為:景點和景點信息添加成功4.4.交通管制:例:(對2(大禮堂)4(圖書館)的路進行管制)交通管制前:管制過程:管制之后:4.5撤銷交通管制:例(撤銷(2大禮堂)-4(大禮堂)的路徑管制)恢復(fù)前:撤銷管制過程:撤銷管制之后:4.6新建路徑:例:(在1(南門)5(科技館)新建一條長300米的路徑)新建前:connect.txt的內(nèi)容:新
16、建過程:新建后:4.7修改景點信息:例:(將0(東門)的信息改為相思湖大酒店)4.8.查詢景點信息:(例:查找剛剛新修改的0相思湖大酒店信息)4.9.查詢最短路徑:例:(查詢1(南門)-9(9坡)的最短路徑:課設(shè)總結(jié): 這是第二次做課程設(shè)計了,但卻使我感到什么是真正的編程,如何做一個項目,如何開始,如何進行,如何高效率的完成它。這次指導(dǎo)老師對我們十分的嚴格,要求我們按照軟件工程的要求來,雖然一開始我們十分的不適應(yīng),可是我們最終堅持下來了,經(jīng)歷了這個過程,對這門學(xué)科有了更深入得了解。 要做好一個項目,從需求分析到數(shù)據(jù)采集到概要設(shè)計到詳細設(shè)計,都要求在我的腦海里有個大概并清晰地思路和想法。同時,在
17、這次程序設(shè)計中,我基本上能夠按照正確的流程進行,沒有一開始就寫程序,這也是自我感覺進步最大的地方了,拿到題目的那一個早上的時間我用來整理出正確的邏輯思路,然后再進行詳細的程序設(shè)計:先進行需求分析,然后概要設(shè)計,然后詳細設(shè)計,最后寫程序,然后調(diào)試程序。我越來越感覺到一個優(yōu)秀的程序員,一定要有十分扎實的基本功,這次課程設(shè)計,我發(fā)現(xiàn)自己還有很多地方不是很熟練,多次查閱書本、從最基本的定義著手才完成了它。通過本次課程設(shè)計,我對圖的概念有了一個新的認識,在學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)這門課程之后,我慢慢地體會到了其中的奧妙,圖能夠在計算機中存在,首先要捕捉他有哪些具體化、數(shù)字化的信息,比如說權(quán)值、頂點個數(shù)等,這也就說
18、明了想要把生活中的信息轉(zhuǎn)化到計算機中必須用數(shù)字來完整的構(gòu)成一個信息庫,而圖的存在,又涉及到了頂點之間的聯(lián)系。 數(shù)據(jù)結(jié)構(gòu)是一門基礎(chǔ)課,今后很多的學(xué)科都要用到它,通過這次課程設(shè)計,我發(fā)現(xiàn)它又對我們的編程能力要求很高,因此我認為要真正的學(xué)好它,就要經(jīng)常地上機,不斷地練習(xí),只有這樣,才有可能完全掌握它?,F(xiàn)在,我才發(fā)現(xiàn)老師這一學(xué)期為什么對我們這么的嚴格,每次實驗要求按時上交,并獨立完成,而且每次上交實驗的時候也是按照課程設(shè)計的要求,會詢問我們一些有關(guān)實驗的問題,對于不懂的地方,就會指出,要求我們自己查閱資料完成之后再上交,容不得半點馬虎,我想就是因為老師給了我們這么多機會和作業(yè),我們在做課程設(shè)計時才沒感
19、到束手無策。 剛開始學(xué)的時候確實有很多地方我很不理解,每次上課時老師都會給我們出不同的設(shè)計題目,對于我們一個初學(xué)者來說,無疑是一個具大的挑戰(zhàn),撞了幾次壁之后,我決定靜下心來,仔細去寫程序。老師會給我們需要編程的內(nèi)容一些講解,順著老師的思路,來完成自己的設(shè)計,我們可以開始運行自己的程序,可是好多處的錯誤讓人看的可怕,還看不出到底是哪里出現(xiàn)了錯誤,但是程序還是得繼續(xù)下去,我多次請教了老師和同學(xué),逐漸能自己找出錯誤,并加以改正。其實現(xiàn)在想起來,收獲還真是不少,雖然說以前非常不懂這門語言,在它上面花費了好多心血,覺得它很難,是需用花費了大量的時間編寫出來的?,F(xiàn)在真正的明白了一些代碼的應(yīng)用,每個程序都有
20、一些共同點,通用的結(jié)構(gòu),相似的格式。只要努力去學(xué)習(xí),就會靈活的去應(yīng)用它。 這次課程設(shè)計,自己熟悉了很多的東西,在編寫程序的過程中,自己發(fā)現(xiàn)了很多的問題,并通過查閱資料,反復(fù)實踐予以解決,這就使得自己發(fā)現(xiàn)問題、解決問題的能力得到了提升。課程設(shè)計多做幾次,我想它就不是那么陌生、那么可怕了,自己會在這個過程中不斷上手。正如一位偉人說的那樣,自己的知識越多,越是感到未知越多。這次課程設(shè)計,我發(fā)現(xiàn)了很多過去遺留的問題,和有待解決的問題。這些問題在期末考試中沒有涉及,可并不代表我們真正掌握了。還是親自動手可以發(fā)現(xiàn)問題解決問題。很多時候不親自動手,就會忽略很多的問題。其實自己現(xiàn)在掌握的東西還是很少的,這次課
21、程設(shè)計,我查閱了很多的書籍,發(fā)現(xiàn)要學(xué)好這門課并真正掌握它,絕非一朝一夕之事,還要下功夫?qū)W習(xí)其他相關(guān)知識。為了擴充自己的知識,更好地掌握軟件專業(yè)的知識,增加知識的深度和寬度,不斷完備知識的儲備。除此之外,我還要學(xué)習(xí)其他與之相關(guān)的知識,只有牢牢地掌握這些,才會有更多的發(fā)展空間。 我現(xiàn)在越來越喜歡這門學(xué)科了,認為自己兩年前的選擇是沒有錯的,這個專業(yè)也是很有前途的,我相信只要自己的基本功扎實,就會獲益匪淺。在這次課程設(shè)計中,我還是發(fā)現(xiàn)了自己的很多不足,我發(fā)現(xiàn)自己的效率不是很高,很多優(yōu)秀的同學(xué)沒用到半周就完成的差不多了,而自己卻要用到6天左右的時間。還有一點就是,自己的耐心不足,遇到問題以解決不了,就心
22、煩氣躁,往往一下午沒有很大的進展。這些暴露的問題我會在以后的學(xué)習(xí)和生活中逐漸解決,希望在以后的學(xué)習(xí)和生活中老師可以嚴格要求我,使我不斷克服問題,提高專業(yè)技能。 附錄源代碼/headfile.h#include #include #include #include #include #include stdlib.h#include time.husing namespace std;#define max_ver_num 100#define A 10000 int Initgraph();int Increat_point_information();void Welcome();void
23、Select();void InputPassword();void StartGuide();void Administer();void ChagePassword();void AddPoint();void Return();void CorrectInformation();void DeletPath();int Read_sight_information();void SearchInformation();void Remeber();void Time();void ShortestPath_DIJ();void Cancel();void NewPath();void G
24、oodbye();typedef struct int data; int t; int fisrt;Node;typedef struct verdata/景點信息char number5;char name20;char information1000;po;typedef struct Arcnode/設(shè)置邊的權(quán)值信息 int adj;/路徑權(quán)值A(chǔ)rcnode;typedef struct MGr /圖關(guān)系 verdata vexmax_ver_num; Arcnode adjarcsmax_ver_nummax_ver_num; int vernum;MGraph;/main.cpp#
25、include #include #include #include #include #include stdlib.h#include headfile.hMGraph G;using namespace std;time_t now;/主函數(shù)int main()time(&now);cout現(xiàn)在的時間是 ctime(&now); Welcome();Select();return 0;/歡迎void Welcome() /cout現(xiàn)在的時間是 ctime(&now);coutendl;cout 歡迎光臨廣西民族大學(xué) endl;cout endl;cout 廣西民族大學(xué)信息科學(xué)與工程學(xué)院軟
26、件學(xué)院 endl;cout 校園導(dǎo)航系統(tǒng)為你服務(wù) endl;cout endl; cout endl;cout 程序員:10網(wǎng)絡(luò)蔣小文 endl;coutendl; system(pause);system(cls);/開始頁面void Select()char choice; coutendl; cout 1.導(dǎo)航使用者 endl;cout 2.系統(tǒng)管理員 endl;cout 3.退出此系統(tǒng) endl; coutendl;coutchoice;system(cls);switch(choice) case 1:StartGuide(); break; case 2:InputPassword
27、(); break; case 3: Goodbye(); break; default: coutendl; cout你的輸入有誤endl; coutendl; system(pause); system(cls); Select();/Admin.cpp#include #include #include #include #include #include stdlib.h#include headfile.hextern MGraph G;using namespace std;/后臺 輸入密碼,加景點,加信息 改信息 改密碼 刪路徑void InputPassword()int m=
28、0;string password;string c; system(CLS);ifstream infile(cipher.txt);infilec; while(m3) coutpassword; if(c=password) coutendl; cout 密碼正確 進入管理系統(tǒng) endl;coutendl;cout自動跳轉(zhuǎn)中.;Time();system(cls); Administer(); else coutendl;cout密碼錯誤!endl;coutendl;cout還有2-m次機會endl;coutendl;m+;cout自動跳轉(zhuǎn)中.;Time();system(cls); R
29、emeber();void Administer()char choice; Initgraph();coutendl;cout 1.修改登錄密碼 endl;cout 2.添加新的景點 endl;cout 3.修改景點信息 endl;cout 4.交通管制路徑 endl;cout 5.恢復(fù)撤銷路徑 endl;cout 6.新建景點路徑 endl; cout 7.返回導(dǎo)航主頁 endl;coutendl;coutchoice;/system(cls);switch(choice)case 1: ChagePassword(); break;case 2: AddPoint(); break;ca
30、se 3: CorrectInformation(); break; case 4: DeletPath(); break;case 5: Cancel(); break; case 6: NewPath(); break;case 7: Return(); break;default:coutendl;cout你的輸入有誤endl;coutpassword;infile.close();coutendl;coutc;coutendl;if(c=password)cout原密碼輸入正確endl;coutendl;coutnewpasswrod1;coutendl;coutnewpasswrod
31、2;coutendl;if(newpasswrod1=newpasswrod2) ofstream outfile(cipher.txt); outfilenewpasswrod2; outfile.close(); cout密碼更改成功,登錄時請用更改后的密碼endl;elsecout兩次輸入的密碼不相同endl;elsecout原密碼輸入錯誤endl;cout自動跳轉(zhuǎn)中.endl;Time(); system(cls);Administer();void Remeber()coutendl;cout你已經(jīng)連續(xù)三次輸入密碼錯誤了endl;coutendl; cout請認真核對密碼,稍后再試!
32、endl;coutendl;Time();cout自動返回主菜單endl;Time();system(cls);Select();void AddPoint()system(cls);cout添加景點endl;Increat_point_information();G.vernum=Read_sight_information();ifstream infile(connect.txt); for(int i=0;iG.vernum-1;i+)for(int j=0;jG.adjarcsij.adj;/*for(i=0;iG.vernum-1;i+)for(int j=0;jG.vernum-
33、1;j+)coutsetiosflags(ios:left)setw(5)G.adjarcsij.adj ;coutendl;*/infile.close();/cout每次添加景點個數(shù)為1個;for(int m=0;mG.vernum;m+)G.adjarcsmG.vernum-1.adj=10000;for(int n=0;nG.vernum;n+)G.adjarcsG.vernum-1n.adj=10000;G.adjarcsG.vernum-1G.vernum-1.adj=0;cout你正準備添加一個新結(jié)點endl;coutendl; cout請輸入此景點與其他景點存在的路徑權(quán)值end
34、l;coutendl;char yn;doint Spots_N,Weights;coutSpots_N; coutWeights;G.adjarcsG.vernum-1Spots_N.adj=G.adjarcsSpots_NG.vernum-1.adj=Weights;cout是否與其他景點存在直接路徑值(y/n)yn;while(yn=y|yn=Y); ofstream outfile0(connect.txt);for(int v=0;vG.vernum;v+)for(int w=0;wG.vernum;w+) outfile0G.adjarcsvw.adj ; outfile0endl
35、;outfile0.close(); cout添加成功endl;Time();system(cls);Administer();int Increat_point_information()/添加景點信息 char number2,name20,information10000;coutnumber; coutname; coutinformation; ofstream outfile(information.txt,ios:app);outfileendlnumber name information;outfile.close(); return 0;void CorrectInform
36、ation()int n;char m;system(cls); G.vernum=Read_sight_information();coutn; coutG.vexn.number;coutG.;coutG.rmation;ofstream outfile(information.txt);for(int j=0;jG.vernum-1;j+)outfileG.vexj.number G. G.rmationendl;outfileG.vexG.vernum-1.number G.vexG. G
37、.vexG.rmation;outfile.close();cout數(shù)據(jù)修改成功endl;coutm;if(m=y|m=Y)ifstream infile(information.txt);for(int i=0;iG.vexi.numberG.G.rmation;coutG.vexi.number G. G.rmationendl;infile.close();system(pause);system(cls);elsecout自動跳轉(zhuǎn)中.endl; Time(); Administer();v
38、oid DeletPath() system(cls);coutendl;cout交通管制endl;coutendl; G.vernum=Read_sight_information();ifstream infile(connect.txt); for (int i=0;iG.vernum;i+)for(int j=0;jG.adjarcsij.adj;cout你想對哪兩個結(jié)點間的路徑進行管制?endl;int here,that;couthere;coutthat;cout請問你是刪除單項的還是雙向的路徑:;cout1.單向 2.雙向direction;switch(direction)c
39、ase 1: char choice;cout管制herethat選擇 1endl;cout管制thathere選擇 2choice; switch(choice) case 1:G.adjarcsherethat.adj=10000;break; case 2:G.adjarcsthathere.adj=10000;break; default:cout輸入錯誤endl;DeletPath(); break; case 2: G.adjarcsherethat.adj=G.adjarcsthathere.adj=10000; break; default: cout輸入錯誤endl; Del
40、etPath();ofstream outfile(connect.txt);for(int v=0;vG.vernum;v+)for(int w=0;wG.vernum;w+) outfileG.adjarcsvw.adj ; outfileendl;coutendl;cout 交通管制設(shè)置成功 endl;coutendl;system(pause);system(cls);outfile.close();Administer();void Cancel()system(cls);G.vernum=Read_sight_information();ifstream infile(connec
41、t.txt); for(int i=0;iG.vernum;i+)for(int j=0;jG.adjarcsij.adj; infile.close();int Spots_N1,Spots_N2,Weights;coutendl;cout你欲恢復(fù)的路的兩個端點是:endl;coutSpots_N1;coutSpots_N2;coutendl;coutWeights;G.adjarcsSpots_N1Spots_N2.adj=G.adjarcsSpots_N2Spots_N1.adj=Weights;ofstream outfile0(connect.txt);for(int v=0;vG.
42、vernum;v+)for(int w=0;wG.vernum;w+) outfile0G.adjarcsvw.adj ; outfile0endl;outfile0.close();coutendl;cout撤銷交通管制成功endl;coutendl;system(pause);system(cls);Administer();void NewPath()system(cls);G.vernum=Read_sight_information();ifstream infile(connect.txt); for(int i=0;iG.vernum;i+)for(int j=0;jG.adja
43、rcsij.adj; infile.close();int Spots_N1,Spots_N2,Weights;coutendl;cout新修建的路的兩個端點是:endl;coutSpots_N1;coutSpots_N2;coutendl;coutWeights;G.adjarcsSpots_N1Spots_N2.adj=G.adjarcsSpots_N2Spots_N1.adj=Weights;ofstream outfile0(connect.txt);for(int v=0;vG.vernum;v+)for(int w=0;wG.vernum;w+) outfile0G.adjarcs
44、vw.adj ; outfile0endl;outfile0.close(); coutendl; cout新建路徑成功endl;coutendl;system(pause);system(cls);Administer();void Return()char yn;coutyn;if(yn=y|yn=Y)system(cls);Select();else system(cls);Administer();/結(jié)束界面void Goodbye() coutendl;cout 感謝你對本校園導(dǎo)航系統(tǒng)的使用 endl; coutendl;cout 如對本校不懂的地方,你可繼續(xù)使用本系統(tǒng) endl;
45、coutendl;cout 祝君在我校有個美好的觀光經(jīng)歷 endl;coutendl;exit(0);/跳轉(zhuǎn)時間控制void Time()const int second=1;clock_t delay=second*CLOCKS_PER_SEC;clock_t start=clock();while(clock()-startdelay);/vistor.cpp#include #include #include #include #include #include stdlib.h#include headfile.hextern MGraph G;/#define A 10000usin
46、g namespace std;/前臺 導(dǎo)航使用者void StartGuide()char choice;coutendl; cout 1.查詢最短路徑 endl;cout 2.查詢景點信息 endl;cout 3.退出導(dǎo)航系統(tǒng) endl; coutendl; coutchoice;system(cls);switch(choice)case 1:ShortestPath_DIJ(); break;case 2:system(cls); SearchInformation();break; case 3:Goodbye();break;default:cout你的輸入有誤endl;void
47、SearchInformation()int k,choice; Read_sight_information();coutk;coutG.vexk.number G. G.rmationendl;coutendl;cout= 1. 繼續(xù)查詢景點信息 =endl;cout= 2. 返回導(dǎo)航主菜單 =endl;cout= 3. 退出系統(tǒng) =endl;coutchoice; system(cls);switch(choice)case 1: SearchInformation();break;case 2: StartGuide();break;case 3:
48、exit(0);break; default:cout你的輸入有誤endl; Time();system(cls);StartGuide();void ShortestPath_DIJ() G.vernum=Read_sight_information(); Read_sight_information();Initgraph(); int v,w,i,min,t=0,x,flag=1,v0,v1,k=0;int *final=new int G.vernum; int* p;p= new int*G.vernum; for(unsigned r=0; rG.vernum;+r) pr = n
49、ew intG.vernum; int *D=new intG.vernum;int *have=new intG.vernum;for(int m=0;mG.vernum;m+)havem=0; while(flag) printf(請輸入起始景點編號:n); scanf(%d,&v0); if(v0G.vernum) printf(景點編號不存在!); printf(請輸入終止景點編號:n); scanf(%d,&v1); if(v1G.vernum) printf(景點編號不存在!); if(v0=0&v0=0&v1G.vernum) flag=0;for(v=0;vG.vernum;+
50、v)finalv=0;Dv=G.adjarcsv0v.adj;for(w=0;wG.vernum;+w)pvw=A;if(DvA)pvv0=1;pvv=1;Dv0=0;finalv0=1;have0=v0;for(i=1;iG.vernum;+i)min=A;for(w=0;wG.vernum;+w)if(!finalw)if(Dwmin) v=w;min=Dw;finalv=1;havek=v;k+;for(w=0;wG.vernum;+w)if(!finalw&(min+(G.adjarcsvw.adj)Dw)Dw=min+G.adjarcsvw.adj;for(x=0;xG.vernum
51、;x+)pwx=pvx; pww=1;coutG.;for(i=0;iG.vernum;i+)if(pv1havei=1)coutG.; if(v1-v0)=1) coutn路徑長度:G.adjarcsv0v1.adj; elsecoutn路徑長度:Dv1米G.vexi.numberG.G.rmation;i+;return i;infile.close();/初始化鄰接矩陣int Initgraph()G.vernum=Read_sight_information();ifstream infile(conne
52、ct.txt); for(int i=0;iG.vernum;i+)for(int j=0;jG.adjarcsij.adj; infile.close();return 0;參考文獻 1 嚴蔚敏.數(shù)據(jù)結(jié)構(gòu)及應(yīng)用算法教程.北京:清華大學(xué)出版社.2011.P309-P3112 林小茶.c語言程序設(shè)計.北京:中國鐵道出版社2007.P280-P2903 杜茂康.C+面向?qū)ο蟪绦蛟O(shè)計(第二版).北京:電子工業(yè)出版社.2001.P50-P55 附 錄另起一頁。附錄的有無根據(jù)說明書(設(shè)計)情況而定,內(nèi)容一般包括正文內(nèi)不便列出的冗長公式推導(dǎo)、符號說明(含縮寫)、計算機程序等?!案健薄颁洝敝虚g空兩格、四號字
53、、黑體、居中。附錄中的內(nèi)容一般也取為五號宋體。附錄中有程序源代碼的因篇幅限制可酌情考慮內(nèi)容的字號和行距。附錄資料:不需要的可以自行刪除語言的常用庫函數(shù)函數(shù)1。absread()讀磁盤絕對扇區(qū)函數(shù)原形:int absread(int drive,int num,int sectnum,void *buf)功能:從drive指定的驅(qū)動器磁盤上,sectnum指定的邏輯扇區(qū)號開始讀取(通過DOS中斷0 x25讀取)num個(最多64K個)扇區(qū)的內(nèi)容,儲存于buf所指的緩沖區(qū)中。參數(shù):drive=0對應(yīng)A盤,drive=1對應(yīng)B盤。返回值:0:成功;-1:失敗。頭文件:dos.h函數(shù)2。abswrit
54、e()寫磁盤絕對扇區(qū)函數(shù)原形:int abswrite(int drive,int nsects,int lsect,void *buffer) drive=0(A驅(qū)動器)、1(B驅(qū)動器)、nsects=要寫的扇區(qū)數(shù)(最多64K個);lsect=起始邏輯扇區(qū)號;buffer=要寫入數(shù)據(jù)的內(nèi)存起始地址。功能:將指定內(nèi)容寫入(調(diào)用DOS中斷0 x26)磁盤上的指定扇區(qū),即使寫入的地方是磁盤的邏輯結(jié)構(gòu)、文件、FAT表和目錄結(jié)構(gòu)所在的扇區(qū),也照常進行。返回值:0:成功;-1:失敗。頭文件:dos.h函數(shù)3。atof()將字符串轉(zhuǎn)換成浮點數(shù)的函數(shù)原形:double atof(const char *s)
55、功能:把s所指向的字符串轉(zhuǎn)換成double類型。s格式為:符號數(shù)字.數(shù)字E符號數(shù)字返回值:字符串的轉(zhuǎn)換值。頭文件:math.h、stdlib.h函數(shù)4。atoi()將字符串轉(zhuǎn)換成整型數(shù)的函數(shù)原形:int atoi(const char *s)功能:把s所指向的字符串轉(zhuǎn)換成int類型。s格式為:符號數(shù)字返回值:字符串的轉(zhuǎn)換值。若出錯則返回0。頭文件:stdlib.h函數(shù)5。atol()將字符串轉(zhuǎn)換成長整型數(shù)的函數(shù)原形:long atol(const char *s)功能:把s所指向的字符串轉(zhuǎn)換成long int類型。s格式為:符號數(shù)字返回值:字符串的轉(zhuǎn)換值。若出錯則返回0。頭文件:stdlib.
56、h函數(shù)6。bcd()把一個數(shù)轉(zhuǎn)換成對應(yīng)的BCD碼的函數(shù)原形:bcd bcd(int x)bcd bcd(double x)bcd bcd(double x,int decimals)注意:BCD碼的精度可達17位。參數(shù)decimals是可選的,用來指定轉(zhuǎn)換后小數(shù)點后的位數(shù)。頭文件:bcd.h函數(shù)7。bdos()原形int bdos(int fnum,unsigned dx,unsigned al)其中fnum是系統(tǒng)調(diào)用號;dx是傳給寄存器DX的值;al是傳給寄存器AL的值;功能DOS系統(tǒng)調(diào)用(INT21H)返回值A(chǔ)X中的值函數(shù)8。biosdisk()調(diào)用BIOS磁盤驅(qū)動程序函數(shù)原形:char
57、biosdisk(int cmd,int drive,int head,int track,int sector,int nsects,void *buffer)功能:使用中斷0 x13,直接調(diào)用BIOS進行磁盤操作參數(shù):(1)cmd:2-數(shù)據(jù)以每扇區(qū)512字節(jié)的格式讀入buffer,起始扇區(qū)由head、track和sector定,扇區(qū)數(shù)由nsects定。3-將buffer中的數(shù)據(jù)按每扇區(qū)512字節(jié)寫入磁盤。4-對扇區(qū)進行數(shù)據(jù)校驗。6-格式化一個磁盤并對化扇區(qū)設(shè)置化標志。8-返回當(dāng)前驅(qū)動器參數(shù)在buffer的前4個字節(jié)中。10-長讀,每扇區(qū)讀入512字節(jié)加上額外的4個字節(jié)。11-長寫,每扇區(qū)寫
58、入512字節(jié)加上額外的4個字節(jié)。(2)drive:0-第一個軟驅(qū);1-第二個軟驅(qū);0 x80-第一個硬驅(qū)(3)head:磁頭(4)track:磁道(5)sector:扇區(qū)(6)nsects:扇區(qū)數(shù)(7)buffer:數(shù)據(jù)緩沖區(qū),定義為unsigned char buffer;返回值:0 x00-操作成功0 x01-錯誤命令0 x03-企圖寫具有寫保護的磁盤0 x07-驅(qū)動器參數(shù)設(shè)置錯誤0 x10-磁盤讀/CRC/ECC錯誤頭文件:bios.h注:對于硬盤主引導(dǎo)記錄扇區(qū)head=0,track=0,sector=1函數(shù)9。biosprint()調(diào)用BIOS打印機I/O接口的函數(shù)原形:int bi
59、osprint(int cmd,int abyte,int port)功能:通過BIOS中斷0 x17在由參數(shù)port指定的打印機上完成各種打印機功能。port=0(LPT1)=1(LPT2);cmd=0(打印字符abyte)1(初始化打印機端口)2(讀打印機狀態(tài));abyte=0-255;返回值:打印機狀態(tài)位0(設(shè)備超時);位3(I/O出錯);位4(打印機已選擇);位5(沒紙);位6(打印機確認);位7(不忙)頭文件:bios.h函數(shù)10。calloc()分配內(nèi)存函數(shù)原形:void *calloc(size_t nitems,size_t size)功能:在堆中分配一塊內(nèi)存,將該內(nèi)存的內(nèi)容全
60、部清。返回值:返回指向新分配內(nèi)存的指針??臻g不夠則返回NULL。頭文件:stdlib.h、calloc.h函數(shù)11。ceil()原形double ceil(double num)功能求不小于num的最小雙精度整數(shù)頭文件math.h函數(shù)12。cgets()讀字符串函數(shù)原形:char *cgets(char *str)功能:從控制臺讀入一個字符串,并將該字符串(和字符串長度)存入有str所指向的地址中。注意:在調(diào)用cgets之前,必須將要讀入的字符串最大長度存入str0中,返回時str1被設(shè)置為實際讀入的字符數(shù)。實際字符串內(nèi)容從str2開始,以空字符(0)結(jié)尾。返回值:指向str2的指針。頭文件:
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色環(huán)保型社區(qū)門衛(wèi)管理服務(wù)協(xié)議4篇
- 風(fēng)機安裝施工方案
- 強夯土方施工方案
- 速度課程設(shè)計講解
- 2025年度新能源項目公司成立合作協(xié)議書規(guī)范文本4篇
- 2025年銷售人員保密與反不正當(dāng)競爭協(xié)議維護企業(yè)合法權(quán)益2篇
- 2025年度個人向公司借款用于房屋維修貸款合同范本3篇
- 2025年度智能房屋租賃管理服務(wù)承包合同書4篇
- 2025年教育機構(gòu)廚師團隊聘用及餐飲服務(wù)質(zhì)量標準合同2篇
- 二零二五版民房建筑施工安全生產(chǎn)責(zé)任合同4篇
- 河南省鄭州市2023-2024學(xué)年高二上學(xué)期期末考試 數(shù)學(xué) 含答案
- 2024年資格考試-WSET二級認證考試近5年真題集錦(頻考類試題)帶答案
- 試卷中國電子學(xué)會青少年軟件編程等級考試標準python三級練習(xí)
- 公益慈善機構(gòu)數(shù)字化轉(zhuǎn)型行業(yè)三年發(fā)展洞察報告
- 飼料廠現(xiàn)場管理類隱患排查治理清單
- 2024年公需科目培訓(xùn)考試題及答案
- 【名著閱讀】《紅巖》30題(附答案解析)
- Starter Unit 2 同步練習(xí)人教版2024七年級英語上冊
- 分數(shù)的加法、減法、乘法和除法運算規(guī)律
- 2024年江蘇鑫財國有資產(chǎn)運營有限公司招聘筆試沖刺題(帶答案解析)
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫含答案
評論
0/150
提交評論