數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場管理報(bào)告_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)</b></p><p><b>  《停車場管理》</b></p><p><b>  需求分析</b></p><p>  本次的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)所選的題目是停車場管理系統(tǒng)。根據(jù)題目要求,已知停車場是一個可停放n輛汽車的狹長通道,只有一個大門可供汽車出

2、入,由此可將停車場的類型定義為棧,其容量為n。當(dāng)停車場已經(jīng)停滿n輛車后,后來的車輛只能在便道上等待。當(dāng)停車場內(nèi)有車開走,便道上的第一輛汽車便可以進(jìn)入停車場中。根據(jù)其先入先出的特點(diǎn),可以將便道的類型定義為隊(duì)列,容量不限。由題目可知,需停車輛的信息包括:車牌號碼、汽車“到達(dá)”“離去”的信息、“到達(dá)”“離去”的時(shí)刻等。按照從終端讀入的數(shù)據(jù)序列進(jìn)行模擬管理。每輛車需要三個數(shù)據(jù),其中車輛數(shù)據(jù)為:A表示到達(dá),D表示離去,E表示程序結(jié)束。車輛牌照號碼

3、為整型數(shù)據(jù),車輛到達(dá)或離開的時(shí)刻同樣為整型數(shù)據(jù)。輸入車輛到達(dá)應(yīng)該輸出的信息為:汽車在停車場內(nèi)或便道上的停車位置;輸入車輛離開應(yīng)該輸出的信息為汽車在停車場內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留的時(shí)間不收費(fèi))。</p><p>  停車場管理系統(tǒng)主要實(shí)現(xiàn)以下幾個功能:</p><p>  (1)根據(jù)車輛到達(dá)停車場到車輛離開停車場時(shí)所停留的時(shí)間進(jìn)行計(jì)時(shí)收費(fèi)。</p><p&

4、gt;  (2)該程序設(shè)計(jì)能夠通過車牌號能查到該車輛在停車場或便道中的位置。</p><p>  (3)當(dāng)有車輛從停車場離開時(shí),等待的車輛按順序進(jìn)入停車場停放。實(shí)現(xiàn)停車場的調(diào)度功能。</p><p>  該程序設(shè)計(jì)可以完整的模擬停車場的管理過程。</p><p><b>  概要設(shè)計(jì)</b></p><p>  停車場管

5、理系統(tǒng)是充分利用數(shù)據(jù)結(jié)構(gòu)中棧和隊(duì)列的思想實(shí)現(xiàn)的,棧是一種只能在叫做棧的一段進(jìn)行進(jìn)?;蛘叱鰲2僮鞯木€性數(shù)據(jù)結(jié)構(gòu)。棧的主要特點(diǎn)是”后進(jìn)先出”,即后進(jìn)棧的元素先處理。停車場的容量即為棧的存儲空間,停車場的車輛的??渴菬o秩序的,因此采用鏈?zhǔn)酱鎯Φ姆绞礁m合,也方便車輛的調(diào)度。</p><p>  隊(duì)列是限定僅能在表的一端進(jìn)行插入,在表的另一端進(jìn)行刪除的線性表。隊(duì)列中可以插入的一端稱為隊(duì)尾,可以刪除的一端稱為隊(duì)首。把一個元

6、素插入隊(duì)列中的操作為進(jìn)隊(duì),隊(duì)列中刪除一個元素的操作為出隊(duì)。隊(duì)列存取操作符合:先進(jìn)先出。停車場的車輛到達(dá)停車和車輛的離開的管理方式就是采用隊(duì)列的“先進(jìn)先出”的移動的思想。停車場的入口就是隊(duì)列的隊(duì)首,停車場的出口就是隊(duì)列的隊(duì)尾。</p><p>  停車場管理系統(tǒng)流程圖如圖1所示。</p><p><b>  車輛過閘</b></p><p>&l

