停車場系統(tǒng)課程設計報告書_第1頁
停車場系統(tǒng)課程設計報告書_第2頁
停車場系統(tǒng)課程設計報告書_第3頁
停車場系統(tǒng)課程設計報告書_第4頁
停車場系統(tǒng)課程設計報告書_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課 程 設 計課程設計名稱: 數(shù)據(jù)結(jié)構(gòu)課程設計 專 業(yè) 班 級 :學 生 姓 名 :學號 :指 導 教 師 :課程設計時間: 2010.6.21-2010.6.25 計算機科學與技術(shù) 專業(yè)課程設計任務書學生專業(yè)班級學號題 目停車場管理系統(tǒng)課題性質(zhì)A工程設計課題來源D自擬課題指導教師同組無主要容綜合應用所學知識,設計完成一個停車場管理系統(tǒng)。本系統(tǒng)擬實現(xiàn)以下功能:1.處理車輛到達模塊2.處理車輛離開模塊系統(tǒng)要求采用Vc工具進行開發(fā)實現(xiàn)。任務要求綜合運用和融化所學理論知識,提高分析和解決實際問題的能力,達到培養(yǎng)良好程序設計能力和習慣的目的,為開發(fā)滿足問題要求的小型應用軟件奠定基礎(chǔ),達到軟件工程的綜合

2、性基礎(chǔ)訓練的目的。完成需求分析報告,報告中對關(guān)鍵部分給出圖表說明。要求格式規(guī),工作量飽滿。參考文獻數(shù)據(jù)結(jié)構(gòu)(C語言版)嚴蔚敏 清華大學C語言程序設計(第三版)譚浩強 清華大學審查意見指導教師簽字:教研室主任簽字: 2009 年 6 月 19 日1 需求分析11 問題描述設有一個可以停放n輛汽車的狹長停車場,它只有一個大門可以供車輛進出。車輛按到達停車場的時間的早晚依次從停車場最里面向大門口處停放(最先到達的第一輛車放在停車場的最里面)。如果停車場已經(jīng)放滿n輛車,則后來的車輛只能在停車場大門外的便道上等待,一旦停車場有車開走,則排在便道上的第一輛車就進入停車場。停車場某車要開走,在它之后進入停車

3、場的車都必須退出停車場為它讓路,待其開出停車場后,這些車輛再依原來的次序進場。每輛車在離開停車場時,都應根據(jù)它在停車場停留的時間長短交費。如果停留在便道上的車未進停車場就要離去,允許其離去,不收停車費,并且仍保持在便道上等待的車輛的次序。編制一程序模擬該停車場的管理。12 實現(xiàn)要求要求程序輸出每輛車到達后的停車位置(停車場或便道上),以與某車輛離開車場時應繳納的費用。13 實現(xiàn)提示汽車的模擬輸入信息格式可以為:(到達/離去,汽車牌照,到達/離去的時刻)。例如:(A,1,5)表示1號牌照車在第5這個時刻到達,而(D,5,20)表示5號牌照車在第20這個時刻離去。整個程序可以輸入(E,0,0)時結(jié)

4、束。本題可用棧和隊列來實現(xiàn)。2 程序?qū)崿F(xiàn)2.1 設計思想根據(jù)題目要求,停車場只有一個大門,因此可以用棧來模擬;當棧滿后,繼續(xù)來的車輛只能停在便道上,根據(jù)便道停車的特點,可知這可以用一個隊列來模擬,先排隊的車輛先離開便道,進入停車場。由于排在停車場中間的車輛可以提出離開停車場,并且要求在離開車輛到停車場大門之間的車輛都必須先離開停車場,讓此車輛離去,然后再讓這些車輛依原來的次序進入停車場,因此在一個棧和一個隊列的基礎(chǔ)上,還需要一個地方(車輛規(guī)避所)保存為了讓路離開停車場的車輛,很顯然這應該用一個棧來模擬。因此本題用到兩個棧和一個隊列。對于停車場和車輛規(guī)避所,有車輛進入和車輛離去兩個動作,這就是棧

