數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---停車場(chǎng)管理系統(tǒng)程序_第1頁(yè)
已閱讀1頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p>  題目 停車場(chǎng)管理系統(tǒng)程序</p><p>  班級(jí) __________________</p><p>  姓名 __________________</p><p>  學(xué)號(hào) __________________</p><p><b>  

2、停車場(chǎng)管理系統(tǒng)</b></p><p><b>  1 問題描述</b></p><p>  設(shè)停車場(chǎng)是一個(gè)可停放n輛汽車的狹長(zhǎng)通道,且只有一個(gè)門可供出入。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(門在最南端,最先到達(dá)的第一輛車停放在車場(chǎng)的最北端),若車場(chǎng)內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一

3、輛汽車即可開入;當(dāng)停車場(chǎng)內(nèi)某輛車要離開時(shí),在它之后進(jìn)入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開出大門外,其他車輛再按原順序進(jìn)入車場(chǎng),每輛停放在車場(chǎng)的車在它離開停車場(chǎng)時(shí)必須按它停留的時(shí)間長(zhǎng)短交納費(fèi)用。</p><p><b>  2 需求分析</b></p><p> ?。?)根據(jù)車輛到達(dá)停車場(chǎng)到車輛離開停車場(chǎng)時(shí)所停留的時(shí)間進(jìn)行計(jì)時(shí)收費(fèi)。</p><

4、p> ?。?)當(dāng)有車輛從停車場(chǎng)離開時(shí),等待的車輛按順序進(jìn)入停車場(chǎng)停放。實(shí)現(xiàn)停車場(chǎng)的調(diào)度功能。</p><p> ?。?)用順序棧來表示停車場(chǎng),鏈隊(duì)表示停車場(chǎng)外的便道。</p><p>  (4)顯示停車場(chǎng)信息和便道信息。</p><p>  (5)程序執(zhí)行的命令為:車輛進(jìn)入停車場(chǎng) 車輛離開停車場(chǎng) 顯示停車場(chǎng)的信息。</p><p>  

5、(以棧S作為停車場(chǎng),棧S1作為讓路的臨時(shí)停車點(diǎn),隊(duì)列Q作為車等待時(shí)用的便道。stack[Max+1]作為車場(chǎng)能夠容納的車輛數(shù),num[10]作為車所在位置的編號(hào),并且限定車場(chǎng)最多能夠容納10輛車.</p><p>  (2).用戶根據(jù)系統(tǒng)所規(guī)定并提示的要求輸入有關(guān)內(nèi)容,車場(chǎng)所能容納的車輛數(shù)由收費(fèi)人員來確定,車輛離開時(shí),車主還可以得到收據(jù),便于收費(fèi)的管理使用;并且系統(tǒng)程序所提供的一些信息可通過特殊硬件顯示出來,供車

6、主了解信息,準(zhǔn)確有效的停車。</p><p>  (3).程序應(yīng)該能夠顯示當(dāng)前存車信息以及等待車的信息,便于管理人員對(duì)車輛進(jìn)行管理,并且能夠給等待的車提供一些信息,便于他們能夠及時(shí)的停車。</p><p>  (4).程序執(zhí)行的命令為:輸入進(jìn)站信息->輸入出站信息->打印收據(jù)</p><p>  (5).改程序系簡(jiǎn)單的用于運(yùn)用棧與隊(duì)列基本知識(shí)的工具,不能

7、用于現(xiàn)實(shí)中,特別是棧“先進(jìn)后出”的規(guī)則大大限定了該程序的推廣,現(xiàn)實(shí)世界的車站管理系統(tǒng)比這個(gè)遠(yuǎn)遠(yuǎn)復(fù)雜的多。</p><p><b>  二.概要設(shè)計(jì):</b></p><p>  1.設(shè)定棧的抽象數(shù)據(jù)類型定義為:</p><p>  ADT stack{</p><p>  數(shù)據(jù)對(duì)象:D={ai|ai∈charset,i=

8、1,2,……,n,n>=0}</p><p>  數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2……,n}</p><p><b>  基本操作:</b></p><p>  InitStack(&S)</p><p>  操作結(jié)果:構(gòu)造一個(gè)空棧S。</p>&l

9、t;p>  Push(&S,e)</p><p>  初始條件:棧S已經(jīng)存在。</p><p>  操作結(jié)果:在棧S的棧頂插入新的棧頂元素e。</p><p>  Pop(&S,&e)</p><p>  初始條件:棧S已經(jīng)存在。</p><p>  操作結(jié)果:刪除S的棧頂元素,并以e返回

10、其值。</p><p>  StackTraverse(S,visit())</p><p>  初始條件:棧S已經(jīng)存在。</p><p>  操作結(jié)果:從棧底到棧頂依次對(duì)S中的每一個(gè)元素調(diào)用函數(shù)visit().</p><p>  }ADT stack</p><p>  2. 設(shè)定隊(duì)列的抽象數(shù)據(jù)類型定義為:<

