Cajero automático Hector poleo

Pasted Oct 12, 2026, 9:02 PM1 file244 lines

Scan to open on your phone

Point a camera at the QR code - it opens this exact paste, no app needed.

https://codepastes.com/zzgsxty262mdz8dv
Cajero automático Hector poleo
//Se importa la clase Scanner para poder leer datos del usuario
import java.util.Scanner;
//Se importa la clase LocalDate para manejar la fecha actual en los comprobantes
import java.time.LocalDate;

public class Cajero {
    //ATRIBUTOS DE CLASE (Variables estáticas accesibles en todo el programa)

    //Almacena y actualiza el dinero disponible del usuario
    static double saldo = 1000.00;
    //Clave personal por defecto
    static int claveCorrecta = 1234;
    //Contador de los códigos de operación
    static int contadorOperacion = 1000;

    //Método principal: Punto de partida donde inicia la ejecución de la aplicación
    //static permite que se ejecute sin crear un objeto ya que se asocia a la clase
    public static void main(String[] args){
        //Se llama a la clase Scanner para leer datos de entrada
        Scanner scanner = new Scanner(System.in);

        //Variables dentro del método estático main(para usarse en el bucle y switch case
        int opcion;
        boolean salir = false;

        //Bucle principal para que el cajero se mantenga activo
        while (!salir) {
            System.out.println("\n--- CAJERO AUTOMÁTICO ---");
            System.out.println("1. Consultar Saldo");
            System.out.println("2. Retirar Efectivo");
            System.out.println("3. Depositar Efectivo");
            System.out.println("4. Cambiar Clave");
            System.out.println("5. Salir");
            System.out.print("Elige una opción: ");

            try {
                //Lee la entrada como texto y la convierte a entero para evitar errores en el menú
                String entrada = scanner.nextLine();
                opcion = Integer.parseInt(entrada);

                switch (opcion) {
                    case 1:
                        //Llama al método consultarSaldo y le pasa el scanner(objeto) desde aquí
                        consultarSaldo(scanner);
                        break;
                    case 2:
                        //Llama al método retirarEfectivo y le pasa el scanner(objeto) desde aquí
                        retirarEfectivo(scanner);
                        break;
                    case 3:
                        //Llama al método depositarEfectivo y le pasa el scanner(objeto) desde aquí
                        depositarEfectivo(scanner);
                        break;
                    case 4:
                        //Llama al método cambiarClave y le pasa el scanner(objeto) desde aquí
                        cambiarClave(scanner);
                        break;
                    case 5:
                        System.out.println("Gracias por usar el cajero. ¡Hasta luego!");
                        // Cambia a true para romper el while y terminar
                        salir = true;
                        break;
                    default:
                        System.out.println("Error: Opción no válida. Intente de nuevo.");
                }

            } catch (NumberFormatException e) {
            //Captura el error si el usuario ingresa letras u otros caracteres no numéricos en el menú
                System.out.println("Error: Debe ingresar un número entero válido.");
            }
        }

        scanner.close(); // Cierra el scanner al salir del programa
    }

    // --- MÉTODOS MODULARES ESTÁTICOS ---

    public static void consultarSaldo(Scanner scanner) {
        System.out.println("\n========================================");
        System.out.println("Su saldo actual es: " + saldo + " Bs.");
        System.out.println("========================================");

        //Pausa para que el usuario pueda leer
        System.out.println("\nPresiona ENTER para regresar al menú...");
        //Espera a que el usuario presione Enter
        scanner.nextLine();
    }

