數據結構實驗 停車場管理系統(實驗3)

代碼: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;
        }
    }
}
相關文章
相關標籤/搜索