11、/p><p>  數(shù)據(jù)對(duì)象:D={ai|ai∈Elemset,i=1,2,……,n,n>=0}</p><p>  數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2……,n}</p><p>  約定其中ai為隊(duì)列頭,an為隊(duì)列尾.</p><p><b>  基本操作:</b></p

12、><p>  InitQueue(&Q)</p><p>  操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列Q.</p><p>  DestroyQueue(&Q)</p><p>  初始條件:隊(duì)列Q已存在.</p><p>  操作結(jié)果:隊(duì)列Q被銷毀,不再存在.</p><p>  ClearQue

13、ue(&Q)</p><p>  初始條件:隊(duì)列Q已存在.</p><p>  操作結(jié)果:將Q清為空隊(duì)列.</p><p>  QueueEmpty(Q)</p><p>  初始條件:隊(duì)列Q已存在.</p><p>  操作結(jié)果:若Q為空隊(duì)列,則返回True,否則返回False.</p><

14、;p>  QueueLength(Q)</p><p>  初始條件:隊(duì)列Q已經(jīng)存在.</p><p>  操作結(jié)果:返回Q的元素個(gè)數(shù),即隊(duì)列的長(zhǎng)度.</p><p>  GetHead(Q,&e)</p><p>  初始條件:Q為非空隊(duì)列.</p><p>  操作結(jié)果:用e返回Q的對(duì)頭元素.<

15、/p><p>  EnQueue(&Q,e)</p><p>  初始條件:隊(duì)列Q已存在.</p><p>  操作結(jié)果:插入元素e為Q新的隊(duì)尾元素.</p><p>  DeQueue(&Q,&e)</p><p>  初始條件:Q為非空隊(duì)列.</p><p>  操作結(jié)果

16、:刪除Q的隊(duì)頭元素,并用e返回其值.</p><p>  QueueTraverse(Q,visit())</p><p>  初始條件:Q已存在且非空.</p><p>  操作結(jié)果:從隊(duì)頭到隊(duì)尾,依次對(duì)Q的每一個(gè)數(shù)據(jù)元素調(diào)用函數(shù)visit().一旦visit()失敗,則操作失敗.</p><p>  }ADT Queue</p>

17、;<p>  3.本程序包括四個(gè)模塊</p><p><b>  1)主程序模塊</b></p><p>  Void main()</p><p><b>  {</b></p><p><b>  聲明定義</b></p><p>&l

18、t;b>  調(diào)用棧與隊(duì)列的函數(shù)</b></p><p>  主信息(輸入初始操作信息)</p><p><b>  }</b></p><p>  2)棧模塊---實(shí)現(xiàn)棧抽象數(shù)據(jù)類型</p><p>  3)隊(duì)列模塊---實(shí)現(xiàn)隊(duì)列抽象數(shù)據(jù)類型</p><p>  4)結(jié)構(gòu)體模塊-

19、--用于對(duì)對(duì)象及變量的管理</p><p>  各模塊之間的調(diào)用關(guān)系如下: </p><p><b>  主程序模塊</b></p><p><b>  ↓</b></p><p><b>  結(jié)構(gòu)體模塊</b></p><p><b>  ↓

20、</b></p><p><b>  棧模塊</b></p><p><b>  ↓</b></p><p><b>  隊(duì)列模塊</b></p><p>  4.設(shè)計(jì)停車管理程序的要求</p><p>  按照從終端讀入的輸入數(shù)據(jù)進(jìn)行模擬管

21、理,每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“進(jìn)站”或“出站”信息、汽車牌照號(hào)碼以及進(jìn)站或出站的時(shí)刻,對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場(chǎng)內(nèi)逗留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留不收費(fèi)),按以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。</p><p><b>  三.詳細(xì)設(shè)計(jì):</b></p><

22、p><b>  1. 時(shí)間結(jié)點(diǎn)類型</b></p><p>  typedef struct time{ </p><p>  int hour; </p><p><b>  int min; </b></p><p>  }Time; /*時(shí)間結(jié)點(diǎn)*/ </p><p&

23、gt;  2.車輛進(jìn)出站信息類型</p><p>  typedef struct node{ </p><p>  char num[10];</p><p>  Time reach; </p><p>  Time leave; </p><p>  }CarNode; /*車輛信息結(jié)點(diǎn)*/ </p>