7、t;b>  、</b></p><p>  圖1 停車場管理系統(tǒng)流程圖</p><p><b>  3.詳細(xì)設(shè)計(jì)</b></p><p>  1.全局變量及編譯預(yù)處理語句#define ERROR 0#define OK 1#define NULL 0int count=0; //隊(duì)列是否為空的標(biāo)志int tim

8、es;stack s,temp; //初始化棧LinkQueue Q; //初始化隊(duì)列</p><p>  2. 車輛信息類型typedef struct node{int passport; //存儲車輛牌照信息int time; //存儲進(jìn)場時(shí)間信息}node;3.棧類型(停車場)typedef struct stack{node *base;node *top;int stacksiz

9、e;}stack;void initstack(stack &S,int n){ //構(gòu)造空棧S.base=(node *)malloc(n*sizeof(node));S.top=S.base;S.stacksize=n;}void push(stack &S,node e){ //入棧函數(shù)if((S.top-S.base)>=S.stacksize){EnQueue(Q,e);} //如果棧滿,

10、調(diào)用入隊(duì)函數(shù)else {S.top->passport=e.passport;S.top->time=e.time;S.top++;}}int pop(stack &S,node &e){ //出棧函數(shù)if(S.top==S.base)return ERROR;</p><p> ?。?)一開始在調(diào)試程序時(shí)遇到了內(nèi)存錯誤,經(jīng)過DEBUG,找到了引起內(nèi)存錯誤的原因:即在建

11、立隊(duì)頭指針與隊(duì)尾指針時(shí)沒有對指針進(jìn)行初始化(沒有為指針動態(tài)分配空間)。問題得到解決。 (2)在Wait函數(shù)中的If語句處,一開始的算法有些問題,導(dǎo)致實(shí)現(xiàn)的功能與設(shè)想的有出入,無法得到正確的結(jié)果。</p><p>  原條件為: S.top-S.base==S.stacksize</p><p>  后改為: (S.top-S.base)==(S.stacksize-1)&&

12、amp;count!=0 </p><p>  該函數(shù)的功能得以正確實(shí)現(xiàn)。</p><p>  (3)在EnQueue函數(shù)中,一開始用的是建立實(shí)體結(jié)點(diǎn),用隊(duì)頭隊(duì)尾指針指向該實(shí)體的方法來創(chuàng)建隊(duì)列。在調(diào)試過程中發(fā)現(xiàn),忽略了生存期,導(dǎo)致隊(duì)列并沒有被創(chuàng)建。改為創(chuàng)建指針,并為指針分配空間,再給頭指針和尾指針賦值的方式解決問題。雖然指針也有生存期,但為它分配的空間卻并沒有被收回,于是隊(duì)列創(chuàng)建成功,問題

13、解決。 (4)本程序中:車輛到達(dá),離去時(shí)的時(shí)間復(fù)雜度均為:O(n)。本程序空間復(fù)雜度為:O(n)。 (5)前面運(yùn)行一切正常,但是最后無法結(jié)束退出。經(jīng)調(diào)試后解決。</p><p><b>  5).用戶手冊</b></p><p>  1、運(yùn)行程序進(jìn)入停車場管理界面,首先輸入停車場容量和停車場費(fèi)率。</p><p>  2、然后根據(jù)車

14、輛到達(dá)和離去的實(shí)際情況輸入A或D。例如車輛到達(dá)輸入A,然后輸入車輛車牌號碼及到達(dá)時(shí)刻。此時(shí)便會顯示車輛停放的信息(在停車場內(nèi),當(dāng)停車場停滿后,車輛會停放在便道上)。</p><p>  3、車輛離開輸入D,然后輸入車輛號碼及離開時(shí)刻。此時(shí)會顯示離開車輛的停車時(shí)間以及應(yīng)繳納的費(fèi)用。</p><p>  4、輸入E結(jié)束本程序。</p><p><b>  6)

