數(shù)據(jù)結構課程設計--停車場管理系統(tǒng)_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《數(shù)據(jù)結構》課程設計</p><p><b>  報告</b></p><p>  學 院:_電氣與信息工程學院_ 專業(yè)班級: </p><p>  學生姓名: 學 號: </p><p>  設計地點(單位)__ _ 計算機基礎自主學習中心 __ _ _設計題

2、目:_ 停車場管理模擬程序的設計_______ </p><p>  完成日期:2012年 7 月 6 日 </p><p>  指導教師評語: ______________________ _________________</p><p>  ____________________________________________

3、_____________________________________________________________________________________________________________________________________________________________ __________ _ </p><p

4、>  成績(五級記分制):______ __________ 指導教師(簽字):________ ________</p><p><b>  課程設計任務書</b></p><p>  設計題目:停車場管理模擬程序的設計</p><p><b>  摘要</b></p>

5、;<p>  在這個科技發(fā)達的時代,汽車對于我們來說越來越普遍,而人們對停車場的管理也更加信息化。本系統(tǒng)主要是對僅有一個門的停車場的簡單管理的設計。對汽車進入停車場,若停車場滿,進入便道等候,車場中有車離開后,便道上的車依次進入停車場有一定的管理。而且停車場也有合理的收費標準。</p><p>  該系統(tǒng)主要運用的是C語言和數(shù)據(jù)結構的相關知識,用棧(后進先出)來模擬停車場,隊列(先進先出)來模擬便道

6、實現(xiàn)對汽車進入和離開的管理,用簡單的數(shù)據(jù)計算對汽車進行收費標準。使車主更清楚了解停車場的信息,車主可以根據(jù)系統(tǒng)的提示進行每一項的操作。</p><p>  關鍵詞:停車場管理 C語言 數(shù)據(jù)結構 棧 隊列</p><p><b>  目 錄</b></p><p>  1設計內容和要求1</p><p><b>

7、;  1.1設計內容1</b></p><p><b>  1.2設計要求1</b></p><p><b>  2 概要設計2</b></p><p>  2.1 棧的抽象數(shù)據(jù)類型定義2</p><p>  2.2 模塊的劃分4</p><p>&l

8、t;b>  3 詳細設計5</b></p><p>  3.1 數(shù)據(jù)類型的定義5</p><p>  3.2 主要模塊的算法流程圖5</p><p>  3.3 主要模塊的算法描述7</p><p>  4 軟件的測試13</p><p><b>  5 總結16</b&g

9、t;</p><p><b>  參考文獻17</b></p><p><b>  致謝18</b></p><p><b>  附錄19</b></p><p><b>  1設計內容和要求</b></p><p><

10、b>  1.1設計內容</b></p><p>  假設停車場是一個可以停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內按車輛到達時間的先后順序,依次由北向南排列(大門在最南端,最先到達的第一輛車停放在車場的最北端),若車場內已停滿n輛車,那么后來的車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當停車場內某輛車要離開時,在它之后進入的車輛必須先退出車場

11、為它讓路,待該輛車開出大門外,其他車輛再按原次序進入車場,每輛停放在車場的車在它離開時必須按它停留的時間長短交納費用(在便道上停車不收費)。試為停車場編制按上述要求進行管理的模擬程序。</p><p><b>  1.2設計要求</b></p><p>  以棧模擬停車場,以隊列模擬便道。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達”或“離去”信息、汽車牌照號碼、到達或離

12、去的時刻。對每一組輸入數(shù)據(jù)進行操作后的輸出信息為:若是車輛到達,則輸出汽車在停車場內或便道上的停車位置(停車位從北向南依次編號);若是車輛離去,則輸出汽車在停車場內停留的時間和應交納的費用。程序退出時,應將停車場的當前情況保存在磁盤上,以便下次運行程序時能恢復到上次退出時的狀態(tài)。</p><p><b>  2 概要設計</b></p><p>  2.1 棧的抽象

13、數(shù)據(jù)類型定義</p><p>  (1)棧的抽象數(shù)據(jù)類型定義</p><p>  AST Stack{</p><p>  數(shù)據(jù)對象:D={ai|ai∈ElemSet,i=1,2,...,n, n≥0}</p><p>  數(shù)據(jù)關系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}</p><

14、;p>  約定an端為棧頂,a1端為棧底。</p><p><b>  基本操作:</b></p><p>  InitStack(&S)</p><p>  操作結果:構造一個空棧S。</p><p>  DestroyStack(&S)</p><p>  初始條件:棧S

