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.
No me deja descargar, el link no funciona ayuda lo necesito
disculpe donde veo el codigo es que me salen muchos errores que he ido arreglando pero aun no puedo arreglarlos del todo
Descarga el código fuente, solo tienes que realizar una acción social para descargarlo, el link esta en mega sin acortadores. Solo pido la ayuda de compartir el post para que otras personas lo conozcan. Saludos.
hola buenas tardes, me intereso tu programa, me lo podrias pasar, gracias
Disculpa cual es el link de el proyecto «El cajero», gracias!
el link porfa
ola disculpa si pudiste obtener el link me lo prodrias mandar a mi correo::::isaac_lone@hotmail.com
el link de MEGA me pide clave, cual es la clave?
el link de MEGA pide una clave , cual es la clave?
En el link de MEGA pide clave, cual es la clave?
Muchas gracias por el programa pero tengo problemas en esta parte
if(ax!=null && auxi.isNum(ax)){
op = Integer.parseInt(ax);
switch(op){
case 1:
verSal(); break;
case 2:
consig(); break;
case 3:
retirar(); break;
case 4:
chanPass(); break;
}
Realice una aplicación que maneje una sencilla interfaz gráfica, métodos y funciones sobre alguno de estos dos temas propuestos:
1. Cajero Electrónico (Retira de dinero, Cambio de clave, Consulta de Saldo, Pago de Servicios Públicos)
2. Calculadora Científica (Sumar, Restar, Multiplicar, Dividir, + dos operaciones)
ayudame con eso
Disculpa cual es el la clave de cifrado para descargar el codigo?
Ninguna… Los archivos los dejo sin contraseña, solo pido a cambio una acción social 🙂
tiene contraaseña, quitela
MEG@ piden clave cual es ?
amigo me podrias facilitar con el codigo al correo eduunited@hotmail.com te agredeciaria un monton
hola amigo porque me marca error en if(cl.length()>3){
Hola @alexis, el problema es del código, ya que en algún momento se cambio el signo > por > , Solo debes cambiarlo y ya, ya esta corregido el código.
Hola como le hago para implentar otra clase llamada por ejemplo dinero con atributo valor. a tu ejercicio es my quetion??? ME PODRIAS AYUDAR….. Gracias de antemano.
Buen aporte, tengo unas consultas:
como podría implementar rmi en este proyecto y conectado a una base de datos
no se ve nada
Buena tarde, agradezco comparta su codigo, pero presente un inconveniente a la hora de escoger la opción de cambio de clave; en el codigo de la clase Cajero2:
if(cl.length ()>3)
{
ax = null;
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…»);
}
presenta un error, quiero saber que estoy haciendo mal.
Gracias.
Hola amigo, el único error que veo es el siguiente: if(cl.length ()>3), debería ser un operador de comparación, es decir:
= Igual
!= Diferente
< Menor que > Mayor que
>= Mayor o igual que
<= Menor o igual que Es decir, que en lugar de if(cl.length ()>3), debería ir if(cl.length >=3) o algo así 😀
Hola amigo, muy buen post. Solo tengo una duda, quería saber si los objetos > y & los declaras en algún lugar ó que significado tienen. Ya que al momento de pasar todo el código eso es lo único que me da error, por ejemplo en todos los case:
case «a)»:
if((saldo-5000>=10000)){
saldo-=5000;
}
break;
Y también en esta linea:
if(!ax.equals(«») &);&d; auxi.isNum(ax) && (Integer.parseInt(ax)>0) && (saldo)-Integer.parseInt(ax)>=10000))
Me serviria mucho tu ayuda, gracias.
Disculpa amigo, es código HTML de los símbolos & y >, ya esta corregido el código. Copia y prueba de nuevo. Saludos y gracias por tu comentario 😉
Esto viene siendo igual a una clase mock?
En la parte en la que pides la cantidad a retirar (¿»ax»?, eso que es?, por que no mejor escoger un identificador algo mas mnemonico como «retiro») estas haciendo «hardcoding»: http://es.wikipedia.org/wiki/Hard_code
En vez de checar explicitamente cada uno de los posibles cantidades y ademas limitarlo solo a esas 5 posibilidades: (5000, 10.000, 20.000, 50.000, 100.000).
Seria mejor algo así:
int minimo = 10000;
int retiro = JOptionPane.showInputDialog(null, «Digite la cantidad a retirar (en billetes multiplos de 50):»);
if ((retiro%50) != 0) {
JOptionPane.showMessageDialog(null, «La cantidad seleccionada: $» +retiro + «, no es multiplo de 50.»);
} else if ((saldo – retiro) >= minimo) {
slado -= retiro;
} else {
JOptionPane.showMessageDialog(null, «Fondos insuficientes, transaccion cancelada!»);
}
De esta manera el código es mas general, mas fácil de modificar, y varias lineas mas corto!
Hola, gracias por tomarte tiempo en analizar el codigo, seguramente te habras dado cuenta que «ax» aparece varias veces, pues bien, «ax» es una variable auxiliar, que recibe el string y luego es convertida por la variable que llevara la cantidad.
Lo del saldo, puede ser, PERO, en los cajeros que he retirado me ofrecen ciertas cantidades y no por multiplo como lo dices, por lo que lo hice mas a la realidad 😉 Por eso introduje de que el usuario ingresara su propia cantidad a retirar. Saludos 😀
Hola, disculpa como hago para copiar el programa y ponerlo solo en un javaaplication? , es decir para copiarlo en un nuevo proyecto y corra?
hola esta muy bueno tu código pero una pregunta bueno lo puse todo y al compilar me dice que no tiene metodo la clase podrías decirme cual seria el método para la clase de cajero2 yl la de auxi te lo voy a agradecer muchisimo
Hola, la clase que ejecuta el ejercicio es la primera que se encuentra en el post, si ejecutas las otras clases te saldra un mensaje, ya que son solo clases, el metodo que ejecuta todo se encuentra en la clase EjerCajero. Si quieres ejecutar directamente una clase especifica, tienes que copiar y pegar el metodo static void main, Espero te sea de utilidad.
Hola, podrías decirme cómo juntar las «clases» en el mismo código, soy nueva en esto de la programación y no sé cómo hacer para crear un sólo programa de tus 3 «clases» :S
GRACIAS!!!
Hola Lu, solo copias desde donde se inicia la clase (palabra reservada Class) hasta el final de las llaves y pegas todo en un solo archivo. Las importaciones las haces al comienzo, ya que usarías el concepto de Clases Internas.
Gracias!!!! 😀
hola!! me gusto mucho tu blog solo que no alcanzo a ver el codigo ya que esta muy a la derecha no se si me podrias ayudar en ese aspecto ya que me servira para un trabajo de mi escuela de antemano muchas gracias!!!!! 🙂
ya vi completo el codigo y felicitaciones por el aporte de este codigo!!! 🙂
Me salvaste de un proyecto
:’)
Una pregunta, tienes ya el codigo para el mismo cajero automatico pero con botones, me ayudaria mucho si me lo pasaras
De momento no, pero mas adelante lo publicaré, ya que por cuestiones de tiempo se me ha hecho imposible :/
Me alegra que te haya servido 😉
No me podrías explicar como colocar botones y que hagan esas funciones?.
Hola alberto, me alegra que te sigas interesando en el contenido del blog 🙂 Ya había compartido un ejercicio sencillo de como crear un formulario básico en java, también como usar los paneles en java, estos dos temas son importantes para crear una GUI medianamente aceptable, el diseño queda a tu parecer 😉 Supongo que llevaras tu diseño hasta lo mas real posible, así que podrías usas un JTextArea en la mitad (Center) para mostrar la salida o interactuar con el usuario, un consejo para el uso de esto es usar el método append de este objeto 😉 También había hecho una calculadora básica con GUI la cual interactivo con botones, guíate de aquel ejercicio para tu proyecto, espero pronto sacar ese tema adelante 🙂 Espero te sirva lo que te he comentado 🙂 Éxitos !
Excelente trabajo muy buen codigo 🙂
Como le harias por si el usuario ingresa mal el nip por que en un cajero ala 3ra vez quelo intentas la bloquea
Una variable booleana y un contador, cada vez que verificas el nip y es incorrecto le sumas al contador, cuando llegue a 3 la variable booleana cambia de valor para saber que el numero maximo ha llegado a su limite de intentos 😉 Entonces sabiendo esto tendras otro if que controle el valor booleano cada vez que ingrese a la parte de conexion.
excelente trabajo. De verdad se aprende mucho de personastan capacitadas como ustedes. Dios lo bendiga.
hola…exelente trabajo… y me funciona…. pero quisiera una pequeña ayuda… necesito incorporarle un base de datos…. como lo prodria hacer… y manejarlo por medio de jintenalframe… espero tu ayuda… y buen trabajo
Hola wilson, claro que te podría ayudar, ármate un buen diseño de la base de datos con la que quieras trabajar y te voy colaborando 😉 La interfaz podría ser muy sencilla, incluso sin el uso de JInternalFrame, imagínate paneles de botones a los lados, en el centro un cuadro de texto y listo 🙂
amigo ahora el problema es aca:
case 1:
verSal(); break;
case 2:
consig(); break;
case 3:
retirar(); break;
case 4:
chanPass(); break
me lo marca en rojo y me dice lo siguiente: non-static method consig() cannot be referenced from a static context
gracias disculpe la molestia bendiciones
buenos dias amigo necesito este excelente trabajo que hiciste mi hermano pero me da un problema con esto:
isNum me lo marca en rojo y no se porque soy nuevo en esto estoy aprendiendo ayudame por favor gracias le bendigo mucho
disculpe señor quiero pedirle ayuda por favor necesito un programa q me ordene por orden de merito a un grupo de 6 alumnos,almacenando su nombre y apellido, por favor;gracias por anticipado.
Hola que tal, muchas gracias por tu aporte, intente correrlo, pero no lo consegui me aparece un error en esta parte
del metodo retirar..
if(ax!=null){
if(!ax.equals(«»)){
switch(ax){ —–>// » Strings in switch are not supported in source 1.6″
case «a»:
me podrías ayudar con esto porfavor, tambien soy estudiante de la UCC, sede neiva. Mil Gracias :* DTB.
Hola marcela, por lo que veo el problema radica en la versión del JDK, prueba instalando la versión 7 o posterior si la hay 😉
hola que tal oyes tengo el mismo problema que marcela me marca error en
if(ax!=null){
if(!ax.equals(«»)){
switch(ax){
mas espesificamente en la ultima linea switch(ax){
y tengo la vercion 7.3 de java cres que sea por eso??
Mira, si estas usando la ultima versión, procura tener configurado bin de Java en el PATH del SO ó en el IDE, ademas, asegúrate de no tener la versión 6 o anterior en la carpeta de los programas. Para asegurarse de la versión en la terminal del SO dan: java -version.
Saludos maestro muchas gracias por el aporte. Excelente trabajo!
Mil gracias por el aporte.
Felicitaciones¡¡¡