版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 停車場管理</b></p><p><b> 課程設計題目內容</b></p><p><b> ?。?)問題描述:</b></p><p> 設停車場是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內按車輛到達時間的先后順序,依次由北向南排列
2、(大門在最南端,最先到達的第一輛車停放在車場的最北端),若車場內已停滿n輛汽車,則后來的汽車只能在門外的便道上等待,一旦有車開走,則排在便道上的第一輛車即可開入;當停車場內某輛車要離開時,在它之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進行管理的模擬程序。</p><p><b
3、> 基本要求:</b></p><p> 以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數據序列進行模擬管理。每一組輸入數據包括三個數據項:汽車“到達”或“離去”信息、汽車牌照號碼以及到達或離去的時刻。對每一組輸入數據進行操作后的輸出信息為:若是車輛到達,則輸出汽車在停車場內或便道上的停車位置;若是車輛離去,則輸出汽車在停車場內停留的時間和應交納的費用(在便道上停留的時間不收費
4、)。棧以順序結構實現,隊列以鏈表結構實現。</p><p><b> 測試數據:</b></p><p> 設n=2,輸入數據為:</p><p> (‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0
5、)。其中:‘A’表示到達(Arrival);‘D’表示(Departure);‘E’表示輸入結束(End)。</p><p><b> 實現提示:</b></p><p> 需另設一個棧,臨時停放為給要離去的汽車讓路而從停車場退出來的汽車,也用順序存儲結構實現。輸入數據按到達或離去的時刻有序。棧中每個元素表示一輛汽車,包含兩個數據項:汽車的牌照號碼和進入停車場的時
6、刻。</p><p><b> 本人完成的工作</b></p><p> 定義車輛信息結構體,包括汽車的車牌號碼、到達停車場時間、離開停車場時間;</p><p> 定義順序堆棧的結構體,用于模擬停車場;</p><p> 定義鏈式隊列的結構體,用于模擬車場外的停車場;</p><p>
7、 定義堆棧和隊列的初始化函數;</p><p> 設計汽車進入停車場、離開停車場、離開收費信息和汽車??壳闆r查詢等主要函數;</p><p> 主函數:設計停車場管理菜單,通過菜單選項,調用相關的函數來實現停車場汽車到達登記、汽車離開停車場、汽車??坎樵兒屯顺龀绦虻牟僮?,完成模擬汽車停車場的整個過程。</p><p><b> 所采用的數據結構<
8、;/b></p><p><b> 數據結構的定義:</b></p><p> typedef struct car //定義車輛信息的結構體</p><p><b> {</b></p><p> long CarNo; //車牌號</p><p&
9、gt; int Atime; //車到達時間</p><p> int Dtime; //車離開時間</p><p><b> }CarNode;</b></p><p> typedef struct node //定義模擬停車場的順序堆棧</p><p><b
10、> { </b></p><p> CarNode stack[Maxsize+1]; //棧底不存放元素,即停車場共有Masize個位置</p><p> int top; //棧頂指針</p><p> }StackCar;</p><p> typedef struct
11、qnode //用隊列結點定義,構造停車場外的單個等候車輛</p><p><b> {</b></p><p> CarNode data; //數據域</p><p> struct qnode *next; //指針域</p><p><b> }QNode;</b
12、></p><p> typedef struct Node //用隊列定義,構造停車場外的等候便道</p><p><b> {</b></p><p> QNode *front; //隊頭指針</p><p> QNode *rear; //隊尾指針</p><p>
13、; }LinkQueue;</p><p><b> 所設計的函數</b></p><p> 1)void StackInitiate(StackCar *s) //堆棧初始化</p><p><b> { </b></p><p> s->top=0;
14、 //棧頂置0</p><p><b> }</b></p><p> 初始方法:初始化順序棧,只需令棧頂的下標值置為0即可。</p><p><b> 程序框圖:</b></p><p> 2)LinkQueue *Init_LinkQueue(void)//鏈隊列的初始化&l
15、t;/p><p><b> { </b></p><p> LinkQueue *Q;QNode *p;</p><p> p=(QNode *)malloc(sizeof(QNode)) ; /* 開辟頭結點 */</p><p> p->next=NULL;</p><p&g
16、t; Q=(LinkQueue *)malloc(sizeof(LinkQueue));/* 開辟鏈隊的指針結點 */</p><p> Q->front=Q->rear=p; </p><p> return(Q) ;</p><p><b> }</b></p><p> 初始方法:開辟一個隊
17、列的頭結點p,其next指針為空,再開辟鏈隊的指針結點Q,用p來初始化鏈隊結點的隊頭指針和隊尾指針。初始化成功后,返回Q</p><p><b> 程序框圖:</b></p><p> 3)void Arrival(StackCar *car1,LinkQueue *car2) //車輛進入停車場操作</p><p><b>
18、; { </b></p><p> CarNode p;</p><p><b> QNode *q;</b></p><p> printf("\n++++++++++++車輛到達登記表+++++++++++");</p><p> printf("\n請輸入車牌號
19、(整型,例如:1234):");</p><p> scanf("%d",&p.CarNo);//輸入車牌號</p><p> if(car1->top<Maxsize) //停車場未停滿車時,即棧未滿,進入停車場</p><p><b> {</b&g
20、t;</p><p> car1->top++; //棧頂指針+1</p><p> printf("\n【汽車順利停放在車場的第%d位置】\n",car1->top);</p><p><b> while(1)</b></p><p
21、><b> {</b></p><p> printf("\n車輛幾點鐘到達(%d~23點):",n);</p><p> scanf("%d",&p.Atime);</p><p> if(p.Atime>23 || p.Atime<n) </p><
22、;p> printf("輸入時間有誤,請重新輸入!");</p><p><b> else </b></p><p><b> {</b></p><p> n=p.Atime;</p><p> printf("\n北京時間%d:00整\n"
23、;,n);</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> car1->stack[car1->top]=p; //將車停入停車場,停放在
24、top位置</p><p><b> }</b></p><p> else //停車場已停滿車,即棧已滿,則??吭诒愕?lt;/p><p><b> { </b></p><p> printf("\n停車場
25、已滿,請先在便道等候!有車位時進入車場!\n");</p><p> q=(QNode *)malloc(sizeof(QNode));</p><p> q->data=p; </p><p> q->next=NULL; //形成新的結點,保存車輛信息</p><p&g
26、t; car2->rear->next=q;</p><p> car2->rear=q; //新結點入隊尾,即車輛進入便道等候</p><p><b> }</b></p><p> printf("+++++++++++++++++++++++++++++++++++++\n&quo
27、t;);</p><p><b> }</b></p><p> 算法思想:當車進入車場時,登記車的車牌號,如果停車場有空位,將車停放在相應的空位,輸出此時車停放的位置,記錄到達時間;如果停車場沒有空位,便將車開到便道等候。其過程相當于,當順序棧未滿時,進棧;當順序棧已滿時,無法入棧,便進入隊列。</p><p><b> 程序
28、框圖:</b></p><p> 4)void output(CarNode p) //輸出車離開停車場離開時間、收費等信息</p><p><b> { </b></p><p><b> int a,b;</b></p><p><b> while(1)<
29、/b></p><p><b> {</b></p><p> printf("\n車輛離開的時間(%d點~24點之間的時間):",n);</p><p> scanf("%d",&(p.Dtime)); //輸入車輛離開的小時、分鐘</p><p&g
30、t; if(p.Dtime>24 || p.Dtime<n)</p><p> printf("輸入時間不符合,重新輸入!",p.Atime);</p><p><b> else </b></p><p><b> {</b></p><p> n=p.D
31、time;</p><p> printf("\n北京時間%d:00整\n",n);</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p>
32、 printf("\n**********車輛離開信息表**********");</p><p> printf("\n離開車輛的車牌號為:%d",p.CarNo); //輸出離開車場的車牌號</p><p> printf("\n到達時間為: %d點&quo
33、t;,p.Atime); </p><p> printf("\n離開時間為: %d點",p.Dtime); </p><p> a=p.Atime;</p><p> b=p.Dtime;</p><p> printf("\n應交費用為: %d元",(b-a)*price);
34、 //計算并輸出停車費用</p><p> printf("\n**********************************\n");</p><p><b> }</b></p><p> 算法思想:當汽車離開停車場時,調用此函數,輸入汽車離開車場的時間,便打印該汽車的車牌號、到達時間、離開時間和繳納費用等
35、信息,來模擬汽車離開停車場。(n為當前的時間)</p><p><b> 程序框圖:</b></p><p> 4)void Departure(StackCar *car1,StackCar *Temp,LinkQueue *car2) //車輛離開停車場操作</p><p><b> { </b></p&
36、gt;<p> int i,j=1,k=0;</p><p><b> long NO;</b></p><p> CarNode p,t;</p><p><b> QNode *q;</b></p><p> if(car1->top>0)
37、 //停車場內有車輛停放</p><p><b> { </b></p><p><b> while(j)</b></p><p><b> {</b></p><p> printf("\n請輸入離開停車場車輛的車牌號:");</p>
38、<p> scanf("%d",&NO);</p><p> for(i=1;i<=car1->top;i++) //查找停車場內是否存在該車牌號</p><p><b> {</b></p><p> if(car1->stack[i].CarNo==NO)<
39、;/p><p> k=1; //存在,k=1</p><p><b> }</b></p><p><b> if(k)</b></p><p><b> {</b></p><p> while(car1-&
40、gt;stack[car1->top].CarNo!=NO) //當停車場top位置停放的車牌號不為NO時,將該位置的車開入臨時停車場</p><p><b> {</b></p><p> Temp->top++; </p><p> Temp->stack[Temp->t
41、op]=car1->stack[car1->top]; //入棧。臨時車場棧頂指針+1,把車停放在臨時車場</p><p> car1->top--; //出棧。原車場的棧頂置空,棧頂指針-1</p><p><b> } </b></p><p&
42、gt; p=car1->stack[car1->top]; //將要離開停車場的車輛信息賦給p</p><p> car1->top--; //棧頂-1</p><p> j=0; //結束while</p><p><b>
43、}</b></p><p><b> else</b></p><p> printf("無此車牌號碼,請重新輸入!");</p><p><b> }</b></p><p> output(p); //調用汽車離開停車場的信息函數
44、</p><p> while(Temp->top>=1) //將臨時車場里的車?;氐酵\噲?lt;/p><p><b> {</b></p><p> car1->top++;</p><p> car1->stack[car1->top]=Temp->s
45、tack[Temp->top];</p><p> Temp->top--;</p><p><b> }</b></p><p><b> if(n>=24)</b></p><p><b> {</b></p><p>
46、printf("\n****已過24點,停車場管理系統關閉!****\n");</p><p><b> m=0;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {<
47、;/b></p><p> if((car2->front!=car2->rear)&&car1->top<Maxsize) //如果有車在便道等候,將車停入停車場</p><p><b> { </b></p><p> q=car2->front->next; //取隊
48、首結點q</p><p> t=q->data; //拷貝隊首結點的車輛信息</p><p> car1->top++;</p><p> printf("\n便道的%d號車進入車場第%d位置!",t.CarNo,car1->top);</p><p><b>
49、while(1)</b></p><p><b> {</b></p><p> printf("\n請輸入%d號車進入車場的時間(%d~23點):",t.CarNo,n);</p><p> scanf("%d",&(t.Atime)); //輸入車到達停車場的時間</p
50、><p> if(t.Atime>23 || t.Atime<n) </p><p> printf("輸入時間有誤,請重新輸入!");</p><p><b> else </b></p><p><b> {</b></p><p>
51、 n=t.Atime;</p><p> printf("\n北京時間%d:00整\n",n);</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><
52、;p> car2->front->next=q->next; //修改隊首指針</p><p> if(q==car2->rear) car2->rear=car2->front; /* 當隊列只有一個結點時應防止丟失隊尾指針 */</p><p> car1->stack[car1->top]=t; //車進入停車場
53、</p><p><b> free(q);</b></p><p><b> }</b></p><p> else printf("\n便道里沒有車\n"); //便道沒有車,end if</p><p><b> }</b></p
54、><p><b> }</b></p><p> else printf("\n車場里沒有車\n"); //停車場內沒有車,end if</p><p><b> }</b></p><p> 算法思想:當順序棧不為空時,進行汽車要離開停車場操作,輸入要離開的
55、車牌號,匹配順序棧的數組中是否存在該車牌號的元素(如果未找到,則提示車牌號輸入錯誤,重新輸入),如果其他的汽車需要為從停車場離開的車讓路的話,則把這些車暫時存放在另一個順序棧,待該車離開后,再按原次序返回停車場。如果便道里有車在等候,則將該車開入停車場停放。當停車場內沒車停放時,則提示停車場沒有車,不能進行離開停車場操作。</p><p><b> 程序框圖:</b></p>
56、<p> 5)void List1(StackCar *car1) //打印停車場的車輛</p><p><b> { </b></p><p><b> int i;</b></p><p> if(car1->top>0)</p><p><b>
57、 {</b></p><p> printf("\n車場:");</p><p> printf("\n車牌號\t到達時間\n");</p><p> for(i=1;i<=car1->top;i++)</p><p><b> {</b><
58、/p><p> printf("%d",car1->stack[i].CarNo);</p><p> printf("\t%d點\n",car1->stack[i].Atime);</p><p><b> }</b></p><p><b> }<
59、;/b></p><p> else printf("\n車場里沒有車!\n");</p><p><b> }</b></p><p> 算法思想:打印棧中的元素,通過一個單循環,打印棧1-top中的元素(車牌號)。</p><p><b> 程序框圖:</b>&
60、lt;/p><p> 6)void List2(LinkQueue *car2) //打印便道中等候的車輛</p><p><b> { </b></p><p><b> QNode *p;</b></p><p> p=car2->front->next;</p>
61、;<p> if(car2->front!=car2->rear)</p><p><b> {</b></p><p> printf("\n便道:\n車牌號 ");</p><p> while(p!=NULL)</p><p><b> {<
62、/b></p><p> printf("%d\t",p->data.CarNo);</p><p> p=p->next;</p><p><b> }</b></p><p><b> }</b></p><p> else
63、 printf("\n便道里沒有車!\n");</p><p><b> }</b></p><p> 算法思想:通過隊列的隊首指針,一一打印隊列中的元素。</p><p><b> 程序框圖:</b></p><p><b> 7)/*主函數*/</b&
64、gt;</p><p> void main()</p><p><b> {</b></p><p> StackCar car1,temp; //定義兩個堆棧,停車場car1,臨時停車場car2</p><p> LinkQueue *car2; //定義一個隊列,用于便道停放等候停車的車輛<
65、;/p><p> char choose; //選項</p><p> StackInitiate(&car1);</p><p> StackInitiate(&temp);</p><p> car2=Init_LinkQueue();</p><p> printf(&quo
66、t;=================歡迎光臨Wings停車場=====================\n" );</p><p> printf("*入場須知:本停車場內設 %d個停車位,停車收費為每小時 %d元, *\n",Maxsize,price);</p><p> printf("* 停車超過半小時按一小時計算,不
67、超過不收費. *\n");</p><p> printf("* 營業時間:24小時 *\n");</p><p> printf("* 投訴監督電話:123-456789 *\n");<
68、;/p><p> printf("*停車系統提示:只供模擬一天的汽車停放情況 *\n");</p><p> printf("=================歡迎光臨Wings停車場=====================\n" );</p><p><b> while(m)&l
69、t;/b></p><p><b> {</b></p><p> printf("\n 停車場管理程序 \n");</p><p> printf("===============================================
70、\n");</p><p> printf("** A 汽車到達停車場 **\n");</p><p> printf("** **\n");</p><p> printf(&
71、quot;** D 汽車離開停車場 **\n");</p><p> printf("** **\n");</p><p> printf("** F 汽車??啃畔?
72、 **\n");</p><p> printf("** **\n");</p><p> printf("** E 退出程序 **\n");</p><p>
73、printf("===============================================\n");</p><p> printf("請選擇(A,D,F,E): ");</p><p> scanf("%c",&choose);</p><p> switch(choos
74、e)</p><p><b> {</b></p><p><b> case 'A':</b></p><p><b> case 'a':</b></p><p> Arrival(&car1,car2);//車進入停車場&l
75、t;/p><p><b> break;</b></p><p><b> case 'D':</b></p><p><b> case 'd':</b></p><p> Departure(&car1,&temp,car
76、2);</p><p> break; //車離開停車場</p><p><b> case 'F':</b></p><p><b> case 'f':</b></p><p> printf("\n-----------汽車??啃畔⒁挥[表---
77、----------");</p><p> List1(&car1);</p><p> List2(car2);</p><p> printf("\n------------------------------------------");</p><p><b> break;&
78、lt;/b></p><p><b> case 'E':</b></p><p><b> case 'e':</b></p><p><b> m=0;</b></p><p><b> break;</b>
79、;</p><p><b> default:</b></p><p> printf("無此選項,請重新輸入!\n");</p><p><b> break;</b></p><p><b> }</b></p><p>
80、 while (choose!= '\n')</p><p> scanf("%c",&choose);</p><p><b> }</b></p><p><b> }</b></p><p> 算法思想:設計菜單,進行停車場的各項操作。&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 停車場管理課程設計報告--停車場管理模擬程序的設計
- 數據結構---停車場管理課程設計報告
- 停車場管理系統課程設計報告
- 課程設計報告---停車場車位管理
- 課程設計報告-- 停車場管理系統
- 課程設計報告—停車場管理系統
- 課程設計---停車場管理
- 課程設計---停車場停車場車輛管理系統實現與設計
- 停車場管理問題系統課程設計報告
- c語言課程設計報告—停車場管理
- 停車場管理系統課程設計
- 停車場管理問題課程設計
- 數據結構課程設計停車場管理報告
- c語言課程設計報告停車場管理系統
- 停車場管理-數據結構課程設計報告
- 數據結構課程設計報告---停車場管理
- c++課程設計報告--停車場管理系統設計
- 停車場系統課程設計
- 地下停車場課程設計
- 智能停車場課程設計--校園智能停車場的系統設計
評論
0/150
提交評論