數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)《停車場(chǎng)管理系統(tǒng)》_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)《停車場(chǎng)管理系統(tǒng)》_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)《停車場(chǎng)管理系統(tǒng)》_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)《停車場(chǎng)管理系統(tǒng)》_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)《停車場(chǎng)管理系統(tǒng)》_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):停車場(chǎng)管理姓名:韋邦權(quán)專業(yè):2013級(jí)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)號(hào):班級(jí):完成日期: 問(wèn)題描述設(shè)停車場(chǎng)是一個(gè)可停放n輛汽車的狹長(zhǎng)通道,且只有一個(gè)門可供出入。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(門在最南端,最先到達(dá)的第一輛車停放在車場(chǎng)的最北端),若車場(chǎng)內(nèi)已停滿n輛汽車,則后來(lái)的汽車只能在門外的便道上等候,一旦有車開(kāi)走,則排在便道上的第一輛汽車即可開(kāi)入;當(dāng)停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),在它之后進(jìn)入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開(kāi)出大門外,其他車輛再按原順序進(jìn)入車場(chǎng),每輛停放在車場(chǎng)的車在它離開(kāi)停車場(chǎng)時(shí)必須按它停留的時(shí)間長(zhǎng)短交納費(fèi)用。2 需求分析

2、(1)根據(jù)車輛到達(dá)停車場(chǎng)到車輛離開(kāi)停車場(chǎng)時(shí)所停留的時(shí)間進(jìn)行計(jì)時(shí)收費(fèi)。(2)當(dāng)有車輛從停車場(chǎng)離開(kāi)時(shí),等待的車輛按順序進(jìn)入停車場(chǎng)停放。實(shí)現(xiàn)停車場(chǎng)的調(diào)度功能。(3)用順序棧來(lái)表示停車場(chǎng),鏈隊(duì)表示停車場(chǎng)外的便道。(4)顯示停車場(chǎng)信息和便道信息。(5)程序執(zhí)行的命令為:車輛進(jìn)入停車場(chǎng) 車輛離開(kāi)停車場(chǎng) 顯示停車場(chǎng)的信息。3 概要設(shè)計(jì)31抽象數(shù)據(jù)類型定義(1)棧的抽象數(shù)據(jù)類型定義AST Stack數(shù)據(jù)對(duì)象: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)造一個(gè)空棧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的元素個(gè)數(shù),既棧的長(zhǎng)度。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é)果:從棧底到棧頂依次對(duì)S的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦visit()失敗,則操作失效。ADT Stack(2)隊(duì)列的抽象數(shù)據(jù)類型定義ADT Queue數(shù)據(jù)對(duì)象:D=ai|aiElemSet,i=1,2,.,n,n0數(shù)據(jù)關(guān)系:R1=|ai-1,aiD,i=2,.,n約定其中a1端為隊(duì)列頭,an為隊(duì)列尾?;静僮鳎篒nitQueue(&Q)操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列Q。DestroyQueue(&Q)初始條件:隊(duì)列Q已存在。操作結(jié)果:隊(duì)列Q被銷毀,不再存在。ClearQueue(&Q)初始條件:隊(duì)列Q已存在。操作

