Design a valet parking system. Requirements of the valet parking system should be:
1. Customer are given a ticket that they can use to redeem to get their vehicle back
2. Parking spots come in three sizes, small, med, large
3. Thee types of vehicles, small, med, large
-a small vehicle can park in a small, medium, and large spot
-a medium vehicle can park in a medium and large spot
1. Customer are given a ticket that they can use to redeem to get their vehicle back
2. Parking spots come in three sizes, small, med, large
3. Thee types of vehicles, small, med, large
-a small vehicle can park in a small, medium, and large spot
-a medium vehicle can park in a medium and large spot
-a large vehicle can park in a large spot
public class Car {
public String plateNum;
public carSize size;
public Car(String num, carSize size){
plateNum = num;
this.size = size;
}
}
public enum carSize {
small, medium, large;
}
public class Spot {
public carSize spotSize;
private Car parkedCar = null;
public Car getParkedCar(){
return parkedCar;
}
public Spot(carSize size){
spotSize = size;
}
public void park(Car car){
if(parkedCar==null)
parkedCar = car;
}
public Car unpark(){
Car result = parkedCar;
parkedCar = null;
return result;
}
}
public class Ticket {
public String ticketID;
public String plateNum;
public Ticket(String id, String num){
ticketID = id;
plateNum = num;
}
}
import java.util.Hashtable;
import java.util.ArrayList;
public class Garage {
private Hashtable<Ticket,Spot> table = new Hashtable<Ticket,Spot>();
private ArrayList<Spot> smallSpots = new ArrayList<Spot>();
private ArrayList<Spot> mediumSpots = new ArrayList<Spot>();
private ArrayList<Spot> largeSpots = new ArrayList<Spot>();
private int numFreeSmall;
private int numFreeMedium;
private int numFreeLarge;
public Garage(int smallTot, int mediumTot, int largeTot){
numFreeSmall = smallTot;
numFreeMedium = mediumTot;
numFreeLarge = largeTot;
createSpots(smallTot,carSize.small);
createSpots(mediumTot,carSize.medium);
createSpots(largeTot,carSize.large);
}
private void createSpots (int Tot, carSize size){
ArrayList<Spot> list;
switch (size){
case small:
list = smallSpots;
break;
case medium:
list = mediumSpots;
break;
case large:
list = largeSpots;
break;
default:
return;
}
for(int i=1;i<=Tot;i++){
list.add(new Spot(size));
}
}
private Spot findSpot(carSize size){
ArrayList<Spot> list = new ArrayList<Spot>();
switch (size){
case small:
if(numFreeSmall>0){
list.addAll(smallSpots);
}
else if (numFreeMedium>0){
list.addAll(mediumSpots);
}else{
list.addAll(largeSpots);
}
break;
case medium:
if(numFreeMedium>0)
list.addAll(mediumSpots);
else
list.addAll(largeSpots);
break;
case large:
list.addAll(largeSpots);
}
for(Spot s: list){
if(s.getParkedCar()==null)
return s;
}
return null;
}
public Ticket park(Car car){
if(car==null) return null;
Spot spot = findSpot(car.size);
if(spot!=null){
Ticket ticket = new Ticket("I'm unique", car.plateNum);
table.put(ticket, spot);
switch (spot.spotSize){
case small:
numFreeSmall--;
break;
case medium:
numFreeMedium--;
break;
case large:
numFreeLarge--;
break;
}
return ticket;
}else return null;
}
public Car unpark(Ticket ticket){
if(ticket!=null && table.contains(ticket)){
Spot s = table.get(ticket);
Car c = s.unpark();
switch (s.spotSize){
case small:
numFreeSmall++;
break;
case medium:
numFreeMedium++;
break;
case large:
numFreeLarge++;
break;
}
return c;
}
return null;
}
}