停车场设计
代码
public abstract class Vehicle {
protected String licensePlate;
protected VehicleSize size;
public Vehicle(String licensePlate, VehicleSize size) {
this.licensePlate = licensePlate;
this.size = size;
}
public String getLicensePlate() {
return licensePlate;
}
public VehicleSize getSize() {
return size;
}
public abstract String getType();
}
public enum VehicleSize {
MOTORCYCLE,
COMPACT,
REGULAR,
LARGE;
}
public class Car extends Vehicle {
public Car(String licensePlate) {
super(licensePlate, VehicleSize.REGULAR);
}
@Override
public String getType() {
return "Car";
}
}
public class Truck extends Vehicle {
public Truck(String licensePlate) {
super(licensePlate, VehicleSize.LARGE);
}
@Override
public String getType() {
return "Truck";
}
}
public class Motorcycle extends Vehicle {
public Motorcycle(String licensePlate) {
super(licensePlate, VehicleSize.MOTORCYCLE);
}
@Override
public String getType() {
return "Motorcycle";
}
}
public class ParkingSpot {
private int spotNumber;
private VehicleSize size;
private Vehicle parkedVehicle;
public ParkingSpot(int spotNumber, VehicleSize size) {
this.spotNumber = spotNumber;
this.size = size;
this.parkedVehicle = null; // Empty spot initially
}
public boolean isOccupied() {
return parkedVehicle != null;
}
public boolean canFit(Vehicle vehicle) {
return !isOccupied() && vehicle.getSize().ordinal() <= size.ordinal();
}
public boolean park(Vehicle vehicle) {
if (canFit(vehicle)) {
parkedVehicle = vehicle;
return true;
}
return false;
}
public Vehicle removeVehicle() {
Vehicle temp = parkedVehicle;
parkedVehicle = null;
return temp;
}
public int getSpotNumber() {
return spotNumber;
}
public Vehicle getParkedVehicle() {
return parkedVehicle;
}
}
import java.util.ArrayList;
import java.util.List;
public class ParkingLot {
private List<ParkingSpot> spots;
public ParkingLot(int totalSpots) {
spots = new ArrayList<>();
// Assume alternating spot types for simplicity
for (int i = 1; i <= totalSpots; i++) {
VehicleSize size = (i % 3 == 0) ? VehicleSize.LARGE :
(i % 2 == 0) ? VehicleSize.REGULAR : VehicleSize.COMPACT;
spots.add(new ParkingSpot(i, size));
}
}
public boolean parkVehicle(Vehicle vehicle) {
for (ParkingSpot spot : spots) {
if (spot.canFit(vehicle)) {
return spot.park(vehicle);
}
}
return false; // No suitable spot
}
public Vehicle removeVehicle(String licensePlate) {
for (ParkingSpot spot : spots) {
if (spot.isOccupied() && spot.getParkedVehicle().getLicensePlate().equals(licensePlate)) {
return spot.removeVehicle();
}
}
return null; // Vehicle not found
}
public int getAvailableSpots() {
int availableCount = 0;
for (ParkingSpot spot : spots) {
if (!spot.isOccupied()) {
availableCount++;
}
}
return availableCount;
}
public List<ParkingSpot> getAllSpots() {
return spots;
}
}
public class ParkingLotManagementSystem {
private ParkingLot parkingLot;
public ParkingLotManagementSystem(int totalSpots) {
parkingLot = new ParkingLot(totalSpots);
}
public boolean parkVehicle(Vehicle vehicle) {
return parkingLot.parkVehicle(vehicle);
}
public Vehicle removeVehicle(String licensePlate) {
return parkingLot.removeVehicle(licensePlate);
}
public int getAvailableSpots() {
return parkingLot.getAvailableSpots();
}
public void displayParkingLotStatus() {
System.out.println("Parking Lot Status:");
for (ParkingSpot spot : parkingLot.getAllSpots()) {
String status = spot.isOccupied() ? "Occupied by " + spot.getParkedVehicle().getType() :
"Available";
System.out.println("Spot " + spot.getSpotNumber() + ": " + status);
}
}
}
Last updated