數據結構課程設計停車場管理報告_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

5、理系統(tǒng)是充分利用數據結構中棧和隊列的思想實現的,棧是一種只能在叫做棧的一段進行進?;蛘叱鰲2僮鞯木€性數據結構。棧的主要特點是”后進先出”,即后進棧的元素先處理。停車場的容量即為棧的存儲空間,停車場的車輛的停靠是無秩序的,因此采用鏈式存儲的方式更適合,也方便車輛的調度。</p><p>  隊列是限定僅能在表的一端進行插入,在表的另一端進行刪除的線性表。隊列中可以插入的一端稱為隊尾,可以刪除的一端稱為隊首。把一個元

6、素插入隊列中的操作為進隊,隊列中刪除一個元素的操作為出隊。隊列存取操作符合:先進先出。停車場的車輛到達停車和車輛的離開的管理方式就是采用隊列的“先進先出”的移動的思想。停車場的入口就是隊列的隊首,停車場的出口就是隊列的隊尾。</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.詳細設計</b></p><p>  1.全局變量及編譯預處理語句#define ERROR 0#define OK 1#define NULL 0int count=0; //隊列是否為空的標志int tim

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

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

10、調用入隊函數else {S.top->passport=e.passport;S.top->time=e.time;S.top++;}}int pop(stack &S,node &e){ //出棧函數if(S.top==S.base)return ERROR;</p><p>  (1)一開始在調試程序時遇到了內存錯誤,經過DEBUG,找到了引起內存錯誤的原因:即在建

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

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

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

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

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

16、(便道):2D,2,35 停留時間:25分鐘 需交費:37.50元D,4,40 停留時間:5分鐘 需交費: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("停車場費率為:");</p><p>  cin>>money;</p><p>  while(exit!=OK){</p><p>  printf("\n請輸入車輛數據\nA到達 D離去 E結束:");<

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("請輸入車輛進場時間:");</p><p>  if(info=='D')printf("請輸入車輛離場時間:");</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("停車位置(停車場內):%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("停留時間:%d分鐘 您需交費:%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>  參考文獻:數據結構(C語言版)嚴蔚敏 吳偉民 編著 清華大學出版社</p><p>  數據結構實驗教程(C語言版)王國鈞 唐國民 編著 清華大學出版社</p&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論