15、已存在。</p><p>  操作結果:棧S被銷毀。</p><p>  ClearStack(&S)</p><p>  初始條件:棧S已存在。</p><p>  操作結果:將棧S清為空棧。</p><p>  StackEmpty(S)</p><p>  初始條件:棧S已存在。&

16、lt;/p><p>  操作結果:若棧S為空棧,則返回TRUE,否則FALSE。</p><p>  StackLength(s)</p><p>  初始條件:棧S已存在。</p><p>  操作結果:返回S的元素個數(shù),既棧的長度。</p><p>  GetTop(S,&e)</p><p

17、>  初始條件:棧S已存在且非空。</p><p>  操作結果:用e返回S的棧頂元素。</p><p>  Push(&S,e)</p><p>  初始條件:棧S已存在。</p><p>  操作結果:插入元素e為新的棧頂元素。</p><p>  Pop(&S,&e)</p&g

18、t;<p>  初始條件:棧S已存在且非空。</p><p>  操作結果:刪除S的棧頂元素,并用e返回其值。</p><p>  StackTraverse(S,visit())</p><p>  初始條件:棧S已存在且非空。</p><p>  操作結果:從棧底到棧頂依次對S的每個數(shù)據(jù)元素調用函數(shù)visit()。一旦vis

19、it()失敗,則操作失效。</p><p>  }ADT Stack</p><p> ?。?)隊列的抽象數(shù)據(jù)類型定義</p><p>  ADT Queue{</p><p>  數(shù)據(jù)對象:D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}</p><p>  數(shù)據(jù)關系:R1={<ai-1,ai

20、>|ai-1,ai∈D,i=2,...,n}</p><p>  約定其中a1端為隊列頭,an為隊列尾。</p><p><b>  基本操作:</b></p><p>  InitQueue(&Q)</p><p>  操作結果:構造一個空隊列Q。</p><p>  Destro

21、yQueue(&Q)</p><p>  初始條件:隊列Q已存在。</p><p>  操作結果:隊列Q被銷毀,不再存在。</p><p>  ClearQueue(&Q)</p><p>  初始條件:隊列Q已存在。</p><p>  操作結果:將Q清為空隊列。</p><p&g

22、t;  QueueEmpty(Q)</p><p>  初始條件:隊列Q已存在。</p><p>  操作結果:若Q為空隊列,則返回TRUE,否則FALSE。</p><p>  QueueLength(Q)</p><p>  初始條件:隊列Q已存在。</p><p>  操作結果:返回Q的元素個數(shù),即隊列的長度。&

23、lt;/p><p>  GetHead(Q,&e)</p><p>  初始條件:Q為非空隊列。</p><p>  操作結果:用e返回的隊頭元素。</p><p>  EnQueue(&Q,e)</p><p>  初始條件:隊列Q已存在。</p><p>  操作結果:插入元素e

24、為Q的新的隊尾元素。</p><p>  DeQueue(&Q,&e)</p><p>  初始條件:Q為非空隊列。</p><p>  操作結果:刪除Q的隊頭元素,并用e返回其值。</p><p>  QueueTraverse(Q,visit())</p><p>  初始條件:Q已存在且非空。&l

25、t;/p><p>  操作結果:從隊頭到隊尾,依次對Q的每個數(shù)據(jù)元素調用函數(shù)visit()。一旦visit() 失敗,則操作失敗。</p><p>  }ADT Queue </p><p><b>  2.2 模塊的劃分</b></p><p>  該系統(tǒng)主要有7個模塊,即:主函數(shù)模塊、棧模塊(模擬停車場)、隊列

26、模塊(模擬便道)、汽車進入模塊、汽車離開模塊、系統(tǒng)信息保存模塊、系統(tǒng)輸出顯示模塊。</p><p><b>  3 詳細設計</b></p><p>  3.1 數(shù)據(jù)類型的定義</p><p>  typedef struct time</p><p><b>  {</b></p>

27、<p>  int hour; </p><p>  int min; </p><p>  }Time; //時間結點 </p><p>  typedef struct carnode</p><p><b>  { </b></p><p>  char num[10

28、]; </p><p>  Time reach; </p><p>  Time leave; </p><p>  }Car; //車輛信息結點 </p><p>  typedef struct node</p><p><b>  { </b></p>&

29、lt;p>  Car *stack[100]; </p><p>  int top; </p><p>  }SqStack; //定義棧表示車位 </p><p>  typedef struct car</p><p><b>  { </b></p><p><

