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

下載本文檔

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

文檔簡介

1、<p>  《數據結構 課程設計》</p><p>  設計題目: 停車場管理系統 </p><p>  學 院: 信息工程學院 </p><p>  專 業: 醫學信息系統 </p><p>  班 級: 11級08班

2、 </p><p>  指導老師: </p><p>  成 績: </p><p><b>  2013年9月7日</b></p><p><b>  目 錄</b>

3、;</p><p>  1項目研究背景與意義………………………………………………… 1</p><p>  2需求分析……………………………………………………………… 3</p><p>  3概要設計……………………………………………………………… 3</p><p>  4詳細設計(算法設計的思想)………………………………………… 4&l

4、t;/p><p>  5源代碼及調試………………………………………………………… 6</p><p>  6問題及難點所在………………………………………………………15</p><p>  7使用說明及測試結果…………………………………………………16</p><p>  8總結與體會……………………………………………………………19</p

5、><p>  9參考文獻………………………………………………………………20 </p><p>  1 項目研究背景與意義 </p><p><b>  1.1 課題簡介</b></p><p><b>  課程設計題目名稱:</b></p><p><b>  停車場

6、管理系統</b></p><p><b>  課程設計目的:</b></p><p>  通過《數據結構》課程的學習,將數據結構應用在具體的編程方面,更加了解課程所學習的內容及思維邏輯,提高程序開發能力,能運用合理的控制流程編寫清晰高效的程序。開發一個中小型系統,掌握系統研發全過程,培養分析問題、解決實際問題的能力。</p><p>

7、;<b>  課程設計意義:</b></p><p>  利用數據結構課程設計,了解學生對《數據結構》的理解和加強學生對數據結構方面的應用知識。幫助學生好好利用數據結構的知識和思想,解決各方面的編程難題。</p><p><b>  課程設計內容:</b></p><p><b> ?。?)問題描述:</b

8、></p><p>  設有一個可以停放n輛汽車的狹長停車場,它只有一個大門可以供車輛進出。車輛按到達停車場時間的早晚依次從停車場最里面向大門口處停放(最先到達的第一輛車放在停車場的最里面)。如果停車場已放滿n輛車,則后來的車輛只能在停車場大門外的便道上等待,一旦停車場內有車開走,則排以便道上的第一輛車就進入停車場。停車場內如有某輛車要開走,在它之后進入停車場的車都必須先退出停車場為它讓路,待其開出停車場后

9、,這些輛再依原來的次序進場。每輛車在離開停車場時,都應根據它在停車場內停留的時間長短交費。如果停留在便道上的車未進停車場時,允許其離去,不收停車費,并且仍然保持在便道上等待的車輛的次序。編制一程序模擬該停車場的管理。</p><p><b> ?。?)基本要求:</b></p><p>  以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數據序列進行模擬管

10、理。每一組輸入數據包括三個數據項:汽車“到達”或“離去”信息、汽車牌照號碼、到達或離去的時刻,對每一組輸入數據進行操作后的輸出數據為:若是車輛到達,則輸出汽車在停車場內或便道上的停車位置;若是車離去;</p><p>  則輸出汽車在停車場內停留的時間和應交納的費用(在便道上停留的時間不收費)。棧以順序結構實現,隊列以鏈表實現。</p><p><b> ?。?)測試數據:<

11、;/b></p><p>  汽車的模擬輸入信息格式可以是:(到達/離去,汽車牌照號碼,到達/離去的時刻)。例如,(‘A’,1,5)表示1號牌照車在5這個時刻到達,而(‘D’,5,20)表示5號牌照車在20這個時刻離去。整個程序可以在輸入信息為(‘E’,0,0)時結束。本題可用棧和隊列來實現。</p><p><b> ?。?)實現提示 </b></p&g

12、t;<p>  需另設一個棧,臨時停放為給要離去的汽車讓路而從停車場退出來的汽車,也用順序存儲結構實現。輸入數據按到達或離去的時刻有序。棧中每個元素表示一輛汽車,包含兩個數據項:汽車的牌照號碼和進入停車場的時刻。 </p><p>  課程設計預期實現效果:</p><p>  開發可完成每一項基本功能的小型停車場管理系統</p><p>  1.2

13、方案及其論證</p><p><b>  語言:C++</b></p><p>  運行環境:Microsoft Visual C++ 6.0</p><p><b>  設計進度安排:</b></p><p><b>  2需求分析</b></p><p&