24、<p>  3.停車場(chǎng)和便道信息類型</p><p>  typedef struct NODE{ </p><p>  CarNode *stack[Max+1];</p><p><b>  int top; </b></p><p>  }SeqStackCar; /*模擬車站*/</p>

25、<p>  typedef struct car{ </p><p>  CarNode *data;</p><p>  struct car *next; </p><p>  }QueueNode; </p><p>  typedef struct Node{ </p><p>  QueueNo

26、de *head; </p><p>  QueueNode *rear; </p><p>  }LinkQueueCar; /*模擬通道*/ </p><p>  void InitStack(SeqStackCar *,int n); /*聲明棧*/</p><p>  //初始化,創(chuàng)建兩個(gè)新棧S,S1</p><p

27、>  int InitQueue(LinkQueueCar *); /*聲明便道*/</p><p>  //初始化,創(chuàng)建一個(gè)隊(duì)列Q用于便道</p><p>  int Arrival(SeqStackCar *,LinkQueueCar *,int n); /*車輛進(jìn)站*/</p><p>  void Leave(SeqStackCar *,SeqStac

28、kCar *,LinkQueueCar *,int n); /*車輛出站*/</p><p>  void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ </p><p>  void InitStack(SeqStackCar *s,int n) /*初始化棧*/</p><p>  4.主函數(shù)和其它函數(shù)的偽碼算法<

29、/p><p>  void main()</p><p><b>  {//主程序</b></p><p>  initialization(); //初始化</p><p><b>  while(1){</b></p><p>  scanf(...............

30、....);//根據(jù)提示信息輸入想要的操作</p><p>  switch(k){//根據(jù)輸入的數(shù)調(diào)用不同的函數(shù)</p><p><b>  case 1:</b></p><p><b>  case 2:</b></p><p>  ....................</p>

31、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  typedef struct **{</p><p>  //用于創(chuàng)建不同結(jié)構(gòu)體類型的指針與變量</p><p&

32、gt;<b>  }</b></p><p>  void PRINT(CarNode *p){</p><p><b>  //調(diào)用輸出函數(shù)</b></p><p>  Leave(*p,n)...................</p><p>  根據(jù)求解時(shí)間值來求得費(fèi)用,并通過收據(jù)打印出來&

33、lt;/p><p><b>  }</b></p><p><b>  5.主要函數(shù)思想</b></p><p>  本程序是個(gè)簡(jiǎn)單的棧與隊(duì)列的應(yīng)用程序,其所用的函數(shù)也是棧與隊(duì)列的基本函數(shù),但在編寫函數(shù)時(shí)應(yīng)特別注意它的面向?qū)ο笮耘c窗口化設(shè)計(jì),切身為使用者著想.所以在運(yùn)用一些函數(shù)時(shí)調(diào)用的基本語(yǔ)句有太多的重復(fù),其目的在于實(shí)現(xiàn)它本來

34、的基本目的.</p><p><b>  四.調(diào)試分析:</b></p><p>  本次作業(yè)比較簡(jiǎn)單,只是棧與隊(duì)列的復(fù)習(xí)應(yīng)用,所以總的調(diào)試比較順利,只是在調(diào)用棧與隊(duì)列的函數(shù)時(shí)遇到一些問題,比如我想通過鍵盤輸入來確定停車場(chǎng)的停車數(shù),所以初始化時(shí)那些操作函數(shù)必須帶有停車數(shù)這個(gè)參數(shù)。</p><p>  在定義棧的元素最大空間時(shí)如果使用順序棧必須先

35、給它賦初值,但如果通過鏈表就可以實(shí)現(xiàn)動(dòng)態(tài)分配內(nèi)存,為棧動(dòng)態(tài)開辟新空間。</p><p>  在判斷鍵盤輸入是否符合要求時(shí),如果不符合要求應(yīng)循環(huán)賦值,直到符合要求為止,在此利用的do-while循環(huán)語(yǔ)句與外部while語(yǔ)句套用時(shí)應(yīng)使用兩次break語(yǔ)句,才能跳出循環(huán),否則會(huì)造成死循環(huán)。</p><p>  經(jīng)驗(yàn)體會(huì):通過DEBUG調(diào)試器和數(shù)據(jù)觀察窗口,可以加快找到程序中的疵點(diǎn)。</p&

36、gt;<p>  五.軟件使用說明書:</p><p>  本系統(tǒng)為存車信息管理軟件,能實(shí)現(xiàn)車場(chǎng)存車及便道存車信息的輸入,輸出,查找等功能,并建立和更新的存車費(fèi)用信息保存于文件輸出或打印。對(duì)于查找等功能能夠按存車位置及車牌號(hào)分別進(jìn)行。每輛車的相關(guān)信息包括:車牌號(hào),進(jìn)站時(shí)間,出站時(shí)間,存車位置,停車費(fèi)用等。</p><p>  本系統(tǒng)功能還需完善,操作簡(jiǎn)單,只是供學(xué)習(xí)之用,并不

