数据结构实验 停车场管理系统(实验3)

代码:

/*
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;
        }
    }
}

 

转载于:https://www.cnblogs.com/dchnzlh/p/10427298.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值