30、b>  int num;</b></p><p>  Car *data; </p><p>  struct car *next; </p><p>  }QNode; </p><p>  typedef struct Node</p><p><b>  { </

31、b></p><p>  QNode *front; </p><p>  QNode *rear; </p><p>  }LinkQueue; //用隊列表示便道道</p><p>  3.2 主要模塊的算法流程圖</p><p><b>  圖4.1 界面顯示</b></p

32、><p><b>  圖4.2 汽車進入</b></p><p><b>  圖4.3汽車離開</b></p><p>  3.3 主要模塊的算法描述</p><p> ?。?)汽車進入停車場: </p><p>  int arrive(SqStack *In,LinkQue

33、ue *W,int n) //車輛到達 (把元素要入棧中)</p><p>  { Car *p; QNode *t; </p><p>  p=(Car *)malloc(sizeof(Car)); flushall(); </p><p>  printf("\n停車場還有%d個停車位(若停車位為0,車可先進入便道等待)"

34、;,n-In->top);</p><p>  printf("\n請輸入車牌號碼:"); gets(p->num); </p><p>  if(In->top<n) //停車場未滿,車進車場 </p><p>  { In->top++;</p><p>  printf

35、("\n停車的位置:%d號停車位。",In->top); </p><p>  printf("\n請輸入車到達的時間格式為“**:**”:"); </p><p>  scanf("%d:%d",&(p->reach.hour),&(p->reach.min));</p>&l

36、t;p>  fprintf(fpout,"車牌號為%s的汽車在%d:%d時進入停車場的%d號車位\n",p->num,p->reach.hour,p->reach.min,In->top);</p><p>  In->stack[In->top]=p;</p><p>  printf("請按任意鍵返回")

37、;getch(); </p><p>  return(1); </p><p><b>  } </b></p><p>  else //停車場已滿,車進便道 </p><p>  { printf("\n停車位已滿,該車須在便道等待!"); </p><p&

38、gt;  fprintf(fpout,"\n停車位已滿,車牌號為%s車須在便道等待!\n",p->num); </p><p>  t=(QNode *)malloc(sizeof(QNode)); </p><p>  t->data=p; t->next=NULL; W->rear->next=t; W->re

39、ar=t; </p><p>  printf("請按任意鍵返回"); getch();</p><p>  return(1); </p><p><b>  } </b></p><p><b>  } </b></p><p>  開始

40、定義汽車節(jié)點指針P和t,先判斷停車場內是否有空位,若In->top<n則汽車進入停車場,然后停車場的棧頂In->top 加1表示增加了新的車輛,接著輸入進入車輛的信息。如果停車場沒有空位,則車進入便道,就是把元素壓入隊列中。</p><p>  (2)汽車離開停車場:</p><p>  void leave(SqStack *In,SqStack *Out,LinkQu

41、eue *W) //車輛離開 </p><p>  { int room; Car *p,*t; QNode *q; </p><p>  //判斷車場內是否有車 </p><p>  if(In->top>0) //有車 </p><p>  { while(1) //輸入離開車輛的信息 &l

42、t;/p><p>  { printf("\n請輸入車在停車場的位置(1-%d):",In->top); scanf("%d",&room); if(room>=1&&room<=In->top) break; </p><p><b>  } </b></p&g

43、t;<p>  while(In->top>room) //車輛離開 </p><p>  { Out->top++; </p><p>  Out->stack[Out->top]=In->stack[In->top]; </p><p>  In->stack[In->top]=

44、NULL; In->top--; </p><p><b>  } </b></p><p>  p=In->stack[In->top]; </p><p>  In->stack[In->top]=NULL; In->top--; </p><p>  wh

45、ile(Out->top>=1) </p><p>  { In->top++; </p><p>  In->stack[In->top]=Out->stack[Out->top]; </p><p>  Out->stack[Out->top]=NULL; Out->top--;

46、 </p><p><b>  } </b></p><p>  feiyong(p,room); </p><p>  //判斷通道上是否有車及車站是否已滿 </p><p>  if(W->front!=W->rear) //便道的車輛進入停車場 </p><p>  {

47、q=W->front->next; t=q->data; In->top++; </p><p>  printf("\n現(xiàn)在停車場有空位了,便道的%s號車將進入停車場第%d號停車位。",t->num,In->top); </p><p>  printf("\n請輸入現(xiàn)在的時間格式為“**:**”:"

48、;); </p><p>  scanf("%d:%d",&(t->reach.hour),&(t->reach.min));</p><p>  fprintf(fpout,"現(xiàn)在停車場有空位了,便道的%s號車在%d:%d時進入停車場第%d號停車位。\n\n",t->num,In->top,t->r

49、each.hour,t->reach.min);</p><p>  W->front->next=q->next; if(q==W->rear);W->rear=W->front; In->stack[In->top]=t; free(q);</p><p><b>  } </b></p>

