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