using System.Collections.Generic;
public enum VehicleType {
CAR = 1, TRUCK = 2, ELECTRIC = 3, VAN = 4, MOTORBIKE = 5
public enum ParkingSpotType {
HANDICAPPED = 1, COMPACT = 2, LARGE = 3, MOTORBIKE = 4, ELECTRIC = 5
public enum AccountStatus {
ACTIVE = 1, BLOCKED = 2, BANNED = 3, COMPROMISED = 4, ARCHIVED = 5, UNKNOWN = 6
public enum ParkingTicketStatus {
ACTIVE = 1, PAID = 2, LOST = 3
private String streetAddress;
public abstract class ParkingSpot {
private readonly ParkingSpotType type;
public ParkingSpot(ParkingSpotType type) {
public ParkingSpotType GetEnumType()
var enumType = this.type;
public string GetNumber()
int number = (int)this.type;
return number.ToString();
bool isSpotFree = this.free;
public void AssignVehicle(Vehicle vehicle) {
public void RemoveVehicle() {
public class HandicappedSpot : ParkingSpot {
public HandicappedSpot() : base(ParkingSpotType.HANDICAPPED){}
public class CompactSpot : ParkingSpot {
public CompactSpot() : base(ParkingSpotType.COMPACT){}
public class LargeSpot : ParkingSpot {
public LargeSpot() : base(ParkingSpotType.LARGE){}
public class MotorbikeSpot : ParkingSpot {
public MotorbikeSpot() : base(ParkingSpotType.MOTORBIKE){}
public class ElectricSpot : ParkingSpot {
public ElectricSpot() : base(ParkingSpotType.ELECTRIC) {}
public abstract class Vehicle {
private String licenseNumber;
private readonly VehicleType type;
private ParkingTicket ticket;
public Vehicle(VehicleType type) {
public void assignTicket(ParkingTicket ticket) {
public class Car : Vehicle {
public Car() : base(VehicleType.CAR){}
public class Van : Vehicle {
public Van() : base(VehicleType.VAN){}
public class Truck : Vehicle {
public Truck() : base(VehicleType.TRUCK){}
public class ParkingFloor {
private Dictionary<String, ParkingSpot> handicappedSpots;
private Dictionary<String, ParkingSpot> compactSpots;
private Dictionary<String, ParkingSpot> largeSpots;
private Dictionary<String, ParkingSpot> motorbikeSpots;
private Dictionary<String, ParkingSpot> electricSpots;
private ParkingDisplayBoard displayBoard;
private int freeLargeSpotCount;
private int freeHandicappedSpotCount;
private int freeElectricSpotCount;
private int freeMotorbikeSpotCount;
private int freeCompactSpotCount;
public ParkingFloor(String name) {
public void AddParkingSpot(ParkingSpot spot) {
switch (spot.GetEnumType()) {
case ParkingSpotType.HANDICAPPED:
handicappedSpots.Add(spot.GetNumber(), spot);
case ParkingSpotType.COMPACT:
compactSpots.Add(spot.GetNumber(), spot);
case ParkingSpotType.LARGE:
largeSpots.Add(spot.GetNumber(), spot);
case ParkingSpotType.MOTORBIKE:
motorbikeSpots.Add(spot.GetNumber(), spot);
case ParkingSpotType.ELECTRIC:
electricSpots.Add(spot.GetNumber(), spot);
Console.Write("Wrong parking spot type!");
public void assignVehicleToSpot(Vehicle vehicle, ParkingSpot spot) {
spot.AssignVehicle(vehicle);
switch (spot.GetEnumType()) {
case ParkingSpotType.HANDICAPPED:
updateDisplayBoardForHandicapped(spot);
case ParkingSpotType.COMPACT:
updateDisplayBoardForCompact(spot);
case ParkingSpotType.LARGE:
updateDisplayBoardForLarge(spot);
case ParkingSpotType.MOTORBIKE:
updateDisplayBoardForMotorbike(spot);
case ParkingSpotType.ELECTRIC:
updateDisplayBoardForElectric(spot);
Console.Write("Wrong parking spot type!");
private void updateDisplayBoardForHandicapped(ParkingSpot spot) {
if (this.displayBoard.getHandicappedFreeSpot().GetNumber() == spot.GetNumber()) {
foreach (string key in handicappedSpots.Keys) {
if (handicappedSpots[key].IsFree()) {
this.displayBoard.setHandicappedFreeSpot(handicappedSpots[key]);
this.displayBoard.showEmptySpotNumber();
private void updateDisplayBoardForCompact(ParkingSpot spot) {
if (this.displayBoard.getCompactFreeSpot().GetNumber() == spot.GetNumber()) {
foreach (string key in compactSpots.Keys) {
if (compactSpots[key].IsFree()) {
this.displayBoard.setCompactFreeSpot(compactSpots[key]);
this.displayBoard.showEmptySpotNumber();
public void freeSpot(ParkingSpot spot) {
switch (spot.GetEnumType()) {
case ParkingSpotType.HANDICAPPED:
freeHandicappedSpotCount++;
case ParkingSpotType.COMPACT:
case ParkingSpotType.LARGE:
case ParkingSpotType.MOTORBIKE:
freeMotorbikeSpotCount++;
case ParkingSpotType.ELECTRIC:
Console.Write("Wrong parking spot type!");
public static void Main()
Console.WriteLine("Hello World");