2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)實驗報告</b></p><p><b>  實驗三 停車場管理</b></p><p><b>  一、題目描述</b></p><p>  設(shè)停車場是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場內(nèi)按到達(dá)時間的先后順序,依次由北向南排列

2、(大門在最南端,最先到達(dá)的第一輛車放在車場的最北端)。若車場內(nèi)已放滿n輛車,則后來的汽車只能在門外的便道上等待,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛汽車要離開時,在它之后進(jìn)入的車輛都必須先退出車場為它讓路,待該輛車開出大門外后,其它車輛再按原次序進(jìn)入車場,每輛停放在車場的車在它離開停車場時,必須按它停留的時間長短交納費用。試為停車場編制按上述要求進(jìn)行管理的模擬程序</p><p><

3、b>  。</b></p><p><b>  二、需求分析</b></p><p>  1.此停車場管理系統(tǒng)是在一個狹長的通道上的,而且只有一個大門可以供車輛進(jìn)出,并且要實現(xiàn)停車場內(nèi)某輛車要離開時,在它之后進(jìn)入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些輛再依原來的次序進(jìn)場的功能。</p><p>  2.

4、設(shè)計兩個堆棧,其中一個堆棧用來模擬停車場,另一個堆棧用來模擬臨時停車場,該臨時停車場用來存放當(dāng)有車輛離開時,原來停車場內(nèi)為其讓路的車輛。至于當(dāng)停車場已滿時,需要停放車輛的通道可以用一個鏈隊列來實現(xiàn)。</p><p>  3.當(dāng)停車場內(nèi)開走一輛車時,通道上便有一輛車進(jìn)入停車場,此時只需要改變通道上車輛結(jié)點的連接方式就可以了,使通道上第一輛車進(jìn)入停車場這個堆棧,并且使通道上原來的第二輛車成為通道上的第一輛車,此時只需

5、將模擬通道的鏈隊列的頭結(jié)點連到原來的第二輛車上就可以了。</p><p>  4.對于要對停車場內(nèi)的車輛根據(jù)其停放時間收取相應(yīng)的停車費用,可以記錄下車輛進(jìn)入以及離開停車場的時間,再用時間差乘以相應(yīng)的單價并且打印出最后的費用就可以實現(xiàn)了。</p><p><b>  三、概要設(shè)計</b></p><p><b>  1.基本要求:<

6、;/b></p><p>  要求程序輸出每輛車到達(dá)后的停車位置(停車場或便道上),以及某輛車離開停車場應(yīng)交納的費用和它在停車場內(nèi)停留的時間。</p><p><b>  2.實現(xiàn)方法</b></p><p>  汽車的模擬輸入信息格式可以是:(到達(dá)/離去,汽車牌照號碼,到達(dá)/離去的時刻)。例如,(‘A’,1,5)表示1號牌照車在5這個時

7、刻到達(dá),而(‘D’,5,20)表示5號牌照車在20這個時刻離去。整個程序可以在輸入信息為(‘E’,0,0)時結(jié)束。用棧和隊列來實現(xiàn)。</p><p><b>  3、主要模塊</b></p><p>  1)此停車場管理系統(tǒng),主要分為以下若干模塊:</p><p>  首先定義用來模擬停車場的堆棧以及用來模擬通道的鏈隊列為全局變量,然后編寫主函

8、數(shù),在此主函數(shù)中實現(xiàn)對其它各個模塊的調(diào)用。在主函數(shù)中首先調(diào)用option()函數(shù),出現(xiàn)歡迎用戶使用的主界面,然后提示用戶進(jìn)入此停車場管理系統(tǒng)后,再出現(xiàn)一個供用戶選擇的界面,在用戶的選擇過程中,程序又分別調(diào)用車輛的到達(dá)、車輛的離開、停車場內(nèi)停放車輛的信息以及退出程序這四個函數(shù)模塊。其中,在車輛的離開那個模塊函數(shù)中又調(diào)用了打印離開車輛信息的函數(shù),在停車場內(nèi)停放車輛信息的那個模塊函數(shù)中,又分別調(diào)用了顯示停車場上車輛信息的函數(shù)以及顯示便道上車輛