14、gt;  IT行業的高速發展讓計算機技術深入日常生活的每一個細節。隨著城市化程度的加深,房地產行業日益興盛,越來越多的小區散布在城市里,小區的車輛也與日俱增,停車場是小區里不可缺少的一部分,對停車場飛管理變得非常重要。通過開發小區停車場管理系統,使小區里的車輛能得到有序的管理,這個系統使用對象為停車場的管理人員。</p><p>  系統需要滿足的要求:若是車輛到達,則輸出汽車在停車場內或便道上的停車位置;若是車

15、離去,則輸出汽車在停車場內停留的時間和應交納的費用(在便道上停留的時間不收費)。</p><p>  3概要設計(特殊功能) </p><p><b>  1、設計思想</b></p><p>  此停車場管理系統是在一個狹長的通道上的,而且只有一個大門可以供車輛進出,并且要實現停車場內某輛車要離開時,在它之后進入停車場的車都必須先退出停車場為

16、它讓路,待其開出停車場后,這些輛再依原來的次序進場的功能,就可以設計兩個堆棧,其中一個堆棧用來模擬停車場,另一個堆棧用來模擬臨時停車場,該臨時停車場用來存放當有車輛離開時,原來停車場內為其讓路的車輛。至于當停車場已滿時,需要停放車輛的通道可以用一個鏈隊列來實現。當停車場內開走一輛車時,通道上便有一輛車進入停車場,此時只需要改變通道上車輛結點的連接方式就可以了,使通道上第一輛車進入停車場這個堆棧,并且使通道上原來的第二輛車成為通道上的第一

17、輛車,此時只需將模擬通道的鏈隊列的頭結點連到原來的第二輛車上就可以了。</p><p><b>  2、實現方法</b></p><p>  對于此停車場管理系統的實現,就是用兩個堆棧來分別模擬停車場以及停車場內車輛為其它車輛讓路時退出停車的臨時停放地點。至于通道上車輛的停放則用一個鏈隊列來實現,此時,通道上車輛的離開或者進入停車場只需改變此鏈隊</p>

18、<p>  列上的結點而已。對于要對停車場內的車輛根據其停放時間收取相應的停車費用,可以記錄下車輛進入以及離開停車場的時間,再用時間差乘以相應的單價并且打印出最后的費用就可以實現了。</p><p>  3、功能(函數)設計 </p><p>  本程序從總體上分為四個功能模塊,分別為: </p><p> ?。?)程序功能介紹和操作提示模塊 </

19、p><p> ?。?)汽車進入停車位的管理模塊 </p><p> ?。?)汽車離開停車位的管理模塊 </p><p> ?。?)查看停車場狀態的查詢模塊 </p><p>  在以上各個模塊中,出現的調用的函數為:</p><p>  void InitStack(StackCar *); //初始化棧</p&

20、gt;<p>  int InitQueue(LinkQueueCar *); //初始化隊列</p><p>  int Arrival(StackCar *,LinkQueueCar *); //進站登記</p><p>  void Leave(StackCar *,StackCar *,LinkQueueCar *); //出站登記</p>&

21、lt;p>  void List(StackCar,LinkQueueCar); //查詢車位狀態</p><p><b>  4詳細設計</b></p><p><b>  流程圖:</b></p><p><b>  5源代碼及調試</b></p><p><

22、b>  程序代碼</b></p><p>  #include<iostream.h></p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p><p>  #include<string.h></p>

23、<p>  #define MAX 100</p><p>  #define price 0.05</p><p>  typedef struct Time //時間結構體</p><p><b>  {</b></p><p><b>  int hour;</b></

24、p><p><b>  int min;</b></p><p><b>  }Time;</b></p><p>  typedef struct CarNode //汽車結構體</p><p><b>  {</b></p><p>  char nu

25、m[10];</p><p>  Time reach;</p><p>  Time leave;</p><p><b>  }CarNode;</b></p><p>  typedef struct StackCar //存儲汽車的棧結構</p><p><b>  {<

26、;/b></p><p>  CarNode *stack[MAX+1];</p><p><b>  int top;</b></p><p>  }StackCar;</p><p>  typedef struct QueueCarNode //存儲汽車的隊列結構</p><p>

27、<b>  {</b></p><p>  CarNode *data;</p><p>  struct QueueCarNode *next;</p><p>  }QueueCarNode;</p><p>  typedef struct LinkQueueCar //定義隊列結構指針</p>&

28、lt;p><b>  {</b></p><p>  QueueCarNode *head;</p><p>  QueueCarNode *rear;</p><p>  }LinkQueueCar;</p><p>  void InitStack(StackCar *); </p><p