5、的進棧和出棧操作,只是還允許排在中間的車輛先離開停車場,因此在棧中需要進行查找。而對于便道,也有入隊列和出隊列的操作,同樣允許排在中間的車輛先離開隊列。這樣基本動作只需要利用棧和隊列的基本操作即可實現(xiàn)。整個操作過程是:當輸入數(shù)據(jù)表示有車輛到達,則判斷棧是否滿,若未滿就將新數(shù)據(jù)進棧(表示新到達的車輛進入停車場的里面),數(shù)據(jù)應包括車牌號和到達時間;若已滿,就將數(shù)據(jù)放在隊尾,表示車輛在便道上等待進入停車場。當輸入數(shù)據(jù)表示有車輛要離去,就在棧中尋找是否有此車牌號的車輛,如有就讓此車輛離開停車場,并根據(jù)停車時間計費;如沒有找到,就到隊列中(便道上)去尋找此車牌號的車輛,如有就允許此車輛離開隊列,但不收費

6、;如沒就顯示出錯信息。當離開停車場的車輛位于棧的中間時,必須先將此位置到棧頂?shù)乃袛?shù)據(jù)倒到另一個棧中去(車輛規(guī)避所),然后安排車輛出棧,然后將另一個棧中的數(shù)據(jù)倒回到停車場棧中來。如果此時隊列(便道上)不為空,則將第一個元素出隊列(離開便道),進入棧(停車場)中。在模擬停車場管理時,如果停車棧中已沒有車輛停放時,輸入數(shù)據(jù)仍要求車輛退出,則顯示出錯信息。2.2 程序?qū)崿F(xiàn)2.2.1定義頭文件: #include#include2.2.2元素類型、節(jié)點類型 #define N 2 /棧的最大容量#define M 5 /單位時間收費#define TRUE 1#define FALSE 0typede

7、f struct int num; /車牌號int arrtime; /到達時間SElemType;/棧的元素類型typedef structSElemType aN;int top;SqStack; / 棧的類型typedef structint num;struct QNode *next;QNode,*QueuePtr; /隊列的結(jié)點類型typedef structQueuePtr front; /指向頭結(jié)點QueuePtr rear; /指向尾結(jié)點LinkQueue; /隊列的類型2.2.3 函數(shù)模塊(1)初始化棧模塊void initStack(SqStack *s) /初始化棧s-

8、top=-1;(2)入棧模塊 int push(SqStack *s,SElemType x) /數(shù)據(jù)元素x入指針s所指的棧if(s-top=N-1) /棧滿return FALSE;elses-as-top=x;s-top+;return TRUE;(3)出棧模塊SElemType pop(SqStack *s) /棧頂元素出棧 SElemType x;if(s-top=-1) /棧為空x.num=-1;x.arrtime=-1;return x;elses-top-;return s-as-top;(4)初始化隊列模塊void initQueue(LinkQueue *Q) /初始化隊列Q

9、ueuePtr head; head=(QueuePtr)malloc(sizeof(QNode); /為頭結(jié)點分配存儲空間head-next=NULL; /為頭結(jié)點賦初值head-num=0;Q-front=head;Q-rear=head;(5)入隊列模塊void EnQueue(LinkQueue *Q,int num) /數(shù)據(jù)入隊列QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode); /為新結(jié)點分配存儲空間p-num=num;p-next=NULL;Q-rear-next=p;Q-rear=p;Q-front-num+;(6)出隊列模塊int DeQ

10、ueue(LinkQueue *Q) /數(shù)據(jù)出隊列int m;QueuePtr p;if(Q-front=Q-rear) /隊列為空m=-1;return m;p=Q-front-next;Q-front-next=p-next;m=p-num; Q-front-num-;if(p=Q-rear) /如果刪除的是隊尾結(jié)點,則重新給隊尾指針賦值Q-rear=Q-front;return m;(7)處理車輛到達模塊void arrive(SqStack *s1,LinkQueue *Q,SElemType x) /處理車輛到達int f;f=push(s1,x); /新到達的車輛進入停車場棧if(

11、f=FALSE) / 如果停車場棧滿,則進入便道隊列EnQueue(Q,x.num);printf(第%d號車停在便道第%d車位上n,x.num,Q-front-num);else /新到車輛停入停車場棧printf(第%d號車停在停車場第%d號車位上n,x.num,s1-top+1);(8)處理車輛離開模塊void delive(SqStack *s1,SqStack *s2,LinkQueue *Q,SElemType x) /處理車輛離去的情況int n,f=FALSE;SElemType y;QueuePtr p,q;while(s1-top-1)&f!=TRUE) /在停車場中尋找要

