停車場模擬實(shí)驗(yàn)報告_第1頁
停車場模擬實(shí)驗(yàn)報告_第2頁
停車場模擬實(shí)驗(yàn)報告_第3頁
停車場模擬實(shí)驗(yàn)報告_第4頁
停車場模擬實(shí)驗(yàn)報告_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

實(shí)驗(yàn)題目:模擬停車廠管理班級數(shù)電4班姓名:吳小娜學(xué)號:2010434028日期:2011年10月20日一、需求分析1.程序的功能設(shè)停車廠是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)的先后順序依次排列,若停車場內(nèi)已停滿汽車,則后來的汽車只能在門外的便道上等候,一旦停車場內(nèi)有車開走,則排在便道上的第一輛車即可進(jìn)入;當(dāng)停車場內(nèi)某輛車要離開時,由于停車場是狹長的通道,在它之后開入的車輛必須先退出車場為它讓路,待該輛車開出大門后,為它讓路的車輛再按原次序進(jìn)入車場。每輛停放在停車場的車,在離開時按其在停車場停留時間的長短交費(fèi)。在這里假設(shè)汽車不能從便道上開走。試設(shè)計一個實(shí)現(xiàn)停車場管理的程序。2.輸入輸出的要求每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項(xiàng):汽車“到達(dá)”或“離去”的信息、汽車牌照號碼、汽車到達(dá)或離去的時刻;對每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出車輛在停車場內(nèi)或便道上的停車位置;若是車輛離去,則輸出車輛在停車場內(nèi)停留的時間和應(yīng)繳納的費(fèi)用(假設(shè)在便道上等候的時間不收費(fèi))。3.測試數(shù)據(jù)。1.當(dāng)停車場容量為2時,(‘A’、“F001”、5),(‘A’、“A002”、10),(‘D’、“F001”、15),(‘A’、“F003”、20),(‘A’、“C004”、25),(‘A’、“B005”、30),(‘D’、“A002”、35),(‘D’、“C004”、40),(‘E’、0、0)。當(dāng)停車場容量為5時,連續(xù)有7輛車到來,牌照號分別為F001、F002、F003、F004、、F005、F006、F007,前5輛車應(yīng)該進(jìn)入停車位1-5車位,第6、7輛車應(yīng)停入便道的1、2位置上。牌照號為F003的汽車從停車廠開走,應(yīng)顯示F005、F004的讓路動作和F006從便道到停車位上的動作。(到達(dá)和離開時間請自行設(shè)定)。二、概要設(shè)計1.本程序所用的抽象數(shù)據(jù)類型的定義typedefstruct{ charlicense_plate[6]; //汽車牌照號碼,定義為一個字符指針類型 floattime1;//汽車進(jìn)入停車場的時刻 floattime2;//汽車離開停車場的時刻 charstate;//汽車當(dāng)前狀態(tài),字符p表示停放在停車位上,字符q表示停放在便道上}Car;typedefstruct{ CarPack[MAX_PARK];//各汽車信息的存儲空間 inttop;//用來指示棧頂位置的指針}ParkStack;typedefstructqnode//鏈?zhǔn)疥?duì)列存儲結(jié)構(gòu){ Cardata; //各汽車信息的存儲空間 structqnode*next;}Qnode;//鏈隊(duì)結(jié)點(diǎn)類型typedefstruct//存儲便道停車信息的隊(duì)列{ Qnode*front,*rear; //用來指示隊(duì)頭和隊(duì)尾位置的指針}RoadQueue;//將頭尾指針封裝在一起的鏈隊(duì)typedefstruct//輔助棧{ Carbuffer[MAX_PARK];//各汽車信息的存儲空間 inttop;//用來指示棧頂位置的靜態(tài)指針}BUFFER;2.主模塊的流程及各子模塊的主要功能主控功能:介紹程序的基本功能,并給出程序功能所對應(yīng)的鍵盤操作的提示,如車到來或離去的表示方法,停車場或者便道的狀態(tài)的查詢方法提示等。汽車到來模塊:首先要查詢當(dāng)前停車場的狀態(tài),當(dāng)停車場非滿時,將其駛?cè)胪\噲觯ㄈ霔#_始計費(fèi);當(dāng)停車場滿時,讓其進(jìn)入便道等候(入隊(duì))。汽車離開停車場的模塊:當(dāng)某輛車要離開停車場的時候,比它后進(jìn)停車場的車要為它讓路,(即將這些車依次“壓入”輔助棧),開走請求離開的車,再將輔助棧中的車依次出棧,“壓入”停車場;同時根據(jù)離開的車在停車場停留的時間進(jìn)行收費(fèi);最后查詢是否有車在便道等候,若有,將便道上的第一輛車駛?cè)胪\噲觯ㄏ瘸鲫?duì),再入棧),開始交費(fèi)。狀態(tài)查詢:用來在屏幕上顯示停車位和便道上各位置的狀態(tài)。3.模塊之間的層次關(guān)系主函數(shù)負(fù)責(zé)輸出,包括要選擇的部分提示和選擇項(xiàng)目,選擇的項(xiàng)目包括車輛的進(jìn)入,離開,和當(dāng)前停車場的信息查詢。通過這些來實(shí)現(xiàn)車輛的管理。三、詳細(xì)設(shè)計1.寫出各模塊的偽碼算法;主函數(shù)模塊voidmain()//主函數(shù){ intchoice; Car*c; c=newCar; charb; chark; ParkStack*s;RoadQueue*g; g=Init_RoadQueue();//初始化鏈隊(duì) BUFFER*a; s=Init_Stack();//初始化棧 a=Init_BUFFER();//初始化輔助棧 cout<<"*****************************"<<endl; cout<<"停車場管理系統(tǒng)"<<endl; print(); do{ cout<<"******************"<<endl; cout<<"1-車輛進(jìn)站"<<endl; cout<<"2-車輛出站"<<endl; cout<<"3-查詢信息"<<endl; cout<<"0-退出系統(tǒng)"<<endl; cout<<"******************"<<endl; cout<<"選擇0-3"<<endl; cin>>choice; if(choice!=3&&choice!=0&&choice!=1&&choice!=2)//容錯處理 { cout<<"輸入錯誤,請重新選擇0-3"<<endl; cin>>choice; } switch(choice) { case1: { cout<<"輸入要進(jìn)入的車的信息('A'汽車牌照號碼,汽車進(jìn)入停車場的時刻)"<<endl; cin>>b; cin>>c->license_plate; cin>>c->time1; Incar(s,g,a,c); } break; case2: { cout<<"輸入要開走的車的信息('D'汽車牌照號碼,汽車離開停車場的時刻)"<<endl; cin>>k; cin>>c->license_plate; cin>>c->time2; Outcar(s,g,a,c); } break; case3: find(s,g); break; } }while(choice!=0);}車進(jìn)入時的模塊voidIncar(ParkStack*s,RoadQueue*g,BUFFER*a,Car*c)//進(jìn)停車場(或者進(jìn)隊(duì)){ if(s->top!=(MAX_PARK-1))//若停車場是空棧時,建立棧 { s->top++; strcpy(s->Pack[s->top].license_plate,c->license_plate); s->Pack[s->top].time1=c->time1; s->Pack[s->top].state='p'; } elseif(s->top==MAX_PARK-1)//否則進(jìn)隊(duì)等候 { cout<<"停車場已滿,此車進(jìn)便道等候。"<<endl; Qnode*r; r=newQnode;//申請新的結(jié)點(diǎn) strcpy(r->data.license_plate,c->license_plate);r->data.state='q'; r->next=NULL; g->rear->next=r;//將新結(jié)點(diǎn)插入隊(duì)尾 g->rear=r; }}出停車場模塊voidOutcar(ParkStack*s,RoadQueue*g,BUFFER*a,Car*c)//出停車場{ intm=s->top; while(m!=-1&&strcmp(s->Pack[m].license_plate,c->license_plate)!=0) m--;if(m==-1) cout<<"停車場中沒有該車。"<<endl; else { while(strcmp(s->Pack[s->top].license_plate,c->license_plate)!=0)//尋找要開走的車停放的位置 { a->top++; strcpy(a->buffer[a->top].license_plate,s->Pack[s->top].license_plate); a->buffer[a->top].state=s->Pack[s->top].state; a->buffer[a->top].time1=s->Pack[s->top].time1; //將棧中的棧頂元素移到輔助棧中 s->top--; } cout<<"車牌號是"<<c->license_plate<<"的車從停車場開走;"<<endl; cout<<"應(yīng)交的費(fèi)用是"<<MONEY*(c->time2-s->Pack[s->top].time1)<<"元。"<<endl; inti=a->top; while(i!=-1) { cout<<"車牌號為:"<<a->buffer[i].license_plate<<"的車讓路,開到輔助車位中."<<endl; i--; } while(a->top!=-1)//將輔助棧里的車移動回棧 { strcpy(s->Pack[s->top].license_plate,a->buffer[a->top].license_plate); s->Pack[s->top].state=a->buffer[a->top].state; s->Pack[s->top].time1=a->buffer[a->top].time1; a->top--; s->top++; } if(g->front!=g->rear)//若便道上有車,開到停車場中 { Qnode*r; r=g->front->next; strcpy(s->Pack[s->top].license_plate,g->front->next->data.license_plate); s->Pack[s->top].state='p'; s->Pack[s->top].time1=c->time2; g->front->next=g->front->next->next; cout<<"車牌號是"<<s->Pack[s->top].license_plate <<"的車從便道開到停車場中."<<endl; deleter; } else s->top--; }}2.畫出函數(shù)的調(diào)用關(guān)系圖主函數(shù)主函數(shù)輸出存車方法規(guī)則車進(jìn)入停車場車離開停車場查詢停車場信息四、調(diào)試分析1.調(diào)試中遇到的問題及對問題的解決方法例如:在移動車的時候。不能直接使用s->Pack[s->top]=g->front->next->data而必須是strcpy(s->Pack[s->top].license_plate,g->front->next->data.license_plate);s->Pack[s->top].state='p';s->Pack[s->top].time1=c->time2;2.算法的時間復(fù)雜度和空間復(fù)雜度算法的時間復(fù)雜度主要消耗在了車輛的出棧時候,必須先尋找車輛,再移動,再出去。算法的時間復(fù)雜度是O(n)。五、使用說明及測試結(jié)果車的信息表示為('A'、“F001”、5)或者('D'、“F001”、15)或者('E'、0、0),其中'A'表示到達(dá),'D'表示離去,'E'表示輸入結(jié)束;“F001”表示牌照號。 汽車到來,首先要查詢當(dāng)前停車場的狀態(tài),當(dāng)停車場非滿時,將其駛?cè)胪\噲?,開始計費(fèi);當(dāng)停車場滿時,讓其進(jìn)入便道等候。當(dāng)某輛車要離開停車場時,比它后進(jìn)停車場的車要為它讓路,開走請求離開的車,同時根據(jù)離開的車在停車場停留的時間進(jìn)行收費(fèi)。字符p表示停放在停車位上,字符q表示停放在便道上。測試結(jié)果:*****************************停車場管理系統(tǒng)車的信息表示為('A'、“F001”、5)或者('D'、“F001”、15)或者('E'、0、0)其中'A'表示到達(dá),'D'表示離去,'E'表示輸入結(jié)束;“F001”表示牌照號汽車到來,首先要查詢當(dāng)前停車場的狀態(tài),當(dāng)停車場非滿時,將其駛?cè)胪\噲?,開始計費(fèi);當(dāng)停車場滿時,讓其進(jìn)入便道等候當(dāng)某輛車要離開停車場時,比它后進(jìn)停車場的車要為它讓路,開走請求離開的車,同時根據(jù)離開的車在停車場停留的時間進(jìn)行收費(fèi)字符p表示停放在停車位上,字符q表示停放在便道上******************1-車輛進(jìn)站2-車輛出站3-查詢信息0-退出系統(tǒng)******************選擇0-31輸入要進(jìn)入的車的信息('A'汽車牌照號碼,汽車進(jìn)入停車場的時刻)AF0011******************1-車輛進(jìn)站2-車輛出站3-查詢信息0-退出系統(tǒng)******************選擇0-31輸入要進(jìn)入的車的信息('A'汽車牌照號碼,汽車進(jìn)入停車場的時刻)AF0022******************1-車輛進(jìn)站2-車輛出站3-查詢信息0-退出系統(tǒng)******************選擇0-31輸入要進(jìn)入的車的信息('A'汽車牌照號碼,汽車進(jìn)入停車場的時刻)AF0033停車場已滿,此車進(jìn)便道等候。******************1-車輛進(jìn)站2-車輛出站3-查詢信息0-退出系統(tǒng)******************選擇0-31輸入要進(jìn)入的車的信息('A'汽車牌照號碼,汽車進(jìn)入停車場的時刻)AF0044停車場已滿,此車進(jìn)便道等候。******************1-車輛進(jìn)站2-車輛出站3-查詢信息0-退出系統(tǒng)******************選擇0-33停車場已有2輛車,剩余0個空位.已停車輛信息為:1車位上汽車牌照號碼是:F001汽車進(jìn)入停車場的時刻:1汽車當(dāng)前狀態(tài):p2車位上汽車牌照號碼是:F002汽車進(jìn)入停車場的時刻:2汽車當(dāng)前狀態(tài):p便道上的車有:車牌號是:F003汽車

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論