29、>  int InitQueue(LinkQueueCar *);</p><p>  int Arrival(StackCar *,LinkQueueCar *); </p><p>  void Leave(StackCar *,StackCar *,LinkQueueCar *);</p><p>  void List(StackCar,LinkQu

30、eueCar); </p><p>  void main()</p><p><b>  {</b></p><p>  printf("\t\t===========歡迎你進入停車場管理系統===========\n");</p><p>  printf("\t\t 小組

31、成員:李嘉偉 黃庭華 楊茂銓 李俊鵬\n");</p><p>  printf("\t\t 班級:11級08班 \n");</p><p>  StackCar Enter,Temp;</p><p>  LinkQueueCar Wait;</p><p><b>  int a

32、;</b></p><p><b>  int b=1;</b></p><p>  InitStack(&Enter); </p><p>  InitStack(&Temp); //汽車出站時,暫時按次序存放汽車的棧結構</p><p>  InitQueue(&Wait)

33、; </p><p><b>  while(b)</b></p><p><b>  { </b></p><p>  cout<<"\n1. 汽車進站登記";</p><p>  cout<<" 2. 汽車出站登記";</

34、p><p>  cout<<" 3. 車位狀態顯示";</p><p>  cout<<" 4. 退出系統\n";</p><p><b>  cin>>a;</b></p><p><b>  while(b)</b>&l

35、t;/p><p><b>  {</b></p><p>  if(a==1||a==2||a==3||a==4) break;</p><p><b>  else </b></p><p><b>  { </b></p><p>  cout<&

36、lt;"\n錯誤! 退出系統\n";</p><p><b>  b=0;</b></p><p><b>  break; </b></p><p><b>  }</b></p><p><b>  }</b></p>

37、<p><b>  switch(a)</b></p><p><b>  { </b></p><p>  case 1:Arrival(&Enter,&Wait);break;</p><p>  case 2:Leave(&Enter,&Temp,&Wait);br

38、eak;</p><p>  case 3:List(Enter,Wait);break;</p><p>  case 4:exit(0);</p><p>  default: break;</p><p><b>  }</b></p><p><b>  }</b>&

39、lt;/p><p><b>  }</b></p><p>  void InitStack(StackCar *s) //初始化棧</p><p><b>  { </b></p><p><b>  int i;</b></p><p><b&

40、gt;  s->top=0;</b></p><p>  for(i=0;i<=MAX;i++)</p><p>  s->stack[s->top]=NULL;</p><p><b>  }</b></p><p>  int InitQueue(LinkQueueCar *Q)

41、 //初始化隊列</p><p><b>  {</b></p><p>  Q->head=(QueueCarNode *)malloc(sizeof(QueueCarNode));</p><p>  if(Q->head!=NULL)</p><p><b>  {</b><

42、/p><p>  Q->head->next=NULL;</p><p>  Q->rear=Q->head;</p><p>  return(1);</p><p><b>  }</b></p><p>  else return(-1);</p><

43、p><b>  }</b></p><p>  int Arrival(StackCar *Enter,LinkQueueCar *W) //進站登記</p><p><b>  { </b></p><p>  CarNode *p;</p><p>  QueueCarNode *

44、t;</p><p>  p=(CarNode *)malloc(sizeof(CarNode));</p><p>  cout<<"\n請輸入車牌號:";</p><p>  cin>>p->num ;</p><p>  if(Enter->top<MAX)

45、 //有空車位</p><p><b>  {</b></p><p>  Enter->top++;</p><p>  cout<<"\n車輛在車場第 "<<Enter->top<<" 號車位";</p><p> 

46、 cout<<"\n車輛到達時間(時):";</p><p>  cin>>p->reach.hour;</p><p>  cout<<"\n車輛到達時間(分):";</p><p>  cin>>p->reach.min;</p><p>

47、  Enter->stack[Enter->top]=p;</p><p>  return(1);</p><p><b>  }</b></p><p>  else //沒有空車位</p><p><b>  { </b></p><p>

48、;  cout<<"\n該車須在便道等待!有車位時進入車場!";</p><p>  t=(QueueCarNode *)malloc(sizeof(QueueCarNode));</p><p>  t->data=p;</p><p>  t->next=NULL; </p><p>  W-&

49、gt;rear->next=t;</p><p>  W->rear=t;</p><p>  return(1);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void PRINT(CarNode *p,i

50、nt room) //汽車離站時繳費顯示</p><p><b>  { </b></p><p>  cout<<"\n車輛離開的時間(時):";</p><p>  cin>>p->leave.hour;</p><p>  cout<<"\