9、信息的函數(shù)。最后,從調(diào)鼐的這四個函數(shù)中回到主函數(shù)結(jié)束整個程序的運行。</p><p>  2)在以上各個模塊中,出現(xiàn)的調(diào)用的函數(shù)為:</p><p>  void InitStack(SeqStackCar *s);</p><p>  int InitQueue(LinkQueueCar *Q);</p><p><b>  op

10、tion();</b></p><p>  int Arrival(SeqStackCar *Enter,LinkQueueCar *W);</p><p>  void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W);</p><p>  void PRINT(CarNode *p

11、);</p><p>  void List(SeqStackCar S,LinkQueueCar W);</p><p>  void List1(SeqStackCar *S);</p><p>  void List2(LinkQueueCar *W);</p><p><b>  四、詳細(xì)設(shè)計</b></p

12、><p>  1.相關(guān)頭文件庫的調(diào)用說明</p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p><p>  #include<string.h></p><p>  #define MAX 2 /*車庫容量*/</

13、p><p>  #define price 3 /*每車每時刻費用*/</p><p>  2.元素類型、結(jié)點類型和結(jié)點指針類型</p><p>  typedef struct node</p><p>  { int num;</p><p>  int reachtime;</p><p>

14、  int leavetime;</p><p>  }CarNode; /*車輛信息結(jié)點*/</p><p>  typedef struct NODE</p><p>  { CarNode *stack[MAX+1];</p><p><b>  int top;</b></p><p> 

15、 }SeqStackCar; /*模擬車站*/</p><p>  typedef struct car</p><p>  { CarNode *data;</p><p>  struct car *next;</p><p>  }QueueNode;</p><p>  typedef struct Node&

16、lt;/p><p>  { QueueNode *head;</p><p>  QueueNode *rear;</p><p>  }LinkQueueCar; /*模擬通道*/</p><p><b>  3.函數(shù)調(diào)用關(guān)系</b></p><p><b>  五、調(diào)試分析</b&

17、gt;</p><p>  1. 調(diào)試過程中的主要問題</p><p>  由于此停車場管理系統(tǒng)是分模塊設(shè)計的,而且在程序的實現(xiàn)過程中又使用了清屏函數(shù),所以,運行時用戶選擇任務(wù)并且執(zhí)行完任務(wù)后,又會回到供用戶選擇功能的主界面,因此整個程序從整體上來講結(jié)構(gòu)清晰,使用方便。本程序的調(diào)試運行,總體上情況良好,但中間也出現(xiàn)了一些小問題。其中比較有代表性的主要問題有:</p><

18、p>  當(dāng)停車場已經(jīng)達(dá)到最大容量,但仍有車輛進(jìn)入停車場的時候,運行界面上沒有出現(xiàn)或者說出現(xiàn)了但又跳掉了“停車場已滿,該車輛需在便道上等待!”的提示信息。經(jīng)過查閱資料后,在那一個printf語句后加了一個getch(),此時,程序運行結(jié)果就符合要求了。</p><p>  2. 測試結(jié)果的分析與討論</p><p><b>  1)歡迎界面</b></p&g

19、t;<p><b>  2)車輛到達(dá)</b></p><p><b>  3)車輛離開</b></p><p><b>  六、總結(jié)</b></p><p>  這個程序用來實現(xiàn)對停車場內(nèi)車輛的管理,整個操作界面為中文,更加符合人性化的標(biāo)準(zhǔn),使得用戶使用方便,而且每一個操作都有提示,使得

20、初次接觸該程序的用戶也能很快適應(yīng)程序的操作。</p><p>  這個程序操作簡單,對于車牌號,只需輸入車牌號上的數(shù)字就行,而且對于進(jìn)出停車場的時間,也簡化了操作,只需輸入當(dāng)時的時刻就行,沒有具體到小時和分鐘,但也許這也是該程序不足之處所在。而且該程序也給用戶提供了選擇的機(jī)會,當(dāng)點擊運行該程序后,如果想退出程序,可以輸入n或N退出該運行程序。</p><p>  至于使用過程中的更具體的問

