代碼:ios
/* 2018年11月12日 */ #include<stdio.h> #include<string> #include<algorithm> #include<stdlib.h> #include<queue> #include<stack> #include<iostream> using namespace std; #define PRICE 10 #define MAXN 2 /* 停車場管理系統 1.進車 若是停車場沒滿 進進車, 不然進入人行道的隊列 輸入進入時間 2.出車 若是該車在停車場 將之出棧底,其餘再次進棧,並從過道上的一個車輛進入停車場. 若是在過道則在隊列元素取出便可 剩下的再次按照原隊列排隊 */ class Car { public: string CarNum; int ArrTime; int AwayTime; public: Car(string s,int arrtime):CarNum(s),ArrTime(arrtime) { AwayTime=-1; } Car() { } void SetAwayTime(int awaytime) { AwayTime=awaytime; } void SetArrTime(int arrtime) { ArrTime=arrtime; } }; class Manager { private: queue<Car> SideWalkOfCar; stack<Car> Parking; stack<Car> MidCar; public: Manager() { while(!SideWalkOfCar.empty()) SideWalkOfCar.pop(); while(!Parking.empty()) Parking.pop(); while(!MidCar.empty()) MidCar.pop(); } bool AddCar(Car car)//添加車 { /* 若是停車場沒滿就加入停車場 滿 則停到過道,而且把進入停車場時間設爲-1 */ if(Parking.size()<MAXN) Parking.push(car); else { SideWalkOfCar.push(car); car.ArrTime=-1; } return 1; } Car DelCar(string carnum,int awaytime)//刪除車 根據車牌號刪除車輛 { int flag=0;//查看車是否在停車場 Car nowcar; while(!Parking.empty()) { if(Parking.top().CarNum==carnum) { flag=1; nowcar=Parking.top(); nowcar.AwayTime=awaytime; Parking.pop(); break; } MidCar.push(Parking.top()); Parking.pop(); } while(!MidCar.empty()) { Parking.push(MidCar.top()); MidCar.pop(); } if(flag)//從停車場出來了 { if(!SideWalkOfCar.empty()) { //將便道上的車 進入停車場而且設定進入停車場時間 Car mmm; mmm=SideWalkOfCar.front(); mmm.ArrTime=awaytime; SideWalkOfCar.pop(); Parking.push(mmm); } return nowcar; } else//停車場沒有 { int cnt=SideWalkOfCar.size(); while(cnt--) { Car mmm; mmm=SideWalkOfCar.front(); SideWalkOfCar.pop(); if(mmm.CarNum==carnum) { mmm.ArrTime=-1; flag=1; nowcar=mmm; } else SideWalkOfCar.push(mmm); } } if(flag) return nowcar; return Car("ERROR",-1); } int Charge(Car car)//根據車算出收費 { if(car.ArrTime==-1) return 0; return (car.AwayTime-car.ArrTime)*PRICE; } }; int main() { Manager dch; int IfContinue=1; while(IfContinue) { cout<<"what do you want to do?"<<endl; cout<<"Input ----(add/del/exit)"<<endl; char cmd[5]; scanf("%s",cmd); switch(cmd[0]) { case 'a': { string num; int arrtime; cout<<"input the number And arrtime:"; cin>>num>>arrtime; dch.AddCar(Car(num,arrtime)); break; } case 'd': { string num; int awaytime; cout<<"input the number And awaytime:"; cin>>num>>awaytime; Car dchOfCar=dch.DelCar(num,awaytime); cout<<"charge:"<<dch.Charge(dchOfCar); break; } case 'e': { IfContinue=0; scanf("%*s %*d"); break; } default: printf("input error!---please input again:\n"); break; } } }