數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-停車場(chǎng)管理_第1頁(yè)
已閱讀1頁(yè),還剩10頁(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、<p>  課 程 設(shè) 計(jì) 報(bào) 告</p><p>  課程名稱 數(shù)據(jù) 結(jié)構(gòu) </p><p>  題 目 停車場(chǎng)管理 </p><p>  學(xué)生姓名 </p><p>  班級(jí)/學(xué)號(hào) &l

2、t;/p><p><b>  需求分析</b></p><p>  設(shè)停車場(chǎng)是一個(gè)可停放n輛汽車的狹長(zhǎng)通道,且只有一個(gè)大門可供</p><p>  汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門在最南端),若停車場(chǎng)內(nèi)已停滿n輛汽車,則后來(lái)的汽車只能在門外的便道上等候,一旦有車開(kāi)走,則排在便道上的第一輛車即可開(kāi)入;當(dāng)停車場(chǎng)內(nèi)

3、某輛車要離開(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)用。試為停車場(chǎng)編制按上述要求進(jìn)行管理的模擬程序。</p><p><b>  【測(cè)試數(shù)據(jù)】</b></p><p>  設(shè)n=2,輸入數(shù)據(jù)為:(’A’,1,5),(’A’,2,10),(’D’,1,15

4、),(’A’,3,20),(’A’,4,25),(’A’,5,30),(’D’,2,35),(’D’,4,40),(’E’,0,0)。其中:’A’表示到達(dá);’D’表示離去;’E’表示輸入結(jié)束。</p><p><b>  概要設(shè)計(jì)</b></p><p>  以棧模擬停車場(chǎng),以隊(duì)列模擬車場(chǎng)外的便道。棧以順序結(jié)構(gòu)實(shí)現(xiàn)。隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。每一組輸入數(shù)據(jù)包括:汽車“到達(dá)”

5、或“離去”信息、汽車牌照號(hào)碼以及到達(dá)或離去的時(shí)刻。</p><p>  輸出信息:若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場(chǎng)內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留的時(shí)間不收費(fèi))。 </p><p><b>  詳細(xì)設(shè)計(jì)</b></p><p><b>  程序設(shè)計(jì)</b&g

6、t;</p><p><b>  1.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</b></p><p>  /*棧,模擬停車場(chǎng)*/</p><p>  typedef struct Car1</p><p>  { //車</p><p>  int number;//汽車車號(hào)</p>

7、<p>  int ar_time;//汽車到達(dá)時(shí)間</p><p><b>  }CarNode;</b></p><p>  typedef struct</p><p>  { //停車場(chǎng)</p><p>  CarNode *base;//停車場(chǎng)的堆棧底</p&g

8、t;<p>  CarNode *top;//停車場(chǎng)的堆棧頂</p><p>  int stacksize;</p><p><b>  }Park;</b></p><p>  /*隊(duì)列,模擬便道*/</p><p>  typedef struct Car2</p><p> 

9、 { //車</p><p>  int number;//汽車車號(hào)</p><p>  int ar_time;//汽車到達(dá)時(shí)間</p><p>  struct Car2 *next;</p><p><b>  }*CarPtr;</b></p><p>  typ

10、edef struct</p><p>  { //便道</p><p>  CarPtr front;//便道的隊(duì)列的對(duì)頭</p><p>  CarPtr rear;//便道的隊(duì)列的隊(duì)尾</p><p>  int length;</p><p>  }Shortcut;</p&

11、gt;<p><b>  2.程序設(shè)計(jì)</b></p><p>  主函數(shù)中包括3個(gè)子函數(shù),A(arrive),D(depart),E(end)</p><p> ?。?)輸入車輛數(shù)據(jù):A為到達(dá),D為離去,E為結(jié)束程序。</p><p> ?。?)接著輸入車輛的牌照信息(3)若為到達(dá)的車輛,輸入進(jìn)場(chǎng)信息,若為離去的車輛,輸入離場(chǎng)

12、信息。</p><p>  (4)若車輛到達(dá),可得到車輛的停放位置信息,若車輛離去,可得到車輛的停放時(shí)間(在便道上的停放時(shí)間除外),以及應(yīng)該交納的費(fèi)用。</p><p> ?。?)本程序不斷循環(huán)要求輸入車輛信息,直到輸入的車輛數(shù)據(jù)為E時(shí),程序結(jié)束。</p><p><b>  調(diào)試分析</b></p><p>  一開(kāi)始

13、在調(diào)試程序時(shí)遇到了內(nèi)存錯(cuò)誤,經(jīng)過(guò)DEBUG,找到了引起內(nèi)存錯(cuò)誤的原因:即在建立隊(duì)頭指針與隊(duì)尾指針時(shí)沒(méi)有對(duì)指針進(jìn)行初始化(沒(méi)有為指針動(dòng)態(tài)分配空間)。問(wèn)題得到解決。</p><p>  本程序中:車輛到達(dá),離去時(shí)的時(shí)間復(fù)雜度均為:O(n)。本程序空間復(fù)雜度為:O(n)</p><p><b>  使用說(shuō)明和測(cè)試結(jié)果</b></p><p>  1.

