Esta aplicación permite a los usuarios convertir montos de una moneda a otra utilizando tasas de cambio en tiempo real obtenidas de la API de ExchangeRate. Las tasas se basan en el Dólar estadounidense (USD) y permiten la conversión entre varias monedas, como Peso argentino (ARS), Real brasileño (BRL), y Sol peruano (PEN).
📚 Ver Documentación Completa - Roadmap v2.0, Arquitectura, Guías de Implementación y más.
Esta clase se encarga de interactuar con la API de ExchangeRate para obtener las tasas de cambio más recientes.
apiKey: Es la clave de API necesaria para autenticar las solicitudes a la API de tasas de cambio.urlApi: Es la URL de la API que se utiliza para obtener las tasas de cambio basadas en el dólar estadounidense.- Puedes obtener la
apiKeyy laurlApiExchangeRate-API
-
obtenerTasaDeCambio(String urlApi):- Realiza una solicitud HTTP a la API para obtener las tasas de cambio en formato JSON.
- Retorna el cuerpo de la respuesta como una cadena de texto en formato JSON.
- En caso de error, lanza una
RuntimeException.
-
getUrlApi():- Devuelve la URL de la API que se utiliza para realizar las consultas de tasas de cambio.
ConsultaTasaDeCambio consulta = new ConsultaTasaDeCambio();
String json = consulta.obtenerTasaDeCambio(consulta.getUrlApi());Esta clase se encarga de convertir montos de una moneda a otra utilizando las tasas de cambio obtenidas de la clase ConsultaTasaDeCambio.
consultaTasaDeCambio: Instancia de la claseConsultaTasaDeCambioque se utiliza para obtener las tasas de cambio desde la API.
convertir(String monedaOrigen, String monedaDestino, double monto):- Toma como parámetros el código de la moneda de origen, el código de la moneda de destino y el monto a convertir.
- Realiza la conversión utilizando las tasas de cambio de la API.
- Devuelve el monto convertido en la moneda de destino.
- Realiza una solicitud a la API para obtener las tasas de cambio en formato JSON.
- Extrae las tasas de las monedas especificadas.
- Calcula el monto convertido dividiendo el monto original entre la tasa de la moneda de origen y multiplicándolo por la tasa de la moneda de destino.
ConversorDeMoneda conversor = new ConversorDeMoneda();
double resultado = conversor.convertir("USD", "ARS", 100);
System.out.println("100 USD son " + resultado + " ARS");La clase HistorialConversiones gestiona un historial de conversiones realizadas, permitiendo agregar entradas y mostrarlas en un formato tabular.
import java.util.ArrayList;
import java.util.List;
public class HistorialConversiones {
private List<String> historial;
public HistorialConversiones() {
historial = new ArrayList<>();
}
// Agregar una entrada al historial
public void agregarConversion(String monedaOrigen, String monedaDestino, double montoOrigen, double montoDestino) {
String timestamp = java.time.LocalDateTime.now().toString();
String entrada = String.format("%s: %f %s => %f %s", timestamp, montoOrigen, monedaOrigen, montoDestino, monedaDestino);
historial.add(entrada);
}
// Mostrar el historial de conversiones
public void mostrarHistorial() {
System.out.println("Historial de Conversiones:");
System.out.printf("%-25s %-20s %-20s %-20s%n", "Fecha y Hora", "Monto Origen", "Moneda Origen", "Moneda Destino");
System.out.println("---------------------------------------------------------------------------");
for (String entrada : historial) {
String[] partes = entrada.split(": ");
String timestamp = partes[0];
String[] conversion = partes[1].split(" => ");
String[] montoOrigen = conversion[0].trim().split(" ");
String[] montoDestino = conversion[1].trim().split(" ");
System.out.printf("%-25s %-20s %-20s %-20s%n", timestamp, montoOrigen[0], montoOrigen[1], montoDestino[1]);
}
}
}Esta clase contiene el método main, que gestiona la interacción con el usuario y proporciona un menú para seleccionar las conversiones de moneda.
Muestra un menú con opciones de conversión de moneda, tales como:
- Dólar a Peso argentino.
- Peso argentino a Dólar.
- Dólar a Real brasileño.
- Real brasileño a Dólar.
- Dólar a Sol peruano.
- Sol peruano a Dólar.
Dependiendo de la opción seleccionada por el usuario, solicita un monto para convertir y llama al método convertir de la clase ConversorDeMoneda.
El ciclo continúa hasta que el usuario seleccione la opción de salir.
- El usuario selecciona "1" para convertir de Dólar a Peso argentino.
- El programa solicita un monto (por ejemplo, 100 USD).
- El programa realiza la conversión y muestra el resultado.
public class Principal {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ConversorDeMoneda conversor = new ConversorDeMoneda();
int opcion;
do {
// Menú de opciones
System.out.println("1) Dólar => Peso argentino");
System.out.println("2) Peso argentino => Dólar");
System.out.println("3) Dólar => Real brasileño");
System.out.println("4) Real brasileño => Dólar");
System.out.println("5) Dólar => Sol peruano");
System.out.println("6) Sol peruano => Dólar");
System.out.println("7) Mostrar historial de conversiones");
System.out.println("8) Salir");
System.out.println("Elija una opción válida: ");
System.out.println("*****************************************************");
System.out.printl(">>> ");
opcion = scanner.nextInt();
double monto;
switch (opcion) {
case 1:
System.out.print("Ingrese el monto en Dólares: ");
monto = scanner.nextDouble();
double pesos = conversor.convertir("USD", "ARS", monto);
System.out.println(monto + " USD son " + pesos + " ARS");
break;
case 7:
System.out.println("Saliendo...");
break;
default:
System.out.println("Opción no válida.");
}
} while (opcion != 7);
scanner.close();
}
}- Conversión entre múltiples monedas.
- Historial de conversiones.
- Soporte para tasas de cambio actualizadas.
- JDK 11 o superior.
- Conexión a Internet para acceder a la API de tasas de cambio.
- Clonar el repositorio:
git clone git@github.com:mysterio-wil/Challenge_ONE_Conversor-de-Moneda.git
Para compilar el proyecto, utiliza el siguiente comando:
javac -cp ".;lib/gson.jar" -d out src/*.javaPara ejecutar la aplicación, utiliza el siguiente comando:
java -cp "out;lib/gson.jar" Principal- Convertir 100 USD a ARS.
- Ver historial de conversiones.
ConsultaTasaDeCambio.java: Maneja las solicitudes a la API.ConversorDeMoneda.java: Realiza las conversiones de moneda.Principal.java: Interfaz de usuario en consola.
Las contribuciones son bienvenidas. Por favor, abre un issue o envía un pull request.
Este proyecto está bajo la Licencia MIT.
Desarrollado por: mysterio-wil
API de ExchangeRate-API
Para conocer el plan detallado de mejoras y nuevas funcionalidades, consulta la Documentación Completa del Roadmap v2.0.
- Externalizar API Key: Mover la API key a configuración externa para mejorar la seguridad
- Validación de Entrada Robusta: Prevenir crashes con entradas inválidas
- Persistencia del Historial: Guardar historial en JSON para que persista entre sesiones
- Manejo de Excepciones Mejorado: Implementar jerarquía de excepciones personalizadas
- Conversión entre Cualquier Par de Monedas: Soporte para todas las monedas disponibles en la API
- Caché de Tasas de Cambio: Reducir llamadas a la API y mejorar rendimiento
- Tests Unitarios: Cobertura de código > 80%
- Logging con SLF4J: Sistema de logs estructurado
- Interfaz Gráfica (JavaFX): GUI moderna e intuitiva
- Soporte Multiidioma (i18n): Español e inglés
- Gráficos de Tendencias: Visualización de evolución de tasas
- Modo Offline: Funcionalidad básica sin conexión a internet
Total: 135 tareas organizadas en 3 fases | Duración Estimada: 6 meses
📖 Ver Roadmap Completo | Guía de Implementación Fase 1 | Lista de Tareas
Existen otras opciones en el mercado de APIs de tasa de cambio que ofrecen versiones gratuitas, similares a ExchangeRate:
- Open Exchange Rates - Open Exchange Rates
- CoinGecko API - Most Comprehensive Cryptocurrency API | CoinGecko
Cada una de estas APIs tiene su propia documentación y características, lo que proporciona una variedad de opciones para enriquecer tu experiencia en el desarrollo del Conversor de Monedas. Explora estas opciones y elige aquella que mejor se adapte a tus objetivos y requisitos específicos.