50、<p><b>  } </b></p><p>  else {printf("\n停車場里沒有車\n");</p><p>  fprintf(fpout,"\n停車場里沒有車\n");}//沒車</p><p>  printf("請按任意鍵返回");getch

51、();</p><p><b>  }</b></p><p>  首先定義一個整型變量room,用來記錄要離開的車輛在停車場的位置,定義車輛結點指針p和t和隊列結點指針q,然后判斷停車場內是否有車,如果有車,就輸入要離開的車輛在停車場的位置。若棧頂位置In->top大于要離開的車位置room,在要離開的車輛后面的車就要先離開,開到臨時停車場,,因此Out所表示

52、的臨時棧的棧頂top加1,用來表示臨時停車場增加1輛車;接著把該車的信息拷貝到棧Out中,然后刪除棧In的棧頂。直到要離開的車輛后面的車都開到臨時停車場之后,該車才離開,離開之后,該車的信息結點In->stack[In->top]置空,然后棧頂In->top減1。之后就把臨時停車場的車開回停車場里,因此停車場的棧頂In->top 加1,然后就把臨時停車場的車結點的信息拷貝到停車場的車結點上,接著刪除臨時停車場車的

53、結點。最后判斷(W->front!=W->rear)即便道上是否有車滿,如果便道有車且停車場未滿,通道的車便可進入停車場,此時指針q指向便道的頭,即隊頭,然后停車場的棧頂In->top 加1以便增加新的車輛,接著輸入要進停車場的車的信息,然后便道隊列的頭結點指向原隊列中第二輛車的結點,接</p><p> ?。?)顯示停車場的出入信息</p><p>  void xia

54、nshi1(SqStack *S) //列表輸出車場信息 </p><p>  { int i; </p><p>  if(S->top>0) //判斷停車場內是否有車 </p><p>  { printf("\n車場:"); printf("\n 位置 到達時間 車牌號\n"); &

55、lt;/p><p>  fprintf(fpout,"\n\車場:"); fprintf(fpout,"\n 位置 到達時間 車牌號\n");</p><p>  for(i=1;i<=S->top;i++) </p><p>  { printf(" %d\t",i); </p

56、><p>  printf("%d:%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min); </p><p>  puts(S->stack[i]->num); fprintf(fpout," %d\t",i); fprintf(fpout,"

57、;%d:%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min); </p><p>  fprintf(fpout,"%s",S->stack[i]->num); </p><p><b>  } </b></p><p

58、><b>  } </b></p><p>  else{ printf("\n停車場里沒有車"); </p><p>  fprintf(fpout,"\n停車場里沒有車"); } </p><p><b>  } </b></p><p&g

59、t;  void xianshi2(LinkQueue *W) //顯示便道信息 </p><p>  { QNode *p; p=W->front->next; </p><p>  if(W->front!=W->rear) //判斷通道上是否有車 </p><p>  { printf("\n便道中車輛的

60、號碼為:\n"); </p><p>  fprintf(fpout,"\n便道中車輛的號碼為:\n"); </p><p>  while(p!=NULL) </p><p><b>  { </b></p><p>  puts(p->data->num);

