模擬停車場管理程序的設計與實現(xiàn)(共20頁)_第1頁
模擬停車場管理程序的設計與實現(xiàn)(共20頁)_第2頁
模擬停車場管理程序的設計與實現(xiàn)(共20頁)_第3頁
模擬停車場管理程序的設計與實現(xiàn)(共20頁)_第4頁
模擬停車場管理程序的設計與實現(xiàn)(共20頁)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上實驗題目:模擬停車場管理程序的設計與實現(xiàn)一、需求分析1程序的功能;這是一個模擬停車場管理程序,設停車廠是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內按車輛到達的先后順序依次排列,若停車場內已停滿汽車,則后來的汽車只能在門外的便道上等候,一旦停車場內有車開走,則排在便道上的第一輛車即可進入;當停車場內某輛車要離開時,由于停車場是狹長的通道,在它之后開入的車輛必須先退出車場為它讓路,待該輛車開出大門后,為它讓路的車輛再按原次序進入車場。汽車可以直接從便道上開走,此時排在它前面的汽車要先開走讓路,然后再依次排到隊尾。停放在便道上的汽車也收費,收費

2、標準比停放在停車場的車低。每輛停放在停車場的車,在離開時按其在停車場停留時間的長短交費。2輸入輸出的要求;每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達”或“離去”的信息、汽車牌照號碼、汽車到達或離去的時刻;對每一組輸入數(shù)據(jù)進行操作后的輸出信息為:若是車輛到達,則輸出車輛在停車場內或便道上的停車位置;若是車輛離去,則輸出車輛在停車場內停留的時間和應繳納的費用3測試數(shù)據(jù)。當停車場容量為5時,連續(xù)有7輛車到來,牌照號分別為F001、F002、F003、F004、F005、F006、F007,前5輛車應該進入停車位15車位,第6、7輛車應停入便道的1、2位置上。牌照號為F003的汽車從停車廠開走,應顯示F

3、005、F004的讓路動作和F006從便道到停車位上的動作。(到達和離開時間請自行設定)。二、概要設計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; /*表示停車位的順序

4、棧*/typedef structCar 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、車進入停車位的管理模塊記錄進入停車場的汽車信息并插入?;蜿犞?。(3)汽車離開停車位的管理模塊釋放離開汽車所占空間,計算汽車停車費用并輸出。(4)查看停車場狀態(tài)的查詢模塊列出停車場狀態(tài)。3模塊之間的層次關系。汽車進入停車場汽車離開停車場查看停車場狀態(tài)主函數(shù)程序功能介紹和操作提示三、詳細設計1采用c語言定義相關的數(shù)據(jù)類型;/*時間的類型定義*/typedef structint hour;int min;TIME;/*汽車的類型定義*/typedef structchar license_plate10; /*汽車牌照號碼*/TIME time,time1; /*time,time1分別表示汽車進

6、入停車場和便道的時刻*/char 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; /*用來指示

7、隊頭和隊尾位置的指針*/RoadQueue;2寫出各模塊的偽碼算法;/程序功能介紹和操作提示模塊void welcome()cout<<endl<<endl;cout<<" 本程序為停車場的模擬管理程序"<<endl;cout<<"-"<<endl;cout<<" 有車到來請按【C】鍵"<<endl;cout<<" 有車要走請按【L】鍵"<<endl;cout<<" 查詢停車

8、場狀態(tài)請按【S】鍵"<<endl;cout<<" 退出程序請按【Q】鍵"<<endl;cout<<endl<<" 請選擇您要進行的操作."cin>>ch;/汽車進入停車場的管理模塊void car_come()Car newCar;cout<<endl;cout<<"請輸入到來車輛的車牌號:"cin>>newCar.license_plate;if(Park_Car->top<MAX_PARK-1) /停車

9、位未滿,車輛進入停車場cout<<endl<<"車輛進入停車位,開始計費,請輸入當前時間<時 分>:"cin>>newCar.time.hour>>newCar.time.min;newCar.state='p'Park_Car->top+;Park_Car->ParkPark_Car->top=newCar;else/停車位滿,車輛進去便道或開走int i;cout<<endl<<"停車位已滿,您可以選擇 【1】進去便道等候 or 【其他任意鍵】

10、離開 ,請選擇:"cin>>i;if(i=1)cout<<endl<<"車輛進入便道等候,開始計費,請輸入當前時間<時 分>:"cin>>newCar.time1.hour>>newCar.time1.min;newCar.state='q'Qnode *p;p=new Qnode;if(!p)cout<<"申請動態(tài)存儲空間失敗!"<<endl;return ;elsep->data=newCar;p->next=NULL