51、n車輛離開的時間(分):";</p><p>  cin>>p->leave.min;</p><p>  printf("\n離開車輛的車牌號為:");</p><p>  cout<<p->num;</p><p>  cout<<"\n其到達時間為:

52、 "<<p->reach.hour<<" 時 "<<p->reach.min<<" 分";</p><p>  cout<<"\n離開時間為: "<<p->leave.hour<<" 時 "<<p->l

53、eave.min<<" 分";</p><p>  cout<<"\n應交費用為: "<<((p->leave.hour - p->reach.hour)*60+(p->leave.min - p->reach.min))*price<<" 元";</p><p&

54、gt;<b>  free(p);</b></p><p><b>  }</b></p><p>  void Leave(StackCar *Enter,StackCar *Temp,LinkQueueCar *W) //出站登記</p><p><b>  { </b></p>

55、;<p><b>  int room;</b></p><p>  CarNode *p,*t;</p><p>  QueueCarNode *q;</p><p>  if(Enter->top>0) //車站有車時</p><p><b>  { </b><

56、/p><p>  while(1) </p><p><b>  {</b></p><p>  cout<<"\n請輸入車在車場的位置:";</p><p>  cin>>room;</p><p>  if(room>=1&&ro

57、om<=Enter->top) break;</p><p><b>  }</b></p><p>  while(Enter->top>room) //位置不在棧頂的汽車出站</p><p><b>  {</b></p><p>  Temp->top++;

58、 </p><p>  Temp->stack[Temp->top]=Enter->stack[Enter->top];</p><p>  Enter->stack[Enter->top]=NULL;</p><p>  Enter->top--;</p><p>

59、<b>  } </b></p><p>  p=Enter->stack[Enter->top];</p><p>  Enter->stack[Enter->top]=NULL;</p><p>  Enter->top--;</p><p>  while(Temp->top&g

60、t;=1) //當暫時存儲汽車的棧結構中有汽車時汽車重</p><p><b>  新進站</b></p><p><b>  {</b></p><p>  Enter->top++;</p><p>  Enter->stack[Enter->top]=Temp->st

61、ack[Temp->top];</p><p>  Temp->stack[Temp->top]=NULL;</p><p>  Temp->top--;</p><p><b>  }</b></p><p>  PRINT(p,room);</p><p>  if((

62、W->head!=W->rear)&&Enter->top<MAX) //車站有空位且便道有車時,便道車進站</p><p><b>  { </b></p><p>  q=W->head->next;</p><p>  t=q->data;</p><p&

63、gt;  Enter->top++;</p><p>  cout<<"\n便道的"<<t->num<<"號車進入車場第"<<Enter->top<<"號車位.";</p><p>  cout<<"\n請輸入"<&

64、lt;t->num<<"號車進入車場的時間(時):";</p><p>  cin>>t->reach.hour;</p><p>  cout<<"\n請輸入"<<t->num<<"號車進入車場的時間(分):";</p><p>

65、;  cin>>t->reach.min;</p><p>  W->head->next=q->next;</p><p>  if(q==W->rear) </p><p>  W->rear=W->head;</p><p>  Enter->stack[Enter->t

66、op]=t;</p><p><b>  free(q);</b></p><p><b>  }</b></p><p>  else cout<<"\n便道里沒有車.\n";</p><p><b>  }</b></p>&l

67、t;p>  else cout<<"\n車場里沒有車."; </p><p><b>  }</b></p><p>  void List1(StackCar *S) //車場車位顯示</p><p><b>  { </b></p><p><

68、;b>  int i;</b></p><p>  if(S->top>0)</p><p><b>  {</b></p><p>  cout<<"\n車場車位狀態:";</p><p>  cout<<"\n車位號\t"&

69、lt;<" 到達時間 \t"<<"車牌號\n";</p><p>  for(i=1;i<=S->top;i++)</p><p><b>  {</b></p><p>  cout<<" "<<i<<&quo

70、t;\t ";</p><p>  cout<<S->stack[i]->reach.hour<<"時"<<S->stack[i]->reach.min<<"分";</p><p>  cout<<"\t "<<S->

71、;stack[i]->num<<"\n";</p><p><b>  }</b></p><p><b>  }</b></p><p>  else cout<<"\n車場里沒有車";</p><p><b>  }

72、</b></p><p>  void List2(LinkQueueCar *W) //便道車位顯示</p><p><b>  { </b></p><p>  QueueCarNode *p;</p><p>  p=W->head->next;</p><p&g