61、fprintf(fpout,"%s",p->data->num);</p><p>  p=p->next; </p><p><b>  } </b></p><p><b>  } </b></p><p>  else {printf(&qu

62、ot;\n便道里沒有車\n"); fprintf(fpout,"\n便道里沒有車\n\n");}</p><p>  printf("請按任意鍵返回");getch();</p><p><b>  } </b></p><p>  先顯示停車場的信息,首先判斷停車場里是否有車,如果有就輸出

63、車輛信息即車位,車牌號和到達時間。如果停車場里沒有車,就輸出停車場沒有車。再判斷便道上是否有車,如果有車就輸出便道上車輛的車牌號,若沒有就輸出便道上沒有車。最后按任意鍵返回。</p><p> ?。?)計算汽車離開時的收費情況</p><p>  void feiyong(Car *p,int room) //輸出停車站車的信息 </p><p>  { i

64、nt A1,A2,B1,B2; int s,sum; </p><p>  printf("\n請輸入車離開的時間格式為“**:**”:"); </p><p>  scanf("%d:%d",&(p->leave.hour),&(p->leave.min)); </p><p>  pri

65、ntf("\n車牌號碼:"); puts(p->num); </p><p>  printf("\n車到達的時間是: %d:%d",p->reach.hour,p->reach.min); </p><p>  printf("車離開的時間是: %d:%d",p->leave.hour,p->

66、leave.min); </p><p>  fprintf(fpout,"車牌號為%s的汽車在%d:%d時離開,",p->num,p->leave.hour,p->leave.min); </p><p>  A1=p->reach.hour; A2=p->reach.min; </p><p>  B

67、1=p->leave.hour; B2=p->leave.min;</p><p>  s=(B1*60+B2)-(A1*60+A2);</p><p>  if(s%60>=30) sum=(s/60+1)*3;</p><p>  else sum=s/60*3;</p><p>  printf("您所需

68、繳納的費用為: %d元\n",sum); </p><p>  fprintf(fpout,"車主需繳納的費用為: %d元\n\n",sum); </p><p>  free(p); </p><p><b>  }</b></p><p>  首先讓戶主輸入離開時的時間,然后根據(jù)

69、該車到達的時間算出該車總停留的時</p><p>  間,再根據(jù)每小時3元,不足一小時四舍五入即s=(B1*60+B2)-(A1*60+A2);</p><p>  if(s%60>=30) sum=(s/60+1)*3;else sum=s/60*3;算出總的費用。</p><p><b>  。</b></p><

70、p><b>  4 軟件的測試</b></p><p>  進入界面輸入停車場的最大容量為6:</p><p>  圖5.1系統(tǒng)初始化界面圖</p><p>  2.輸入8輛車進入停車場,并顯示停車場的信息:</p><p>  圖4.2汽車進入停車場的示意圖</p><p>  圖4.3汽

71、車進入便道示意圖</p><p>  圖4.4顯示停車場的信息圖</p><p>  3.使3號位的車離開車場,離開后便道上的車進入停車場,并顯示汽車離開后停車場的信息:</p><p>  圖4.5汽車離開車場,便道上的車進入車場的示意圖</p><p>  圖4.6顯示停車場的信息</p><p><b>

72、;  4.退出系統(tǒng):</b></p><p>  圖4.7退出系統(tǒng)示意圖</p><p>  5.停車場的所有出入信息保存在estdout.pc2文件中:</p><p>  圖4.8車場信息存入磁盤的部分示意圖</p><p><b>  5 總結</b></p><p>  通過這

73、次數(shù)據(jù)結構的程序設計,我更加理解了棧和隊列這兩種重要的線性結構。知道了棧和隊列的抽象數(shù)據(jù)類型的定義,知道了棧的順序存儲結構和隊列的鏈式存儲結構的定義和算法描述,也充分的理解了用棧和隊列實現(xiàn)模擬停車場的基本原理。學會了編一些簡單的停車場的程序。這次的程序設計總的來說我覺得編寫的還可以,但是仍然有一些地方需要完善,如把停車場的信息保存在磁盤上,就有一些困難。后面還是通過和同學一起討論才有了大概的思路,知道了從哪里下手。剛開始看到這個程序任務

74、時,我還不知道從哪里下手,該怎么編寫,腦袋里沒有一點頭緒,很盲目,但是后來把題目多讀了幾遍,詳細地對題目分析和思考,理清楚思緒后,就知道具體應該做什么了。編完這個數(shù)據(jù)結構的程序我真的學會了許多東西,它結合了我上學期學習的C語言和這學期學習的數(shù)據(jù)結構的知識。讓我學會把所學的知識充分有效的運用到了一起。又一次鞏固了C語言和數(shù)據(jù)結構的基礎知識。這個過程中的點點滴滴在課堂上是體會不到的,這個過程中的收獲在課堂上也是學不到的。</p>

75、<p>  在編寫這個程序的過程中,我從無從下手到有一點點思路,再到慢慢動手自己編寫,最后把編寫的琳琳碎碎的代碼結合在一起。過程中遇到麻煩有懊惱過,想放棄過,但是最后還是一步一步走過來了。我想不管遇到什么困難,我都不要輕言放棄,因為只要不放棄就還有希望,如果放棄了就什么機會也沒有了。</p><p>  在此我也非常感謝我同學的幫助,他們給我講解程序中的一些小錯誤,或者不懂的地方,幫我理清一些小混亂

76、,減少了我的一些困惑。還要特別感謝我的指導老師。感謝老師的細心認真的輔導,讓我對數(shù)據(jù)結構這門課程有了更深的了解,也懂得了更多知識,他教我怎么理解和分析問題,在剛開始沒有頭緒時,他給我一些小小的提示,在編程序的過程中,遇到棘手的問題,他也耐心認真的給我講解。真的非常感謝你們。</p><p><b>  參考文獻</b></p><p>  [1] 嚴蔚敏 吳偉明. 數(shù)

77、據(jù)結構(C語言版).北京:清華大學出版社 2011: 44-65</p><p>  [2] 何欽銘 顏暉. C語言程序設計 .高等教育出版社 2008</p><p>  [3] 譚浩強 張基溫. C語言程序設計教程 .高等教育出版社 2006</p><p>  [4] Stephen Prata. C Primer Plus(第五版)中文版 .北京:人民郵電出

78、版社 2005: 353-376</p><p><b>  致謝</b></p><p>  非常感謝指導老師的幫助,還有我的同學和室友的幫助。謝謝!</p><p><b>  向蘇虹</b></p><p>  2012年 7月5日</p><p><b> 

79、 附錄</b></p><p>  #include <stdio.h> </p><p>  #include <stdlib.h> </p><p>  #include <conio.h></p><p>  #include <assert.h></p>

80、<p>  typedef struct time{</p><p>  int hour; </p><p>  int min; </p><p>  }Time; //時間結點 </p><p>  typedef struct carnode</p><p>  { char num[

81、10]; </p><p>  Time reach; </p><p>  Time leave; </p><p>  }Car; //車輛信息結點 </p><p>  typedef struct node</p><p>  { Car *stack[100]; </p>