37、能作為實(shí)際生活使用。</p><p>  下面介紹了此軟件的使用說明:</p><p>  1.停車場(chǎng).exe;</p><p>  2.進(jìn)入演示系統(tǒng)后首先是一個(gè)用戶及管理員使用注意事項(xiàng)界面,進(jìn)入后會(huì)出現(xiàn)菜單選項(xiàng)。</p><p>  1.車輛進(jìn)站 2.車輛出站 3.存車信息 4.離開系統(tǒng)</p><p>

38、  請(qǐng)選擇: 1|2|3|4.</p><p>  這時(shí)可按照提示進(jìn)行你想要的操作。</p><p>  3.對(duì)于1-4的具體操作與內(nèi)容請(qǐng)?jiān)斠娗懊娴恼{(diào)試分析,您便可以輕松操作了!</p><p>  六.總結(jié):經(jīng)過這次課程設(shè)計(jì),通過對(duì)程序的編制,調(diào)試和運(yùn)行,使我更好的掌握了棧和隊(duì)列基本性質(zhì)和有關(guān)它們之間關(guān)系使用問題的解決方法,熟悉了各種調(diào)用的數(shù)據(jù)類型,在調(diào)試和運(yùn)行

39、過程中使我更加的了解和熟悉程序運(yùn)行的環(huán)境,提高了我對(duì)程序調(diào)試分析的能力和對(duì)錯(cuò)誤的糾正能力。這次數(shù)據(jù)結(jié)構(gòu)的程序設(shè)計(jì),對(duì)于我來說是一個(gè)挑戰(zhàn)。我對(duì)數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)在程序的設(shè)計(jì)中也有所體現(xiàn)。課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí)、發(fā)現(xiàn)、提出、分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過程。隨著科學(xué)技術(shù)發(fā)展的日新月異,當(dāng)今計(jì)算機(jī)應(yīng)用在生活中可以說得是無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握計(jì)算機(jī)開發(fā)技術(shù)是十分重要

40、的。</p><p><b>  七.附錄</b></p><p><b>  所用到的庫(kù)函數(shù):</b></p><p>  Stdio.h /*標(biāo)準(zhǔn)輸入/輸出頭文件*/</p><p>  String.h /*包含字符串處理函數(shù)頭文件*/</p><p>

41、;  Stdlib.h /*包含動(dòng)態(tài)存儲(chǔ)與釋放函數(shù)頭文件*/</p><p>  Malloc.h /*包含內(nèi)存分配頭文件*/</p><p>  該停車場(chǎng)管理系統(tǒng)的主要程序如下:</p><p>  /*停車場(chǎng)管理系統(tǒng)*/</p><p>  #include<stdio.h></p><p&g

42、t;  #include<stdlib.h> </p><p>  #include<string.h></p><p>  #include<malloc.h></p><p>  /*------------------------------------------------------------------------

43、------*/ </p><p>  #define Max 10</p><p>  int getn()</p><p><b>  {</b></p><p><b>  int n;</b></p><p>  printf("歡迎您光臨順風(fēng)停車場(chǎng),&qu

44、ot;);</p><p>  printf("本停車場(chǎng)管理實(shí)行24小時(shí)制,停車每分鐘0.1元.\n");</p><p>  printf("請(qǐng)輸入停車場(chǎng)可容納的車(最多10輛):");</p><p>  scanf("%d",&n);</p><p>  fflush(

45、stdin);</p><p><b>  do{</b></p><p>  if(n<1 || n>10)</p><p><b>  {</b></p><p>  printf("輸入的車輛數(shù)不在要求范圍內(nèi),請(qǐng)重新輸入!");</p><p

46、>  scanf("%d",&n);</p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  else break;</p><p>  }while(n<1 || n>10);</p><p>&

47、lt;b>  return n;</b></p><p><b>  }</b></p><p>  typedef struct time{ </p><p>  int hour; </p><p><b>  int min; </b></p><p>

48、;  }Time; /*時(shí)間結(jié)點(diǎn)*/ </p><p>  typedef struct node{ </p><p>  char num[10];</p><p>  Time reach; </p><p>  Time leave; </p><p>  }CarNode; /*車輛信息結(jié)點(diǎn)*/ </p&