5、結(jié)果:將Q清為空隊(duì)列。QueueEmpty(Q)初始條件:隊(duì)列Q已存在。操作結(jié)果:若Q為空隊(duì)列,則返回TRUE,否則FALSE。QueueLength(Q)初始條件:隊(duì)列Q已存在。操作結(jié)果:返回Q的元素個(gè)數(shù),即隊(duì)列的長(zhǎng)度。GetHead(Q,&e)初始條件:Q為非空隊(duì)列。操作結(jié)果:用e返回的隊(duì)頭元素。EnQueue(&Q,e)初始條件:隊(duì)列Q已存在。操作結(jié)果:插入元素e為Q的新的隊(duì)尾元素。DeQueue(&Q,&e)初始條件:Q為非空隊(duì)列。操作結(jié)果:刪除Q的隊(duì)頭元素,并用e返回其值。QueueTraverse(Q,visit()初始條件:Q已存在且非空。操作結(jié)果:從隊(duì)頭到隊(duì)尾,依次對(duì)Q的每個(gè)數(shù)

6、據(jù)元素調(diào)用函數(shù)visit()。一旦visit()失敗,則操作失敗。ADT Queue 32模塊劃分本程序包括六個(gè)模塊:(1)主程序模塊void main()初始化停車站;初始化讓路的臨時(shí)棧;初始化通道;輸出主菜單:車輛到達(dá)、車輛離開(kāi)與計(jì)費(fèi)、查看停車場(chǎng)信息;(2)入場(chǎng)模塊int arrive(SqStack *In,LinkQueue *W)車輛進(jìn)入停車場(chǎng);計(jì)算停車費(fèi)用(3)出場(chǎng)模塊void leave(SqStack *In,SqStack *Out,LinkQueue *W)車輛離開(kāi)停車場(chǎng);(4)輸出模塊void info(SqStack S,LinkQueue W) 輸出停車場(chǎng)信息; (5

7、)棧模塊實(shí)現(xiàn)棧的抽象數(shù)據(jù)類型(6)隊(duì)列模塊實(shí)現(xiàn)隊(duì)列的抽象數(shù)據(jù)類型4 詳細(xì)設(shè)計(jì)41數(shù)據(jù)類型的定義int MAX; /*定義一個(gè)全局變量用來(lái)存儲(chǔ)車庫(kù)最大容量*/ float price;/* 定義一個(gè)全局變量用來(lái)存儲(chǔ)每車每小時(shí)的費(fèi)用*/ typedef struct time int hour; int min; Time; /*時(shí)間結(jié)點(diǎn)*/ typedef struct node char num10; Time reach; Time leave; Car; /*車輛信息結(jié)點(diǎn)*/ 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)車輛到達(dá)模塊、(3)車輛離開(kāi)模塊、(4)顯示車輛信息模塊,(1)主函數(shù)void main() SqStack In,Out; LinkQueue Wait; int ch; InitStack(&In); /*初始化停車站*/ InitStack(&Out); /*初始化讓路的臨

9、時(shí)棧*/ InitQueue(&Wait); /*初始化通道*/ while(1) printf(-歡迎使用停車場(chǎng)管理系統(tǒng)-n);printf(t本系統(tǒng)由5011工作室開(kāi)發(fā),作者:鄧春國(guó)、段慶龍、梁偉明、丁磊。nn);printf(請(qǐng)輸入停車場(chǎng)的容量:);scanf(%d,&MAX);printf(請(qǐng)輸入停車場(chǎng)的收費(fèi)標(biāo)準(zhǔn)(元/小時(shí)):);scanf(%f,&price);printf(您輸入的停車場(chǎng)容量為%d位,費(fèi)用為%元/小時(shí)。n,MAX,price);printf(n(1)車輛到達(dá)n(2)車輛離開(kāi)n(3)停車場(chǎng)信息n(4)退出系統(tǒng)n請(qǐng)選擇n);while(1) ch=getch();swi