82、<p>  int top; </p><p>  }SqStack; //定義棧表示車位 </p><p>  typedef struct car</p><p>  { int num;</p><p>  Car *data; </p><p>  struct car *next;

83、 </p><p>  }QNode; </p><p>  typedef struct Node</p><p>  { QNode *front; </p><p>  QNode *rear; </p><p>  }LinkQueue; //用隊列表示便道道 </p>&l

84、t;p>  int n ; FILE *fpout;</p><p>  void InitStack(SqStack *); //初始化棧 </p><p>  int InitQueue(LinkQueue *); //初始化隊列 </p><p>  int arrive(SqStack *,LinkQueue *,int); //車輛到達 &l

85、t;/p><p>  void leave(SqStack *,SqStack *,LinkQueue *); //車輛離開 </p><p>  void xianshi(SqStack,LinkQueue); //顯示停車場信息 </p><p>  void feiyong(Car *p,int room);</p><p>  vo

86、id InitStack(SqStack *s) //初始化棧 { </p><p>  int i; s->top=0; </p><p>  for(i=0;i<=n;i++) </p><p>  s->stack[s->top]=NULL; </p><p><b>  }

87、</b></p><p>  int InitQueue(LinkQueue *Q) //初始化隊列 </p><p>  { Q->front=(QNode *)malloc(sizeof(QNode)); </p><p>  if(Q->front!=NULL) </p><p><b> 

88、 { </b></p><p>  Q->front->next=NULL; Q->rear=Q->front; </p><p>  return(1); </p><p><b>  } </b></p><p>  else return(-1); <

89、;/p><p><b>  } </b></p><p>  int arrive(SqStack *In,LinkQueue *W,int n) //車輛到達 (把元素要入棧中) </p><p><b>  { </b></p><p>  Car *p; QNode *t; <

90、/p><p>  p=(Car *)malloc(sizeof(Car)); </p><p>  flushall(); </p><p>  printf("\n停車場還有%d個停車位(若停車位為0,車可先進入便道等待)",n-In->top);</p><p>  printf("\n請輸入車牌號

91、碼:"); </p><p>  gets(p->num); </p><p>  if(In->top<n) //停車場未滿,車進車場 </p><p>  { In->top++;</p><p>  printf("\n停車的位置:%d號停車位。",In->to

92、p); </p><p>  printf("\n請輸入車到達的時間格式為“**:**”:"); </p><p>  scanf("%d:%d",&(p->reach.hour),&(p->reach.min));</p><p>  fprintf(fpout,"車牌號為%s的汽車

93、在%d:%d時進入停車場的%d號車位\n",p->num,p->reach.hour,p->reach.min,In->top);</p><p>  In->stack[In->top]=p;</p><p>  printf("請按任意鍵返回");getch(); </p><p>  retu

94、rn(1); </p><p><b>  } </b></p><p>  else //停車場已滿,車進便道 </p><p>  { printf("\n停車位已滿,該車須在便道等待!"); </p><p>  fprintf(fpout,"\n停車位已滿,車牌號為%

