zoukankan      html  css  js  c++  java
  • 数据结构实验 停车场管理系统(实验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:
    ");
                break;
            }
        }
    }
    
    
  • 相关阅读:
    数字图像处理的Matlab实现(2)—MATLAB基础
    数字图像处理的Matlab实现(1)—绪论
    统计分析与R软件-chapter2-6
    统计分析与R软件-chapter2-5
    统计分析与R软件-chapter2-3
    题目1143:Primary Arithmetic
    剑指OFFER之翻转单词顺序
    剑指OFFER之把数组排成最小的数
    剑指OFFER之丑数
    最大的两个数
  • 原文地址:https://www.cnblogs.com/dchnzlh/p/10427298.html
Copyright © 2011-2022 走看看