10、tch(ch) case 49:arrive(&In,&Wait);break; /*車輛到達(dá)*/ case 50:leave(&In,&Out,&Wait);break; /*車輛離開(kāi)*/ case 51:info(In,Wait);break; /*輸出車站信息*/case 52:printf(謝謝使用!);exit(0); /*退出主程序*/ default:printf(n按鍵無(wú)效,請(qǐng)重新按鍵選擇!);/*49-52分別表示“1”-“4”這四個(gè)按鍵的鍵值*/system(CLS);printf(-歡迎使用停車場(chǎng)管理系統(tǒng)-n);printf(t本系統(tǒng)由CG工作室開(kāi)發(fā),作者:鄧春國(guó)、段慶龍

11、、梁偉明、丁磊。nnn);printf(您輸入的停車場(chǎng)容量為%d位,費(fèi)用為%元/小時(shí)。n,MAX,price);printf(n(1)車輛到達(dá)n(2)車輛離開(kāi)n(3)停車場(chǎng)信息n(4)退出系統(tǒng)n請(qǐng)選擇n); (2)車輛離開(kāi)模塊算法分析void leave(SqStack *In,SqStack *Out,LinkQueue *W) /*車輛離開(kāi)*/ int room;Car *p,*t;QNode *q;/*開(kāi)始定義一個(gè)整型變量room,用來(lái)記錄要離開(kāi)的車輛在停車場(chǎng)的位置,定義車輛結(jié)點(diǎn)指針p和t和隊(duì)列結(jié)點(diǎn)指針q。*/ if(In-top0) /*有車*/ while(1) printf(n請(qǐng)輸

12、入車在停車場(chǎng)的位置(1-%d):,In-top); scanf(%d,&room); if(room=1&roomtop) break; /*判斷停車場(chǎng)內(nèi)是否有車,如果有車,就輸入要離開(kāi)的車輛在停車場(chǎng)的位置,否則就提示停車場(chǎng)沒(méi)車。這里用了while循環(huán)語(yǔ)句,如果輸入的車輛位置超出范圍,就要重新輸入。*/while(In-toproom) /*車輛離開(kāi)*/Out-top+;Out-stackOut-top=In-stackIn-top;In-stackIn-top=NULL;In-top-;/*如果棧頂位置In-top大于要離開(kāi)的車位置room(即要離開(kāi)的車不在停車場(chǎng)的門口)的話,在要離開(kāi)的車輛

13、前面的車就要先離開(kāi),開(kāi)到臨時(shí)停車場(chǎng),即臨時(shí)棧中,因此Out所表示的臨時(shí)棧的棧頂top加1,用來(lái)表示臨時(shí)停車場(chǎng)增加1輛車;接著把該車的信息拷貝到棧Out中,然后刪除棧In的棧頂(即這輛車開(kāi)走)。*/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-; /*直到要離開(kāi)的車輛前面的車都開(kāi)到臨時(shí)停車場(chǎng)之后,該車才離開(kāi),離開(kāi)之后,該車的信息結(jié)點(diǎn)In-stackIn-top置空,然后棧頂I

14、n-top減1。之后就判斷臨時(shí)停車場(chǎng)是否有車,有車就一輛一輛的開(kāi)回停車場(chǎng)里面,因此停車場(chǎng)的棧頂In-top 加1,然后就把臨時(shí)停車場(chǎng)的車結(jié)點(diǎn)的信息拷貝到停車場(chǎng)的車結(jié)點(diǎn)上,接著刪除臨時(shí)停車場(chǎng)車的結(jié)點(diǎn) (即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號(hào)車進(jìn)入車場(chǎng)第%d號(hào)停車位。,t-num,In-top); printf(n請(qǐng)輸入現(xiàn)在的時(shí)間(格式“*:*”):); 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以便增加新的車輛,接著輸入隊(duì)頭的車輛信息,即要進(jìn)去停車場(chǎng)的車的信息,然后便道隊(duì)列的頭結(jié)點(diǎn)指向q(即剛進(jìn)入停車場(chǎng)的車的結(jié)點(diǎn))的后繼結(jié)點(diǎn),即原隊(duì)列中第二輛車的結(jié)點(diǎn),接著判斷剛離開(kāi)的車是否是最后一輛車,如果是,就把隊(duì)列置空,即隊(duì)頭等于隊(duì)尾;之后就把結(jié)點(diǎn)t(即要進(jìn)入停車場(chǎng)的車)的信息拷貝到停車場(chǎng)棧頂?shù)能囍校詈筢尫舙的空間,即原隊(duì)頭結(jié)點(diǎn)。*/ else printf(n停車場(chǎng)里沒(méi)有車n); /