15、測試結(jié)果</b></p><p>  測試數(shù)據(jù):設(shè)n=2輸入數(shù)據(jù):2</p><p>  輸出:停車場容量為:2停車場費(fèi)率為:1.5元/分鐘A,1,5 停車位置(停車場內(nèi)):1A,2,10 停車位置(停車場內(nèi)):2D,1,15 停留時(shí)間:10分鐘 需交費(fèi):15.00元A,3,20 停車位置(停車場內(nèi)):2A,4,25 停車位置(便道):1A,5,30 停車位置

16、(便道):2D,2,35 停留時(shí)間:25分鐘 需交費(fèi):37.50元D,4,40 停留時(shí)間:5分鐘 需交費(fèi):7.50元E,0,0</p><p>  7)附錄(源程序代碼)</p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p><p>  #i

17、nclude <iostream.h></p><p>  #include <malloc.h></p><p>  #define ERROR 0</p><p>  #define OK 1</p><p>  #define NULL 0</p><p>  t

18、ypedef struct node{</p><p>  int passport;</p><p><b>  int time;</b></p><p><b>  }node;</b></p><p>  typedef struct stack{</p><p> 

19、 node *base;</p><p>  node *top;</p><p>  int stacksize;</p><p><b>  }stack;</b></p><p>  typedef struct Qnode{</p><p>  node Qdata;</p>

20、<p>  struct Qnode *next;</p><p><b>  }Qnode;</b></p><p>  typedef struct {</p><p>  Qnode *front;</p><p>  Qnode *rear;</p><p>  }LinkQu

21、eue;</p><p>  int count=0;</p><p>  int times;</p><p>  stack s,temp;</p><p>  LinkQueue Q;</p><p>  void initstack(stack &S,int n){</p><p&g

22、t;  S.base=(node *)malloc(n*sizeof(node));</p><p>  S.top=S.base;</p><p>  S.stacksize=n;</p><p><b>  }</b></p><p>  void EnQueue(LinkQueue &Q,node e);&

