




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實驗題目:模擬停車場管理程序的設(shè)計與實現(xiàn)一、需求分析1程序的功能;這是一個模擬停車場管理程序,設(shè)停車廠是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內(nèi)按車輛到達的先后順序依次排列,若停車場內(nèi)已停滿汽車,則后來的汽車只能在門外的便道上等候,一旦停車場內(nèi)有車開走,則排在便道上的第一輛車即可進入;當停車場內(nèi)某輛車要離開時,由于停車場是狹長的通道,在它之后開入的車輛必須先退出車場為它讓路,待該輛車開出大門后,為它讓路的車輛再按原次序進入車場。汽車可以直接從便道上開走,此時排在它前面的汽車要先開走讓路,然后再依次排到隊尾。停放在便道上的汽車也收費,收費標準比停放在停車場的車低。
2、每輛停放在停車場的車,在離開時按其在停車場停留時間的長短交費。2輸入輸出的要求;每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達”或“離去”的信息、汽車牌照號碼、汽車到達或離去的時刻;對每一組輸入數(shù)據(jù)進行操作后的輸出信息為:若是車輛到達,則輸出車輛在停車場內(nèi)或便道上的停車位置;若是車輛離去,則輸出車輛在停車場內(nèi)停留的時間和應(yīng)繳納的費用3測試數(shù)據(jù)。當停車場容量為5時,連續(xù)有7輛車到來,牌照號分別為F001、F002、F003、F004、F005、F006、F007,前5輛車應(yīng)該進入停車位15車位,第6、7輛車應(yīng)停入便道的1、2位置上。牌照號為F003的汽車從停車廠開走,應(yīng)顯示F005、F004的讓路動作
3、和F006從便道到停車位上的動作。(到達和離開時間請自行設(shè)定)。二、概要設(shè)計1本程序所用的抽象數(shù)據(jù)類型的定義;/*時間的類型定義*/typedef structint hour;int min;TIME;/*汽車的類型定義*/typedef structchar license_plate10; /*汽車牌照號碼*/TIME time,time1; /*time,time1分別表示汽車進入停車場和便道的時刻*/char state; /*汽車當前狀態(tài),p表示一直停放在停車位上,*/*q表示一直在便道上等候,*/*i表示由便道進入停車位*/Car; /*表示停車位的順序棧*/typedef st
4、ructCar ParkMAX_PARK; /*各汽車信息的存儲空間*/int top; /*用來指示棧頂位置的靜態(tài)指針*/ParkStack;/*鏈隊列來模擬便道*/typedef struct qnode Car data; /*各汽車信息的存儲空間*/struct qnode *next;Qnode;typedef structQnode *front, *rear; /*用來指示隊頭和隊尾位置的指針*/RoadQueue;2主模塊的流程及各子模塊的主要功能;本程序從總體上分為四個功能模塊,分別為:(1)程序功能介紹和操作提示模塊提示用戶進行正確的操作。(2)汽車進入停車位的管理模塊記錄
5、進入停車場的汽車信息并插入?;蜿犞小#?)汽車離開停車位的管理模塊釋放離開汽車所占空間,計算汽車停車費用并輸出。(4)查看停車場狀態(tài)的查詢模塊列出停車場狀態(tài)。3模塊之間的層次關(guān)系。汽車進入停車場汽車離開停車場查看停車場狀態(tài)主函數(shù)程序功能介紹和操作提示三、詳細設(shè)計1采用c語言定義相關(guān)的數(shù)據(jù)類型;/*時間的類型定義*/typedef structint hour;int min;TIME;/*汽車的類型定義*/typedef structchar license_plate10; /*汽車牌照號碼*/TIME time,time1; /*time,time1分別表示汽車進入停車場和便道的時刻*/c
6、har state; /*汽車當前狀態(tài),p表示一直停放在停車位上,*/*q表示一直在便道上等候,*/*i表示由便道進入停車位*/Car; /*表示停車位的順序棧*/typedef structCar ParkMAX_PARK; /*各汽車信息的存儲空間*/int top; /*用來指示棧頂位置的靜態(tài)指針*/ParkStack;/*鏈隊列來模擬便道*/typedef struct qnode Car data; /*各汽車信息的存儲空間*/struct qnode *next;Qnode;typedef structQnode *front, *rear; /*用來指示隊頭和隊尾位置的指針*/R
7、oadQueue;2寫出各模塊的偽碼算法;/程序功能介紹和操作提示模塊void welcome()coutendlendl;cout 本程序為停車場的模擬管理程序endl;cout-endl;cout 有車到來請按【C】鍵endl;cout 有車要走請按【L】鍵endl;cout 查詢停車場狀態(tài)請按【S】鍵endl;cout 退出程序請按【Q】鍵endl;coutendlch;/汽車進入停車場的管理模塊void car_come()Car newCar;coutendl;coutnewCar.license_plate;if(Park_Car-topMAX_PARK-1) /停車位未滿,車輛進
8、入停車場coutendl車輛進入停車位,開始計費,請輸入當前時間:;cinnewCar.time.hournewCar.time.min;newCar.state=p;Park_Car-top+;Park_Car-ParkPark_Car-top=newCar;else/停車位滿,車輛進去便道或開走int i;coutendli;if(i=1)coutendl車輛進入便道等候,開始計費,請輸入當前時間:;cinnewCar.time1.hournewCar.time1.min;newCar.state=q;Qnode *p;p=new Qnode;if(!p)cout申請動態(tài)存儲空間失?。a
9、ta=newCar;p-next=NULL;Road_Car-rear-next=p;Road_Car-rear=p;elsecoutendl車輛已開走!endl;coutendlch;welcome();/汽車離開停車場的管理模塊void car_leave()char s10;int i;TIME t;coutendl;couts;for(i=0;itop;i+)/在停車位尋找要開走的汽車if(strcmp(s,Park_Car-Parki.license_plate)=0)break;if(itop)/在停車位找到要開走的汽車coutendl該車停放在停車位的i+1車位endlendl;
10、cout請輸入當前時間:;cint.hourt.min;print(Park_Car-Parki,t);while( (Park_Car-top) i )/該車前面的汽車暫時退出Buffer_Car-top+;Buffer_Car-ParkBuffer_Car-top=Park_Car-ParkPark_Car-top;Park_Car-top-;cout車牌號為 ParkBuffer_Car-top.license_plate 的汽車暫時退出停車場;endl;cout車牌號為 Parki.license_plate 的汽車從停車場開走;top-;while(Buffer_Car-top-1)
11、/暫時退出的汽車開回停車位Park_Car-top+;Park_Car-ParkPark_Car-top=Buffer_Car-ParkBuffer_Car-top;Buffer_Car-top-;cout車牌號為 ParkPark_Car-top.license_plate 的汽車?;赝\噲龅膖op+1車位;front!=Road_Car-rear) /便道有車,則進入停車位Qnode *p;p=Road_Car-front-next;Road_Car-front-next=p-next;p-data.state=i;p-data.time=t;Park_Car-top+;Park_Car-
12、ParkPark_Car-top=p-data;delete p;if(Road_Car-front-next=NULL)Road_Car-rear=Road_Car-front;cout車牌號為 ParkPark_Car-top.license_plate 的汽車從便道進入停車位的top+1車位;front-next;r=Road_Car-front-next;while(p)k+;if(strcmp(p-data.license_plate,s)=0)break;p=p-next;if(p)/在便道找到該車coutendl該車等候在便道的k位置endlendl;cout請輸入當前時間:;c
13、int.hourt.min;print(p-data,t);while(p!=r)/該車前面有車,前面的車要讓路cout車牌號為data.license_plate的汽車開出便道讓路;front-next=r-next;r-next=NULL;BufferCar-rear-next=r;BufferCar-rear=r;r=Road_Car-front-next;cout車牌號為data.license_plate的汽車從便道開走。front-next=p-next;/刪除結(jié)點delete p;if(Road_Car-front-next=NULL)/若便道只有一輛車,出隊后便道為空Road_
14、Car-rear=Road_Car-front;if(BufferCar-front!=BufferCar-rear)/輔助隊列不為空,即有車讓路BufferCar-rear-next=Road_Car-front-next;Road_Car-rear=Road_Car-front;Road_Car-rear-next=BufferCar-front-next;Road_Car-rear=BufferCar-rear;BufferCar-rear=BufferCar-front;cout讓路的車輛開回便道。endl;elsecout沒有在停車場找到該車!endl;/沒有找到該車coutendl
15、ch;welcome();/顯示停車場停車狀態(tài)的查詢模塊void car_display()int i=0;/停車位情況coutendl停車位的情況:endl;while(itop)couti+1車位-車牌號Parki.license_plate;if(Park_Car-Parki.state=p)cout Parki.time.hour時Parki.time.min分停入停車位。endl;elsecout Parki.time1.hour時Parki.time1.min分進入便道等候;;coutParki.time.hour時Parki.time.min分由便道進入停車位。endl;i+;w
16、hile(iMAX_PARK)couti+1車位-空endl;i+;/便道上的情況coutendl便道上的情況:front=Road_Car-rear)coutendl 空front-next;i=1;while(p)couti位置-車牌號data.license_plate;cout data.time1.hour時data.time1.min分進入便道等候。next;i+;coutendlch;welcome();3畫出函數(shù)的調(diào)用關(guān)系圖。Mainwelcomecar_comecar_leavecar_display四、調(diào)試分析1調(diào)試中遇到的問題及對問題的解決方法;經(jīng)過兩周的設(shè)計和開發(fā),停車
17、場管理系統(tǒng)基本開發(fā)完畢。其功能基本符合用戶需求,能夠完成對車輛的管理和查詢以及各類相關(guān)報表的打印。對于車輛進去和離開停車場的時間,也進行了完善,具體到了小時和分鐘。該程序給用戶提供了選擇機會,采用比較友好的界面顯示。但由于設(shè)計時間較短,該系統(tǒng)仍有不盡人意的地方,如不同類型車輛收費情況不夠完善等。五、使用說明及測試結(jié)果(1)使用說明程序操作簡單,在車輛到來時,選擇【C】,然后根據(jù)提示輸入車牌號及當前時刻;有車要走時,選擇【L】,然后根據(jù)提示輸入此時時刻;要查詢停車場信息時,只需選擇【S】;若退出程序,則選擇【Q】。(2)測試結(jié)果程序運行時的歡迎界面。當停車場容量為5時,連續(xù)有7輛車到來,牌照號分
18、別為F001、F002、F003、F004、F005、F006、F007,前5輛車應(yīng)該進入停車位15車位,第6、7輛車應(yīng)停入便道的1、2位置上。顯示停車場信息。 牌照號為F003的汽車從停車廠開走,應(yīng)顯示F005、F004的讓路動作和F006從便道到停車位上的動作。(到達和離開時間請自行設(shè)定)。牌照號為F003的汽車從停車廠開走后,顯示停車場信息。六、源程序#include#include #include#include#define MAX_PARK 3 /*停車場容量*/#define Price 0.5/*停車位收費標準:每分鐘每車.5元*/#define price 0.3/*便道收
19、費標準:每分鐘每車.3元*/typedef struct int hour;int min;TIME;typedef struct /*汽車的類型定義*/char license_plate10;/*汽車牌照號碼,定義為一個字符數(shù)組*/TIME time,time1; /*time,time1分別表示汽車進入停車場和便道的時刻*/char state; /*汽車當前狀態(tài),p表示一直停放在停車位上,q表示一直在便道上等候,i表示由便道進入停車位*/Car; typedef struct /*表示停車位的順序棧*/Car ParkMAX_PARK; /*各汽車信息的存儲空間*/int top; /
20、*用來指示棧頂位置的靜態(tài)指針*/ParkStack;ParkStack *Park_Car,*Buffer_Car; /Park_Car和Buffer_Car分別指向表示停車場和輔助棧的指針變量typedef struct qnode /*鏈隊列來模擬便道*/Car data; /*各汽車信息的存儲空間*/struct qnode *next;Qnode;typedef structQnode *front, *rear; /*用來指示隊頭和隊尾位置的指針*/RoadQueue;RoadQueue *Road_Car,*BufferCar;/Road_Car和BufferCar分別指向表示便道
21、和輔助隊列的指針變量char ch;void car_display();/順序棧的初始化ParkStack *Init_ParkStack()ParkStack *s;s=new ParkStack;if(s=NULL)return NULL; /未申請到足夠大的存儲空間,返回空指針elses-top=-1;return s; /申請到新空間,返回??臻g地址/鏈隊列的初始化RoadQueue *Init_RoadQueue()RoadQueue *q;Qnode *p;q=new RoadQueue;p=new Qnode;if(!q | !p)return NULL;p-next=NULL
22、;q-front=q-rear=p;return q;/打印要離開汽車的信息及收費清單void print(Car car,TIME t)coutendlendl收費清單: ;if(car.state=p)/車輛一直停放在停車位cout汽車車牌號 car.license_plateendl;cout car.time.hour時car.time.min分進入停車位,t.hour時t.min分離開,endl;cout 共(t.hour-car.time.hour)*60+(t.min-car.time.min)分鐘,;cout應(yīng)付費(t.hour-car.time.hour)*60+(t.min
23、-car.time.min)*Price元(停車位每小時每車Price元)。endl;else if(car.state=q)/車輛一直在便道等候cout汽車車牌號 car.license_plateendl;cout car.time1.hour時car.time1.min分進入便道等候,t.hour時t.min分離開,endl;cout 共(t.hour-car.time1.hour)*60+(t.min-car.time1.min)分鐘,;cout應(yīng)付費(t.hour-car.time1.hour)*60+(t.min-car.time1.min)*price元(便道每小時每車price
24、元)。endl;else if(car.state=i)/車輛由便道進入停車位int m,n;m=(car.time.hour-car.time1.hour)*60+(car.time.min-car.time1.min);n=(t.hour-car.time.hour)*60+(t.min-car.time.min);cout汽車車牌號 car.license_plateendl;cout car.time1.hour時car.time1.min分-car.time.hour時car.time.min分在便道等候,endl;cout 共m分鐘,應(yīng)付費m*price元(便道每小時每車price
25、元)。endl;cout car.time.hour時car.time.min分-t.hour時t.min分停放在停車位,endl;cout 共n分鐘,應(yīng)付費n*Price元(停車位每小時每車Price元)。endl;cout 應(yīng)付總費用:m*price+n*Price元。endl;coutendl;/程序功能介紹和操作提示模塊void welcome()coutendlendl;cout 本程序為停車場的模擬管理程序endl;cout-endl;cout 有車到來請按【C】鍵endl;cout 有車要走請按【L】鍵endl;cout 查詢停車場狀態(tài)請按【S】鍵endl;cout 退出程序請按
26、【Q】鍵endl;coutendlch;/汽車進入停車場的管理模塊void car_come()Car newCar;coutendl;coutnewCar.license_plate;if(Park_Car-topMAX_PARK-1) /停車位未滿,車輛進入停車場coutendl車輛進入停車位,開始計費,請輸入當前時間:;cinnewCar.time.hournewCar.time.min;newCar.state=p;Park_Car-top+;Park_Car-ParkPark_Car-top=newCar;else/停車位滿,車輛進去便道或開走int i;coutendli;if(i
27、=1)coutendl車輛進入便道等候,開始計費,請輸入當前時間:;cinnewCar.time1.hournewCar.time1.min;newCar.state=q;Qnode *p;p=new Qnode;if(!p)cout申請動態(tài)存儲空間失??!data=newCar;p-next=NULL;Road_Car-rear-next=p;Road_Car-rear=p;elsecoutendl車輛已開走!endl;coutendlch;welcome();/汽車離開停車場的管理模塊void car_leave()char s10;int i;TIME t;coutendl;couts;f
28、or(i=0;itop;i+)/在停車位尋找要開走的汽車if(strcmp(s,Park_Car-Parki.license_plate)=0)break;if(itop)/在停車位找到要開走的汽車coutendl該車停放在停車位的i+1車位endlendl;cout請輸入當前時間:;cint.hourt.min;print(Park_Car-Parki,t);while( (Park_Car-top) i )/該車前面的汽車暫時退出Buffer_Car-top+;Buffer_Car-ParkBuffer_Car-top=Park_Car-ParkPark_Car-top;Park_Car-
29、top-;cout車牌號為ParkBuffer_Car-top.license_plate 的汽車暫時退出停車場;endl;cout車牌號為Parki.license_plate 的汽車從停車場開走;top-;while(Buffer_Car-top-1)/暫時退出的汽車開回停車位Park_Car-top+;Park_Car-ParkPark_Car-top=Buffer_Car-ParkBuffer_Car-top;Buffer_Car-top-;cout車牌號為ParkPark_Car-top.license_plate 的汽車停回停車場的top+1車位;front!=Road_Car-r
30、ear) /便道有車,則進入停車位Qnode *p;p=Road_Car-front-next;Road_Car-front-next=p-next;p-data.state=i;p-data.time=t;Park_Car-top+;Park_Car-ParkPark_Car-top=p-data;delete p;if(Road_Car-front-next=NULL)Road_Car-rear=Road_Car-front;cout車牌號為ParkPark_Car-top.license_plate 的汽車從便道進入停車位的top+1車位;front-next;r=Road_Car-fr
31、ont-next;while(p)k+;if(strcmp(p-data.license_plate,s)=0)break;p=p-next;if(p)/在便道找到該車coutendl該車等候在便道的k位置endlendl;cout請輸入當前時間:;cint.hourt.min;print(p-data,t);while(p!=r)/該車前面有車,前面的車要讓路cout車牌號為data.license_plate的汽車開出便道讓路;front-next=r-next;r-next=NULL;BufferCar-rear-next=r;BufferCar-rear=r;r=Road_Car-front-next;cout車牌號為data.license_plate的汽車從便道開走。front-next=p-next;/刪除結(jié)點delete p;if(Road_Car-front-next=NULL)/若便道只有一輛車,出隊后便道為空Road_Car-rear=Road_Car-front;if(BufferCar-front!=BufferCar-rear)/輔助隊列不為空,即有車讓路BufferCar-rear-next=Road_Car-front-next;
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 茶具加工合同協(xié)議書模板
- 菜市場攤位租憑合同協(xié)議
- 茶園管理員聘用合同協(xié)議
- 蔬菜運輸買賣合同協(xié)議
- 船舶制造購銷合同協(xié)議
- 英文版合同終止協(xié)議
- 衣服委托加工合同協(xié)議
- 美國防疫物資合同協(xié)議
- 竹筍種植回收合同協(xié)議
- 聯(lián)通代理商加盟合同協(xié)議
- 考而析得失思而明未來-考后分析班會-主題班會 課件
- 物業(yè)業(yè)主入住儀式活動方案
- 《GMP知識培訓》課件
- 廣西來賓市興賓區(qū)2024-2025學年七年級上學期期中生物學試題(含答案)
- 河道保潔應(yīng)急服務(wù)
- 2024年會計專業(yè)考試高級會計實務(wù)試題與參考答案
- 醬香型白酒堆積發(fā)酵異常的研究現(xiàn)狀與展望
- 房屋永久居住權(quán)合同范本
- 義務(wù)教育(音樂)課程標準(2022年版)解讀
- 上海市市轄區(qū)(2024年-2025年小學五年級語文)人教版期末考試(下學期)試卷及答案
- DB+3309+T+106-2024人力資源和社會保障數(shù)據(jù)分類分級規(guī)范
評論
0/150
提交評論