95、s車須在便道等待!\n",p->num); </p><p>  t=(QNode *)malloc(sizeof(QNode)); </p><p>  t->data=p; t->next=NULL; </p><p>  W->rear->next=t; W->rear=t; </p>

96、;<p>  printf("請按任意鍵返回"); getch();</p><p>  return(1); </p><p><b>  } </b></p><p><b>  } </b></p><p>  void leave(SqStac

97、k *In,SqStack *Out,LinkQueue *W) </p><p>  { //車輛離開 </p><p>  int room; Car *p,*t; QNode *q; </p><p>  //判斷車場內是否有車 </p><p>  if(In->top>0) //有車 </

98、p><p>  { while(1) //輸入離開車輛的信息 </p><p>  { printf("\n請輸入車在停車場的位置(1-%d):",In->top); </p><p>  scanf("%d",&room); </p><p>  if(room>=1&

99、amp;&room<=In->top) break; </p><p><b>  } </b></p><p>  while(In->top>room) //車輛離開 </p><p>  { Out->top++; </p><p>  Out->st

100、ack[Out->top]=In->stack[In->top]; </p><p>  In->stack[In->top]=NULL; In->top--; </p><p><b>  } </b></p><p>  p=In->stack[In->top]; <

101、/p><p>  In->stack[In->top]=NULL; In->top--; </p><p>  while(Out->top>=1) </p><p>  { In->top++; </p><p>  In->stack[In->top]=Out->sta

102、ck[Out->top]; </p><p>  Out->stack[Out->top]=NULL; Out->top--; </p><p><b>  } </b></p><p>  feiyong(p,room); </p><p>  //判斷通道上是否有車及車站是否已

103、滿 </p><p>  if(W->front!=W->rear) //便道的車輛進入停車場 </p><p>  { q=W->front->next; </p><p>  t=q->data; In->top++; </p><p>  printf("\n現(xiàn)在停車場有空位

104、了,便道的%s號車將進入停車場第%d號停車位。",t->num,In->top); </p><p>  printf("\n請輸入現(xiàn)在的時間格式為“**:**”:"); </p><p>  scanf("%d:%d",&(t->reach.hour),&(t->reach.min));<

105、;/p><p>  fprintf(fpout,"現(xiàn)在停車場有空位了,便道的%s號車在%d:%d時進入停車場第%d號停車位。\n\n",t->num,In->top,t->reach.hour,t->reach.min);</p><p>  W->front->next=q->next;</p><p> 

106、 if(q==W->rear) W->rear=W->front; </p><p>  In->stack[In->top]=t; </p><p><b>  free(q);</b></p><p><b>  } </b></p><p><b

107、>  } </b></p><p>  else {printf("\n停車場里沒有車\n");</p><p>  fprintf(fpout,"\n停車場里沒有車\n");}//沒車</p><p>  printf("請按任意鍵返回");getch();</p>&

108、lt;p><b>  }</b></p><p>  void xianshi1(SqStack *S) //列表輸出車場信息 </p><p>  { int i; </p><p>  if(S->top>0) //判斷停車場內是否有車 </p><p><b>  {

109、</b></p><p>  printf("\n車場:"); </p><p>  printf("\n 位置 到達時間 車牌號\n"); </p><p>  fprintf(fpout,"\n\n車場:"); </p><p>  fprintf(fpo

110、ut,"\n 位置 到達時間 車牌號\n");</p><p>  for(i=1;i<=S->top;i++) </p><p>  { printf(" %d\t",i); </p><p>  printf("%d:%d ",S->stack[i]->reac

111、h.hour,S->stack[i]->reach.min); </p><p>  puts(S->stack[i]->num); </p><p>  fprintf(fpout," %d\t",i); </p><p>  fprintf(fpout,"%d:%d ",S->

112、;stack[i]->reach.hour,S->stack[i]->reach.min); </p><p>  fprintf(fpout,"%s",S->stack[i]->num); </p><p><b>  } </b></p><p><b>  } &

113、lt;/b></p><p>  else{ printf("\n停車場里沒有車"); </p><p>  fprintf(fpout,"\n停車場里沒有車"); } </p><p><b>  } </b></p><p>  void xianshi2(Li

114、nkQueue *W) //顯示便道信息 </p><p>  { QNode *p; </p><p>  p=W->front->next; </p><p>  if(W->front!=W->rear) //判斷通道上是否有車 </p><p><b>  { </b>