23、lt;/p><p>  void DeQueue(LinkQueue &Q,node &e);</p><p>  void push(stack &S,node e){</p><p>  if((S.top-S.base)>=S.stacksize){EnQueue(Q,e);}</p><p><b>

24、;  else {</b></p><p>  S.top->passport=e.passport;</p><p>  S.top->time=e.time;</p><p><b>  S.top++;</b></p><p><b>  }</b></p>

25、<p><b>  }</b></p><p>  int pop(stack &S,node &e){</p><p>  if(S.top==S.base)return ERROR;</p><p><b>  --S.top;</b></p><p>  e.pa

26、ssport=S.top->passport;</p><p>  e.time=S.top->time;</p><p>  return OK;</p><p><b>  }</b></p><p>  void wait(stack &S){</p><p>  if(

27、(S.top-S.base)==(S.stacksize-1)&&count!=0){</p><p>  node temp;</p><p>  DeQueue(Q,temp);</p><p>  temp.time=times;</p><p>  push(S,temp);</p><p>&

28、lt;b>  }</b></p><p><b>  }</b></p><p>  void EnQueue(LinkQueue &Q,node e){</p><p><b>  Qnode *q;</b></p><p>  q=(Qnode *)malloc(siz

29、eof(Qnode));</p><p>  q->Qdata.passport=e.passport;</p><p>  q->Qdata.time=e.time;</p><p>  q->next=NULL;</p><p>  if(count==0){Q.front=q;count++;}</p>

30、<p>  Q.rear->next=q;</p><p><b>  Q.rear=q;</b></p><p><b>  }</b></p><p>  void DeQueue(LinkQueue &Q,node &e){</p><p>  if(Q.rea

31、r==NULL){}</p><p><b>  else {</b></p><p>  e.passport=Q.front->Qdata.passport;</p><p>  e.time=Q.front->Qdata.time;</p><p>  Q.front=Q.front->next;

32、</p><p>  if(Q.front==NULL){Q.rear=Q.front;count=0;}</p><p><b>  }</b></p><p><b>  }</b></p><p>  int main(){</p><p>  int n,exit;&

33、lt;/p><p>  float money;</p><p>  char info;</p><p><b>  int pass;</b></p><p>  Q.front=NULL;</p><p>  Q.rear=(Qnode *)malloc(sizeof(Qnode));</

34、p><p>  Q.rear->next=Q.rear;</p><p>  printf("歡迎使用停車場管理系統(tǒng)\n本停車場容量為:");</p><p><b>  cin>>n;</b></p><p>  initstack(s,n);</p><p>

35、  initstack(temp,n);</p><p>  printf("停車場費(fèi)率為:");</p><p>  cin>>money;</p><p>  while(exit!=OK){</p><p>  printf("\n請輸入車輛數(shù)據(jù)\nA到達(dá) D離去 E結(jié)束:");<

36、;/p><p>  cin>>info;</p><p>  if(info=='E'){return 0;}</p><p>  printf("請輸入車輛牌照號碼:");</p><p>  cin>>pass;</p><p>  if(info=='

37、;A')printf("請輸入車輛進(jìn)場時(shí)間:");</p><p>  if(info=='D')printf("請輸入車輛離場時(shí)間:");</p><p>  cin>>times;</p><p>  if(info=='A'){</p><p>

38、<b>  int i,j;</b></p><p><b>  node a;</b></p><p>  a.passport=pass;</p><p>  a.time=times;</p><p>  push(s,a);</p><p>  for(i=1;i&l

39、t;=n;i++){</p><p>  if(s.base[i-1].passport==a.passport){</p><p>  printf("停車位置(停車場內(nèi)):%d\n",i);</p><p><b>  }</b></p><p><b>  }</b><

40、;/p><p>  Qnode *tp;</p><p>  tp=Q.front;</p><p>  if(tp==NULL){}</p><p><b>  else{</b></p><p><b>  j=1;</b></p><p>  whi

41、le(tp!=Q.rear){</p><p>  tp=tp->next;</p><p><b>  j++;</b></p><p><b>  }</b></p><p>  printf("停車位置(便道):%d\n",j);</p><p&g

42、t;<b>  }</b></p><p><b>  }</b></p><p>  else if(info=='D'){</p><p><b>  node d;</b></p><p>  int tp,counter=0;</p>&l

43、t;p><b>  do{</b></p><p>  counter++;</p><p>  tp=pop(s,d);</p><p>  while(tp!=ERROR){</p><p>  if(d.passport==pass){</p><p><b>  float

44、 m;</b></p><p>  m=(times-d.time)*money;</p><p>  printf("停留時(shí)間:%d分鐘 您需交費(fèi):%2.2f元\n",times-d.time,m);</p><p>  while(temp.base!=temp.top){</p><p>  pop(te

45、mp,d);</p><p>  push(s,d);</p><p><b>  }</b></p><p><b>  wait(s);</b></p><p>  d.passport=9999;</p><p><b>  tp=ERROR;</b&g

46、t;</p><p><b>  }</b></p><p><b>  else{</b></p><p>  push(temp,d);</p><p>  d.passport=0;</p><p><b>  tp=ERROR;</b></

47、p><p><b>  }</b></p><p><b>  }</b></p><p>  }while(d.passport==0||counter>n);</p><p><b>  }</b></p><p>  else if(info!=

48、'E'){}</p><p><b>  }</b></p><p><b>  }</b></p><p>  參考文獻(xiàn):數(shù)據(jù)結(jié)構(gòu)(C語言版)嚴(yán)蔚敏 吳偉民 編著 清華大學(xué)出版社</p><p>  數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)教程(C語言版)王國鈞 唐國民 編著 清華大學(xué)出版社</p&

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論