21、題,可以參照該報告書中調(diào)試分析那一項的屏幕截圖,整個程序的運行界面大致就如上述屏幕截圖的內(nèi)容。</p><p><b>  七、附錄</b></p><p><b>  源程序代碼</b></p><p>  #include<stdio.h></p><p>  #include<

22、;stdlib.h></p><p>  #include<string.h></p><p>  #define MAX 2 /*車庫容量*/</p><p>  #define price 3 /*每車每時刻費用*/</p><p>  typedef struct node</p><p>  

23、{ int num;</p><p>  int reachtime;</p><p>  int leavetime;</p><p>  }CarNode; /*車輛信息結(jié)點*/</p><p>  typedef struct NODE</p><p>  { CarNode *stack[MAX+1];<

24、;/p><p><b>  int top;</b></p><p>  }SeqStackCar; /*模擬車站*/</p><p>  typedef struct car</p><p>  { CarNode *data;</p><p>  struct car *next;</p&g

25、t;<p>  }QueueNode;</p><p>  typedef struct Node</p><p>  { QueueNode *head;</p><p>  QueueNode *rear;</p><p>  }LinkQueueCar; /*模擬通道*/</p><p>  /*-

26、--------------------------------------------------------------------------*/ /*函數(shù)聲明部分*/</p><p>  void InitStack(SeqStackCar *); /*初始化棧*/</p><p>  int InitQueue(LinkQueueCar *); /*初始化便道*/</p

