




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗題目:模擬停車廠管理班級數電4班姓名:吳小娜學號:2010434028日期:2011年10月20日一、需求分析1.程序的功能設停車廠是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內按車輛到達的先后順序依次排列,若停車場內已停滿汽車,則后來的汽車只能在門外的便道上等候,一旦停車場內有車開走,則排在便道上的第一輛車即可進入;當停車場內某輛車要離開時,由于停車場是狹長的通道,在它之后開入的車輛必須先退出車場為它讓路,待該輛車開出大門后,為它讓路的車輛再按原次序進入車場。每輛停放在停車場的車,在離開時按其在停車場停留時間的長短交費。在這里假設汽車不能從便道上開走。試設計一個實現停車場管理的程序。2.輸入輸出的要求每一組輸入數據包括三個數據項:汽車“到達”或“離去”的信息、汽車牌照號碼、汽車到達或離去的時刻;對每一組輸入數據進行操作后的輸出信息為:若是車輛到達,則輸出車輛在停車場內或便道上的停車位置;若是車輛離去,則輸出車輛在停車場內停留的時間和應繳納的費用(假設在便道上等候的時間不收費)。3.測試數據。1.當停車場容量為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)。當停車場容量為5時,連續有7輛車到來,牌照號分別為F001、F002、F003、F004、、F005、F006、F007,前5輛車應該進入停車位1-5車位,第6、7輛車應停入便道的1、2位置上。牌照號為F003的汽車從停車廠開走,應顯示F005、F004的讓路動作和F006從便道到停車位上的動作。(到達和離開時間請自行設定)。二、概要設計1.本程序所用的抽象數據類型的定義typedefstruct{ charlicense_plate[6]; //汽車牌照號碼,定義為一個字符指針類型 floattime1;//汽車進入停車場的時刻 floattime2;//汽車離開停車場的時刻 charstate;//汽車當前狀態,字符p表示停放在停車位上,字符q表示停放在便道上}Car;typedefstruct{ CarPack[MAX_PARK];//各汽車信息的存儲空間 inttop;//用來指示棧頂位置的指針}ParkStack;typedefstructqnode//鏈式隊列存儲結構{ Cardata; //各汽車信息的存儲空間 structqnode*next;}Qnode;//鏈隊結點類型typedefstruct//存儲便道停車信息的隊列{ Qnode*front,*rear; //用來指示隊頭和隊尾位置的指針}RoadQueue;//將頭尾指針封裝在一起的鏈隊typedefstruct//輔助棧{ Carbuffer[MAX_PARK];//各汽車信息的存儲空間 inttop;//用來指示棧頂位置的靜態指針}BUFFER;2.主模塊的流程及各子模塊的主要功能主控功能:介紹程序的基本功能,并給出程序功能所對應的鍵盤操作的提示,如車到來或離去的表示方法,停車場或者便道的狀態的查詢方法提示等。汽車到來模塊:首先要查詢當前停車場的狀態,當停車場非滿時,將其駛入停車場(入棧),開始計費;當停車場滿時,讓其進入便道等候(入隊)。汽車離開停車場的模塊:當某輛車要離開停車場的時候,比它后進停車場的車要為它讓路,(即將這些車依次“壓入”輔助棧),開走請求離開的車,再將輔助棧中的車依次出棧,“壓入”停車場;同時根據離開的車在停車場停留的時間進行收費;最后查詢是否有車在便道等候,若有,將便道上的第一輛車駛入停車場(先出隊,再入棧),開始交費。狀態查詢:用來在屏幕上顯示停車位和便道上各位置的狀態。3.模塊之間的層次關系主函數負責輸出,包括要選擇的部分提示和選擇項目,選擇的項目包括車輛的進入,離開,和當前停車場的信息查詢。通過這些來實現車輛的管理。三、詳細設計1.寫出各模塊的偽碼算法;主函數模塊voidmain()//主函數{ intchoice; Car*c; c=newCar; charb; chark; ParkStack*s;RoadQueue*g; g=Init_RoadQueue();//初始化鏈隊 BUFFER*a; s=Init_Stack();//初始化棧 a=Init_BUFFER();//初始化輔助棧 cout<<"*****************************"<<endl; cout<<"停車場管理系統"<<endl; print(); do{ cout<<"******************"<<endl; cout<<"1-車輛進站"<<endl; cout<<"2-車輛出站"<<endl; cout<<"3-查詢信息"<<endl; cout<<"0-退出系統"<<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<<"輸入要進入的車的信息('A'汽車牌照號碼,汽車進入停車場的時刻)"<<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);}車進入時的模塊voidIncar(ParkStack*s,RoadQueue*g,BUFFER*a,Car*c)//進停車場(或者進隊){ 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)//否則進隊等候 { cout<<"停車場已滿,此車進便道等候。"<<endl; Qnode*r; r=newQnode;//申請新的結點 strcpy(r->data.license_plate,c->license_plate);r->data.state='q'; r->next=NULL; g->rear->next=r;//將新結點插入隊尾 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<<"應交的費用是"<<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.畫出函數的調用關系圖主函數主函數輸出存車方法規則車進入停車場車離開停車場查詢停車場信息四、調試分析1.調試中遇到的問題及對問題的解決方法例如:在移動車的時候。不能直接使用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.算法的時間復雜度和空間復雜度算法的時間復雜度主要消耗在了車輛的出棧時候,必須先尋找車輛,再移動,再出去。算法的時間復雜度是O(n)。五、使用說明及測試結果車的信息表示為('A'、“F001”、5)或者('D'、“F001”、15)或者('E'、0、0),其中'A'表示到達,'D'表示離去,'E'表示輸入結束;“F001”表示牌照號。 汽車到來,首先要查詢當前停車場的狀態,當停車場非滿時,將其駛入停車場,開始計費;當停車場滿時,讓其進入便道等候。當某輛車要離開停車場時,比它后進停車場的車要為它讓路,開走請求離開的車,同時根據離開的車在停車場停留的時間進行收費。字符p表示停放在停車位上,字符q表示停放在便道上。測試結果:*****************************停車場管理系統車的信息表示為('A'、“F001”、5)或者('D'、“F001”、15)或者('E'、0、0)其中'A'表示到達,'D'表示離去,'E'表示輸入結束;“F001”表示牌照號汽車到來,首先要查詢當前停車場的狀態,當停車場非滿時,將其駛入停車場,開始計費;當停車場滿時,讓其進入便道等候當某輛車要離開停車場時,比它后進停車場的車要為它讓路,開走請求離開的車,同時根據離開的車在停車場停留的時間進行收費字符p表示停放在停車位上,字符q表示停放在便道上******************1-車輛進站2-車輛出站3-查詢信息0-退出系統******************選擇0-31輸入要進入的車的信息('A'汽車牌照號碼,汽車進入停車場的時刻)AF0011******************1-車輛進站2-車輛出站3-查詢信息0-退出系統******************選擇0-31輸入要進入的車的信息('A'汽車牌照號碼,汽車進入停車場的時刻)AF0022******************1-車輛進站2-車輛出站3-查詢信息0-退出系統******************選擇0-31輸入要進入的車的信息('A'汽車牌照號碼,汽車進入停車場的時刻)AF0033停車場已滿,此車進便道等候。******************1-車輛進站2-車輛出站3-查詢信息0-退出系統******************選擇0-31輸入要進入的車的信息('A'汽車牌照號碼,汽車進入停車場的時刻)AF0044停車場已滿,此車進便道等候。******************1-車輛進站2-車輛出站3-查詢信息0-退出系統******************選擇0-33停車場已有2輛車,剩余0個空位.已停車輛信息為:1車位上汽車牌照號碼是:F001汽車進入停車場的時刻:1汽車當前狀態:p2車位上汽車牌照號碼是:F002汽車進入停車場的時刻:2汽車當前狀態:p便道上的車有:車牌號是:F003汽車
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網絡工程師考試知識準備與2025年試題答案指南
- 如何看待社會暴力與政治沖突的關系試題及答案
- 未來問題西方政治制度的治理理論與實踐試題及答案
- 西方的公民權利與政治參與機會試題及答案
- 軟考網絡工程師重點考點試題及答案
- 機電工程模擬實習題目試題及答案
- 2024年獨立運行風力發電機組控制器及逆變器資金申請報告代可行性研究報告
- 西方女性在政治中的影響試題及答案
- 機電工程市場需求試題及答案
- 網絡安全問題的應對措施與試題及答案
- 2025云南昆明市祿勸國資本投資開發集團限公司高層管理人員招聘6人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年中國對苯二甲酸二甲酯市場調查研究報告
- 水質化驗考試試題及答案
- 《術后心臟瓣膜護理指南》課件
- 環境藝術設計教學計劃
- 國家開放大學《園林規劃設計》形考任務1-4參考答案
- 2025屆河南省許昌市名校高三下學期第二次模擬考試英語試題(原卷版+解析版)
- 融資租賃 測試題及答案
- 2025中國儲備糧管理集團有限公司貴州分公司招聘22人筆試參考題庫附帶答案詳解
- 蛛網膜下腔出血介入術后護理
- 制造業智能排產系統(課件)
評論
0/150
提交評論