![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計《停車場管理系統(tǒng)》_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/1c79a89e-2734-4ede-af73-25df3dc2c14b/1c79a89e-2734-4ede-af73-25df3dc2c14b1.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計《停車場管理系統(tǒng)》_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/1c79a89e-2734-4ede-af73-25df3dc2c14b/1c79a89e-2734-4ede-af73-25df3dc2c14b2.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計《停車場管理系統(tǒng)》_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/1c79a89e-2734-4ede-af73-25df3dc2c14b/1c79a89e-2734-4ede-af73-25df3dc2c14b3.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計《停車場管理系統(tǒng)》_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/1c79a89e-2734-4ede-af73-25df3dc2c14b/1c79a89e-2734-4ede-af73-25df3dc2c14b4.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計《停車場管理系統(tǒng)》_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/1c79a89e-2734-4ede-af73-25df3dc2c14b/1c79a89e-2734-4ede-af73-25df3dc2c14b5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上數(shù)據(jù)結(jié)構(gòu)設(shè)計:停車場管理姓名:韋邦權(quán)專業(yè):2013級計算機科學(xué)與技術(shù)學(xué)號:班級:完成日期: 問題描述設(shè)停車場是一個可停放n輛汽車的狹長通道,且只有一個門可供出入。汽車在停車場內(nèi)按車輛到達時間的先后順序,依次由北向南排列(門在最南端,最先到達的第一輛車停放在車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛汽車即可開入;當停車場內(nèi)某輛車要離開時,在它之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原順序進入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。2 需求分析
2、(1)根據(jù)車輛到達停車場到車輛離開停車場時所停留的時間進行計時收費。(2)當有車輛從停車場離開時,等待的車輛按順序進入停車場停放。實現(xiàn)停車場的調(diào)度功能。(3)用順序棧來表示停車場,鏈隊表示停車場外的便道。(4)顯示停車場信息和便道信息。(5)程序執(zhí)行的命令為:車輛進入停車場 車輛離開停車場 顯示停車場的信息。3 概要設(shè)計31抽象數(shù)據(jù)類型定義(1)棧的抽象數(shù)據(jù)類型定義AST Stack數(shù)據(jù)對象:D=ai|aiElemSet,i=1,2,.,n, n0數(shù)據(jù)關(guān)系:R1=|ai-1,aiD,i=2,.,n約定an端為棧頂,a1端為棧底?;静僮鳎篒nitStack(&S)操作結(jié)果:構(gòu)造一個空棧S。De
3、stroyStack(&S)初始條件:棧S已存在。操作結(jié)果:棧S被銷毀。ClearStack(&S)初始條件:棧S已存在。操作結(jié)果:將棧S清為空棧。StackEmpty(S)初始條件:棧S已存在。操作結(jié)果:若棧S為空棧,則返回TRUE,否則FALSE。StackLength(s)初始條件:棧S已存在。操作結(jié)果:返回S的元素個數(shù),既棧的長度。GetTop(S,&e)初始條件:棧S已存在且非空。操作結(jié)果:用e返回S的棧頂元素。Push(&S,e)初始條件:棧S已存在。操作結(jié)果:插入元素e為新的棧頂元素。Pop(&S,&e)初始條件:棧S已存在且非空。操作結(jié)果:刪除S的棧頂元素,并用e返回其值。St
4、ackTraverse(S,visit()初始條件:棧S已存在且非空。操作結(jié)果:從棧底到棧頂依次對S的每個數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦visit()失敗,則操作失效。ADT Stack(2)隊列的抽象數(shù)據(jù)類型定義ADT Queue數(shù)據(jù)對象:D=ai|aiElemSet,i=1,2,.,n,n0數(shù)據(jù)關(guān)系:R1=|ai-1,aiD,i=2,.,n約定其中a1端為隊列頭,an為隊列尾?;静僮鳎篒nitQueue(&Q)操作結(jié)果:構(gòu)造一個空隊列Q。DestroyQueue(&Q)初始條件:隊列Q已存在。操作結(jié)果:隊列Q被銷毀,不再存在。ClearQueue(&Q)初始條件:隊列Q已存在。操作
5、結(jié)果:將Q清為空隊列。QueueEmpty(Q)初始條件:隊列Q已存在。操作結(jié)果:若Q為空隊列,則返回TRUE,否則FALSE。QueueLength(Q)初始條件:隊列Q已存在。操作結(jié)果:返回Q的元素個數(shù),即隊列的長度。GetHead(Q,&e)初始條件:Q為非空隊列。操作結(jié)果:用e返回的隊頭元素。EnQueue(&Q,e)初始條件:隊列Q已存在。操作結(jié)果:插入元素e為Q的新的隊尾元素。DeQueue(&Q,&e)初始條件:Q為非空隊列。操作結(jié)果:刪除Q的隊頭元素,并用e返回其值。QueueTraverse(Q,visit()初始條件:Q已存在且非空。操作結(jié)果:從隊頭到隊尾,依次對Q的每個數(shù)
6、據(jù)元素調(diào)用函數(shù)visit()。一旦visit()失敗,則操作失敗。ADT Queue 32模塊劃分本程序包括六個模塊:(1)主程序模塊void main()初始化停車站;初始化讓路的臨時棧;初始化通道;輸出主菜單:車輛到達、車輛離開與計費、查看停車場信息;(2)入場模塊int arrive(SqStack *In,LinkQueue *W)車輛進入停車場;計算停車費用(3)出場模塊void leave(SqStack *In,SqStack *Out,LinkQueue *W)車輛離開停車場;(4)輸出模塊void info(SqStack S,LinkQueue W) 輸出停車場信息; (5
7、)棧模塊實現(xiàn)棧的抽象數(shù)據(jù)類型(6)隊列模塊實現(xiàn)隊列的抽象數(shù)據(jù)類型4 詳細設(shè)計41數(shù)據(jù)類型的定義int MAX; /*定義一個全局變量用來存儲車庫最大容量*/ float price;/* 定義一個全局變量用來存儲每車每小時的費用*/ typedef struct time int hour; int min; Time; /*時間結(jié)點*/ typedef struct node char num10; Time reach; Time leave; Car; /*車輛信息結(jié)點*/ typedef struct NODE Car *stack100; int top; SqStack; /*停車
8、站*/ typedef struct car Car *data; struct car *next; QNode; typedef struct Node QNode *head; QNode *rear; LinkQueue; /*通道*/ 42主要模塊的算法描述本程序主要分為四部分:(1)主函數(shù)及程序框架、(2)車輛到達模塊、(3)車輛離開模塊、(4)顯示車輛信息模塊,(1)主函數(shù)void main() SqStack In,Out; LinkQueue Wait; int ch; InitStack(&In); /*初始化停車站*/ InitStack(&Out); /*初始化讓路的臨
9、時棧*/ InitQueue(&Wait); /*初始化通道*/ while(1) printf(-歡迎使用停車場管理系統(tǒng)-n);printf(t本系統(tǒng)由5011工作室開發(fā),作者:鄧春國、段慶龍、梁偉明、丁磊。nn);printf(請輸入停車場的容量:);scanf(%d,&MAX);printf(請輸入停車場的收費標準(元/小時):);scanf(%f,&price);printf(您輸入的停車場容量為%d位,費用為%元/小時。n,MAX,price);printf(n(1)車輛到達n(2)車輛離開n(3)停車場信息n(4)退出系統(tǒng)n請選擇n);while(1) ch=getch();swi
10、tch(ch) case 49:arrive(&In,&Wait);break; /*車輛到達*/ case 50:leave(&In,&Out,&Wait);break; /*車輛離開*/ case 51:info(In,Wait);break; /*輸出車站信息*/case 52:printf(謝謝使用!);exit(0); /*退出主程序*/ default:printf(n按鍵無效,請重新按鍵選擇!);/*49-52分別表示“1”-“4”這四個按鍵的鍵值*/system(CLS);printf(-歡迎使用停車場管理系統(tǒng)-n);printf(t本系統(tǒng)由CG工作室開發(fā),作者:鄧春國、段慶龍
11、、梁偉明、丁磊。nnn);printf(您輸入的停車場容量為%d位,費用為%元/小時。n,MAX,price);printf(n(1)車輛到達n(2)車輛離開n(3)停車場信息n(4)退出系統(tǒng)n請選擇n); (2)車輛離開模塊算法分析void leave(SqStack *In,SqStack *Out,LinkQueue *W) /*車輛離開*/ int room;Car *p,*t;QNode *q;/*開始定義一個整型變量room,用來記錄要離開的車輛在停車場的位置,定義車輛結(jié)點指針p和t和隊列結(jié)點指針q。*/ if(In-top0) /*有車*/ while(1) printf(n請輸
12、入車在停車場的位置(1-%d):,In-top); scanf(%d,&room); if(room=1&roomtop) break; /*判斷停車場內(nèi)是否有車,如果有車,就輸入要離開的車輛在停車場的位置,否則就提示停車場沒車。這里用了while循環(huán)語句,如果輸入的車輛位置超出范圍,就要重新輸入。*/while(In-toproom) /*車輛離開*/Out-top+;Out-stackOut-top=In-stackIn-top;In-stackIn-top=NULL;In-top-;/*如果棧頂位置In-top大于要離開的車位置room(即要離開的車不在停車場的門口)的話,在要離開的車輛
13、前面的車就要先離開,開到臨時停車場,即臨時棧中,因此Out所表示的臨時棧的棧頂top加1,用來表示臨時停車場增加1輛車;接著把該車的信息拷貝到棧Out中,然后刪除棧In的棧頂(即這輛車開走)。*/p=In-stackIn-top; In-stackIn-top=NULL;In-top-;while(Out-top=1) In-top+;In-stackIn-top=Out-stackOut-top; Out-stackOut-top=NULL; Out-top-; /*直到要離開的車輛前面的車都開到臨時停車場之后,該車才離開,離開之后,該車的信息結(jié)點In-stackIn-top置空,然后棧頂I
14、n-top減1。之后就判斷臨時停車場是否有車,有車就一輛一輛的開回停車場里面,因此停車場的棧頂In-top 加1,然后就把臨時停車場的車結(jié)點的信息拷貝到停車場的車結(jié)點上,接著刪除臨時停車場車的結(jié)點 (即Out-stackOut-top=NULL;Out-top-;)。*/PRINT(p,room); if(W-head!=W-rear)&In-tophead-next;t=q-data;In-top+; printf(n便道的%s號車進入車場第%d號停車位。,t-num,In-top); printf(n請輸入現(xiàn)在的時間(格式“*:*”):); scanf(%d:%d,&(t-,&(t-);
15、W-head-next=q-next;if(q=W-rear) W-rear=W-head; In-stackIn-top=t; free(q);/*判斷(W-head!=W-rear)&In-toptop 加1以便增加新的車輛,接著輸入隊頭的車輛信息,即要進去停車場的車的信息,然后便道隊列的頭結(jié)點指向q(即剛進入停車場的車的結(jié)點)的后繼結(jié)點,即原隊列中第二輛車的結(jié)點,接著判斷剛離開的車是否是最后一輛車,如果是,就把隊列置空,即隊頭等于隊尾;之后就把結(jié)點t(即要進入停車場的車)的信息拷貝到停車場棧頂?shù)能囍?,最后釋放p的空間,即原隊頭結(jié)點。*/ else printf(n停車場里沒有車n); /
16、*沒車*/printf(請按任意鍵返回);getch(); leave函數(shù)流程圖如圖所示:結(jié)束開始判斷停車場是否有車圖 leave函數(shù)流程圖否是是是車臨時停車場的車回到停車場便道的車先進入停車場否判斷便道否有車否判斷前面是否有其他車且停車場未滿輸入離開車輛的信息車輛離開前面的車先進入臨時停車場輸出停車場里沒有車定義必要的變量5 測試分析測試數(shù)據(jù)及結(jié)果如下:輸入2輛車的信息,如圖所示:再輸入2輛車的信息,如圖最后選擇車輛離開,輸入第2輛車離開,如圖6 課程設(shè)計總結(jié)通過這次課程設(shè)計使我充分的理解了用棧和隊列實現(xiàn)模擬停車場的基本原理,知道了棧的順序存儲結(jié)構(gòu)和隊列的鏈式存儲結(jié)構(gòu)的定義和算法描述,同時也
17、學(xué)會了編寫停車場問題的程序。雖然此次的程序不是很完備,沒有加入一些更完善的功能,但是總體還是一個比較能體現(xiàn)數(shù)據(jù)結(jié)構(gòu)知識點能力的程序了,當然只是相對于我這個初學(xué)者來說。在剛開始編程的時候,我感到有點無從下手,但經(jīng)過對題目的詳細分析和思考之后,我就知道具體應(yīng)該做什么,怎么做了。經(jīng)過幾天和同學(xué)的一起研究,我完成這個程序,我學(xué)到了很多東西,這是在課堂上無法做到的。 源程序#include#include #include#include#include#define size 1 /停車場位置數(shù)/模擬停車場的堆棧的性質(zhì);typedef struct zanlind int number; /汽車車號
18、int ar_time; /汽車到達時間zanInode;typedef struct zanInode *base; /停車場的堆棧底 zanInode *top; /停車場的堆棧頂 int stacksize_curren;stackhead;/堆棧的基本操作;void initstack(stackhead &L) /構(gòu)造一個空棧 =(zanInode*)malloc(size*sizeof(zanlind); if(! exit(0); =; =0;void push(stackhead &L,zanInode e) /把元素e壓入s棧 *+=e; +;void pop(stackhe
19、ad &L,zanInode &e) /把元素e彈出s棧 if= coutnext=NULL; =0;void enqueue(linkqueue &q,int number,int ar_time) /把元素的插入隊列(屬性為number,ar_time) queueptr p; p=(queueptr)malloc(sizeof(duilie); if(!p) exit(0); p-number=number; p-ar_time=ar_time; p-next=NULL; next=p; =p; +;void popqueue(linkqueue &q,queueptr &w) /把元素
20、的插入隊列(屬性為number,ar_time) queueptr p; if= cout停車場的通道為空 ! !next; w=p; next=p-next; ; if=p) =; void jinru(stackhead &st,linkqueue &q) /對進入停車場的汽車的處理; int number,time_a; coutnumber; couttime_a; if2) zanInode e; =number; =time_a; push(st,e); cout 該車已進入停車場在: 號車道endlendl; else enqueue(q,number,time_a); cout
21、停車場已滿,該車先停在便道的第個位置上endl; void likai(stackhead &st,stackhead &sl,linkqueue &q) /對離開的汽車的處理; /st堆棧為停車場,sl堆棧為倒車場 int number,time_d,flag=1,money,arrivaltime; /q為便道隊列 coutnumber; couttime_d; zanInode e,q_to_s; queueptr w; while(flag) /找到要開出的車,并彈出停車場棧 pop(st,e); push(sl,e); if=number) flag=0; money=*2; arrivaltime=; pop(sl,e); /把臨時堆棧的第一輛車(要離開的)去掉; while /把倒車場的車倒回停車場 pop(sl,e); push(st,e); ifnumber; pu
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45181-2024車聯(lián)網(wǎng)網(wǎng)絡(luò)安全異常行為檢測機制
- 2025年度二零二五年度豪華別墅租賃定金及維護協(xié)議
- 二零二五年度理發(fā)店轉(zhuǎn)讓合同-附帶店鋪裝修及經(jīng)營策略指導(dǎo)
- 二零二五年度砂石料運輸安全培訓(xùn)及應(yīng)急預(yù)案協(xié)議
- 基于大數(shù)據(jù)的小學(xué)數(shù)學(xué)教育分析
- 提升安保措施保障智慧旅游出行安全
- 專業(yè)育嬰師服務(wù)合同
- XX省重點水電工程擴建項目合同2025
- 個人股權(quán)轉(zhuǎn)讓合同書
- 產(chǎn)品售后保養(yǎng)服務(wù)合同樣本
- 2024年公安機關(guān)理論考試題庫附答案【考試直接用】
- 課題申報參考:共同富裕進程中基本生活保障的內(nèi)涵及標準研究
- 2025年浙江嘉興桐鄉(xiāng)市水務(wù)集團限公司招聘10人高頻重點提升(共500題)附帶答案詳解
- 食品企業(yè)如何做好蟲鼠害防控集
- 2025中國聯(lián)通北京市分公司春季校園招聘高頻重點提升(共500題)附帶答案詳解
- 康復(fù)醫(yī)學(xué)科患者隱私保護制度
- 環(huán)保工程信息化施工方案
- 狂犬病暴露后預(yù)防處置
- 紅色中國風2025蛇年介紹
- 2024年安徽省高考地理試卷真題(含答案逐題解析)
- 高等數(shù)學(xué)中符號的讀法及功能(挺全的)
評論
0/150
提交評論