C++實(shí)現(xiàn)停車場管理系統(tǒng)
本文實(shí)例為大家分享了C++實(shí)現(xiàn)停車場管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cstdlib> #include<algorithm> #include<queue> #include<vector> #include<stack> #include<map> using namespace std; struct node { string no;//車牌號 int time;//車輛進(jìn)入的時(shí)間(以小時(shí)為單位) int sub;//車輛在停車場的位置 } nod; map<string,int>mp;//用來檢測車輛在停車場或者在便道內(nèi) deque<node>q1;//模擬停車場 deque<node>q2;//模擬便道 stack<node>sk;//交換媒介 string str1="park",str2="pavement"; void Push(int n)//車輛駛?cè)氩僮? { cout<<"請輸入要進(jìn)入車輛的車牌號"<<endl; string x; int y,ans; cin>>x; cout<<"請輸入該車輛進(jìn)入停車場的時(shí)間(時(shí)間為整形時(shí)刻)"<<endl; cin>>y; if(!mp[x])//如果此車不在停車場或者便道內(nèi)執(zhí)行以下命令 { if(q1.size()<n)//如果停車場未滿 { nod.no=x; nod.time=y; nod.sub=q1.size()+1; q1.push_back(nod); mp[x]=q1.size(); } else//停車場滿了之后進(jìn)入便道 { nod.no=x; nod.time=y; nod.sub=q2.size()+1; q2.push_back(nod); mp[x]=n+q2.size(); } } else cout<<"錯(cuò)誤:該車輛已在停車場內(nèi)!"<<endl; } void Pop(int n)//車輛駛出操作 { cout<<"請輸入要駛出車輛的車牌號"<<endl; string x; int y,ans; cin>>x; cout<<"請輸入該車輛駛出停車場的時(shí)間(時(shí)間為整形時(shí)刻)"<<endl; cin>>y; if(!mp[x]) cout<<"錯(cuò)誤:該輛并不在停車場內(nèi)!"<<endl; else if(mp[x]<=n)//如果該車在停車場內(nèi) { mp[x]=0; while(q1.back().no!=x)//車出 { q1.back().sub--; sk.push(q1.back()); q1.pop_back(); } ans=y-q1.back().time; q1.pop_back(); while(!sk.empty()) { q1.push_back(sk.top()); sk.pop(); mp[q1.back().no]=q1.back().sub; } if(!q2.empty())//如果便道里也有車,那么進(jìn)入停車場,并且便道后面的車向前移動 { q2.front().time=y; q2.front().sub=q1.size()+1; q1.push_back(q2.front()); q2.pop_front(); while(!q2.empty()) { q2.back().sub--; sk.push(q2.back()); q2.pop_back(); } while(!sk.empty()) { q2.push_back(sk.top()); sk.pop(); mp[q2.back().no]=q1.back().sub; } mp[q1.back().no]=q1.size(); } cout<<"該車輛一共停了 "<<ans<<" 個(gè)小時(shí)"<<endl; cout<<"所以該車輛需要繳納 "<<ans*5<<"元"<<endl; } else if(mp[x]>n)//如果車在便道里,那么直接離開,后面的車向前移動 { mp[x]=0; while(q2.back().no!=x) { q2.back().sub--; sk.push(q2.back()); q2.pop_back(); } q2.pop_back(); while(!sk.empty()) { q2.push_back(sk.top()); sk.pop(); } cout<<"由于該車輛并未進(jìn)入停車場,所以不進(jìn)行收費(fèi)"<<endl; } } void Query1(int n)//查詢停車場的停車狀態(tài) { cout<<"請輸入要查詢狀態(tài)的車牌號"<<endl; cout<<endl; string x; cin>>x; if(!mp[x]) cout<<"該車輛并未在停車場"<<endl; else if(mp[x]<=n) cout<<"該車輛位于停車場"<<mp[x]<<"號位"<<endl; else cout<<"該車輛位于"<<mp[x]-n<<"號便道"<<endl; } void Query2(int n)//查詢停車場的空車位 { cout<<endl; if(q1.size()==n) cout<<"停車場已滿"<<endl; else { cout<<"停車場的"<<q1.size()+1; for(int i=q1.size()+2; i<=n; i++) cout<<"、"<<i; cout<<"號位車為空"<<endl; } } int main() { int n; cout<<" **************停車場管理系統(tǒng)**************"<<endl; cout<<endl; cout<<"停車場管理系統(tǒng)說明:"<<endl; cout<<"1.當(dāng)停車場車位已滿之后,車將會停在便道"<<endl; cout<<"2.停車場按照每小時(shí)五元的標(biāo)準(zhǔn)收費(fèi)(不足一小時(shí)按照一小時(shí)計(jì)算)"<<endl; cout<<"3.停在便道的車輛不收費(fèi)。"<<endl; cout<<endl; cout<<"首先請?jiān)O(shè)置停車場的總共的車位數(shù):"<<endl; cin>>n; cout<<endl; cout<<"*********車位設(shè)置完畢!下面開始停車場管理系統(tǒng)模擬*********"<<endl; cout<<endl; cout<<" *********操作說明*********"<<endl; cout<<endl; cout<<"車輛駛?cè)氲怯?>請按1 ^_^ 車輛駛出登記->請按2 ^_^"<<endl; cout<<endl; cout<<"查詢停車場的停車狀態(tài)->請按3 ^_^ 查詢停車場空閑車位->請按4 ^_^ "<<endl; cout<<endl; cout<<"退出停車場管理系統(tǒng)->請按0 ^_^"<<endl; cout<<endl; cout<<"說明完畢!下面開始操作"<<endl; cout<<endl; while(1) { cout<<"********請選擇操作1~4或者退出按0********"<<endl; cout<<endl; int t; cin>>t; if(t==1) Push(n); else if(t==2) Pop(n); else if(t==3) Query1(n); else if(t==4) Query2(n); else break; cout<<endl; cout<<"***********************biubiu***********************"<<endl; cout<<"***********************biubiu***********************"<<endl; cout<<endl; } cout<<"歡迎使用停車場管理系統(tǒng),期待您的下次使用^_^"<<endl; }
結(jié)果:
推薦幾篇文章:
C++實(shí)現(xiàn)簡單的圖書管理系統(tǒng)
C++實(shí)現(xiàn)簡單的職工信息管理系統(tǒng)
關(guān)于管理系統(tǒng)的更多內(nèi)容請點(diǎn)擊《管理系統(tǒng)專題》進(jìn)行學(xué)習(xí)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
一文詳解C++子類函數(shù)為什么不能重載父類函數(shù)
這篇文章主要介紹了一文詳解C++子類函數(shù)為什么不能重載父類函數(shù),文章圍繞主題展開詳細(xì)的內(nèi)容戒殺,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-09-09Linux中使用C語言的fork()函數(shù)創(chuàng)建子進(jìn)程的實(shí)例教程
fork是一個(gè)在Linux系統(tǒng)環(huán)境下專有的函數(shù),現(xiàn)有的進(jìn)程調(diào)用fork后將會創(chuàng)建一個(gè)新的進(jìn)程,這里我們就來看一下Linux中使用C語言的fork()函數(shù)創(chuàng)建子進(jìn)程的實(shí)例教程2016-06-06一起來了解一下C++的結(jié)構(gòu)體?struct
這篇文章主要為大家詳細(xì)介紹了C++的結(jié)構(gòu)體struct,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02C++中overload,override,overwrite的區(qū)別詳細(xì)解析
以下是對C++中overload,override,overwrite的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-09-09C語言學(xué)習(xí)之條件和?if...else語句詳解
這篇文章主要給大家介紹了C語言中的條件和?if...else語句,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12C++使用GDAL庫實(shí)現(xiàn)Tiff文件的讀取
這篇文章主要為大家詳細(xì)介紹了C++使用GDAL庫實(shí)現(xiàn)Tiff文件的讀取的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03詳解應(yīng)用程序與驅(qū)動程序通信DeviceIoControl
這種通信方式,就是驅(qū)動程序和應(yīng)用程序自定義一種IO控制碼,然后調(diào)用DeviceIoControl函數(shù),IO管理器會產(chǎn)生一個(gè)MajorFunction為IRP_MJ_DEVICE_CONTROL,MinorFunction為自己定義的控制碼的IRP,系統(tǒng)就調(diào)用相應(yīng)的處理IRP_MJ_DEVICE_CONTROL的派遣函數(shù)2021-06-06一文帶你了解C語言中static關(guān)鍵字的3個(gè)作用
static這個(gè)關(guān)鍵字是“靜態(tài)”的意思,在C語言里主要有3個(gè)作用。這篇文章主要通過一些簡單示例為大家詳細(xì)講講這3個(gè)左右,感興趣的小伙伴可以了解一下2023-04-04