校園導(dǎo)游咨詢?yōu)閬碓L的客人提供各種信息服務(wù)完結(jié)版_第1頁
校園導(dǎo)游咨詢?yōu)閬碓L的客人提供各種信息服務(wù)完結(jié)版_第2頁
校園導(dǎo)游咨詢?yōu)閬碓L的客人提供各種信息服務(wù)完結(jié)版_第3頁
校園導(dǎo)游咨詢?yōu)閬碓L的客人提供各種信息服務(wù)完結(jié)版_第4頁
校園導(dǎo)游咨詢?yōu)閬碓L的客人提供各種信息服務(wù)完結(jié)版_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

CENTRALSOUTHUNIVERSITY數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告學(xué)生姓名學(xué)號(hào)專業(yè)班級(jí)指導(dǎo)老師學(xué)院完成時(shí)間目錄實(shí)驗(yàn)一課程設(shè)計(jì)的題目和要求·························1設(shè)計(jì)與實(shí)現(xiàn)···································1基本思路主要數(shù)據(jù)結(jié)構(gòu)程序的算法和主要流程(4)程序?qū)崿F(xiàn)過程中的主要難點(diǎn)和解決方法實(shí)驗(yàn)結(jié)果及分析·······························1實(shí)驗(yàn)的準(zhǔn)備(2)實(shí)驗(yàn)結(jié)果及分析總結(jié)·····································1實(shí)驗(yàn)二一.課程設(shè)計(jì)的題目和要求·························1二.設(shè)計(jì)與實(shí)現(xiàn)···································1(1)基本思路(2)主要數(shù)據(jù)結(jié)構(gòu)(3)程序的算法和主要流程(4)程序?qū)崿F(xiàn)過程中的主要難點(diǎn)和解決方法三.實(shí)驗(yàn)結(jié)果及分析·······························1(1)實(shí)驗(yàn)的準(zhǔn)備(2)實(shí)驗(yàn)結(jié)果及分析四.總結(jié)·····································1第第頁實(shí)驗(yàn)一課程設(shè)計(jì)的題目和要求:題目:校園導(dǎo)游咨詢(為來訪的客人提供各種信息服務(wù))基本要求:設(shè)計(jì)中南大學(xué)校園平面圖,有三個(gè)校區(qū)和三所附屬醫(yī)院,在這些校區(qū)和醫(yī)院內(nèi)選10個(gè)以上的建筑物、辦公室、宿舍等地名。以圖中頂點(diǎn)表示校園內(nèi)各地名,存放地名名稱、代號(hào)、簡(jiǎn)介等信息;以邊表示路徑,存放路徑長(zhǎng)度等有關(guān)信息。為來訪客人提供圖中任意地名相關(guān)信息的查詢。為來訪客人提供任意地名的問路查詢,即查詢?nèi)我鈨蓚€(gè)地名之間的一條最短路徑。實(shí)現(xiàn)提示一般情況下,校園的道路是雙向通行的,可設(shè)計(jì)校園平面圖是一個(gè)無向網(wǎng)。頂點(diǎn)和邊均含有相關(guān)信息。設(shè)計(jì)與實(shí)現(xiàn):(1)基本思路=1\*GB3①?gòu)闹心洗髮W(xué)校園平面圖中選取10個(gè)有代表性的景點(diǎn),抽象成一個(gè)無向帶權(quán)圖,以圖中頂點(diǎn)表示景點(diǎn),邊上的權(quán)表示兩地的之間的距離。=2\*GB3②本程序的目的是為用戶提供路徑查詢。根據(jù)用戶指定的始點(diǎn)和終點(diǎn)輸出相應(yīng)路徑,或者根據(jù)用戶指定的景點(diǎn)輸出景點(diǎn)的信息。=3\*GB3③用鄰接表建立圖,圖的每一個(gè)頂點(diǎn)代表相應(yīng)的景點(diǎn)。然后再用深度優(yōu)先遍歷進(jìn)行搜索,查找所需的路徑。然后再用弗洛伊德算法求出要查詢的出發(fā)點(diǎn)到目的地的最短路徑。(2)主要數(shù)據(jù)結(jié)構(gòu)typedefstructEdge//對(duì)邊的定義{intadj;//路徑長(zhǎng)度}Edge,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedefstruct//圖中頂點(diǎn)表示主要景點(diǎn),存放景點(diǎn)的編號(hào)、名稱、簡(jiǎn)介等信息,{charname[30];intnum;charintroduction[100];//簡(jiǎn)介}infotype;//數(shù)據(jù)域typedefstruct{infotypevexs[MAX_VERTEX_NUM];//頂點(diǎn)的數(shù)據(jù)域AdjMatrixedge;//鄰接矩陣intvexnum,edgenum;//圖的當(dāng)前頂點(diǎn)數(shù)和邊數(shù)}MGraph;(3)程序的算法和主要流程<1>Floyd算法算法思想:從vi到vj的所有存在的路徑中,選出一條長(zhǎng)度最短的路徑,即每一對(duì)頂點(diǎn)之間的最短路徑。voidFloyd(MGraph*G)//用Floyd算法求圖中各對(duì)頂點(diǎn)v和w之間的最短路徑P[v][w]及其//帶權(quán)長(zhǎng)度D[v][w]。若P[v][w][u]為1,則u是從v到w當(dāng)前求得最短//路徑上的頂點(diǎn)。{intv,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];for(v=0;v<G->vexnum;v++)//各對(duì)結(jié)點(diǎn)之間初始已知路徑及距離for(w=0;w<G->vexnum;w++){D[v][w]=G->edge[v][w].adj;for(u=0;u<G->vexnum;u++)p[v][w][u]=0;if(D[v][w]<INFINITY){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])//從v經(jīng)u到w的一條路徑更短{D[v][w]=D[v][u]+D[u][w];//修改權(quán)值for(i=0;i<G->vexnum;i++)p[v][w][i]=p[v][u][i]||p[u][w][i];}while(flag){printf("請(qǐng)輸入出發(fā)點(diǎn)和目的地的編號(hào):");scanf("%d%d",&k,&j);if(k<0||k>G->vexnum||j<0||j>G->vexnum){printf("景點(diǎn)編號(hào)不存在!請(qǐng)重新輸入出發(fā)點(diǎn)和目的地的編號(hào):");scanf("%d%d",&k,&j);}if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)flag=0;}printf("%s",G->vexs[k].name);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("總路線長(zhǎng)%dm\n",D[k][j]);}//Floydend<2>主函數(shù)主函數(shù)調(diào)用函數(shù)調(diào)用函數(shù)<3>結(jié)束查看各景點(diǎn)游覽路線結(jié)束查看各景點(diǎn)游覽路線開始開始定義變量VVoidMenu()進(jìn)入菜單Switch()選擇功能退出系統(tǒng)瀏覽校園全景顯示此圖的鄰接矩陣查看景點(diǎn)信息選擇出發(fā)點(diǎn)和目的地退出系統(tǒng)瀏覽校園全景顯示此圖的鄰接矩陣查看景點(diǎn)信息選擇出發(fā)點(diǎn)和目的地(4)程序?qū)崿F(xiàn)過程中的主要難點(diǎn)和解決方法<1>這個(gè)程序的關(guān)鍵代碼就利用Floyd算法求最短路徑并將路徑存放起來。Floyd算法的算法思想:設(shè)矩陣用來存放帶權(quán)無向圖G的權(quán)值,即矩陣元素D[i][j]中存放著序號(hào)為i的結(jié)點(diǎn)到序號(hào)為j的結(jié)點(diǎn)之間的權(quán)值,可以通過遞推構(gòu)造一個(gè)矩陣序列A0,A1,A2,…,AN來求每對(duì)結(jié)點(diǎn)之間的最短路徑。其中,Ak[i][j]表示從結(jié)點(diǎn)Vi到結(jié)點(diǎn)Vj的路徑上所經(jīng)過的結(jié)點(diǎn)序號(hào)不大于k的最短路徑長(zhǎng)度。初始時(shí)有A0[i][j]=cost[i][j]。當(dāng)已經(jīng)求出Ak,要遞推求解Ak+1時(shí),可分為兩種情況來考慮:一種清楚是該結(jié)點(diǎn)序號(hào)為k+1的結(jié)點(diǎn),此時(shí)該路徑長(zhǎng)度與從結(jié)點(diǎn)Vi到結(jié)點(diǎn)Vj的路徑上所經(jīng)過的結(jié)點(diǎn)序號(hào)不大于k的最短路徑長(zhǎng)度相同;另一種情況是該路徑經(jīng)過結(jié)點(diǎn)序號(hào)k+1的結(jié)點(diǎn),此時(shí)該路徑可分為兩段,一段是從結(jié)點(diǎn)Vi到結(jié)點(diǎn)Vk+1的最短路徑,另一段是從結(jié)點(diǎn)Vk+1到結(jié)點(diǎn)Vj的最短路徑,此時(shí)的最短路徑長(zhǎng)度等于這兩段最短路徑長(zhǎng)度之和。這兩種情況的路徑長(zhǎng)度較小者,就是要求的從結(jié)點(diǎn)Vi到結(jié)點(diǎn)Vj的路徑上所經(jīng)過的結(jié)點(diǎn)序號(hào)不大于k+1的最短路徑長(zhǎng)度。Floyd具體算法設(shè)計(jì)voidfloyed(){inti,j,k;for(i=1;i<=n;i++)for(j=1;j<=n;j++){shortest[i][j]=cost[i][j];path[i][j]=0;}for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(shortest[i][j]>(shortest[i][k]+shortest[k][j])){ shortest[i][j]=shortest[i][k]+shortest[k][j];path[i][j]=k;path[j][i]=k;}}<2>由于導(dǎo)游程序在實(shí)際執(zhí)行時(shí),需要根據(jù)用戶的臨時(shí)輸入求最短路徑。因此。雖然迪杰斯特拉算法的時(shí)間復(fù)雜度比佛洛依德算法低,但每求一條最短路徑都必須重新搜索一遍,在頻繁查詢時(shí)會(huì)導(dǎo)致查詢效率降低,而佛洛依德算法只要計(jì)算一次,即可求得每一對(duì)頂點(diǎn)間的最短路徑,雖然時(shí)間復(fù)雜度為o(n^3),但以后每次查詢都只查表即可,極大地提高了查詢效率,而且,佛洛依德算法還支持帶負(fù)權(quán)的圖的最短路徑的計(jì)算。由此可見,在選用算法時(shí),不能單純的只考慮算法的漸近時(shí)間復(fù)雜度,有時(shí)還必須綜合考慮各種因素。實(shí)驗(yàn)結(jié)果與分析:實(shí)驗(yàn)的準(zhǔn)備用鄰接表建立圖,圖的每一個(gè)頂點(diǎn)代表相應(yīng)的景點(diǎn)。然后再用深度優(yōu)先遍歷進(jìn)行搜索,查找所需的路徑。然后再用弗洛伊德算法求出要查詢的出發(fā)點(diǎn)到目的地的最短路徑。(1)主菜單(Menu):存放著所有的選擇供用戶查詢。用戶可通過輸入編號(hào)來查詢自己想要獲得的信息。(2)瀏覽校園全景(Browser):采用深度遍歷遍歷圖進(jìn)行所有景點(diǎn)瀏覽,將遍歷景點(diǎn)信息輸出。(3)選擇出發(fā)點(diǎn)和目的地(Floyd):用戶輸入一個(gè)出發(fā)點(diǎn)和一個(gè)目的地編號(hào),采用弗洛伊德算法求出發(fā)點(diǎn)到目的地的最短路徑。(4)查看景點(diǎn)信息(Search):直接輸入編號(hào)進(jìn)行單個(gè)景點(diǎn)查詢。(5)顯示圖的鄰接矩陣(print)(6)退出系統(tǒng)(exit)(2)實(shí)驗(yàn)結(jié)果及分析<1>開始界面實(shí)現(xiàn)了底為湖藍(lán)色,字體為白色的整體要求,以及選項(xiàng)明確,直觀易懂。<2>瀏覽校園全景,中南大學(xué)10個(gè)景點(diǎn)的名稱以及簡(jiǎn)介。<3>選擇出發(fā)點(diǎn)和目的地,輸入兩地編號(hào),輸出用弗洛伊德算法計(jì)算出的兩點(diǎn)之間的最短距離以及最短線路。<4>查看景點(diǎn)信息,輸入景點(diǎn)編號(hào),輸出景點(diǎn)名稱和簡(jiǎn)介<5>顯示此圖的鄰接矩陣四.總結(jié):為期一周的課程設(shè)計(jì)快結(jié)束了,通過這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),我感受最深的就是對(duì)于循環(huán)鏈表的使用,可以說對(duì)循環(huán)鏈表有了比以前更進(jìn)一步的認(rèn)識(shí),以前只是一知半解的,如果只給個(gè)題目自己根本不能把程序完整地編寫出來,所以這次課程設(shè)計(jì)最大的收獲就在于對(duì)循環(huán)鏈表有了一定的理解,包括其中的一系列操作,如建立一個(gè)循環(huán)鏈表,刪除鏈表中的一個(gè)結(jié)點(diǎn),增加一個(gè)結(jié)點(diǎn)等。在這次課程設(shè)計(jì)過程中需要我們一邊設(shè)計(jì)一邊探索,這這個(gè)過程當(dāng)中我發(fā)現(xiàn)自己在數(shù)據(jù)結(jié)構(gòu)方面知識(shí)掌握不夠深入,對(duì)一些基本概念不能很好的理解,對(duì)一些數(shù)據(jù)結(jié)構(gòu)不能夠熟練的進(jìn)行上機(jī)實(shí)現(xiàn),這是自己比較薄弱的。學(xué)好基礎(chǔ)知識(shí)是理論付諸實(shí)踐的前提,這樣理論和實(shí)踐才能充分地結(jié)合起來。在以后的學(xué)習(xí)中,我還要努力改正,充分利用上機(jī)實(shí)驗(yàn)的機(jī)會(huì)提高自己。在程序的輸入的時(shí)候,因?yàn)樽约簩?duì)鍵盤的不熟練,代碼又很多很繁瑣,常常會(huì)產(chǎn)生放棄的念頭,從中我也感受到只有堅(jiān)持到底,勝利才會(huì)出現(xiàn)。本次程序設(shè)計(jì)是對(duì)全學(xué)期數(shù)據(jù)結(jié)構(gòu)課程學(xué)習(xí)的一次實(shí)踐,通過親自編寫編譯調(diào)試程序,逐步掌握了編程方法。也說明了一個(gè)深刻道理,知識(shí)只有在實(shí)踐中才能充分理解并運(yùn)用。從傳統(tǒng)的被動(dòng)接受變?yōu)橹鲃?dòng)探索,起初不是很適應(yīng),什么也不懂,茫然無措。漸漸地開始自己編寫時(shí)候,發(fā)現(xiàn)了其中之樂趣。我相信,這樣的學(xué)習(xí)堅(jiān)持到底,必將有所成就。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)有別于大學(xué)考試的類型,要求我們創(chuàng)新自己的新程序,從已有的教材模板中推陳出新,總結(jié)教材上的例題和基本結(jié)構(gòu),發(fā)散思維來設(shè)計(jì)命題程序,對(duì)我們提出了很高的要求,是我們不僅要把課本讀透,還要求我們有所創(chuàng)造,這是一個(gè)很大的挑戰(zhàn)。當(dāng)毫無頭緒時(shí),一個(gè)人的力量是微薄的,所以這就要求我們和同學(xué)一起討論,一起研究,在激烈的爭(zhēng)論中有所收獲,也提高了我們思維的縝密度和拓展了思想的深度及廣度。揚(yáng)長(zhǎng)避短,通過討論和對(duì)書本的進(jìn)一步深究理解,以及上網(wǎng)查詢有關(guān)注意事項(xiàng)并上機(jī)調(diào)試,是我們加深了對(duì)程序設(shè)計(jì)的理解與探尋,使我們?cè)谠O(shè)計(jì)的過程中加強(qiáng)了編程邏輯,深喑耐心細(xì)致十分重要,更懂得了編程不能求快,急于求成,只能穩(wěn)扎穩(wěn)打,步步推進(jìn)。而我們從中所收獲的,不僅如此,更為以后我們的編程學(xué)習(xí)和工作獲得了一些初級(jí)經(jīng)驗(yàn),我明天積累下重要財(cái)富。雖然通過自己的努力,解決了很多從前沒有遇到的問題,但依舊有無數(shù)的難題擺在我面前,重重疊疊的大山阻礙著我前進(jìn)的道路。山高人為峰,我一定不會(huì)懼怕擺在前面的困難,不斷努力奮斗,爭(zhēng)取看到更多的陽光。目前的程序漏洞確實(shí)還是很多,但編成之后的成就感還是會(huì)油然而生,成為我向程序設(shè)計(jì)之路成功邁出的第一步,同時(shí),對(duì)于我的VC++的應(yīng)用水平也有很大的提高,用起來會(huì)更加?jì)故?、得心?yīng)手。從易到難這是一個(gè)準(zhǔn)則,總之,數(shù)據(jù)結(jié)構(gòu)的研究會(huì)對(duì)增長(zhǎng)程序閱讀能力、程序編寫能力等起到了意想不到的作用。在以后漫漫的研究學(xué)習(xí)道路上,我還有很遠(yuǎn)的路要走,迎接我的是又一個(gè)嚴(yán)峻的挑戰(zhàn)!實(shí)驗(yàn)二課程設(shè)計(jì)的題目和要求:題目:停車場(chǎng)管理問題問題描述設(shè)有一個(gè)可以停放n輛汽車的狹長(zhǎng)停車場(chǎng),它只有一個(gè)大門可以供車輛進(jìn)出。車輛按到達(dá)停車場(chǎng)時(shí)間的早晚依次從停車場(chǎng)最里面向大門口處停放(最先到達(dá)的第一輛車放在停車場(chǎng)的最里面)。如果停車場(chǎng)已放滿n輛車,則后來的車輛只能在停車場(chǎng)大門外的便道上等待,一旦停車場(chǎng)內(nèi)有車開走,則排在便道上的第一輛車就進(jìn)入停車場(chǎng)。停車場(chǎng)內(nèi)如有某輛車要開走,在它之后進(jìn)入停車場(chǎng)的車都必須先退出停車場(chǎng)為它讓路,待其開出停車場(chǎng)后,這些車輛再依原來的次序進(jìn)場(chǎng)。每輛車在離開停車場(chǎng)時(shí),都應(yīng)根據(jù)它在停車場(chǎng)內(nèi)停留的時(shí)間長(zhǎng)短交費(fèi)。如果停留在便道上的車未進(jìn)停車場(chǎng)就要離去,允許其離去,不收停車費(fèi),并且仍然保持在便道上等待的車輛的次序。編制一程序模擬該停車場(chǎng)的管理。實(shí)現(xiàn)要求要求程序輸出每輛車到達(dá)后的停車位置(停車場(chǎng)或便道上),以及某輛車離開停車場(chǎng)時(shí)應(yīng)交納的費(fèi)用和它在停車場(chǎng)內(nèi)停留的時(shí)間。實(shí)現(xiàn)提示汽車的模擬輸入信息格式可以是:(到達(dá)/離去,汽車牌照號(hào)碼,到達(dá)/離去的時(shí)刻)。例如,(‘A’,,1,5)表示1號(hào)牌照車在5這個(gè)時(shí)刻到達(dá),而(‘D’,,5,20)表示5號(hào)牌照車在20這個(gè)時(shí)刻離去。整個(gè)程序可以在輸入信息為(‘E’,0,0)時(shí)結(jié)束。本題可用棧和隊(duì)列來實(shí)現(xiàn)。二.設(shè)計(jì)與實(shí)現(xiàn):(1)基本思路此停車場(chǎng)管理系統(tǒng)是在一個(gè)狹長(zhǎng)的通道上的,而且只有一個(gè)大門可以供車輛進(jìn)出,并且要實(shí)現(xiàn)停車場(chǎng)內(nèi)某輛車要離開時(shí),在它之后進(jìn)入停車場(chǎng)的車都必須先退出停車場(chǎng)為它讓路,待其開出停車場(chǎng)后,這些車輛再依原來的次序進(jìn)場(chǎng)的功能,就可以設(shè)計(jì)兩個(gè)堆棧,其中一個(gè)堆棧用來模擬停車場(chǎng),另一個(gè)堆棧用來模擬臨時(shí)停車場(chǎng),該臨時(shí)停車場(chǎng)用來存放當(dāng)有車輛離開時(shí),原來停車場(chǎng)內(nèi)為其讓路的車輛。至于當(dāng)停車場(chǎng)已滿時(shí),需要停放車輛的通道可以用一個(gè)鏈隊(duì)列來實(shí)現(xiàn)。當(dāng)停車場(chǎng)內(nèi)開走一輛車時(shí),通道上便有一輛車進(jìn)入停車場(chǎng),此時(shí)只需要改變通道上車輛結(jié)點(diǎn)的連接方式就可以了,使通道上第一輛車進(jìn)入停車場(chǎng)這個(gè)堆棧,并且使通道上原來的第二輛車成為通道上的第一輛車,此時(shí)只需將模擬通道的鏈隊(duì)列的頭結(jié)點(diǎn)連到原來的第二輛車上就可以了。對(duì)于此停車場(chǎng)管理系統(tǒng)的實(shí)現(xiàn),就是用兩個(gè)堆棧來分別模擬停車場(chǎng)以及停車場(chǎng)內(nèi)車輛為其它車輛讓路時(shí)退出停車的臨時(shí)停放地點(diǎn)。至于通道上車輛的停放則用一個(gè)鏈隊(duì)列來實(shí)現(xiàn),此時(shí),通道上車輛的離開或者進(jìn)入停車場(chǎng)只需改變此鏈隊(duì)列上的結(jié)點(diǎn)而已。對(duì)于要對(duì)停車場(chǎng)內(nèi)的車輛根據(jù)其停放時(shí)間收取相應(yīng)的停車費(fèi)用,可以記錄下車輛進(jìn)入以及離開停車場(chǎng)的時(shí)間,再用時(shí)間差乘以相應(yīng)的單價(jià)并且打印出最后的費(fèi)用就可以實(shí)現(xiàn)了。主要數(shù)據(jù)結(jié)構(gòu)typedefstructnode{intnum;intreachtime;intleavetime;}CarNode;/*車輛信息結(jié)點(diǎn)*/typedefstructNODE{CarNode*stack[MAX+1];inttop;}SeqStackCar;/*模擬車站*/typedefstructcar{CarNode*data;structcar*next;}QueueNode;typedefstructNode{QueueNode*head;QueueNode*rear;}LinkQueueCar;/*鏈隊(duì)列模擬通道*/程序的算法和主要流程intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*車輛到達(dá)*/{CarNode*p;QueueNode*t;p=(CarNode*)malloc(sizeof(CarNode));printf("\t\t\t請(qǐng)輸入到達(dá)車輛車牌號(hào):");scanf("%d",&(p->num));if(Enter->top<MAX)/*車場(chǎng)未滿,車進(jìn)車場(chǎng)*/{Enter->top++;printf("\n\t\t\t該車輛在停車場(chǎng)的位置是:%d\n",Enter->top);printf("\n\t\t\t請(qǐng)輸入該車輛到達(dá)的時(shí)間:");scanf("%d",&(p->reachtime));Enter->stack[Enter->top]=p;return(1);}else/*車場(chǎng)已滿,車進(jìn)便道*/{printf("\n\t\t\t停車場(chǎng)已滿該車輛需在便道上等待!");t=(QueueNode*)malloc(sizeof(QueueNode));t->data=p;t->next=NULL;W->rear->next=t;W->rear=t;return(1);}}voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)/*車輛離開*/{introom;CarNode*p,*t;QueueNode*q;/*判斷車場(chǎng)內(nèi)是否有車*/if(Enter->top>0)/*有車*/{while(1)/*輸入離開車輛的信息*/{printf("\t\t\t停車場(chǎng)里停放的車輛總數(shù):%d",Enter->top);printf("\n\n\t\t\t請(qǐng)輸入要離開車輛的位置:");scanf("%d",&room);if(room>=1&&room<=Enter->top)break;}while(Enter->top>room)/*車輛離開*/{Temp->top++;Temp->stack[Temp->top]=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;}p=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;while(Temp->top>=1){Enter->top++;Enter->stack[Enter->top]=Temp->stack[Temp->top];Temp->stack[Temp->top]=NULL;Temp->top--;}PRINT(p);/*判斷通道上是否有車及車站是否已滿*/if((W->head!=W->rear)&&Enter->top<MAX)/*便道的車輛進(jìn)入車場(chǎng)*/{q=W->head->next;t=q->data;Enter->top++;printf("\n\n\t\t\t便道的%d號(hào)車進(jìn)入車場(chǎng)第%d位置.",t->num,Enter->top);printf("\n\n\t\t\t請(qǐng)輸入現(xiàn)在的時(shí)間:");scanf("%d",&(t->reachtime));W->head->next=q->next;if(q==W->rear)W->rear=W->head;Enter->stack[Enter->top]=t;free(q);}elseprintf("\n\n\t\t\t便道里沒有車.\n");}elseprintf("\n\n\t\t\t車場(chǎng)里沒有車.");/*沒車*/}程序?qū)崿F(xiàn)過程中的主要難點(diǎn)和解決方法<1>在剛開始進(jìn)行停車場(chǎng)管理系統(tǒng)分析時(shí),我始終沒有解決如何在一輛車要離開停車場(chǎng)時(shí),它后面的車要為它讓路這件事,如果是堆棧的增加減少,整個(gè)程序顯得過于麻煩,所以經(jīng)過查找資料,我發(fā)現(xiàn)建立一個(gè)臨時(shí)停車場(chǎng)來存放一輛車在離開時(shí)它后面的車是最簡(jiǎn)單的解決方法,編入程序也簡(jiǎn)潔明了,瞬間降低了程序的復(fù)雜度,我覺得很開心。<2>在剛開始程序執(zhí)行程序時(shí),選擇執(zhí)行一個(gè)任務(wù)后就會(huì)跳轉(zhuǎn)到一個(gè)全新的界面,之前的選項(xiàng)不復(fù)存在,所以只能進(jìn)行單一的選擇,不能連貫執(zhí)行形成一個(gè)動(dòng)態(tài)存取過程,因此我想到由于此停車場(chǎng)管理系統(tǒng)是分模塊設(shè)計(jì)的,而且在程序的實(shí)現(xiàn)過程中又使用了清屏函數(shù),那么,運(yùn)行時(shí)用戶選擇任務(wù)并且執(zhí)行完任務(wù)后,又會(huì)回到供用戶選擇功能的主界面,因此整個(gè)程序從整體上來講結(jié)構(gòu)清晰,使用方便。三.實(shí)驗(yàn)結(jié)果與分析:(1)實(shí)驗(yàn)的準(zhǔn)備首先定義用來模擬停車場(chǎng)的堆棧以及用來模擬通道的鏈隊(duì)列為全局變量,然后編寫主函數(shù),在此主函數(shù)中實(shí)現(xiàn)對(duì)其它各個(gè)模塊的調(diào)用。在主函數(shù)中首先調(diào)用option()函數(shù),出現(xiàn)歡迎用戶使用的主界面,然后提示用戶進(jìn)入此停車場(chǎng)管理系統(tǒng)后,再出現(xiàn)一個(gè)供用戶選擇的界面,在用戶的選擇過程中,程序又分別調(diào)用車輛的到達(dá)、車輛的離開、停車場(chǎng)內(nèi)停放車輛的信息以及退出程序這四個(gè)函數(shù)模塊。其中,在車輛的離開那個(gè)模塊函數(shù)中又調(diào)用了打印離開車輛信息的函數(shù),在停車場(chǎng)內(nèi)停放車輛信息的那個(gè)模塊函數(shù)中,又分別調(diào)用了顯示停車場(chǎng)上車輛信息的函數(shù)以及顯示便道上車輛信息的函數(shù)。最后,從調(diào)用的這四個(gè)函數(shù)中回到主函數(shù)結(jié)束整個(gè)程序的運(yùn)行。(2)實(shí)驗(yàn)結(jié)果及分析<1>開始界面,界面清晰簡(jiǎn)潔,一目了然<2>車輛到達(dá),輸入到達(dá)車輛的車牌號(hào),該車輛在停車場(chǎng)存放的位置以及車輛到達(dá)的時(shí)間,則這些信息就會(huì)存儲(chǔ)在存車信息中。<3>我暫時(shí)將整個(gè)停車場(chǎng)的最大容車輛定在了兩輛,就是為了檢測(cè)一下通道是否正常運(yùn)行。第二輛車可以正常存放在停車場(chǎng)的二號(hào)位置,但是第三輛車進(jìn)入就會(huì)顯示停車場(chǎng)已滿,該車輛需要停在便道上等待,程序運(yùn)行符合預(yù)期要求。<4>查看存車信息。依次顯示車場(chǎng),便道的車輛信息,顯示車輛的位置,到達(dá)時(shí)間以及車牌

溫馨提示

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