Código Fuente: Proyecto Práctico
1) Código User:
public abstract class User {
private String fullName;
private String emailAddress;
protected User(String fullName, String
emailAddress) {
this.fullName = fullName;
this.emailAddress = emailAddress;
}
public String getFullName() {
return fullName;
}
public String getEmailAddress() {
return emailAddress;
}
public abstract void displayInfo();
}
2) Código fuente: Drive.
import java.util.List;
import java.util.ArrayList;
public class Driver extends User {
private String carModel;
private String currentLocation;
private boolean isAvailable;
private List<Integer> ratings; // Lista de
calificaciones
public Driver(String name, String email, String
carModel, String currentLocation, boolean
isAvailable) {
super(name, email);
this.carModel = carModel;
this.currentLocation = currentLocation;
this.isAvailable = isAvailable;
this.ratings = new ArrayList<>();
}
public String getCurrentLocation() {
return currentLocation;
}
public boolean checkAvailability() {
return isAvailable;
}
public void setAvailability(boolean isAvailable)
{
this.isAvailable = isAvailable;
}
public void addRating(int rating) {
this.ratings.add(rating);
}
public double calculateAverageRating() {
if (ratings.isEmpty()) {
return 0;
}
double total = 0;
for (int rating : ratings) {
total += rating;
}
return total / ratings.size();
}
@Override
public void displayInfo() {
System.out.println("Driver: " +
getFullName() + ", Email: " + getFullName()+ ",
Modelo de coche: " + carModel +
", Ubicación actual: " +
currentLocation + ", Disponible: " + (isAvailable ?
"Sí" : "No") +
", Calificación promedio: " +
String.format("%.2f", calculateAverageRating()));
}
}
3) Código fuente: Passenger.
public class Passenger extends User {
public Passenger(String name, String
contactEmail) {
super(name, contactEmail);
}
@Override
public void displayInfo() {
System.out.println("Passenger: " +
getFullName() + ", Email: " + getEmailAddress());
}
}
4) Código fuente: Payment.
public class Payment {
private Passenger passenger;
private Driver driver;
private double amount;
public boolean isProcessed;
public Payment(Passenger passenger, Driver
driver, double amount) {
this.passenger = passenger;
this.driver = driver;
this.amount = amount;
this.isProcessed = false;
}
public void processPayment() {
this.isProcessed = true;
System.out.println("Payment processed
successfully for the amount of $" + amount);
}
public void displayPaymentInfo() {
System.out.println("Payment of $" + amount +
" - Passenger: " + passenger.getEmailAddress() + ",
Driver: " + driver.getEmailAddress() +
", Status: " + (isProcessed ?
"Processed" : "Pending"));
}
public Passenger getPassenger() {
return passenger;
}
public Driver getDriver() {
return driver;
}
}
5) Código fuente: Trip
public class Trip {
private Passenger passenger;
private Driver driver;
private String startLocation;
private String endLocation;
private double distance;
private double fare;
private boolean isCompleted;
private Payment payment;
public Trip(Passenger passenger, Driver driver,
String startLocation, String endLocation, double
distance) {
this.passenger = passenger;
this.driver = driver;
this.startLocation = startLocation;
this.endLocation = endLocation;
this.distance = distance;
this.fare = calculateFare(distance);
this.isCompleted = false;
}
private double calculateFare(double distance) {
double baseFare = 2.50; // tarifa base
double costPerKm = 1.75; // costo por cada
kilómetro
return baseFare + (costPerKm * distance);
}
public void markAsCompleted() {
this.isCompleted = true;
this.payment = new Payment(passenger,
driver, fare); // Crear el pago al completar el
viaje
System.out.println("The trip has been
completed. Fare: $" + fare);
}
public void processPayment() {
if (payment != null && !payment.isProcessed)
{
payment.processPayment();
} else {
System.out.println("The payment has
already been processed or is not available.");
}
}
public void displayInfo() {
System.out.println("Trip from " +
startLocation + " to " + endLocation);
System.out.println("Passenger: " +
passenger.getEmailAddress() + ", Driver: " +
driver.getEmailAddress());
System.out.println("Distance: " + distance +
" km, Fare: $" + fare);
System.out.println("Status: " + (isCompleted
if (payment != null) {
payment.displayPaymentInfo();
}
}
public boolean isCompleted() {
return isCompleted;
}
public Driver getDriver() {
return driver;
}
public Passenger getPassenger() {
return passenger;
}
}
6) Código fuente: TransportPlatform
import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;
public class TransportPlatform {
private static List<Driver> drivers = new
ArrayList<>();
private static List<Passenger> passengers = new
ArrayList<>();
private static List<Trip> trips = new
ArrayList<>();
private static Scanner scanner = new
Scanner(System.in);
public static void main(String[] args) {
int option;
do {
displayMenu();
option = scanner.nextInt();
scanner.nextLine(); // Limpiar buffer
switch (option) {
case 1:
registerDriver();
break;
case 2:
registerPassenger();
break;
case 3:
showDrivers();
break;
case 4:
showPassengers();
break;
case 5:
findDriversByLocation();
break;
case 6:
requestTrip();
break;
case 7:
markTripAsCompleted();
break;
case 8:
rateDriver();
break;
case 9:
processTripPayment();
break;
case 10:
showPaymentHistory();
break;
case 0:
System.out.println("Exiting the
system...");
break;
default:
System.out.println("Invalid
option. Please try again.");
}
} while (option != 0);
}
private static void displayMenu() {
System.out.println("\n** Transport Platform
Menu **");
System.out.println("1. Register new
driver");
System.out.println("2. Register new
passenger");
System.out.println("3. Show all drivers");
System.out.println("4. Show all
passengers");
System.out.println("5. Search for available
drivers by location");
System.out.println("6. Request a trip");
System.out.println("7. Mark a trip as
completed");
System.out.println("8. Rate a driver");
System.out.println("9. Process trip
payment");
System.out.println("10. Show payment
history");
System.out.println("0. Exit");
System.out.print("Select an option: ");
}
private static void registerDriver() {
System.out.print("Enter the driver's name:
");
String name = scanner.nextLine();
System.out.print("Enter the driver's email:
");
String email = scanner.nextLine();
System.out.print("Enter the driver's
vehicle: ");
String vehicle = scanner.nextLine();
System.out.print("Enter the driver's
location: ");
String location = scanner.nextLine();
Driver newDriver = new Driver(name, email,
vehicle, location, true);
drivers.add(newDriver);
System.out.println("Driver registered
successfully.");
}
private static void registerPassenger() {
System.out.print("Enter the passenger's
name: ");
String name = scanner.nextLine();
System.out.print("Enter the passenger's
email: ");
String email = scanner.nextLine();
Passenger newPassenger = new Passenger(name,
email);
passengers.add(newPassenger);
System.out.println("Passenger registered
successfully.");
}
private static void showDrivers() {
if (drivers.isEmpty()) {
System.out.println("No drivers
registered.");
} else {
System.out.println("\nList of
drivers:");
for (Driver driver : drivers) {
driver.displayInfo();
}
}
}
private static void showPassengers() {
if (passengers.isEmpty()) {
System.out.println("No passengers
registered.");
} else {
System.out.println("\nList of
passengers:");
for (Passenger passenger : passengers) {
passenger.displayInfo();
}
}
}
private static void findDriversByLocation() {
System.out.print("Enter the location to
search for drivers: ");
String location = scanner.nextLine();
boolean found = false;
for (Driver driver : drivers) {
if
(driver.getEmailAddress().equalsIgnoreCase(location)
&& driver.isAvailable()) {
driver.displayInfo();
found = true;
}
}
if (!found) {
System.out.println("No available drivers
found in this location.");
}
}
private static void requestTrip() {
System.out.print("Enter the passenger's
name: ");
String passengerName = scanner.nextLine();
Passenger passenger =
findPassengerByName(passengerName);
if (passenger == null) {
System.out.println("Passenger not
found.");
return;
}
System.out.print("Enter the starting
location: ");
String startLocation = scanner.nextLine();
System.out.print("Enter the destination: ");
String endLocation = scanner.nextLine();
System.out.print("Enter the distance of the
trip (in km): ");
double distance = scanner.nextDouble();
scanner.nextLine(); // Limpiar buffer
Driver assignedDriver =
findAvailableDriver(startLocation);
if (assignedDriver != null) {
Trip newTrip = new Trip(passenger,
assignedDriver, startLocation, endLocation,
distance);
trips.add(newTrip);
assignedDriver.setAvailability(false);
System.out.println("Trip assigned
successfully.");
newTrip.displayInfo();
} else {
System.out.println("No available drivers
in the requested location.");
}
}
private static void markTripAsCompleted() {
System.out.print("Enter the passenger's
name: ");
String passengerName = scanner.nextLine();
Trip trip =
findOngoingTripByPassenger(passengerName);
if (trip != null) {
trip.markAsCompleted();
trip.getDriver().setAvailability(true);
} else {
System.out.println("No ongoing trip
found for this passenger.");
}
}
private static void rateDriver() {
System.out.print("Enter the passenger's
name: ");
String passengerName = scanner.nextLine();
Trip trip =
findCompletedTripByPassenger(passengerName);
if (trip != null) {
System.out.print("Enter a rating for the
driver (1 to 5): ");
int rating = scanner.nextInt();
scanner.nextLine(); // Limpiar buffer
trip.getDriver().addRating(rating);
System.out.println("Rating recorded.");
} else {
System.out.println("No completed trip
found for this passenger.");
}
}
private static void processTripPayment() {
System.out.print("Enter the passenger's
name: ");
String passengerName = scanner.nextLine();
Trip trip =
findCompletedTripByPassenger(passengerName);
if (trip != null && !trip.isCompleted()) {
trip.processPayment();
} else {
System.out.println("No completed trip
found for this passenger.");
}
}
private static void showPaymentHistory() {
System.out.print("Enter the name of the
person (passenger or driver): ");
String personName = scanner.nextLine();
for (Trip trip : trips) {
if
(trip.getPassenger().getEmailAddress().equalsIgnoreC
ase(personName) ||
trip.getDriver().getEmailAddress().equalsIgnoreCase(
personName)) {
trip.displayInfo();
}
}
}
private static Passenger
findPassengerByName(String name) {
for (Passenger passenger : passengers) {
if
(passenger.getFullName().equalsIgnoreCase(name)) {
return passenger;
}
}
return null;
}
private static Driver findAvailableDriver(String
location) {
for (Driver driver : drivers) {
if
(driver.getCurrentLocation().equalsIgnoreCase(locati
on) && driver.isAvailable()) {
return driver;
}
}
return null;
}
private static Trip
findOngoingTripByPassenger(String passengerName) {
for (Trip trip : trips) {
if
(trip.getPassenger().getFullName().equalsIgnoreCase(
passengerName) && !trip.isCompleted()) {
return trip;
}
}
return null;
}
private static Trip
findCompletedTripByPassenger(String passengerName) {
for (Trip trip : trips) {
if
(trip.getPassenger().getFullName().equalsIgnoreCase(
passengerName) && trip.isCompleted()) {
return trip;
}
}
return null;
}
}