Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

incidente #8

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 30 additions & 4 deletions Car.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,35 @@
public class Car{
public String NumberPlate;
public String CarColor; //red, yellow, green, etc..
public String CarType;
public static final String TYPE_SEDAN = "sedan";
public static final String TYPE_SUV = "suv";
public static final String TYPE_COUPE = "coupe";

private String NumberPlate;
private String CarColor;
private String CarType;


private Car() {}

public String getNumberPlate(){

public static Car createCar(String type) {
switch (type.toLowerCase()) {
case TYPE_SEDAN:
return new Sedan();
case TYPE_SUV:
return new Suv();
case TYPE_COUPE:
return new Coupe();
default:
throw new IllegalArgumentException("Tipo de auto no válido");
}
}

// Subclases internas para cada tipo de auto
private static class Sedan extends Car{}
private static class Suv extends Car{}
private static class Coupe extends Car{}

public String getNumberPlate(){
return NumberPlate;
}

Expand Down
92 changes: 70 additions & 22 deletions ParkingLot.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,61 @@
import java.util.ArrayList;
import java.util.*;


import java.util.*;
public class ParkingLot{


private static ParkingLot instanciaParkinglot;
public ArrayList<ParkingTicket> asignarpotlist;
private List<ParkinglotObserver> observers = new ArrayList<>();

private ParkingLot() {
this.asignarpotlist = new ArrayList<>();
}

public static ParkingLot getInstancia() {
if (instanciaParkinglot == null) {
synchronized (ParkingLot.class) {
if (instanciaParkinglot == null) {
instanciaParkinglot = new ParkingLot();
}
}
}
return instanciaParkinglot;
}

public void addObserver(ParkinglotObserver observer) {
observers.add(observer);
}

public void removeObserver(ParkinglotObserver observer) {
observers.remove(observer);
}

private void notifyCarPark(Car parkCar, int spotNumber) {
for (ParkinglotObserver observer : observers) {
observer.carPark(parkCar, spotNumber);
}
}

private void notifyCarNoPark(Car noParkedCar, int spotNumber) {
for (ParkinglotObserver observer : observers) {
observer.carNoPark(noParkedCar, spotNumber);
}
}

// Metodo para estacionar un auto
public void parkCar(Car car, int spotNumber) {
notifyCarPark(car, spotNumber);
}

// Metodo para que un auto salga del estacionamiento
public void departCar(Car car, int spotNumber) {
notifyCarNoPark(car, spotNumber);
}

public static void main(String[] args){

ArrayList<ParkingTicket> assignedspotlist = new ArrayList<>();


ParkingLot parkingLot = ParkingLot.getInstancia();

ParkingSpot parkingspot = new ParkingSpot();
RandomInfo randominfo = new RandomInfo();
Expand All @@ -20,8 +68,8 @@ public static void main(String[] args){
int size = userinput.length();

ParkingTicket parkingticket = new ParkingTicket();
Car car = new Car();

Car car = null;
Car.createCar("suv");
if (size == 5) {
System.out.print("\033\143");
// get car information from car class
Expand Down Expand Up @@ -63,8 +111,8 @@ public static void main(String[] args){
);


assignedspotlist.add(parkingticket);
System.out.println(assignedspotlist.size());
parkingLot.asignarpotlist.add(parkingticket);
System.out.println(parkingLot.asignarpotlist.size());

}
else if(size == 4){
Expand All @@ -81,42 +129,42 @@ else if(size == 4){
TotalTime totaltime = new TotalTime();
Payment payment = new Payment();

for(ParkingTicket cp : assignedspotlist){
for(ParkingTicket cp : parkingLot.asignarpotlist){
String carnumber = cp.getAssignedCar().getNumberPlate();
int item = scanticket.cheaknumber(number, carnumber);
if( item == 0 ){
continue;
}
else if(item == 1){
int spot = assignedspotlist.indexOf(cp);
int spot = parkingLot.asignarpotlist.indexOf(cp);
//System.out.println("\n"+spot+"\n");

String exitdate = randominfo.ExitDate();

String exittime = randominfo.ExitTime();

String enterdate = assignedspotlist.get(spot).getDate();
String entertime = assignedspotlist.get(spot).getTime();
String enterdate = parkingLot.asignarpotlist.get(spot).getDate();
String entertime = parkingLot.asignarpotlist.get(spot).getTime();


int time[] = totaltime.CalculateTime(enterdate, exitdate, entertime, exittime);
float amount = payment.TotalAmount(time[0], time[1]);

System.out.println("\n\t\t=== Your Parking information ===\n" +
"Car Number : " + assignedspotlist.get(spot).getAssignedCar().getNumberPlate() +
" Car Color : " + assignedspotlist.get(spot).getAssignedCar().getCarColor() +
" Car Type : "+assignedspotlist.get(spot).getAssignedCar().getCarType()+
"\nParking Time : "+assignedspotlist.get(spot).getTime()+
"Car Number : " + parkingLot.asignarpotlist.get(spot).getAssignedCar().getNumberPlate() +
" Car Color : " + parkingLot.asignarpotlist.get(spot).getAssignedCar().getCarColor() +
" Car Type : "+parkingLot.asignarpotlist.get(spot).getAssignedCar().getCarType()+
"\nParking Time : "+parkingLot.asignarpotlist.get(spot).getTime()+
" Exit Time : "+exittime+
"\nParking Date : "+assignedspotlist.get(spot).getDate()+
"\nParking Date : "+parkingLot.asignarpotlist.get(spot).getDate()+
" Exit Date :" +exitdate+
" Spot Number : "+assignedspotlist.get(spot).getSpotNumber()+
" Spot Number : "+parkingLot.asignarpotlist.get(spot).getSpotNumber()+
"\nTotal Time : "+time[0]+" Hour "+time[1]+" Minute "+
"\nTotal Amount : "+amount+" rupees\n"
);

parkingspot.FreeSpot(assignedspotlist.get(spot).getSpotNumber());
assignedspotlist.remove(spot);
parkingspot.FreeSpot(parkingLot.asignarpotlist.get(spot).getSpotNumber());
parkingLot.asignarpotlist.remove(spot);

break;
}
Expand All @@ -130,7 +178,7 @@ else if(item == 1){
else if(size == 6){

System.out.println("All Car Information : \n");
for(ParkingTicket pt : assignedspotlist){
for(ParkingTicket pt : parkingLot.asignarpotlist){
System.out.println("\n\ncar number : "+pt.getAssignedCar().getNumberPlate()+
" car color : "+pt.getAssignedCar().getCarColor()+
" car type : "+pt.getAssignedCar().getCarType()+
Expand Down
6 changes: 6 additions & 0 deletions ParkinglotObserver.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@


public interface ParkinglotObserver {
void carPark(Car parkCar, int spotNumber);
void carNoPark(Car noParkedCar, int spotNumber);
}
21 changes: 6 additions & 15 deletions Payment.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
public class Payment{

float HourAmount = 30;
float TotalAmountForHour = 0;
float TotalAmountForMinute = 0;
private PaymentStrategy paymentStrategy;

public float TotalAmount(int Hour, int Minute){
TotalAmountForHour = Hour * HourAmount;
if (Minute < 60 && Minute >= 30) {
TotalAmountForMinute = 20;
}
else if(Minute < 30 && Minute >= 15){
TotalAmountForMinute = 15;
}
else if(Minute < 15 && Minute >= 1){
TotalAmountForMinute = 10;
}
public Payment(PaymentStrategy paymentStrategy) {
this.paymentStrategy = paymentStrategy;
}

return (TotalAmountForHour+TotalAmountForMinute);
public float totalAmount(int Hour, int Minute){
return paymentStrategy.calculateTotalAmount(Hour, Minute);
}

}
4 changes: 4 additions & 0 deletions PaymentStrategy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

public interface PaymentStrategy {
float calculateTotalAmount(int Hour, int Minute);
}
29 changes: 29 additions & 0 deletions PaymentStrategyForHour.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@

public class PaymentStrategyForHour implements PaymentStrategy{
private float HourAmount;

public PaymentStrategyForHour(float HourAmount) {
this.HourAmount = HourAmount;
}

@Override
public float calculateTotalAmount(int Hour, int Minute) {
float totalAmountForHour = Hour * HourAmount;
float totalAmountForMinute = 0;

if (Minute < 60 && Minute >= 30) {
totalAmountForMinute = 20;
}
else if(Minute < 30 && Minute >= 15){
totalAmountForMinute = 15;
}
else if(Minute < 15 && Minute >= 1){
totalAmountForMinute = 10;
}

return (totalAmountForHour+totalAmountForMinute);
}



}