27、><p>  int Arrival(SeqStackCar *,LinkQueueCar *); /*車輛到達(dá)*/</p><p>  void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*車輛離開*/</p><p>  void List(SeqStackCar,LinkQueueCar); /*顯示存

28、車信息*/</p><p>  void PRINT(CarNode *p) ;</p><p>  /*---------------------------------------------------------------------------*/ void option()</p><p>  { int i;</p><

29、;p>  char choice;</p><p>  printf("停車場管理系統(tǒng)");</p><p>  printf("\n********************************************************************************");</p><p>  

30、printf("\t1.車輛到達(dá)--1 2.車輛離開--2 3.車輛信息--3 4.退出程序--4");</p><p>  printf("\n********************************************************************************");</p><p>  printf(

31、"\n\n\n\t 是否進(jìn)入該系統(tǒng)(y/n)? ");</p><p>  choice=getchar();</p><p>  if(choice=='N'||choice=='n')</p><p><b>  exit(0);</b><

32、/p><p><b>  }</b></p><p>  void main()</p><p>  { SeqStackCar Enter,Temp;</p><p>  LinkQueueCar Wait;</p><p><b>  int ch;</b></p&

33、gt;<p>  system("graftabl 936");</p><p><b>  option();</b></p><p>  InitStack(&Enter); /*初始化車站*/</p><p>  InitStack(&Temp); /*初始化讓路的臨時棧*/</p&

34、gt;<p>  InitQueue(&Wait); /*初始化通道*/</p><p><b>  while(1)</b></p><p>  { clrscr();</p><p>  printf("\n\n\t\t\t1. 車輛到達(dá) 請選擇 1");</p><p> 

35、 printf("\n\n\t\t\t2. 車輛離開 請選擇 2");</p><p>  printf("\n\n\t\t\t3. 車輛信息 請選擇 3");</p><p>  printf("\n\n\t\t\t4. 退出程序 請選擇 4");</p><p>  printf("\n\n\

36、t\t\t現(xiàn)在請選擇以上信息 : ");</p><p><b>  while(1)</b></p><p>  { scanf("%d",&ch);</p><p>  printf("\n");</p><p>  if(ch>=1&&

37、;ch<=4)break;</p><p><b>  else</b></p><p>  printf("\n\t\t\t錯誤!請再次做出選擇!\n\n\t\t\t");</p><p><b>  }</b></p><p>  switch(ch)</p>

38、;<p>  { case 1:Arrival(&Enter,&Wait); break; /*車輛到達(dá)*/</p><p>  case 2:Leave(&Enter,&Temp,&Wait); break; /*車輛離開*/</p><p>  case 3:List(Enter,Wait); break; /*列表打印信息*/&

39、lt;/p><p>  case 4:exit(0); /*退出主程序*/</p><p>  default: break; }</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*---------------------

40、---------------------------------------------------------*/ </p><p>  void InitStack(SeqStackCar *s) /*初始化棧*/</p><p>  { int i;</p><p><b>  s->top=0;</b></p&g

41、t;<p>  for(i=0;i<=MAX;i++)</p><p>  s->stack[s->top]=NULL;</p><p>  } </p><p>  void PRINT(CarNode *p) /*打印出站車的信息*/</p><p>  { int A1,A2;</p

42、><p>  printf("\n\t\t\t請輸入離開時間: ");</p><p>  scanf("%d",&(p->leavetime));</p><p>  printf("\n\t\t\t離開車輛的車牌號: %d",p->num);</p><p>

43、  printf("\n\n\t\t\t離開車輛到達(dá)時間: %d ",p->reachtime);</p><p>  printf("\n\n\t\t\t離開車輛離開時間: %d",p->leavetime);</p><p>  A1=p->reachtime;</p><p>  A2=p->

44、leavetime;</p><p>  printf("\n\n\t\t\t停車場管理費用: %d",(A2-A1)*price);</p><p><b>  free(p);</b></p><p><b>  }</b></p><p>  int Arrival(Seq

45、StackCar *Enter,LinkQueueCar *W) /*車輛到達(dá)*/</p><p>  { CarNode *p;</p><p>  QueueNode *t;</p><p>  p=(CarNode *)malloc(sizeof(CarNode));</p><p>  printf("\t\t\t請輸入到達(dá)

46、車輛車牌號: ");</p><p>  scanf("%d",&(p->num));</p><p>  if(Enter->top<MAX) /*車場未滿,車進(jìn)車場*/</p><p>  { Enter->top++;</p><p>  printf("\n\t

47、\t\t該車輛在停車場的位置是: %d\n",Enter->top);</p><p>  printf("\n\t\t\t請輸入該車輛到達(dá)的時間: ");</p><p>  scanf("%d",&(p->reachtime));</p><p>  Enter->stack[Ent

48、er->top]=p;</p><p>  return(1);</p><p><b>  }</b></p><p>  else /*車場已滿,車進(jìn)便道*/</p><p>  { printf("\n\t\t\t停車場已滿 該車輛需在便道上等待!")

49、;</p><p><b>  getch();</b></p><p>  t=(QueueNode *)malloc(sizeof(QueueNode));</p><p>  t->data=p;</p><p>  t->next=NULL;</p><p>  W->r

50、ear->next=t;</p><p>  W->rear=t;</p><p>  return(1);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void Leave(SeqStackCar *Ent

51、er,SeqStackCar *Temp,LinkQueueCar *W) /*車輛離開*/</p><p>  { int i, room;</p><p>  CarNode *p,*t;</p><p>  QueueNode *q;</p><p>  /*判斷車場內(nèi)是否有車*/</p><p>  if(E

52、nter->top>0) /*有車*/</p><p>  { while(1) /*輸入離開車輛的信息*/</p><p>  { printf("\t\t\t停車場里停放的車輛總數(shù): %d",Enter->top);</p><p>  printf("\n\n\t\t\t請輸入要離開車輛的位置: "

53、);</p><p>  scanf("%d",&room);</p><p>  if(room>=1&&room<=Enter->top)</p><p><b>  break;</b></p><p><b>  }</b><

54、;/p><p>  while(Enter->top>room) /*車輛離開*/</p><p>  { Temp->top++;</p><p>  Temp->stack[Temp->top]=Enter->stack[Enter->top];</p><p>  Enter->stack

55、[Enter->top]=NULL;</p><p>  Enter->top--;</p><p><b>  }</b></p><p>  p=Enter->stack[Enter->top];</p><p>  Enter->stack[Enter->top]=NULL;&l

56、t;/p><p>  Enter->top--;</p><p>  while(Temp->top>=1)</p><p>  { Enter->top++;</p><p>  Enter->stack[Enter->top]=Temp->stack[Temp->top];</p>

57、<p>  Temp->stack[Temp->top]=NULL;</p><p>  Temp->top--;</p><p><b>  }</b></p><p><b>  PRINT(p);</b></p><p>  /*判斷通道上是否有車及車站是否已滿

58、*/</p><p>  if((W->head!=W->rear)&&Enter->top<MAX) /*便道的車輛進(jìn)入車場*/</p><p>  { q=W->head->next;</p><p>  t=q->data;</p><p>  Enter->top++

59、;</p><p>  printf("\n\n\t\t\t便道的%d號車進(jìn)入車場第%d位置.",t->num,Enter->top);</p><p>  printf("\n\n\t\t\t請輸入現(xiàn)在的時間:");</p><p>  scanf("%d",&(t->reach

60、time));</p><p>  W->head->next=q->next;</p><p>  if(q==W->rear)</p><p>  W->rear=W->head;</p><p>  Enter->stack[Enter->top]=t;</p><p&

61、gt;<b>  free(q);</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("\n\n\t\t\t便道里沒有車.\n");</p><p><b>  }<

62、;/b></p><p><b>  else</b></p><p>  printf("\n\n\t\t\t車場里沒有車."); /*沒車*/</p><p><b>  }</b></p><p>  void List1(SeqStackCar *S) /*列表顯示

63、車場信息*/</p><p><b>  { int i;</b></p><p>  if(S->top>0) /*判斷車站內(nèi)是否有車*/</p><p>  { printf("\n\t\t\t車場:");</p><p>  printf("\n\n\t\t\t位置

64、到達(dá)時間 車牌號\n");</p><p>  for(i=1;i<=S->top;i++)</p><p>  { printf("%26d",i);</p><p>  printf("%6d",S->stack[i]->reachtime);</p><p>

65、  printf("%10d",S->stack[i]->num);</p><p>  printf("\n");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else&l

66、t;/b></p><p>  printf("\n\t\t\t車場里沒有車");</p><p><b>  }</b></p><p>  void List2(LinkQueueCar *W) /*列表顯示便道信息*/</p><p>  { QueueNode *p;</p>

67、;<p>  p=W->head->next;</p><p>  if(W->head!=W->rear) /*判斷通道上是否有車*/</p><p>  { printf("\n\t\t\t等待車輛的號碼為: ");</p><p>  while(p!=NULL)</p><p&g

68、t;  { printf("%-10d",p->data->num);</p><p>  p=p->next;</p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b>

69、</p><p><b>  else</b></p><p>  printf("\n\t\t\t便道里沒有車.");</p><p><b>  }</b></p><p>  void List(SeqStackCar S,LinkQueueCar W)</p>

70、<p>  { int flag,tag;</p><p><b>  flag=1;</b></p><p>  while(flag)</p><p>  { printf("\n\t\t\t請選擇 1|2|3:");</p><p>  printf("\n\n\t\t

71、\t1.車場\n\n\t\t\t2.便道\n\n\t\t\t3.返回\n\n\t\t\t");</p><p><b>  while(1)</b></p><p>  { scanf("%d",&tag);</p><p>  if(tag>=1||tag<=3) break;</p&g

72、t;<p>  else printf("\n\t\t\t請選擇 1|2|3:");</p><p><b>  }</b></p><p>  switch(tag)</p><p>  { case 1:List1(&S);break; /*列表顯示車場信息*/</p><p&g

73、t;  case 2:List2(&W);break; /*列表顯示便道信息*/</p><p>  case 3:flag=0;break;</p><p>  default: break;</p><p><b>  }</b></p><p><b>  }</b></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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論