Ejercicio
Simulador de Cajero Automático
Sección titulada «Simulador de Cajero Automático»Desarrollar un programa que simule el funcionamiento básico de un cajero automático, enfocado exclusivamente en la validación de retiros de dinero.
El objetivo principal del ejercicio es aplicar el manejo adecuado de errores y excepciones en Java.
Requisitos Generales
Sección titulada «Requisitos Generales»- Todo el código debe estar contenido en una única clase pública denominada
Cajero. - Todos los métodos deben ser
public static. - El código debe estar estructurado para facilitar su prueba unitaria.
- El proyecto debe estar vinculado a un repositorio en GitHub.
- Se deben seguir las buenas prácticas vistas en clases: nombres descriptivos, separación de lógica por método, y validación explícita de condiciones.
Funcionalidades
Sección titulada «Funcionalidades»- Retirar un monto
Método que simula el retiro de dinero desde un cajero automático. Este método debe verificar que:
- El monto ingresado sea positivo.
- El monto sea múltiplo de 1000 (para simular billetes).
- El monto no exceda el saldo disponible.
En caso de violar alguna de estas condiciones, se deberá lanzar una excepción específica utilizando throw.
-
Consultar Saldo
Método que permite obtener el saldo actual disponible. -
Depositar Dinero
Método que permite aumentar el saldo, validando que el monto a depositar sea positivo y múltiplo de 1000. -
Menú de Interacción
Se debe incluir una interfaz simple de consola que permita al usuario ejecutar las operaciones anteriores mediante un menú interactivo.
Código Base
Sección titulada «Código Base»import java.util.Scanner;
public class Cajero {
private static int saldo = 100000; private static Scanner scanner = new Scanner(System.in);
/** * Ejecuta el menú principal del programa y gestiona la interacción con el usuario. */ public static void menu() { // TODO: Implementar el código para gestionar la interacción con el usuario. }
/** * Muestra el menú principal con las opciones disponibles. */ private static void mostrarOpciones() { // TODO: Implementar el código para mostrar las opciones del menú en pantalla. }
/** * Ejecuta la acción correspondiente según la opción seleccionada. * @param opcion Opción ingresada por el usuario. */ private static void ejecutarOpcion(int opcion) { // TODO: Implementar la lógica para ejecutar la opción seleccionada. }
/** * Realiza un retiro de dinero si las condiciones son válidas. * @param monto Monto a retirar. */ public static void retirar(int monto) { // TODO: Validar monto positivo // TODO: Validar múltiplo de 1000
// TODO: Validar que el saldo sea suficiente // TODO: Restar el monto del saldo si todo es válido }
/** * Deposita un monto de dinero al saldo, si es válido. * @param monto Monto a depositar. */ public static void depositar(int monto) { // TODO: Validar monto positivo // TODO: Validar múltiplo de 1000 // TODO: Sumar el monto al saldo si es válido }
/** * Retorna el saldo disponible en la cuenta simulada. * @return Saldo actual. */ public static int obtenerSaldo() { // TODO: Retornar el valor actual del saldo return 0; }
/** * Reinicia el saldo a un valor inicial fijo (usado en pruebas). */ public static void reiniciarSaldo() { // TODO: Restablecer el valor del saldo a su valor original }}Pruebas Unitarias
Sección titulada «Pruebas Unitarias»Una vez implementada la lógica de negocio, se deberá generar un archivo de pruebas unitarias utilizando JUnit 5. Estas pruebas deben cubrir casos tanto exitosos como excepcionales.
| Prueba | ¿Qué verifica? | ¿Por qué tiene valor? |
|---|---|---|
testRetiroValido |
Que se descuente correctamente un monto válido del saldo. | Verifica el comportamiento correcto del flujo principal. |
testRetiroMontoNegativo |
Que lanzar una excepción si el monto es negativo. | Evita operaciones lógicas incorrectas. |
testRetiroExcedeSaldo |
Que no se permita retirar más de lo disponible. | Garantiza la integridad del sistema. |
testRetiroNoMultiploDeMil |
Que se rechace el retiro si no es múltiplo de 1000. | Emula la lógica real de dispensación de efectivo. |
testRetiroExactoTotalDisponible |
Que se pueda retirar el saldo completo sin errores. | Valida el límite inferior válido del sistema. |
testConsultarSaldo |
Que el saldo se obtenga correctamente. | Confirma la precisión del método de consulta. |
testDepositoValido |
Que se pueda aumentar el saldo con un monto válido. | Evalúa el flujo de incremento correcto. |
testDepositoNegativo |
Que se rechace un depósito con monto negativo. | Previene inconsistencias lógicas. |
testDepositoNoMultiplo |
Que se rechace un depósito si no es múltiplo de 1000. | Asegura coherencia con las reglas del sistema. |