El ejercicio del Cajero Automático en Java es uno de los ejercicios más interesantes para realizar, ya que podemos integrar diversos conceptos en un ejemplo concreto de la vida cotidiana. Por tal motivo quiero compartir el código de un cajero automático (básico), en el cual usaremos los cuadros de dialogo de java, para dar un ambiente algo gráfico, mas adelante compartiré uno «mas bonito» en el sentido de que sera con un formulario básico como el del siguiente ejemplo, botones, algo mas llamativo para el usuario.
Clase Que Contiene el Ejercicio
Ahora bien, estableceré los requisitos funcionales de la aplicación, inicialmente la aplicación tendrá una sola cuenta, esta cuenta contara con un valor inicial y una contraseña; la aplicación podrá mostrar el saldo de la cuenta, consignar un valor, retirar un valor y cambiar la clave. Al momento de retirar «dinero», este mostrará 5 valores opcionales: 5000, 10.000, 20.000, 50.000, 100.000, ademas de la opción de retirar un valor diferente a los mostrados. Se trabajaran con números enteros, si se desea trabajar con decimales pueden modificar el tipo de las variables 😉
Ademas de lo anterior se validaran si son números los que se ingresan como datos, si se ingresan las opciones correctas, si los valores a descontar no superan el limite mínimo a dejar en la cuenta como saldo (10.000), ademas una validación opcional que hice fue al cambiar la contraseña, si esta contenía menos de tres caracteres no podría ser modificada. Ahora habiendo definido lo que hará y que se manejara, veremos el código:
Clase Que Contiene el Método Principal
1 2 3 4 5 6 7 8 9 10 11 | package ejercajero; public class EjerCajero { public static void main(String[] args) { cajero2 trin = new cajero2(); //creacion del objeto para la manipulacion de los metodos de la clase cajero2 trin.menu();//invocacion del menu por medio del objeto trin System.exit(0); //cuando se sale del menu se finaliza la aplicacion } } |
package ejercajero; public class EjerCajero { public static void main(String[] args) { cajero2 trin = new cajero2(); //creacion del objeto para la manipulacion de los metodos de la clase cajero2 trin.menu();//invocacion del menu por medio del objeto trin System.exit(0); //cuando se sale del menu se finaliza la aplicacion } }
Clase Que Contiene el Ejercicio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | package ejercajero; import javax.swing.JOptionPane;//importacion necesaria para el uso de los cuadros de dialogo public class cajero2 { //variables globales para que puedan ser modificados de ser necesario int saldo=90000; //saldo inicial String clave="1234";//clave predeterminada public void menu(){//metodo que contiene el menu de la aplicacion String ax; int op=0; do{ ax = JOptionPane.showInputDialog(null, "1. Saldo n 2. Consignar n 3. Retirar n 4. Cambiar Clave n 5. Salir"); if(ax!=null && auxi.isNum(ax)){//validacion para el menu op = Integer.parseInt(ax); switch(op){ case 1: verSal(); break; case 2: consig(); break; case 3: retirar(); break; case 4: chanPass(); break; } }else{ JOptionPane.showMessageDialog(null, "Digite una opcion valida...."); } }while(op !=5);//cuando se digita 5 se finaliza la aplicacion } public void verSal(){//metodo para ver el saldo de la cuenta JOptionPane.showMessageDialog(null, "Tu saldo a la fecha es: "+saldo); } public void consig(){//metodo para realizar la consignacion String ax; int consig=0; ax = JOptionPane.showInputDialog(null, "Cuanto desea consginar? "); if((ax!=null) && !ax.equals("") && auxi.isNum(ax)){//triple validacion, si se ingreso algo, y si es numero lo ingresado consig = Integer.parseInt(ax); if(consig>0){//si el valor a consignar es mayor que 0 se realiza la consignacion saldo+=consig;//se suma el nuevo valor al saldo }else{ JOptionPane.showMessageDialog(null, "Consigne una cantidad mayor a 0 !!!"); } }else{ JOptionPane.showMessageDialog(null, "Ingrese un valor a consignar!!!"); } } public void retirar(){//metodo para retirar del saldo String ax; ax = JOptionPane.showInputDialog(null, "Digite su clave.... "); if(ax==null){//validacion por si se selecciona cancelar del cuadro de dialogo y evitar errores }else{ if(!ax.equals("")){ if(ax.equals(clave)){//si la clave digitada coincide con la clave ax = JOptionPane.showInputDialog(null, "a. 5000 n b. 10.000 n c. 20.000 n d. 50.000n e. 100.000n f. Ingresar valor", "CANTIDAD A RETIRAR", JOptionPane.INFORMATION_MESSAGE); if(ax!=null){ if(!ax.equals("")){ switch(ax){ case "a": if((saldo-5000>=10000)){//se verifica si al retirar queda con un saldo minimo de 10.000 saldo-=5000; } break; case "b": if((saldo-10000>=10000)){//se verifica si al retirar queda con un saldo minimo de 10.000 saldo-=10000; } break; case "c": if((saldo-20000>=10000)){//se verifica si al retirar queda con un saldo minimo de 10.000 saldo-=20000; } break; case "d": if((saldo-50000>=10000)){//se verifica si al retirar queda con un saldo minimo de 10.000 saldo-=50000; } break; case "e": if((saldo-100000>=10000)){//se verifica si al retirar queda con un saldo minimo de 10.000 saldo-=100000; } break; case "f": ax = JOptionPane.showInputDialog(null, "Digite el valor a retirar: "); if(!ax.equals("") && auxi.isNum(ax) && (Integer.parseInt(ax)>0) && (saldo-Integer.parseInt(ax)>=10000) ){ saldo-= Integer.parseInt(ax); } break; default: JOptionPane.showMessageDialog(null, "Digite una opcion valida", "OPCION INCORRECTA", JOptionPane.ERROR_MESSAGE); break; } } } } else{ JOptionPane.showMessageDialog(null, "La clave ingresada no coincide...."); } } } } public void chanPass(){//metodo para cambiar la contraseña String ax, cl; ax = JOptionPane.showInputDialog(null, "Digite su clave...."); if(ax!=null){ if(!ax.equals("")){ if(ax.equals(clave)){//si la clave digitada coincide con la clave que existe cl = JOptionPane.showInputDialog(null, "Digite su nueva clave"); if(cl!=null){ if(cl.length()>3){//si el tamaño de la nueva contraseña tiene mas de 3 caracteres se puede cambiar ax=null;//se elimina el valor contenido con anterioridad de la variable ax="Su anterior clave es:"+clave; clave=cl; ax+="nSu nueva clave es: "+clave; JOptionPane.showMessageDialog(null, ax); } else{ JOptionPane.showMessageDialog(null, "La clave que desea cambiar es muy corta..."); } } } else{ JOptionPane.showMessageDialog(null, "La clave ingresada no coincide...."); } } } } } |
package ejercajero; import javax.swing.JOptionPane;//importacion necesaria para el uso de los cuadros de dialogo public class cajero2 { //variables globales para que puedan ser modificados de ser necesario int saldo=90000; //saldo inicial String clave="1234";//clave predeterminada public void menu(){//metodo que contiene el menu de la aplicacion String ax; int op=0; do{ ax = JOptionPane.showInputDialog(null, "1. Saldo n 2. Consignar n 3. Retirar n 4. Cambiar Clave n 5. Salir"); if(ax!=null && auxi.isNum(ax)){//validacion para el menu op = Integer.parseInt(ax); switch(op){ case 1: verSal(); break; case 2: consig(); break; case 3: retirar(); break; case 4: chanPass(); break; } }else{ JOptionPane.showMessageDialog(null, "Digite una opcion valida...."); } }while(op !=5);//cuando se digita 5 se finaliza la aplicacion } public void verSal(){//metodo para ver el saldo de la cuenta JOptionPane.showMessageDialog(null, "Tu saldo a la fecha es: "+saldo); } public void consig(){//metodo para realizar la consignacion String ax; int consig=0; ax = JOptionPane.showInputDialog(null, "Cuanto desea consginar? "); if((ax!=null) && !ax.equals("") && auxi.isNum(ax)){//triple validacion, si se ingreso algo, y si es numero lo ingresado consig = Integer.parseInt(ax); if(consig>0){//si el valor a consignar es mayor que 0 se realiza la consignacion saldo+=consig;//se suma el nuevo valor al saldo }else{ JOptionPane.showMessageDialog(null, "Consigne una cantidad mayor a 0 !!!"); } }else{ JOptionPane.showMessageDialog(null, "Ingrese un valor a consignar!!!"); } } public void retirar(){//metodo para retirar del saldo String ax; ax = JOptionPane.showInputDialog(null, "Digite su clave.... "); if(ax==null){//validacion por si se selecciona cancelar del cuadro de dialogo y evitar errores }else{ if(!ax.equals("")){ if(ax.equals(clave)){//si la clave digitada coincide con la clave ax = JOptionPane.showInputDialog(null, "a. 5000 n b. 10.000 n c. 20.000 n d. 50.000n e. 100.000n f. Ingresar valor", "CANTIDAD A RETIRAR", JOptionPane.INFORMATION_MESSAGE); if(ax!=null){ if(!ax.equals("")){ switch(ax){ case "a": if((saldo-5000>=10000)){//se verifica si al retirar queda con un saldo minimo de 10.000 saldo-=5000; } break; case "b": if((saldo-10000>=10000)){//se verifica si al retirar queda con un saldo minimo de 10.000 saldo-=10000; } break; case "c": if((saldo-20000>=10000)){//se verifica si al retirar queda con un saldo minimo de 10.000 saldo-=20000; } break; case "d": if((saldo-50000>=10000)){//se verifica si al retirar queda con un saldo minimo de 10.000 saldo-=50000; } break; case "e": if((saldo-100000>=10000)){//se verifica si al retirar queda con un saldo minimo de 10.000 saldo-=100000; } break; case "f": ax = JOptionPane.showInputDialog(null, "Digite el valor a retirar: "); if(!ax.equals("") && auxi.isNum(ax) && (Integer.parseInt(ax)>0) && (saldo-Integer.parseInt(ax)>=10000) ){ saldo-= Integer.parseInt(ax); } break; default: JOptionPane.showMessageDialog(null, "Digite una opcion valida", "OPCION INCORRECTA", JOptionPane.ERROR_MESSAGE); break; } } } } else{ JOptionPane.showMessageDialog(null, "La clave ingresada no coincide...."); } } } } public void chanPass(){//metodo para cambiar la contraseña String ax, cl; ax = JOptionPane.showInputDialog(null, "Digite su clave...."); if(ax!=null){ if(!ax.equals("")){ if(ax.equals(clave)){//si la clave digitada coincide con la clave que existe cl = JOptionPane.showInputDialog(null, "Digite su nueva clave"); if(cl!=null){ if(cl.length()>3){//si el tamaño de la nueva contraseña tiene mas de 3 caracteres se puede cambiar ax=null;//se elimina el valor contenido con anterioridad de la variable ax="Su anterior clave es:"+clave; clave=cl; ax+="nSu nueva clave es: "+clave; JOptionPane.showMessageDialog(null, ax); } else{ JOptionPane.showMessageDialog(null, "La clave que desea cambiar es muy corta..."); } } } else{ JOptionPane.showMessageDialog(null, "La clave ingresada no coincide...."); } } } } }
Clase con Validación de Numero
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package ejercajero; public class auxi { public static boolean isNum(String a){//metodo para validar si es un numero try{ int b = Integer.parseInt(a); return true;//si se puede convertir a numero devuelve verdadero } catch(NumberFormatException e){ return false;//si no se puede convertir a numero devuelve falso } } } |
package ejercajero; public class auxi { public static boolean isNum(String a){//metodo para validar si es un numero try{ int b = Integer.parseInt(a); return true;//si se puede convertir a numero devuelve verdadero } catch(NumberFormatException e){ return false;//si no se puede convertir a numero devuelve falso } } }
Ejecución del Cajero Automático
El código se puede optimizar tratando de llevar a la realidad el funcionamiento de un verdadero cajero automático, al servir este para varios usuarios, una solución para esto es usar arreglos. Ademas pueden personalizar los cuadros de dialogo; espero que el anterior código sea de gran utilidad.
buen aporte
muy interesante
Donde se descarga
hasta el momento todo bien con el código, muy practico el ejercicio ademas, pero veo un pequeño detalle que dejo al aire amigo.
primero, yo le ingreso 10000 a la cuenta como por probar el programa, por lo tanto el saldo actuales 100.000.
hasta ahí todo esta bien.
a la hora de retirar… , supongamos que voy a retirar los 100.000, ingreso la contraseña y los retiro… Éxito, fue retirado.
pero una vez en el menú, Vuelvo a ver el saldo actual y los 100.000 siguen ahí, que puedo hacer?
Muy bueno. Gracias!!
excelente buen aporte amigos
Buen. Trabajo estpue do que publiques y ayudes más con estas programaciones
disculpe queria saber en que programa esta implementado?
excelente muy practico
como puedo descararlo
Debajo de «Estas a un paso de disfrutar del contenido ;)» tienes que realizar una acción social para ver el enlace de descarga.
Bacano
Disculpa usas una variable gt dentro del código pero no puedo localizar en donde la estas declarando, podrias ayudarme en eso?
Hola, disculpa pero al realizar la migracion del sitio muchas veces se cambian cosas como los signos > y < .... Voy a solucionar esto para corregir el error.
amigo me podrias facilitar con el codigo al correo eduitricio20@gmail.com te agredeciaria un monton
Hola saludos, me podrias regalar el codigo por favor a mi correo vican23@hotmail.com
Gracias por tremendo aporte.
No encuentro el link
Claro, solo tienes que dejar una acción social en el bloque para obtener el código de la aplicación que se encuentra en mega sin contraseña.
no funciona el link ayuda, necesito el programa
Hola amigo, ya se ha solucionado el inconveniente, saludos.
No encuentro el link del codigo donde está