49、gt;<p>  typedef struct NODE{ </p><p>  CarNode *stack[Max+1];</p><p><b>  int top; </b></p><p>  }SeqStackCar; /*模擬車站*/</p><p>  typedef struct car{

50、 </p><p>  CarNode *data;</p><p>  struct car *next; </p><p>  }QueueNode; </p><p>  typedef struct Node{ </p><p>  QueueNode *head; </p><p> 

51、 QueueNode *rear; </p><p>  }LinkQueueCar; /*模擬通道*/ </p><p>  void InitStack(SeqStackCar *,int n); /*聲明棧*/</p><p>  int InitQueue(LinkQueueCar *); /*聲明便道*/</p><p>  int

52、 Arrival(SeqStackCar *,LinkQueueCar *,int n); /*車輛進(jìn)站*/</p><p>  void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *,int n); /*車輛出站*/</p><p>  void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ &

53、lt;/p><p>  void InitStack(SeqStackCar *s,int n) /*初始化棧*/</p><p><b>  { </b></p><p><b>  int i; </b></p><p>  s->top=0; </p><p>  

54、for(i=0;i<=n;i++)</p><p>  s->stack[s->top]=NULL; </p><p><b>  } </b></p><p>  int InitQueue(LinkQueueCar *Q) /*初始化便道*/ </p><p><b>  { </b

55、></p><p>  Q->head=(QueueNode *)malloc(sizeof(QueueNode)); </p><p>  if(Q->head!=NULL) </p><p><b>  { </b></p><p>  Q->head->next=NULL; </

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

57、>  void PRINT(CarNode *p) /*打印出站車的信息*/</p><p><b>  { </b></p><p>  int A1,A2,B1,B2;</p><p>  int a,b,c; </p><p>  printf("\n請(qǐng)輸入離開的時(shí)間:/**:**/");

58、 </p><p>  scanf("%d:%d",&(p->leave.hour),&(p->leave.min));</p><p>  fflush(stdin);</p><p><b>  do{</b></p><p>  if(p->leave.hour

59、<p->reach.hour || (p->leave.hour==p->reach.hour && p->leave.min<p->reach.min))</p><p><b>  {</b></p><p>  printf("輸入離開時(shí)間比進(jìn)站時(shí)間早,請(qǐng)重新輸入!\n");</

60、p><p>  scanf("%d:%d",&(p->leave.hour),&(p->leave.min));</p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  if(p->leave.hour<0 ||

61、 p->leave.hour>=24 || p->leave.min<0 || p->leave.min>=60)</p><p><b>  {</b></p><p>  printf("輸入的時(shí)間格式有錯(cuò),請(qǐng)重新輸入!");</p><p>  scanf("%d:%d&q

62、uot;,&(p->leave.hour),&(p->leave.min));</p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  else break;</p><p>  }while(p->leave.hour<p-&

63、gt;reach.hour || (p->leave.hour==p->reach.hour && p->leave.min<p->reach.min) || p->leave.hour<0 || p->leave.hour>=24 || p->leave.min<0 || p->leave.min>=60);</p><p

64、>  printf("車場(chǎng)現(xiàn)在有一輛車離開,請(qǐng)便道里的第一輛車進(jìn)入車場(chǎng)!\n");</p><p>  printf("出站的車的車牌號(hào)為:");</p><p>  puts(p->num);</p><p>  printf("\n");</p><p>  A1=p

65、->reach.hour; </p><p>  A2=p->reach.min; </p><p>  B1=p->leave.hour; </p><p>  B2=p->leave.min;</p><p>  a=(B1-A1)*60+B2-A2;</p><p><b>  

66、if(a>=60)</b></p><p><b>  {</b></p><p><b>  b=a/60;</b></p><p><b>  c=a-60*b;</b></p><p><b>  }</b></p>

67、<p><b>  else</b></p><p><b>  {</b></p><p><b>  b=0;</b></p><p><b>  c=a;</b></p><p><b>  }</b></p&g

68、t;<p>  printf(" 祝您一路順風(fēng),歡迎您下次光臨.");</p><p>  printf("\n 收 據(jù)\n");</p><p>  printf("================================== 車牌號(hào): ");</p

69、><p>  puts(p->num);</p><p>  printf("\n");</p><p>  printf("===================================================\n");</p><p>  printf("|進(jìn)車場(chǎng)時(shí)刻 |

70、 出車場(chǎng)時(shí)刻 | 停留時(shí)間 | 應(yīng)付(元)|\n");</p><p>  printf("====================================================\n");</p><p>  printf("| %d:%d",p->reach.hour,p->reach.min);<

71、/p><p>  printf(" | %d:%d",p->leave.hour,p->leave.min);</p><p>  printf(" | %d:%d",b,c);</p><p>  printf(" | %2.1f",0.1*a);</p>

72、;<p>  printf(" |\n");</p><p>  printf("-----------------------------------------------------\n");</p><p><b>  free(p);</b></p><p><b>

73、;  } </b></p><p>  int Arrival(SeqStackCar *Enter,LinkQueueCar *W,int n) /*車輛到達(dá)*/</p><p><b>  { </b></p><p>  CarNode *p; </p><p>  QueueNode *t; <

74、;/p><p><b>  int a,b;</b></p><p>  p=(CarNode *)malloc(sizeof(CarNode)); </p><p>  flushall(); </p><p>  printf("\n請(qǐng)輸入車牌號(hào)(七位,例:陜A1234):\n");</p>

75、;<p>  printf("請(qǐng)嚴(yán)格按照要求輸入車牌號(hào),否則系統(tǒng)會(huì)出錯(cuò)!\n");</p><p><b>  do{</b></p><p>  a=strlen("陜A1234");</p><p>  b=strlen(gets(p->num));</p><

76、p>  fflush(stdin);</p><p><b>  if(a!=b)</b></p><p><b>  {</b></p><p>  printf("輸入車牌號(hào)格式錯(cuò)誤,請(qǐng)重新輸入(七位)!\n");</p><p>  gets(p->num);&

77、lt;/p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  else break;</p><p><b>  if(a!=b)</b></p><p>  printf("輸入車牌號(hào)格式錯(cuò)誤,請(qǐng)重新輸入(七位)!\

78、n");</p><p>  }while(a!=b);</p><p>  if(Enter->top<n) /*車場(chǎng)未滿,車進(jìn)車場(chǎng)*/</p><p><b>  { </b></p><p>  Enter->top++; </p><p>  printf(&q

79、uot;\n車輛在車場(chǎng)第%d位置.",Enter->top); </p><p>  fflush(stdin);</p><p>  printf("\n請(qǐng)輸入到達(dá)時(shí)間:/**:**/"); </p><p>  scanf("%d:%d",&(p->reach.hour),&(p-&g

80、t;reach.min));</p><p>  fflush(stdin);</p><p><b>  do{</b></p><p>  if(p->reach.hour<0 || p->reach.hour>=24 || p->reach.min<0 || p->reach.min>=60

81、)</p><p><b>  {</b></p><p>  printf("輸入的時(shí)間格式有錯(cuò),請(qǐng)重新輸入!");</p><p>  scanf("%d:%d",&(p->reach.hour),&(p->reach.min));</p><p>

82、  fflush(stdin);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  break;</b></p><p>  }while(p->reach.hour<0 || p->reach.

83、hour>=24 || p->reach.min<0 || p->reach.min>=60);</p><p>  Enter->stack[Enter->top]=p; </p><p>  return(1); </p><p><b>  } </b></p><p> 

84、 else /*車場(chǎng)已滿,車進(jìn)便道*/ </p><p><b>  { </b></p><p>  printf("\n請(qǐng)?jiān)撥囋诒愕郎宰鞯却?");</p><p>  t=(QueueNode *)malloc(sizeof(QueueNode)); </p><p>  t->data

85、=p; </p><p>  t->next=NULL; </p><p>  W->rear->next=t; </p><p>  W->rear=t; </p><p>  return(1); </p><p><b>  } </b></p>&l

86、t;p><b>  } </b></p><p>  void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W,int n)</p><p>  { /*車輛離開*/ </p><p>  int i, room; </p><p>  CarN

87、ode *p,*t; </p><p>  QueueNode *q; </p><p>  /*判斷車場(chǎng)內(nèi)是否有車*/ </p><p>  if(Enter->top>0) /*有車*/ </p><p><b>  { </b></p><p>  while(1) /*輸入

88、離開車輛的信息*/ </p><p><b>  { </b></p><p>  printf("\n請(qǐng)輸入要離開的車在車場(chǎng)的位置/1--%d/:",Enter->top);</p><p>  scanf("%d",&room);</p><p>  fflus

89、h(stdin); </p><p>  if(room>=1&&room<=Enter->top) break; </p><p><b>  } </b></p><p>  while(Enter->top>room) /*車輛離開*/ </p><p><b&g

90、t;  { </b></p><p>  Temp->top++; </p><p>  Temp->stack[Temp->top]=Enter->stack[Enter->top]; </p><p>  Enter->stack[Enter->top]=NULL; </p><p>

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

92、 </p><p>  while(Temp->top>=1) </p><p><b>  { </b></p><p>  Enter->top++; </p><p>  Enter->stack[Enter->top]=Temp->stack[Temp->top]; &l

93、t;/p><p>  Temp->stack[Temp->top]=NULL; </p><p>  Temp->top--; </p><p><b>  } </b></p><p><b>  PRINT(p);</b></p><p>  /*判斷通道上

94、是否有車及車站是否已滿*/ </p><p>  if((W->head!=W->rear)&&Enter->top<n) /*便道的車輛進(jìn)入車場(chǎng)*/</p><p><b>  {</b></p><p>  q=W->head->next; </p><p>  t

95、=q->data; </p><p>  Enter->top++; </p><p>  printf("\n現(xiàn)在請(qǐng)便道上的車進(jìn)入車場(chǎng).該車的車牌號(hào)為:");</p><p>  puts(t->num);</p><p>  printf("\n該車進(jìn)入車場(chǎng)第%d位置.",Ente

96、r->top);</p><p>  printf("\n請(qǐng)輸入現(xiàn)在的時(shí)間(即該車進(jìn)站的時(shí)間)/**:**/:");</p><p>  scanf("%d:%d",&(t->reach.hour),&(t->reach.min));</p><p>  fflush(stdin); <

97、/p><p><b>  do{</b></p><p>  if(t->reach.hour<0 || t->reach.hour>=24 || t->reach.min<0 || t->reach.min>=60)</p><p><b>  {</b></p>

98、<p>  printf("輸入的時(shí)間格式有錯(cuò),請(qǐng)重新輸入!");</p><p>  scanf("%d:%d",&(t->reach.hour),&(t->reach.min));</p><p>  fflush(stdin);</p><p><b>  }</b

99、></p><p><b>  else</b></p><p><b>  break;</b></p><p>  }while(t->reach.hour<0 || t->reach.hour>=24 || t->reach.min<0 || t->reach.min&

100、gt;=60);</p><p>  W->head->next=q->next; </p><p>  if(q==W->rear) W->rear=W->head; </p><p>  Enter->stack[Enter->top]=t; </p><p><b>  free

101、(q); </b></p><p><b>  } </b></p><p>  else printf("\n目前便道里沒有車.\n");</p><p><b>  } </b></p><p>  else printf("\n目前車場(chǎng)里沒有車,來車請(qǐng)

102、直接進(jìn)入車場(chǎng)!"); /*沒車*/</p><p><b>  } </b></p><p>  void List1(SeqStackCar *S) /*列表顯示車場(chǎng)存車信息*/</p><p><b>  { </b></p><p><b>  int i; </b

103、></p><p>  if(S->top>0) /*判斷車站內(nèi)是否有車*/ </p><p><b>  { </b></p><p>  printf("\n車場(chǎng):"); </p><p>  printf("\n 位置 到達(dá)時(shí)間 車牌號(hào)\n"); </

104、p><p>  for(i=1;i<=S->top;i++) </p><p><b>  { </b></p><p>  printf(" %d ",i); </p><p>  printf("%d:%d ",S->stack[i]->reach.hour

105、,S->stack[i]->reach.min); </p><p>  puts(S->stack[i]->num); </p><p><b>  } </b></p><p><b>  } </b></p><p>  else printf("\n目前車場(chǎng)

106、里沒有車");</p><p><b>  } </b></p><p>  void List2(LinkQueueCar *W) /*列表顯示便道信息*/ </p><p><b>  { </b></p><p>  QueueNode *p; </p><p&

107、gt;  p=W->head->next; </p><p>  if(W->head!=W->rear) /*判斷通道上是否有車*/ </p><p><b>  { </b></p><p>  printf("\n目前正在等待車輛的號(hào)碼為:");</p><p>  wh

108、ile(p!=NULL) </p><p><b>  { </b></p><p>  puts(p->data->num); </p><p>  p=p->next; </p><p>  printf("\n");</p><p><b> 

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

110、 W) </p><p><b>  { </b></p><p>  int flag,tag; </p><p><b>  flag=1; </b></p><p>  while(flag) </p><p><b>  { </b></p

111、><p>  printf("\n1.車場(chǎng)\n2.便道\n3.返回\n"); </p><p><b>  while(1) </b></p><p>  { printf("\n請(qǐng)選擇 1|2|3:"); </p><p>  scanf("%d",&t

112、ag);</p><p>  fflush(stdin);</p><p><b>  do{</b></p><p>  if(tag<1||tag>3)</p><p><b>  {</b></p><p>  printf("輸入有誤,請(qǐng)按要求重

113、新輸入!");</p><p>  scanf("%d",&tag);</p><p>  fflush(stdin);</p><p><b>  }</b></p><p><b>  else</b></p><p><b&g

114、t;  break;</b></p><p>  }while(tag>3 && tag<1);</p><p><b>  break;</b></p><p><b>  } </b></p><p>  switch(tag) </p>&

115、lt;p><b>  { </b></p><p>  case 1:List1(&S);break; /*列表顯示車場(chǎng)信息*/ </p><p>  case 2:List2(&W);break; /*列表顯示便道信息*/ </p><p>  case 3:flag=0;break;/*返回*/</p>

116、<p>  default: break; </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p><p>  void main() </p><p><b&

117、gt;  { </b></p><p>  SeqStackCar Enter,Temp; </p><p>  LinkQueueCar Wait;</p><p><b>  int ch;</b></p><p><b>  int n; </b></p><p

118、>  printf("該停車場(chǎng)管理系統(tǒng)是個(gè)比較簡(jiǎn)單系統(tǒng),在應(yīng)用的時(shí)候請(qǐng)注意要求! \n");</p><p>  printf("如果您有任何問題,請(qǐng)及時(shí)聯(lián)系我們,謝謝合作!\n");</p><p>  printf("=========================================================

119、===\n");</p><p><b>  n=getn();</b></p><p>  InitStack(&Enter,n); /*初始化車場(chǎng)*/</p><p>  InitStack(&Temp,n); /*初始化讓路的臨時(shí)棧*/</p><p>  InitQueue(&W

120、ait); /*初始化便道*/</p><p><b>  while(1) </b></p><p><b>  { </b></p><p>  printf("\n1. 車輛進(jìn)站");</p><p>  printf(" 2. 車輛出站");<

121、/p><p>  printf(" 3. 存車信息");</p><p>  printf(" 4. 退出系統(tǒng)\n"); </p><p><b>  while(1) </b></p><p>  {printf("請(qǐng)選擇: 1|2|3|4.\n");</p

122、><p>  scanf("%d",&ch);</p><p>  fflush(stdin);</p><p><b>  do{</b></p><p>  if(ch>4 || ch<1){</p><p>  printf("輸入有誤,請(qǐng)重新輸

123、入!");</p><p>  scanf("%d",&ch);</p><p>  fflush(stdin);</p><p><b>  }</b></p><p><b>  else</b></p><p><b> 

124、 break;</b></p><p>  }while(ch>4 || ch<1);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  switch(ch) </p><p><b&g

125、t;  { </b></p><p>  case 1:Arrival(&Enter,&Wait,n);break; /*車輛進(jìn)站*/</p><p>  case 2:Leave(&Enter,&Temp,&Wait,n);break; /*車輛出站*/</p><p>  case 3:List(Enter,

126、Wait);break; /*存車信息*/</p><p>  case 4:exit(0); /*退出系統(tǒng)*/</p><p>  default:break;</p><p><b>  } </b></p><p><b>  } </b></p><p><b

127、>  }</b></p><p><b>  6 課程設(shè)計(jì)總結(jié)</b></p><p>  通過這次課程設(shè)計(jì)使我充分的理解了用棧和隊(duì)列實(shí)現(xiàn)模擬停車場(chǎng)的基本原理,知道了棧的順序存儲(chǔ)結(jié)構(gòu)和隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的定義和算法描述,同時(shí)也學(xué)會(huì)了編寫停車場(chǎng)問題的程序。雖然此次的程序不是很完備,沒有加入一些更完善的功能,但是總體還是一個(gè)比較能體現(xiàn)數(shù)據(jù)結(jié)構(gòu)知識(shí)點(diǎn)能力的

128、程序了,當(dāng)然只是相對(duì)于我這個(gè)初學(xué)者來說。在剛開始編程的時(shí)候,我感到有點(diǎn)無(wú)從下手,但經(jīng)過對(duì)題目的詳細(xì)分析和思考之后,我就知道具體應(yīng)該做什么,怎么做了。經(jīng)過幾天和同組同學(xué)的一起研究,我們分工完成了這個(gè)程序,完成這個(gè)程序,我學(xué)到了很多東西,這是在課堂上無(wú)法做到的。</p><p>  在此我非常要感謝的是我的指導(dǎo)老師老師,感謝老師的細(xì)心認(rèn)真的輔導(dǎo),讓我對(duì)數(shù)據(jù)結(jié)構(gòu)這門課程掌握得更好,懂得更多,她教我怎么分析問題,應(yīng)該要注

129、意些什么,最后還指出我存在的問題。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 黃同成,黃俊民,董建寅.?dāng)?shù)據(jù)結(jié)構(gòu)[M].北京:中國(guó)電力出版社,2008</p><p>  [2] 董建寅,黃俊民,黃同成.?dāng)?shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)與題解[M].北京:中國(guó)電力出版社,2008</p><p>  [3]

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論