73、t;  if(W->head!=W->rear)</p><p><b>  {</b></p><p>  cout<<"\n便道內車隊依次為:";</p><p>  cout<<"\n<<<<<<<<<<<&

74、lt;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n";<

75、/p><p>  while(p!=NULL)</p><p><b>  {</b></p><p>  cout<<p->data->num<<"\t";</p><p>  p=p->next;</p><p><b>  

76、}</b></p><p>  cout<<"\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<&l

77、t;<<<<<<<<<<<<<<<<<<<<<";</p><p><b>  }</b></p><p>  else cout<<"\n便道里沒有車.";</p><p>&

78、lt;b>  }</b></p><p>  void List(StackCar S,LinkQueueCar W) //查詢車位狀態</p><p><b>  {</b></p><p>  int flag,choice;</p><p><b>  flag=1;</b&

79、gt;</p><p>  while(flag)</p><p><b>  {</b></p><p>  cout<<"\n請選擇 :";</p><p>  cout<<"\n\t\t1. 車場列表\n\t\t2. 便道列表\n\t\t3. 返回主菜單\n&q

80、uot;;</p><p><b>  while(1)</b></p><p><b>  { </b></p><p>  cin>>choice;</p><p>  if(choice>=1||choice<=3) break;</p><p>

81、;  else cout<<"選擇錯誤,請重新選擇!\n";</p><p><b>  }</b></p><p>  switch(choice)</p><p><b>  {</b></p><p><b>  case 1:</b>&l

82、t;/p><p>  List1(&S);</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  List2(&W);</p><p><b>  break;</b><

83、;/p><p><b>  case 3:</b></p><p><b>  flag=0;</b></p><p><b>  break;</b></p><p><b>  default: </b></p><p><b

84、>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  調試過程中曾遇到的錯誤:</p><p>  最初調試中車牌號編寫

85、為int型,輸入的只能是數字,但現實生活中車牌號都為漢字+英文字母+數字,在改進過程中,改成字符型;</p><p>  6特殊問題解決方法 </p><p>  由于此停車場管理系統是分模塊設計的,所以,運行時用戶選擇任務并且執行完任務后,又會回到供用戶選擇功能的主界面,因此整個程序從整體上來講結構清晰,使用方便。當停車場已經達到最大容量,但仍有車輛進入停車場的時候,運行界面上沒有出現或

86、者說出現了但又跳掉了“停車場已滿,該車輛需在便道上等待!”的提示信息。我們小組成員經過反復商量討論,并且在查閱了多種資料后,在那一個printf語句后加了一個getch(),此時,程序運行結果就符合要求了。</p><p>  7使用說明及測試結果 </p><p>  這個程序用來實現對停車場內車輛的管理,整個操作界面為中文,更加符合人性化的標準,使得用戶使用方便,而且每一個操作都有提示

87、,使得初次接觸該程序的用戶也能很快適應程序的操作。</p><p>  測試結果的分析與討論</p><p><b> ?、贇g迎界面</b></p><p><b> ?、谲囕v到達</b></p><p>  為方便演示,把停車場的容量先設為3</p><p><b&g

88、t; ?、圮囕v離開,收費</b></p><p><b> ?、苘囕v信息(車場)</b></p><p><b> ?、蒈囕v信息(便道)</b></p><p><b>  8總結與體會</b></p><p>  通過這一次課程設計,加深了我對《數據結構》這門課程

89、所學內容的進一步的理解與掌握;同時,通過對停車場管理系統的開發,充分的理解了用棧和隊列實現模擬停車場的基本原理,知道了棧的順序存儲結構和隊列的鏈式存儲結構的定義和算法描述,使得我將計算機課程所學知識與實際問題很好地相聯接在了一起。在這次課程設計中,不僅培養了我開發一個中小型程序的能力,而且也培養了我的團隊合作能力。在這次對停車場管理系統的開發過程中,我們小組成員互相合作,互相幫助,其中有程序功能成功實現時的欣喜,也有遇到問題、解決問題時

90、的執著以及迷茫。在這次課程設計中,使得我很好地了解了在開發程序過程中合作的重要性。</p><p><b>  9參考文獻</b></p><p>  譚浩強. C語言程序設計(第三版)[M]. 北京:清華大學出版社,2005</p><p>  廖雷、羅代忠. C語言程序設計基礎實驗教程[M]. 北京:高等教育出版社,2005</p&

溫馨提示

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

評論

0/150

提交評論