11、;Road_Car->rear->next=p;Road_Car->rear=p;elsecout<<endl<<"車輛已開走!"<<endl;cout<<endl<<"按【任意鍵】繼續(xù)程序的執(zhí)行."cin>>ch;welcome();/汽車離開停車場的管理模塊void car_leave()char s10;int i;TIME t;cout<<endl;cout<<"請輸入要走的車輛號碼:"cin>>s;f

12、or(i=0;i<=Park_Car->top;i+)/在停車位尋找要開走的汽車if(strcmp(s,Park_Car->Parki.license_plate)=0)break;if(i<=Park_Car->top)/在停車位找到要開走的汽車cout<<endl<<"該車停放在停車位的"<<i+1<<"車位"<<endl<<endl;cout<<"請輸入當前時間<時 分>:"cin>>t.ho

13、ur>>t.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<<"車牌號為 "<<Buffer_Car->ParkBuffer_Car->top.license_plate<<&quo

14、t; 的汽車暫時退出停車場;"<<endl;cout<<"車牌號為 "<<Park_Car->Parki.license_plate<<" 的汽車從停車場開走;"<<endl;/該車開出停車場Park_Car->top-;while(Buffer_Car->top>-1)/暫時退出的汽車開回停車位Park_Car->top+;Park_Car->ParkPark_Car->top=Buffer_Car->ParkBuffer_Car-&g

15、t;top;Buffer_Car->top-;cout<<"車牌號為 "<<Park_Car->ParkPark_Car->top.license_plate<<" 的汽車?;赝\噲龅?quot;<<Park_Car->top+1<<"車位;"<<endl;if(Road_Car->front!=Road_Car->rear) /便道有車,則進入停車位Qnode *p;p=Road_Car->front->next;Road_

16、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<<"車牌號為 "<<Park_Car->ParkPark_Car->top.lice

17、nse_plate<<" 的汽車從便道進入停車位的"<<Park_Car->top+1<<"車位;"<<endl;else/在停車位未找到要開走的汽車,則在便道尋找int k=0;Qnode *p,*r;p=Road_Car->front->next;r=Road_Car->front->next;while(p)k+;if(strcmp(p->data.license_plate,s)=0)break;p=p->next;if(p)/在便道找到該車cout<

18、<endl<<"該車等候在便道的"<<k<<"位置"<<endl<<endl;cout<<"請輸入當前時間<時 分>:"cin>>t.hour>>t.min;print(p->data,t);while(p!=r)/該車前面有車,前面的車要讓路cout<<"車牌號為"<<r->data.license_plate<<"的汽車開出便道讓路;&quo

19、t;<<endl;Road_Car->front->next=r->next;r->next=NULL;BufferCar->rear->next=r;BufferCar->rear=r;r=Road_Car->front->next;cout<<"車牌號為"<<p->data.license_plate<<"的汽車從便道開走。"<<endl;Road_Car->front->next=p->next;/刪除結點del

20、ete 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;Road_Car->rear=Road_Car->front;Road_Car->rear->next=BufferCar->front->nex

21、t;Road_Car->rear=BufferCar->rear;BufferCar->rear=BufferCar->front;cout<<"讓路的車輛開回便道。"<<endl;elsecout<<"沒有在停車場找到該車!"<<endl;/沒有找到該車cout<<endl<<"按【任意鍵】繼續(xù)程序的執(zhí)行."cin>>ch;welcome();/顯示停車場停車狀態(tài)的查詢模塊void car_display()int i=0;/

22、停車位情況cout<<endl<<"停車位的情況:"<<endl;while(i<=Park_Car->top)cout<<i+1<<"車位-"<<"車牌號"<<Park_Car->Parki.license_plate;if(Park_Car->Parki.state='p')cout<<" "<<Park_Car->Parki.time.hour<<

23、;"時"<<Park_Car->Parki.time.min<<"分停入停車位。"<<endl;elsecout<<" "<<Park_Car->Parki.time1.hour<<"時"<<Park_Car->Parki.time1.min<<"分進入便道等候;"cout<<Park_Car->Parki.time.hour<<"時"

24、;<<Park_Car->Parki.time.min<<"分由便道進入停車位。"<<endl;i+;while(i<MAX_PARK)cout<<i+1<<"車位-空"<<endl;i+;/便道上的情況cout<<endl<<"便道上的情況:"<<endl;if(Road_Car->front=Road_Car->rear)cout<<endl<<" 空"&l

25、t;<endl;elseQnode *p;p=Road_Car->front->next;i=1;while(p)cout<<i<<"位置-"<<"車牌號"<<p->data.license_plate;cout<<" "<<p->data.time1.hour<<"時"<<p->data.time1.min<<"分進入便道等候。"<<end