    public static void retirarEfectivo(Scanner scanner) {
        System.out.println("\n--- RETIRO DE EFECTIVO ---");

        try {
            //1. Solicita seleccionar el tipo de cuenta
            System.out.println("Seleccione el tipo de cuenta:");
            System.out.println("1. Cuenta Corriente");
            System.out.println("2. Cuenta de Ahorros");
            System.out.print("Opción: ");
            int tipoCuenta = Integer.parseInt(scanner.nextLine());

            if (tipoCuenta == 1 || tipoCuenta == 2) {
                String nombreCuenta;

                if (tipoCuenta == 1) {
                    nombreCuenta = "Cuenta Corriente";
                } else {
                    nombreCuenta = "Cuenta de Ahorros";
                }
                System.out.println("\n----------------------------------------");
                System.out.println("Cuenta seleccionada: " + nombreCuenta);
                System.out.println("----------------------------------------");

                //2. Solicita la clave personal y compara
                System.out.print("Ingrese su clave personal: ");
                int claveIngresada = Integer.parseInt(scanner.nextLine());

                if (claveIngresada != claveCorrecta) {
                    System.out.println("\nError: Clave incorrecta. Operación cancelada.");
                } else {
                    //Si la clave es correcta pasamos al monto
                    System.out.print("\nIngrese el monto que desea retirar: ");
                    double montoRetiro = Double.parseDouble(scanner.nextLine());


                    //3. Validación del monto de retiro
                    if (montoRetiro > saldo) {
                        System.out.println("\nError: Fondos insuficientes. Su saldo actual es: " + saldo + " Bs.");
                    } else if (montoRetiro <= 0) {
                        System.out.println("\nError: El monto a retirar debe ser mayor a cero.");
                    } else {
                        //Resta al saldo global
                        saldo = saldo - montoRetiro;
                        //Incrementa el contador de operación
                        contadorOperacion++;

                        //Impresión del comprobante obligatorio
                        System.out.println("\n========================================");
                        System.out.println("          COMPROBANTE DE RETIRO         ");
                        System.out.println("========================================");
                        System.out.println("Saldo restante: " + saldo + " Bs.");
                        System.out.println("Código de Operación: OP-" + contadorOperacion);
                        System.out.println("Fecha de Emisión: " + LocalDate.now());
                        System.out.println("========================================");
                    }
                }

            } else {
                System.out.println("\nError: Tipo de cuenta no válido. Operación cancelada.");
            }

        } catch (NumberFormatException e) {
            System.out.println("\nError: Debe ingresar valores numéricos válidos.");
        }

        System.out.print("\nPresiona ENTER para regresar al menú...");
        scanner.nextLine();
    }

    public static void depositarEfectivo(Scanner scanner) {
        System.out.println("\n--- DEPÓSITO DE EFECTIVO ---");

        try {
            //Solicita e ingresa el monto a depositar convirtiéndolo a double
            System.out.print("Ingrese el monto a depositar: ");
            double monto = Double.parseDouble(scanner.nextLine());

            //Valida que el monto ingresado sea positivo mayor a cero
            if (monto > 0) {
                //Suma al saldo global
                saldo = saldo + monto;
                //Incrementa en 1 el contador con cada operación
                contadorOperacion++;

                System.out.println("\n========================================");
                System.out.println("          ¡DEPÓSITO EXITOSO!         ");
                System.out.println("========================================");
                System.out.println("Nuevo saldo disponible: " + saldo + " Bs.");
                System.out.println("Código de Operación: OP-" + contadorOperacion);
                System.out.println("Fecha de Emisión: " + LocalDate.now());
                System.out.println("========================================");
            } else {
                System.out.println("Error: El monto debe ser mayor a cero.");
            }

        } catch (NumberFormatException e) {
            System.out.println("Error: Debe ingresar un valor numérico válido.");
        }

        System.out.println("\nPresiona ENTER para regresar al menú...");
        scanner.nextLine();
    }

    public static void cambiarClave(Scanner scanner) {
        System.out.println("\n--- CAMBIO DE CLAVE ---");
        try {
            //1. Solicitar la clave actual
            System.out.print("Ingrese su clave actual: ");
            int claveActual = Integer.parseInt(scanner.nextLine());

            //2. Validar si coincide con la clave registrada
            if (claveActual != claveCorrecta) {
                System.out.println("\nError: La clave actual es incorrecta. Operación cancelada.");
            } else {
                //3. Solicitar la nueva clave
                System.out.print("Ingrese su nueva clave (debe ser de 4 dígitos): ");
                int nuevaClave = Integer.parseInt(scanner.nextLine());

                //4. Validar que sea estrictamente de 4 dígitos (entre 1000 y 9999)
                if (nuevaClave >= 1000 && nuevaClave <= 9999) {

                    //5. Doble confirmación para evitar errores de tipeo
                    System.out.print("Confirme su nueva clave: ");
                    int confirmarClave = Integer.parseInt(scanner.nextLine());

                    if (nuevaClave == confirmarClave) {
                        //Actualizar la clave global
                        claveCorrecta = nuevaClave;
                        //Incrementa el contador de operación
                        contadorOperacion++;

                        //Comprobante de éxito
                        System.out.println("\n========================================");
                        System.out.println("      COMPROBANTE DE CAMBIO DE CLAVE      ");
                        System.out.println("========================================");
                        System.out.println("¡Su clave ha sido cambiada exitosamente!");
                        System.out.println("Código de Operación: OP-" + contadorOperacion);
                        System.out.println("Fecha de Emisión: " + LocalDate.now());
                        System.out.println("========================================");
                    } else {
                        System.out.println("\nError: Las claves no coinciden. Operación cancelada.");
                    }

                } else {
                    System.out.println("\nError: La clave debe tener exactamente 4 dígitos (entre 1000 y 9999).");
                }
            }

        } catch (NumberFormatException e) {
            System.out.println("\nError: Debe ingresar un número entero válido.");
        }

        System.out.print("\nPresiona ENTER para regresar al menú...");
        scanner.nextLine();
    }
}

11,270 chars · codepastes.com