16、*沒(méi)車*/printf(請(qǐng)按任意鍵返回);getch(); leave函數(shù)流程圖如圖所示:結(jié)束開(kāi)始判斷停車場(chǎng)是否有車圖 leave函數(shù)流程圖否是是是車臨時(shí)停車場(chǎng)的車回到停車場(chǎng)便道的車先進(jìn)入停車場(chǎng)否判斷便道否有車否判斷前面是否有其他車且停車場(chǎng)未滿輸入離開(kāi)車輛的信息車輛離開(kāi)前面的車先進(jìn)入臨時(shí)停車場(chǎng)輸出停車場(chǎng)里沒(méi)有車定義必要的變量5 測(cè)試分析測(cè)試數(shù)據(jù)及結(jié)果如下:輸入2輛車的信息,如圖所示:再輸入2輛車的信息,如圖最后選擇車輛離開(kāi),輸入第2輛車離開(kāi),如圖6 課程設(shè)計(jì)總結(jié)通過(guò)這次課程設(shè)計(jì)使我充分的理解了用棧和隊(duì)列實(shí)現(xiàn)模擬停車場(chǎng)的基本原理,知道了棧的順序存儲(chǔ)結(jié)構(gòu)和隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的定義和算法描述,同時(shí)也

17、學(xué)會(huì)了編寫(xiě)停車場(chǎng)問(wèn)題的程序。雖然此次的程序不是很完備,沒(méi)有加入一些更完善的功能,但是總體還是一個(gè)比較能體現(xiàn)數(shù)據(jù)結(jié)構(gòu)知識(shí)點(diǎn)能力的程序了,當(dāng)然只是相對(duì)于我這個(gè)初學(xué)者來(lái)說(shuō)。在剛開(kāi)始編程的時(shí)候,我感到有點(diǎn)無(wú)從下手,但經(jīng)過(guò)對(duì)題目的詳細(xì)分析和思考之后,我就知道具體應(yīng)該做什么,怎么做了。經(jīng)過(guò)幾天和同學(xué)的一起研究,我完成這個(gè)程序,我學(xué)到了很多東西,這是在課堂上無(wú)法做到的。 源程序#include#include #include#include#include#define size 1 /停車場(chǎng)位置數(shù)/模擬停車場(chǎng)的堆棧的性質(zhì);typedef struct zanlind int number; /汽車車號(hào)

18、int ar_time; /汽車到達(dá)時(shí)間zanInode;typedef struct zanInode *base; /停車場(chǎng)的堆棧底 zanInode *top; /停車場(chǎng)的堆棧頂 int stacksize_curren;stackhead;/堆棧的基本操作;void initstack(stackhead &L) /構(gòu)造一個(gè)空棧 =(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) /把元素的插入隊(duì)列(屬性為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、的插入隊(duì)列(屬性為number,ar_time) queueptr p; if= cout停車場(chǎng)的通道為空 ! !next; w=p; next=p-next; ; if=p) =; void jinru(stackhead &st,linkqueue &q) /對(duì)進(jìn)入停車場(chǎng)的汽車的處理; int number,time_a; coutnumber; couttime_a; if2) zanInode e; =number; =time_a; push(st,e); cout 該車已進(jìn)入停車場(chǎng)在: 號(hào)車道endlendl; else enqueue(q,number,time_a); cout

21、停車場(chǎng)已滿,該車先停在便道的第個(gè)位置上endl; void likai(stackhead &st,stackhead &sl,linkqueue &q) /對(duì)離開(kāi)的汽車的處理; /st堆棧為停車場(chǎng),sl堆棧為倒車場(chǎng) int number,time_d,flag=1,money,arrivaltime; /q為便道隊(duì)列 coutnumber; couttime_d; zanInode e,q_to_s; queueptr w; while(flag) /找到要開(kāi)出的車,并彈出停車場(chǎng)棧 pop(st,e); push(sl,e); if=number) flag=0; money=*2; arrivaltime=; pop(sl,e); /把臨時(shí)堆棧的第一輛車(要離開(kāi)的)去掉; while /把倒車場(chǎng)的車倒回停車場(chǎng) pop(sl,e); push(st,e); ifnumber; pu

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論