付費下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)實驗報告實驗三停車場模擬管理程序的設計與實現(xiàn)本實驗的目的是進一步理解線性表的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),進一步提高使 用理論知識指導解決實際問題的能力。一、【問題描述】設停車場只有一個可停放幾輛汽車的狹長通道,且只有一個大門可供汽車 進出。汽車在停車場內(nèi)按車輛到達的先后順序依次排列,若車場內(nèi)已停滿幾輛 汽車,則后來的汽車只能在門外的便道上等候,一旦停車場內(nèi)有車開走,則排 在便道上的第一輛車即可進入;當停車場內(nèi)某輛車要離開時,由于停車場是狹 長的通道,在它之后開入的車輛必須先退出車場為它讓路,待該車輛開出大門, 為它讓路的車輛再按原次序進入車場。在這里假設汽車不能從便道上開走,試 設計這樣一個停
2、車場模擬管理程序。為了以下描述的方便,停車場的停車場用“停車位”進行敘述,停車場的便道用“便道”進行敘述。二、【數(shù)據(jù)結(jié)構(gòu)設計】1、為了便于區(qū)分每輛汽車并了解每輛車當前所處的位置, 需要記錄汽車的 牌照號碼和汽車的當前狀態(tài),所以為汽車定義一個新的類型 CAR具體定義如 下:typedef structchar *license /汽車牌照號碼,定義為一個字符指針類型char state; /汽車當前狀態(tài),字符s表示停放在停車位上,/字符p表示停放在便道上,每輛車的初始狀態(tài)用字符i來進行表示2、由于車位是一個狹長的通道,所以不允許兩輛車同時出入停車位,當 有車到來要進入停車位的時候也要順次停放,當
3、某輛車要離開時,比它后到的 車要先暫時離開停車位,而且越后到的車就越先離開停車位,顯然這和棧的“后 進先出”特點相吻合,所以可以使用一個棧來描述停車位。由于停車位只能停放有限的幾輛車,而且為了便于停車場的管理,為每個 車位要分配一個固定的編號,不妨設為1、2、3、4、5 (可利用數(shù)組的下標), 分別表示停車位的1車位、2車位、3車位、4車位。5車位,針對這種情況使 用一個順序棧比較方便。當某輛車要離開停車場的時候,比它后進停車位的車要為它讓路,而 且當它開走之后讓路的車還要按照原來的停放次序再次進入停車位的某個車位 上,為了完成這項功能,再定義一個輔助棧,停車位中讓路的車依次“壓入” 輔助棧,
4、待提出開走請求的車開走后再從輔助棧的棧頂依次“彈出”到停車位 中。對輔助棧也采用順序棧。該棧的具體定義如下:typedef struct CAR carmax_stopping;int top;stack;3、當停車場的停車位上都已經(jīng)停滿了汽車,又有新的汽車到來時要把它調(diào) 度到便道上,便道上的車輛要按照進入便道的先后順序順次存放在便道上,為 便道上的每個位置也分配一個固定的編號,當有車從停車位上離開后,便道上 的第一輛汽車就立即進入停車位上的某個車位,由于問題描述中限制了便道上 的汽車不能從便道上開走,即便道上的汽車只有在停車位上停放過之后才能離 開停車場,這樣越早進入便道的汽車就越早進入停車
5、位,而且每次進入停車位 的汽車都是處于便道“最前面”的汽車,顯然,這和隊列的先進先出特點相吻 合,所以,這里使用一個順序隊來描述便道,可以利用數(shù)組的下標表示便道的 位置,具體定義如下:#define max_pavement 100 / *便道不限制停放車輛的數(shù)目,設為足夠大 */typedef structCAR pavement max_pavement; / 各汽車信息的存儲空間int front,rear; /用來指示隊頭和隊尾位置的靜態(tài)指針PAVEMENT;三、【功能(函數(shù))設計】1、本程序從總體上分為四個大的功能模塊:分別為:程序功能介紹和操作 提示模塊、汽車進入停車場車位的管理模
6、塊、汽車離開停車場車位的管理模塊、 查看停車位以及整個停車場停車狀態(tài)的查詢模塊,具體功能描述如下:1)程序功能介紹和操作提示模塊:此模塊給出程序歡迎信息,介紹本程序 的功能,并給出程序功能所對應的鍵盤操作的提示,具體屏幕顯示如下所示:,歡迎使用本程序;1 有車來時;2 有車走時;3 顯示某停車位上的汽車;4 顯示該停車場的停車狀況;5 退出系統(tǒng);請輸入選擇函數(shù)原型void menu();2)汽車進入停車場車位的管理模塊:此模塊用來登記停車場的汽車的車牌 號和對該車的調(diào)度過程并修改該車的狀態(tài),其中調(diào)度過程要以屏幕信息的形式 反饋給用戶來指導用戶對車輛的調(diào)度。例如,當前停車位上1、2、3車位分別停
7、放著牌照為JF001、JF002、JF003的汽車,便道上無汽車,當牌照為 JF004 的汽車到來后屏幕應給出如下提示信息:牌照為JF004的汽車停入停車位的4號車位!此函數(shù)原型為 int push_stack(stack&s,CAR&c);當停車位已滿,再來新的車車氤提示該汽車停在了便道上,提示信息:牌照為JF006的汽車停在了便道上。此函數(shù)原型為 int push_queue(queue&q,CAR&c);再次顯示菜單讓用戶選擇功能3 )汽車離開停車場停車位的管理模塊:此模塊用來為提出離開停車場的車 輛做調(diào)度處理,并修改相關(guān)車輛的狀態(tài),其中調(diào)度過程要以屏幕信
8、息的形式反 饋給用戶來指導用戶對車輛的調(diào)度,當有車離開停車場后應該立刻檢查便道上 是否有車,如果有車的話立即讓便道上的第一輛汽車停入停車位。例如,當前 停車位上1, 2, 3, 4, 5車位分別停放著牌照為 JF001、JF002、JF003、JF004、 JF005的汽車,便道上的1, 2位置分別停放著牌照為JF006、JF007的汽車, 當接收到JF003要離開的信息時,屏幕應給出如下提示信息:車牌號為JF005的車由停車位開到了輔助棧上車牌號為JF004的車由停車位開到了輔助棧上車牌號為JF003的車開走了車牌號為JF004的車由輔助棧開到了停車位的3的車位上車牌號為JF005的車由輔助
9、棧開到了停車位的4的車位上便道上的JF006的停在了 5車位上函數(shù)原型為 int car_leave(stack&s1,stack&s2,queue&q,char*c);再次顯示菜單供用不選擇功能。4)查看停車場停車狀態(tài)的查詢模塊:此模塊用來在屏幕上顯示停車位和 便道上各位置的狀態(tài),例如,當前停車位上 1, 2, 3, 4, 5車位分別停放著牌 照為JF001、JF002、JF004、JF00S JF006的汽車,便道上的1, 2位置分別停 放著牌照為JF006、JF007的汽車,當接受到查看指令后,屏幕上應顯示:JF001-停車位的1車位JF002-停車位的2車位JF
10、003-停車位的3車位JF004-停車位的4車位JF005-停車位的5車位JF006-便道上的1位置JF007-便道上的2位置顯示菜單讓用戶選擇功能。止匕函數(shù)原型為:void show_parking(stack&s,queue&c);查看某個停車位的停車狀況:在用戶選擇該功能并且輸入4后,應顯示: 4車位上停著車牌號為JF004的車止匕函數(shù)原型為 void show_stopping(int i,stack&s);顯示菜單讓用戶選擇功能。2、以上四個總體功能模塊要用到的棧和隊列的基本操作所對應的主要函數(shù)如下 表所小:函數(shù)原型函數(shù)功能voidinit_stack(sta
11、ck&c);通過參數(shù)c來選擇初始化“停不位棧”或“輔助?!眝oidinit_queue(queue&c);初始化“便道隊列”intpush_stack(stack&s,CAR& c);將車輛c壓入停二車位棧s中intpush_queue(queue&q,CAR& c);將車輛c壓入便道q中voidshow_parking(stack&s,qu eue&e);打印停二車位s和便道q上的車輛信息void show_stopping(int i,stack&s);打印停二車位上的i車位的車輛信息intcar_leave(stac
12、k&s1,stac k&s2,queue&q,char*c);先通過c查找出要升走的車輛在停車位的位置,先 將其后方的車輛開到輔助棧中,等該車輛開走后, 再把輔助棧中的車輛開回停車包,如便道后車,便 把1位置的車開到停布位上其他函數(shù)的定義和說明請參照源代碼3、由于程序應該能夠隨時處理用戶所提出的各種操作請求, 所以在主函數(shù)中用 一個DO_WHILE環(huán)結(jié)構(gòu)隨時監(jiān)控鍵盤的按鍵操作,遇到相應的按鍵就轉(zhuǎn)到對應 函數(shù)繼續(xù)運行,運行完該函數(shù)繼續(xù)監(jiān)控鍵盤按鍵,如此往復,直到接到“退出 指令程序才能結(jié)束。部分編碼如下:domenu();cout<<"請輸入選擇&q
13、uot;<<endl;cin>>key;while(key>5|key<1)cout<<"輸入有誤,請重新輸入:"<<endl;cin>>key;switch(key)case 1:CAR c;cout<<"請輸入該車車牌號:"<<endl;c.license=new char10;cin>>c.license;c.state='i'if(stopping.top!=max_stopping-1) push_stack(stoppi
14、ng,c);elsepush_queue(pavement,c);break;case 2:char *s;"<<endl;cout<<"請輸入您要出站的汽車的車牌號:s=new char10;cin>>s;car_leave(stopping,temp,pavement,s); break;case 3:int location;cout<<”請輸入車位:"<<endl;cin>>location;show_stopping(location,stopping);break;case 4:s
15、how_parking(stopping,pavement);break;case 5:exit(0);;while(key!=5);return 1;四、【界面設計】本程序的界面力求簡潔、友好,每一步需要用戶操作的提示以及每一次用 戶操作產(chǎn)生的調(diào)度結(jié)果都以中文的形式顯示在屏幕上,使用戶對要做什么和已 經(jīng)做了什么一目了然。文字表述精練,準確。具體設計可參閱功能設計中的相 關(guān)部分,這里就不再贅述。五、【編碼實現(xiàn)】#include<iostream.h>#include"string.h"#define max_stopping 5 /車庫容量,可以根據(jù)實際情況改變
16、#define max_pavement 100#include <stdlib.h>typedef structchar*license; /汽車牌照號碼,定義為一個字符指針類型char state; /汽車當前狀態(tài),字符S表示停放在停車位上,/ 字符p表示停放在便道上,每輛車的初始狀態(tài)用字符i來表示CAR;typedef struct CAR carmax_stopping; /各汽車信息的存儲空間int top; /用來指示棧頂位置的靜態(tài)指針stack;typedef structCAR carmax_pavement; / 各汽車信息的存儲空間int front,rear;
17、 /用來指示隊頭和隊尾位置的靜態(tài)指針 queue;/*方法聲明*/void init_stack(stack&c); /初始化棧void init_queue(queue&c); /初始化便道int push_stack(stack&s,CAR&c);int push_queue(queue&q,CAR&c);void show_parking(stack&s,queue&c);void show_stopping(int i,stack&s);int car_leave(stack&s1,stack&s2
18、,queue&q,char*c); /車輛離開void init_stack(stack&c) for(int i=0;i<max_stopping;i+)c.cari.license=NULL;c.cari.state='i' c.top=-1;void init_queue(queue&c) for(int i=0;i<max_pavement;i+)c.cari.license=NULL;c.cari.state='i'c.front=c.rear=-1;int push_stack(stack&s,CAR&am
19、p;c) if(s.top!=max_stopping) s.top+;s.cars.top.license=new charstrlen(c.license)+1;strcpy(s.cars.top.license,c.license);cout<<"車牌號為"<<c.license<<" 的車進入停車位的"<<s.top+1<<”車位 上"<<endl;s.cars.top.state='s'return 1; elsereturn 0;int push
20、_queue(queue&q,CAR&c).if(q.rear!=max_pavement)q.rear+;q.carq.rear.license=new charstrlen(c.license)+1;strcpy(q.carq.rear.license,c.license);q.carq.rear.state='q'cout<<"車牌號為"<<c.license<<” 的車進入便道"<<endl;return 1;return 0;void show_parking(stack&a
21、mp;s,queue&q).int i;if(s.top=-1)-cout<<"停車場上沒有車"<<endl;return ;for( i=0;i<=s.top;i+)cout<<s.cari.license<<"-停車位的"<<i+1<<"車位"<<endl;if(q.front=q.rear)cout<<"便道上沒有車"<<endl;return ;for(i=q.front+1;i<
22、=q.rear;i+)cout<<q.cari.license<<"-便道上的"<<i+1<<"位置"<<endl;return ;void show_stopping(int i,stack&s).if(i>max_stopping|i<1) cout<<"此停車場上沒有該車位"<<endl;return;if(s.cari-1.license=NULL)cout<<”該車位沒有汽車"<<endl
23、;elsecout<<i<<"車位上停著車牌號為"<<s.cari-1.license<<" 的車"<<endl;int car_leave(stack&s1,stack&s2,queue&q,char*c)int location;for(int i=0;i<=s1.top;i+) if(strcmp(s1.cari.license,c)=0)location=i; break;if(i>s1.top)cout<<"停車位上沒有該車&q
24、uot;<<endl;return 0; elsewhile(s1.top>location) s2.top+;s2.cars2.top.license=newcharstrlen(s1.cars1.top.license)+1;strcpy(s2.cars2.top.license,s1.cars1.top.license);s1.cars1.top.license=NULL;cout<<"車牌號為"<<s2.cars2.top.license<<”的車由停車位開到了輔助棧上"<<endl;sl.
25、top-;cout<<"車牌號為"<<s1.carlocation.license<<" 的車開走了 "<<endl;s1.carlocation.license=NULL;sl.top-;while(s2.top>=0)s1.top+;s1.cars1.top.license=newcharstrlen(s2.cars2.top.license)+1;strcpy(s1.cars1.top.license,s2.cars2.top.license);cout<<"車牌號為&qu
26、ot;<<s1.cars1.top.license<<"的車由輔助棧開到了停車位的"<<s1.top+1<<"的車位上"<<endl;s2.cars2.top.license=NULL;s2.top-;if(q.front!=q.rear)q.front+;s1.top+;s1.cars1.top.license=newcharstrlen(q.carq.front.license)+1;strcpy(s1.cars1.top.license,q.carq.front.license);q.ca
27、rq.front.license=NULL;cout<<"便道上的"<<s1.cars1.top.license<<" 的停在了 "<<max_stopping<<"車位上"<<endl;return 1;word教育資料void menu()cout<<” 歡迎使用本程序 "<<endl;cout<<"1 車輛到達;"<<endl;cout<<” 2 車輛離開;"
28、<<endl;cout<<” 3顯示某停車位上的汽車;"<<endl;cout<<" 4顯示該停車場的停車狀況;"<<endl;cout<<" 5退出程序;"<<endl;int main()int key;stack stopping,temp;queue pavement;init_stack(stopping);init_stack(temp);init_queue(pavement);domenu();cout<<"請輸入選擇&qu
29、ot;<<endl;cin>>key;while(key>5|key<1)cout<<"輸入有誤,請重新輸入:"<<endl;cin>>key;switch(key)case 1:CAR c;word教育資料cout<<"請輸入該車車牌號:"<<endl; c.license=new char10;cin>>c.license;c.state='i'if(stopping.top!=max_stopping-1) push_stac
30、k(stopping,c);elsepush_queue(pavement,c);break;case 2:char *s;"<<endl;cout<<"請輸入您要出站的汽車的車牌號:s=new char10;cin>>s;car_leave(stopping,temp,pavement,s); break;case 3:int location;cout<<”請輸入車位:"<<endl;cin>>location;show_stopping(location,stopping);break;case 4:show_parking(stopping,pavement);break;case 5:exit(0);while(key!=5);return 1;六、【運行與測試】對于測試用例的設計注重所定義的數(shù)據(jù)結(jié)構(gòu)的邊界以及各種數(shù)據(jù)結(jié)構(gòu)共存 的可能性。例如:1、連續(xù)有7輛車到來,牌照號分別為JF001、JF002、JF003、JF004、JF005、 JF006、JF007,前5輛車應該進入停車位15車位,第6、7輛
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職(新能源汽車運用技術(shù))應用技術(shù)階段測試題及答案
- 2025年大學石油化工技術(shù)(石油化工技術(shù))試題及答案
- 2025年大學語文(閱讀基礎(chǔ))試題及答案
- 2025年大學醫(yī)學檢驗技術(shù)(生化檢驗技術(shù))試題及答案
- 2025年中職旅游管理(研學旅游)試題及答案
- 2025年中職第二學年(職業(yè)素養(yǎng))職業(yè)禮儀綜合測試試題及答案
- 2025年大學生物學(生態(tài)學原理)試題及答案
- 2025年注冊會計師(CPA)考試 會計科目深度解析沖刺實戰(zhàn)試卷及答案
- 政協(xié)安全生產(chǎn)視察講解
- 工科專業(yè)就業(yè)優(yōu)勢分析
- 交通安全企業(yè)培訓課件
- 2025年廣東省中考物理試卷及答案
- 皮革項目商業(yè)計劃書
- 主管護師護理學考試歷年真題試卷及答案
- 華文慕課《刑法學》總論課后作業(yè)答案
- 公路護欄波型梁施工方案
- 2025版煤礦安全規(guī)程新增變化條款考試題庫
- 基于SOLO分類理論剖析初中生數(shù)學開放題解決水平:現(xiàn)狀差異與提升策略
- 2025至2030全球及中國用戶研究軟件行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 砌筑施工安全教育培訓課件
- GB/T 7122-2025高強度膠粘劑剝離強度的測定浮輥法
評論
0/150
提交評論