/// <summary>
 /// constructor.
 /// </summary>
 /// <param name="minLotRange"></param>
 /// <param name="maxLotRange"></param>
 /// <param name="price"></param>
 /// <param name="rank"></param>
 protected TicketType(int minLotRange, int maxLotRange, int price, TicketRank rank)
 {
     Classes     = new HashSet <VehicleClass>();
     MinLotRange = minLotRange;
     MaxLotRange = maxLotRange;
     Price       = price;
     Rank        = rank;
 }
Esempio n. 2
0
 public RestrictedTicket(int minLotRange, int maxLotRange, int price, TicketRank rank, int allowedMaxHight
                         , int alloweMaxWidth, int allowedMaxLength, int timeLimit) : base(minLotRange, maxLotRange, price, rank)
 {
     AllowedMaxHight  = allowedMaxHight;
     AlloweMaxWidth   = alloweMaxWidth;
     AllowedMaxLength = allowedMaxLength;
     TimeLimit        = timeLimit;
 }
        /// <summary>
        /// Finding a suitable ticket type and the cost differnce from original ticket type.
        /// Iterate the ticket types until finding a ticket type that validates the vehicle.
        /// </summary>
        /// <param name="vehicle"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public CheckInResult FindMatchingTicket(Vehicle vehicle, TicketRank rank)
        {
            TicketType coresspondTicket = TicketTypes[rank];
            int        initialCost      = coresspondTicket.Price;

            // find corresponding ticketType
            do
            {
                rank++;
                coresspondTicket = TicketTypes[rank];
            } while (TicketTypes.ContainsKey(rank) && !coresspondTicket.IsVehicleSuitable(vehicle));
            if (!TicketTypes.ContainsKey(rank))
            {
                rank = TicketRank.Undefined;
            }
            return(new CheckInResult(rank.ToString(), coresspondTicket.Price - initialCost, false, -1, vehicle.VehicleName));
        }
        /// <summary>
        /// Checking in the vehicle in parking garage.
        /// </summary>
        /// <param name="vehicle"> vehicle which wants to enter</param>
        /// <param name="rank">rank of the ticket type</param>
        /// <returns>information about the check in result</returns>
        public CheckInResult CheckIn(Vehicle vehicle, TicketRank rank, Driver driver)
        {
            int lot = -1;

            vehicle.DriverDetails = driver;
            EnteringVehicles.Add(vehicle);
            TicketType ticketType = TicketTypes[rank];

            //if the ticket type is suitable to the vehicle's data.
            if (ticketType.IsVehicleSuitable(vehicle))
            {
                ParkVehicle(vehicle, ticketType, ref lot);
                return(new CheckInResult(rank.ToString(), 0, true, lot, vehicle.VehicleName));
            }
            else
            {
                return(FindMatchingTicket(vehicle, rank));
            }
        }
 /// <summary>
 /// constructor
 /// </summary>
 /// <param name="minLotRange"></param>
 /// <param name="maxLotRange"></param>
 /// <param name="price"></param>
 /// <param name="rank"></param>
 public VIPTicket(int minLotRange, int maxLotRange, int price, TicketRank rank) : base(minLotRange, maxLotRange, price, rank)
 {
     MinLotRange = minLotRange;
     MaxLotRange = maxLotRange;
 }