14、使用說(shuō)明:用戶按照屏幕所顯示的提示來(lái)選擇需要進(jìn)行操作</p><p><b>  2、測(cè)試結(jié)果:</b></p><p>  測(cè)試結(jié)果滿足題目要求,程序無(wú)錯(cuò)誤。</p><p><b>  心得體會(huì)</b></p><p>  通過(guò)此實(shí)驗(yàn),加深了我對(duì)數(shù)據(jù)結(jié)構(gòu)這門課的理解,真正運(yùn)用了知識(shí)。將理論與現(xiàn)實(shí)

15、完美的聯(lián)系在了一起。增強(qiáng)了動(dòng)手能力,對(duì)今后的工作學(xué)習(xí)都有很大的幫助。單調(diào)的看書本沒(méi)有太大的作用,只有去編程才能理解究竟學(xué)習(xí)的作用。同時(shí),編程過(guò)程中遇到過(guò)各種各樣的問(wèn)題,與同學(xué)討論,與老師交流。鍛煉了我的協(xié)做能力與克服困難的能力。編程也極大的提高了我的學(xué)習(xí)積極性。</p><p><b>  附錄</b></p><p>  #include<stdio.h>

16、;</p><p>  #include<stdlib.h></p><p>  #include<malloc.h></p><p>  #define SIZE 2//停車場(chǎng)位置數(shù),共5個(gè)車位</p><p>  typedef int Status;</p><p>  /*棧,模擬停車場(chǎng)