12、離開的車輛y=pop(s1);if(y.num!=x.num) /如果棧頂元素不是要離開的車輛,就將其放入車輛規(guī)避所棧n=push(s2,y);elsef=TRUE;if(y.num=x.num) /在停車場中找到要離開的車輛if(x.arrtimetop-1) /車輛規(guī)避所棧不為空,將其全部放回停車場棧y=pop(s2);f=push(s1,y);n=DeQueue(Q); /如果便道上有車,將第一輛車放入停車場if(n!=-1)y.num=n;y.arrtime=x.arrtime; /計費為剛離去的車的離去時間f=push(s1,y);printf(第%d號車停在停車場第%d號車位上n,

13、y.num,s1-top+1);else /在停車場中沒有找到要離去的車輛while(s2-top-1) /將規(guī)避所中的所有車輛放回停車場y=pop(s2);f=push(s1,y);q=Q-front-next;f=FALSE;while(f=FALSE&q!=NULL)/在便道上尋找要離去的車if(q-num!=x.num)p=q;q=q-next;else /在便道上找到該輛車Q-front-num-;Q-rear=p;if(p-next=NULL)Q-rear=Q-front;printf(第%d號車離開便道n,x.num); /讓該輛車離開便道,但不收費f=TRUE;if(f=FAL

14、SE) /在便道上也沒有找到該車,輸入數(shù)據(jù)錯誤printf(輸入錯誤,停車場和便道上均無第%d號車n,x.num);(9)主函數(shù)模塊void main() /停車場模擬管理程序char ch1,ch2;SqStack *s1,*s2;LinkQueue *Q;SElemType x;s1=(SqStack *)malloc(sizeof(SqStack); s2=(SqStack *)malloc(sizeof(SqStack);Q=(LinkQueue *)malloc(sizeof(LinkQueue);initStack(s1); /初始化停車場棧initStack(s2); /初始化規(guī)

15、避所棧initQueue(Q); /初始化便道隊列printf(* 歡迎使用停車場管理系統(tǒng)!*n);printf(n);printf(* 功能導航: *n);printf(n);printf(* A:車輛到達 *n);printf(* D:車輛離去 *n);printf(* E:退出程序 *n);printf(n);doprintf(請輸入數(shù)據(jù):A/D,車牌號,到達/離開時間n);scanf(%c%d%d,&ch1,&x.num,&x.arrtime);ch2=getchar(); /接收ENTERswitch(ch1)case A:case a: arrive(s1,Q,x);break;c

16、ase D:case d: delive(s1,s2,Q,x);break;case E:case e:printf(您的使用!n);break;default:printf(您輸入的數(shù)據(jù)有誤,請重新輸入:n);while(ch1!=e&ch1!=E);3 調(diào)試分析 1.在主函數(shù)中,少了getChar()函數(shù),導致程序?qū)NTER作為字符,從而導致每次輸入都會輸出一句“輸入錯誤,請重新輸入”。 2在if語句中將等號寫成賦值號,導致程序出錯。 3沒有給指針分配存儲空間,導致不能讀錯誤,在使用指針時一定要注意給某些分配存儲空間。 4在出隊列時,沒有考慮到當刪除的正好是尾結(jié)點時,需要對尾結(jié)點重新賦值

17、,導致在處理車輛離開時會出現(xiàn)錯誤信息。4 運行結(jié)果5.實驗環(huán)境(1)Windows XP系統(tǒng)下(2)編程環(huán)境:VC6.0+ ,TC2.06試驗體會 算法與框架寫起來比較簡單,但是具體操作時有很多細節(jié)需要考慮在,否則會出現(xiàn)一系列邏輯錯誤,編程時要養(yǎng)成思慮周全的好習慣,這是一個編程者所必須具備的品質(zhì)。 在輸入變量時要注意變量的大小寫,否則會出現(xiàn)一系列錯誤。對于變量一定要先聲明再使用。作為一個學習編程者,調(diào)試程序能力也是必備的。參 考 文 獻1 數(shù)據(jù)結(jié)構(gòu)(C語言版) 嚴蔚敏 吳偉民著 清華大學2 C語言程序設計(第三版)譚浩強 清華大學信息科學與工程 學院課程設計成績評價表課程名稱:數(shù)據(jù)結(jié)構(gòu)課程設計設計題目:停車場管理系統(tǒng) 專業(yè): 班級: : 學號:序號評審項目分 數(shù)滿分標準說明1 容思路清晰;語言表達準

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論