26、l;p=p->next;i+;cout<<endl<<"按【任意鍵】繼續(xù)程序的執(zhí)行."cin>>ch;welcome();3畫出函數(shù)的調用關系圖。Mainwelcomecar_comecar_leavecar_display四、調試分析1調試中遇到的問題及對問題的解決方法;經(jīng)過兩周的設計和開發(fā),停車場管理系統(tǒng)基本開發(fā)完畢。其功能基本符合用戶需求,能夠完成對車輛的管理和查詢以及各類相關報表的打印。對于車輛進去和離開停車場的時間,也進行了完善,具體到了小時和分鐘。該程序給用戶提供了選擇機會,采用比較友好的界面顯示。但由于設計時間較短,該

27、系統(tǒng)仍有不盡人意的地方,如不同類型車輛收費情況不夠完善等。五、使用說明及測試結果(1)使用說明程序操作簡單,在車輛到來時,選擇【C】,然后根據(jù)提示輸入車牌號及當前時刻;有車要走時,選擇【L】,然后根據(jù)提示輸入此時時刻;要查詢停車場信息時,只需選擇【S】;若退出程序,則選擇【Q】。(2)測試結果程序運行時的歡迎界面。當停車場容量為5時,連續(xù)有7輛車到來,牌照號分別為F001、F002、F003、F004、F005、F006、F007,前5輛車應該進入停車位15車位,第6、7輛車應停入便道的1、2位置上。顯示停車場信息。 牌照號為F003的汽車從停車廠開走,應顯示F005、F004的讓路動作和F0

28、06從便道到停車位上的動作。(到達和離開時間請自行設定)。牌照號為F003的汽車從停車廠開走后,顯示停車場信息。六、源程序#include<iostream.h>#include<stdio.h> #include<stdlib.h>#include<string.h>#define MAX_PARK 3 /*停車場容量*/#define Price 0.5/*停車位收費標準:每分鐘每車.5元*/#define price 0.3/*便道收費標準:每分鐘每車.3元*/typedef struct int hour;int min;TIME;typ

29、edef 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; /*用來指示棧頂位置的靜態(tài)指針*/ParkStack;ParkStack *Park_Car,*Buffer_

30、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分別指向表示便道和輔助隊列的指針變量char ch;void car_display();/順序棧的初始化ParkStack

31、 *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;q->front=q->rear=p;return q;/打印要離開汽車的信息

32、及收費清單void print(Car car,TIME t)cout<<endl<<endl<<"收費清單: "if(car.state='p')/車輛一直停放在停車位cout<<"汽車車牌號 "<<car.license_plate<<endl;cout<<" "<<car.time.hour<<"時"<<car.time.min<<"分進入停車位,&qu

33、ot;<<t.hour<<"時"<<t.min<<"分離開,"<<endl;cout<<" "<<"共"<<(t.hour-car.time.hour)*60+(t.min-car.time.min)<<"分鐘,"cout<<"應付費"<<(t.hour-car.time.hour)*60+(t.min-car.time.min)*Price&l

34、t;<"元(停車位每小時每車"<<Price<<"元)。"<<endl;else if(car.state='q')/車輛一直在便道等候cout<<"汽車車牌號 "<<car.license_plate<<endl;cout<<" "<<car.time1.hour<<"時"<<car.time1.min<<"分進入便道等候,&quo

35、t;<<t.hour<<"時"<<t.min<<"分離開,"<<endl;cout<<" "<<"共"<<(t.hour-car.time1.hour)*60+(t.min-car.time1.min)<<"分鐘,"cout<<"應付費"<<(t.hour-car.time1.hour)*60+(t.min-car.time1.min)*pric

36、e<<"元(便道每小時每車"<<price<<"元)。"<<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_plate<

37、;<endl;cout<<" "<<car.time1.hour<<"時"<<car.time1.min<<"分-"<<car.time.hour<<"時"<<car.time.min<<"分在便道等候,"<<endl;cout<<" 共"<<m<<"分鐘,"<<"應付費&q

38、uot;<<m*price<<"元(便道每小時每車"<<price<<"元)。"<<endl;cout<<" "<<car.time.hour<<"時"<<car.time.min<<"分-"<<t.hour<<"時"<<t.min<<"分停放在停車位,"<<endl;cout&

39、lt;<" 共"<<n<<"分鐘,應付費"<<n*Price<<"元(停車位每小時每車"<<Price<<"元)。"<<endl;cout<<" 應付總費用:"<<m*price+n*Price<<"元。"<<endl;cout<<endl;/程序功能介紹和操作提示模塊void welcome()cout<<endl

40、<<endl;cout<<" 本程序為停車場的模擬管理程序"<<endl;cout<<"-"<<endl;cout<<" 有車到來請按【C】鍵"<<endl;cout<<" 有車要走請按【L】鍵"<<endl;cout<<" 查詢停車場狀態(tài)請按【S】鍵"<<endl;cout<<" 退出程序請按【Q】鍵"<<endl;co