115、;</p><p>  printf("\n便道中車輛的號碼為:\n"); </p><p>  fprintf(fpout,"\n便道中車輛的號碼為:\n"); </p><p>  while(p!=NULL) </p><p>  { puts(p->data->num)

116、; </p><p>  fprintf(fpout,"%s",p->data->num);p=p->next; </p><p><b>  } </b></p><p><b>  } </b></p><p>  else {printf(&

117、quot;\n便道里沒有車\n"); fprintf(fpout,"\n便道里沒有車\n\n");}</p><p>  printf("請按任意鍵返回");getch();</p><p><b>  } </b></p><p>  void xianshi(SqStack S,Link

118、Queue W) </p><p>  { xianshi1(&S); //顯示停車場信息 xianshi2(&W); //顯示停便道信息 } </p><p>  void feiyong(Car *p,int room) //輸出停車站車的信息 </p><p>  { int A1,A2,B1,B2; int s,s

119、um; </p><p>  printf("\n請輸入車離開的時間格式為“**:**”:"); </p><p>  scanf("%d:%d",&(p->leave.hour),&(p->leave.min)); </p><p>  printf("\n車牌號碼:")

120、; puts(p->num); </p><p>  printf("\n車到達的時間是: %d:%d",p->reach.hour,p->reach.min); </p><p>  printf("車離開的時間是: %d:%d",p->leave.hour,p->leave.min); </p>

121、<p>  fprintf(fpout,"車牌號為%s的汽車在%d:%d時離開,",p->num,p->leave.hour,p->leave.min); </p><p>  A1=p->reach.hour; A2=p->reach.min; </p><p>  B1=p->leave.hour; B

122、2=p->leave.min;</p><p>  s=(B1*60+B2)-(A1*60+A2);if(s%60>=30) sum=(s/60+1)*3;</p><p>  else sum=s/60*3;</p><p>  printf("您所需繳納的費用為: %d元\n",sum); </p><p&g

123、t;  fprintf(fpout,"車主需繳納的費用為: %d元\n\n",sum); </p><p>  free(p); </p><p><b>  }</b></p><p>  void main() </p><p>  { fpout=fopen("estd

124、out.pc2","a");</p><p>  assert(fpout);</p><p>  int n; //存儲車庫最大容量</p><p>  SqStack In,Out; LinkQueue Wait; int ch; </p><p>  InitStack(&In); //

125、初始化停車場 InitStack(&Out); //初始化讓路的臨時棧 </p><p>  InitQueue(&Wait); //初始化便道 </p><p>  while(1) </p><p>  { printf("--------------------歡迎使用停車場管理系統(tǒng)-----------------

126、---\n");</p><p>  printf("本停車場的收費標準為3元/小時,不足一小時部分四舍五入\n");</p><p>  printf("請輸入停車場的的最大容量:");scanf("%d",&n);</p><p>  printf("您輸入的停車場容量為%d

127、位\n",n);</p><p>  printf(".................操 作 菜 單...............\n");</p><p>  printf(" 1車輛到達2車輛離開3停車場信息4退出系統(tǒng)\n請您選擇選擇需要操作的:\n");</p><p>  whil

128、e(1) </p><p>  { ch=getch();</p><p>  switch(ch) </p><p>  { case 49:arrive(&In,&Wait,n);break; //車輛到達 </p><p>  case 50:leave(&In,&Out,&W

129、ait);break; //車輛離開 </p><p>  case 51:xianshi(In,Wait);break; //輸出車站信息</p><p>  case 52:{printf("謝謝使用!");exit(0);} //退出主程序 </p><p>  default:printf("\n按鍵無效,請重新按鍵選擇

130、!");</p><p>  }//49-52分別表示"1"-"4"這四個按鍵的鍵值</p><p>  system("CLS");</p><p>  printf("--------------------歡迎使用停車場管理系統(tǒng)--------------------\n"

131、;);</p><p>  printf("本停車場的收費標準為3元/小時,不足一小時部分四舍五入\n");</p><p>  printf("您輸入的停車場容量為%d位\n",n);</p><p>  printf("................. 操 作 菜 單............

132、..........\n");</p><p>  printf(" 1為車輛到達 2為車輛離開 3為停車場信息 4為退出系統(tǒng)\n請您選擇選擇需要操作的:\n");</p><p><b>  } </b></p><p><b>  } </b></p>

溫馨提示

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

評論

0/150

提交評論