C++實現(xiàn)停車場管理系統(tǒng)
更新時間:2020年04月08日 10:02:27 作者:Akatsuki__Itachi
這篇文章主要為大家詳細介紹了C++實現(xiàn)停車場管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C++實現(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;//車輛進入的時間(以小時為單位)
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<<"請輸入要進入車輛的車牌號"<<endl;
string x;
int y,ans;
cin>>x;
cout<<"請輸入該車輛進入停車場的時間(時間為整形時刻)"<<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//停車場滿了之后進入便道
{
nod.no=x;
nod.time=y;
nod.sub=q2.size()+1;
q2.push_back(nod);
mp[x]=n+q2.size();
}
}
else
cout<<"錯誤:該車輛已在停車場內(nèi)!"<<endl;
}
void Pop(int n)//車輛駛出操作
{
cout<<"請輸入要駛出車輛的車牌號"<<endl;
string x;
int y,ans;
cin>>x;
cout<<"請輸入該車輛駛出停車場的時間(時間為整形時刻)"<<endl;
cin>>y;
if(!mp[x])
cout<<"錯誤:該輛并不在停車場內(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())//如果便道里也有車,那么進入停車場,并且便道后面的車向前移動
{
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<<" 個小時"<<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<<"由于該車輛并未進入停車場,所以不進行收費"<<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.當停車場車位已滿之后,車將會停在便道"<<endl;
cout<<"2.停車場按照每小時五元的標準收費(不足一小時按照一小時計算)"<<endl;
cout<<"3.停在便道的車輛不收費。"<<endl;
cout<<endl;
cout<<"首先請設置停車場的總共的車位數(shù):"<<endl;
cin>>n;
cout<<endl;
cout<<"*********車位設置完畢!下面開始停車場管理系統(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;
}
結果:


推薦幾篇文章:
關于管理系統(tǒng)的更多內(nèi)容請點擊《管理系統(tǒng)專題》進行學習
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
一文詳解C++子類函數(shù)為什么不能重載父類函數(shù)
這篇文章主要介紹了一文詳解C++子類函數(shù)為什么不能重載父類函數(shù),文章圍繞主題展開詳細的內(nèi)容戒殺,具有一定的參考價值,需要的朋友可以參考一下2022-09-09
Linux中使用C語言的fork()函數(shù)創(chuàng)建子進程的實例教程
fork是一個在Linux系統(tǒng)環(huán)境下專有的函數(shù),現(xiàn)有的進程調(diào)用fork后將會創(chuàng)建一個新的進程,這里我們就來看一下Linux中使用C語言的fork()函數(shù)創(chuàng)建子進程的實例教程2016-06-06
C++中overload,override,overwrite的區(qū)別詳細解析
以下是對C++中overload,override,overwrite的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下2013-09-09
詳解應用程序與驅(qū)動程序通信DeviceIoControl
這種通信方式,就是驅(qū)動程序和應用程序自定義一種IO控制碼,然后調(diào)用DeviceIoControl函數(shù),IO管理器會產(chǎn)生一個MajorFunction為IRP_MJ_DEVICE_CONTROL,MinorFunction為自己定義的控制碼的IRP,系統(tǒng)就調(diào)用相應的處理IRP_MJ_DEVICE_CONTROL的派遣函數(shù)2021-06-06