41、ut<<endl<<" 請選擇您要進行的操作."cin>>ch;/汽車進入停車場的管理模塊void car_come()Car newCar;cout<<endl;cout<<"請輸入到來車輛的車牌號:"cin>>newCar.license_plate;if(Park_Car->top<MAX_PARK-1) /停車位未滿,車輛進入停車場cout<<endl<<"車輛進入停車位,開始計費,請輸入當前時間<時分>:"

42、cin>>newCar.time.hour>>newCar.time.min;newCar.state='p'Park_Car->top+;Park_Car->ParkPark_Car->top=newCar;else/停車位滿,車輛進去便道或開走int i;cout<<endl<<"停車位已滿,您可以選擇【】進去便道等候or 【其他任意鍵】離開,請選擇:"cin>>i;if(i=1)cout<<endl<<"車輛進入便道等候,開始計費,請輸入當前

43、時間<時分>:"cin>>newCar.time1.hour>>newCar.time1.min;newCar.state='q'Qnode *p;p=new Qnode;if(!p)cout<<"申請動態(tài)存儲空間失敗!"<<endl;return ;elsep->data=newCar;p->next=NULL;Road_Car->rear->next=p;Road_Car->rear=p;elsecout<<endl<<"

44、車輛已開走!"<<endl;cout<<endl<<"按【任意鍵】繼續(xù)程序的執(zhí)行."cin>>ch;welcome();/汽車離開停車場的管理模塊void car_leave()char s10;int i;TIME t;cout<<endl;cout<<"請輸入要走的車輛號碼:"cin>>s;for(i=0;i<=Park_Car->top;i+)/在停車位尋找要開走的汽車if(strcmp(s,Park_Car->Parki.license

45、_plate)=0)break;if(i<=Park_Car->top)/在停車位找到要開走的汽車cout<<endl<<"該車停放在停車位的"<<i+1<<"車位"<<endl<<endl;cout<<"請輸入當前時間<時分>:"cin>>t.hour>>t.min;print(Park_Car->Parki,t);while( (Park_Car->top) > i )/該車前面的汽

46、車暫時退出Buffer_Car->top+;Buffer_Car->ParkBuffer_Car->top=Park_Car->ParkPark_Car->top;Park_Car->top-;cout<<"車牌號為"<<Buffer_Car->ParkBuffer_Car->top.license_plate<<" 的汽車暫時退出停車場;"<<endl;cout<<"車牌號為"<<Park_Car->Park

47、i.license_plate<<" 的汽車從停車場開走;"<<endl;/該車開出停車場Park_Car->top-;while(Buffer_Car->top>-1)/暫時退出的汽車開回停車位Park_Car->top+;Park_Car->ParkPark_Car->top=Buffer_Car->ParkBuffer_Car->top;Buffer_Car->top-;cout<<"車牌號為"<<Park_Car->ParkPark_Car

48、->top.license_plate<<" 的汽車?;赝\噲龅?quot;<<Park_Car->top+1<<"車位;"<<endl;if(Road_Car->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

49、->top+;Park_Car->ParkPark_Car->top=p->data;delete p;if(Road_Car->front->next=NULL)Road_Car->rear=Road_Car->front;cout<<"車牌號為"<<Park_Car->ParkPark_Car->top.license_plate<<" 的汽車從便道進入停車位的"<<Park_Car->top+1<<"車位;&quo

50、t;<<endl;else/在停車位未找到要開走的汽車,則在便道尋找int k=0;Qnode *p,*r;p=Road_Car->front->next;r=Road_Car->front->next;while(p)k+;if(strcmp(p->data.license_plate,s)=0)break;p=p->next;if(p)/在便道找到該車cout<<endl<<"該車等候在便道的"<<k<<"位置"<<endl<<en

51、dl;cout<<"請輸入當前時間<時分>:"cin>>t.hour>>t.min;print(p->data,t);while(p!=r)/該車前面有車,前面的車要讓路cout<<"車牌號為"<<r->data.license_plate<<"的汽車開出便道讓路;"<<endl;Road_Car->front->next=r->next;r->next=NULL;BufferCar->rear-&

52、gt;next=r;BufferCar->rear=r;r=Road_Car->front->next;cout<<"車牌號為"<<p->data.license_plate<<"的汽車從便道開走。"<<endl;Road_Car->front->next=p->next;/刪除結點delete p;if(Road_Car->front->next=NULL)/若便道只有一輛車,出隊后便道為空Road_Car->rear=Road_Car->

53、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<<

54、"讓路的車輛開回便道。"<<endl;elsecout<<"沒有在停車場找到該車!"<<endl;/沒有找到該車cout<<endl<<"按【任意鍵】繼續(xù)程序的執(zhí)行."cin>>ch;welcome();/顯示停車場停車狀態(tài)的查詢模塊void car_display()int i=0;/停車位情況cout<<endl<<"停車位的情況:"<<endl;while(i<=Park_Car->top)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論