17、*/</p><p>  typedef struct Car1</p><p>  { //車</p><p>  int number;//汽車車號(hào)</p><p>  int ar_time;//汽車到達(dá)時(shí)間</p><p><b>  }CarNode;</b>&

18、lt;/p><p>  typedef struct</p><p>  { //停車場(chǎng)</p><p>  CarNode *base;//停車場(chǎng)的堆棧底</p><p>  CarNode *top;//停車場(chǎng)的堆棧頂</p><p>  int stacksize;</p>

19、<p><b>  }Park;</b></p><p>  /*隊(duì)列,模擬便道*/</p><p>  typedef struct Car2</p><p>  { //車</p><p>  int number;//汽車車號(hào)</p><p>  in

20、t ar_time;//汽車到達(dá)時(shí)間</p><p>  struct Car2 *next;</p><p><b>  }*CarPtr;</b></p><p>  typedef struct</p><p>  { //便道</p><p>  CarPtr

21、 front;//便道的隊(duì)列的對(duì)頭</p><p>  CarPtr rear;//便道的隊(duì)列的隊(duì)尾</p><p>  int length;</p><p>  }Shortcut;</p><p>  /*初始化停車場(chǎng)*/</p><p>  Status InitStack(Park &P){</

22、p><p>  P.base=(CarNode*)malloc(SIZE*sizeof(Car1));</p><p>  if(!P.base) exit(-2);</p><p>  P.top=P.base;</p><p>  P.stacksize=0;</p><p><b>  return 1;&

23、lt;/b></p><p><b>  }</b></p><p>  Status Push(Park &P,CarNode e){//車進(jìn)入停車場(chǎng)</p><p>  *P.top++=e;</p><p>  ++P.stacksize;</p><p><b> 

24、 return 1;</b></p><p><b>  }</b></p><p>  Status Pop(Park &P,CarNode &e){//車離開(kāi)停車場(chǎng)</p><p>  if(P.top==P.base)</p><p>  printf("停車場(chǎng)為空"

25、);</p><p><b>  else</b></p><p><b>  {</b></p><p>  e=*--P.top;</p><p>  --P.stacksize;</p><p><b>  }</b></p><

26、;p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  /*初始化便道*/</b></p><p>  Status InitQueue(Shortcut &S){</p><p>  S.front=S.

27、rear=(CarPtr)malloc(sizeof(Car2));</p><p>  if(!S.front||!S.rear) exit(-2);</p><p>  S.front->next=NULL;</p><p>  S.length=0;</p><p><b>  return 1;</b>&l

28、t;/p><p><b>  }</b></p><p>  Status EnQueue(Shortcut &S,int number,int ar_time){//車進(jìn)入便道</p><p><b>  CarPtr p;</b></p><p>  p=(CarPtr)malloc(siz

29、eof(Car2));</p><p>  if(!p) exit(-2);</p><p>  p->number=number;</p><p>  p->ar_time=ar_time;</p><p>  p->next=NULL;</p><p>  S.rear->next=p;&l

30、t;/p><p><b>  S.rear=p;</b></p><p>  ++S.length;</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  Status DeQueue(Short

31、cut &S,CarPtr &w){//車離開(kāi)便道</p><p>  if(S.length == 0)</p><p>  printf("通道為空");</p><p><b>  else</b></p><p><b>  {</b></p>

32、<p>  w = S.front->next;</p><p>  S.front->next=S.front->next->next;</p><p>  --S.length;</p><p><b>  }</b></p><p><b>  return 1;&l

33、t;/b></p><p><b>  }</b></p><p>  Status Arrival(Park &P,Shortcut &S){//對(duì)進(jìn)站車輛的處理</p><p>  int number,ar_time;</p><p>  printf("請(qǐng)輸入車牌號(hào):")

34、;</p><p>  scanf("%d",&number);</p><p>  printf("進(jìn)場(chǎng)的時(shí)刻:");</p><p>  scanf("%d",&ar_time);</p><p>  if(P.stacksize<SIZE)</p&g

35、t;<p><b>  {</b></p><p>  CarNode c;</p><p>  c.number=number;</p><p>  c.ar_time=ar_time;</p><p>  Push(P,c);</p><p>  printf("請(qǐng)將車

36、停在第%d號(hào)車道。\n",P.stacksize);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  EnQueue(S,number,ar_time);</p&g

37、t;<p>  printf("停車場(chǎng)已滿,請(qǐng)暫時(shí)停在便道的第%d個(gè)位置。\n",S.length);</p><p><b>  }</b></p><p><b>  return 1;</b></p><p><b>  }</b></p><

38、;p>  Status Leave(Park &P,Park &P1,Shortcut &S){//對(duì)離站車輛的處理</p><p>  int number,le_time,flag=1,money,ar_time;</p><p>  printf("請(qǐng)輸入車牌號(hào):");</p><p>  scanf(&quo

39、t;%d",&number);</p><p>  printf("出場(chǎng)的時(shí)刻:");</p><p>  scanf("%d",&le_time);</p><p>  CarNode e,m;</p><p><b>  CarPtr w;</b>&l

40、t;/p><p>  while(P.stacksize)</p><p><b>  {</b></p><p><b>  Pop(P,e);</b></p><p>  if(e.number==number)</p><p><b>  {</b>&

41、lt;/p><p><b>  flag=0;</b></p><p>  money=(le_time-e.ar_time)*2;</p><p>  ar_time=e.ar_time;</p><p><b>  break;</b></p><p><b>  

42、}</b></p><p>  Push(P1,e);</p><p><b>  }</b></p><p>  while(P1.stacksize)</p><p><b>  {</b></p><p>  Pop(P1,e);</p>&l

43、t;p>  Push(P,e);</p><p><b>  }</b></p><p>  // 車從停車場(chǎng)中出</p><p>  if (flag == 0)</p><p><b>  {</b></p><p>  if(S.length!=0)</p&

44、gt;<p><b>  {</b></p><p>  DeQueue(S,w);</p><p>  m.ar_time=le_time;</p><p>  m.number=w->number;</p><p>  Push(P,m);</p><p><b>

45、;  free(w);</b></p><p>  printf("車牌號(hào)為%d的車已由便道進(jìn)入停車場(chǎng)\n",m.number);</p><p><b>  }</b></p><p>  printf("停車費(fèi)為%d, 占用車位數(shù)為%d\n",money,P.stacksize);<

46、/p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("停車場(chǎng)不存在牌號(hào)為%d的車\n", number);</p><p><

47、b>  }</b></p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  /*主函數(shù)*/</b></p><p>  int main()</p><p><b

48、>  {</b></p><p><b>  int m=1;</b></p><p>  char flag;//選項(xiàng)</p><p><b>  Park P,Q;</b></p><p>  Shortcut S;</p><p>  InitStac

49、k(P);</p><p>  InitStack(Q);</p><p>  InitQueue(S);</p><p><b>  while(m)</b></p><p><b>  {</b></p><p>  printf("\n

50、 停車場(chǎng)管理程序 \n");</p><p>  printf("A 汽車進(jìn)車場(chǎng) D 汽車出車場(chǎng) E 退出程序\n");</p><p>  printf("請(qǐng)選擇(A,D,E): ");</p><p>  scanf("%c",&

51、;flag);</p><p>  switch(flag)</p><p><b>  {</b></p><p><b>  case 'A':</b></p><p><b>  case 'a':</b></p><p

52、>  Arrival(P,S);break; //車進(jìn)入停車場(chǎng)</p><p><b>  case 'D':</b></p><p><b>  case 'd':</b></p><p>  Leave(P,Q,S);break; //車離開(kāi)停車場(chǎng)</p><p

53、><b>  case 'E':</b></p><p><b>  case 'e':</b></p><p><b>  m=0;</b></p><p><b>  break;</b></p><p><

54、b>  default:</b></p><p>  printf("Input error!\n");</p><p><b>  break;</b></p><p><b>  }</b></p><p>  while (flag != '\n&

溫馨提示

  • 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ù)僅提供信息存儲(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)論