Story Transcript
SOLUCIONES CLASES JAVA 55-
Teniendo en cuenta las diferencias entre un lenguaje y otro, se pide adaptar el programa creado
en C# del ejercicio 50 al lenguaje Java y comprobar su funcionamiento. // -----------------------------------------------------// Modela la clase Programador, que es hija de Empleado // // Fecha: 01/02/2014 //Autor: Joaquin Alvarez // -----------------------------------------------------public class Programador extends Empleado { String lenguaje; public Programador(String lenguaje) { this.lenguaje = lenguaje; } public Programador(String nombre, String dni, int edad, boolean casado, double sueldo, String lenguaje)
{ super(nombre, dni, edad, casado, sueldo); this.lenguaje=lenguaje; } public void setLenguaje(String lenguaje) { this.lenguaje = lenguaje; } public String getLenguaje() { return lenguaje; } } //----------------------------------------------------------// Clase Programa. Prueba el funcionamiento de las // clases Empleado y Programador // // Fecha:01/02/2014 // Autor: Joaquin Alvarez // ----------------------------------------------------------public class Programa { public static void main(String[] args) { Programador Programador Programador Programador
objProgramador1 objProgramador2 objProgramador3 objProgramador4
= = = =
new new new new
Programador("Visual C++"); Programador("Gemma Cienfuegos", "57098765",21, false, 860, "Java"); Programador("Susana Llaneza", "10056234", 32, true , 1200, "Visual C#"); Programador("María Álvarez", "", 18, true, 0, "Phyton");
// Trabajamos con el programador1 objProgramador1.setNombre("Mercedes García"); objProgramador1.setEdad(43); objProgramador1.setDni("10867111"); objProgramador1.setCasado(true); objProgramador1.EstablecerSueldo(2700); objProgramador1.MostrarDatosEmpleado(); objProgramador2.AumentarSalario(5); objProgramador2.MostrarDatosEmpleado(); } }
56 Construye la clase CuentaCorriente, sabiendo que:
La clase dispone de los atributos públicos: saldo, nombre, dni del propietario, y limite en caso de tener números rojos. Las operaciones que pueden realizar los objetos de la clase son: o Crear la cuenta.- Se necesita el nombre y DNI del titular. El saldo inicial es cero. o Sacar dinero.- Sólo se podrá sacar dinero hasta el límite marcado para números rojos. o Ingresar dinero.- Se incrementa el saldo. o Mostrar saldo.- Muestra el saldo disponible.
//------------------------------------------------------------------------// Clase CuentaCorriente permite modelar una cuenta bancaria de un banco // Se pude ingresar dinero o sacar dinero de la cuenta. Se debe poder // mostrar el saldo existente. // // Autor: Joaquin Alvarez // Fecha: 01/02/2014 // ------------------------------------------------------------------------public class CuentaCorriente { public String nombre; public String dni; public float saldo; public float limite; // Método para crear una cuenta public CuentaCorriente(String nombre, String dni, float limite) { this.nombre = nombre; this.dni=dni; this.limite = limite; saldo=0; mensajeTitular("Cuenta creada correctamente"); } // Método para mostrar mensajes al titular private void mensajeTitular(String mensaje) { System.out.println(nombre + " " + dni + " " + mensaje); } // Método para ingresar dinero public void IngresarDinero (float cantidad) { if (cantidad > 0) { saldo += cantidad; mensajeTitular("Operación realizada correctamente"); } else mensajeTitular("No es posible ingresar una cantidad negativa"); } // Método para sacar dinero public void SacarDinero (float cantidad) { if (cantidad > 0) { if (saldo >= cantidad) { saldo += cantidad; mensajeTitular("Operación realizada correctamente"); } else { if (saldo+limite >= cantidad) { saldo -= cantidad; mensajeTitular("Operación realizada correctamente. Se queda en números rojos"); }
else mensajeTitular("La cantidad solicitada excede su límite"); } } else mensajeTitular("No es posible retirar una cantidad negativa"); } // Muestra el saldo de la cuenta public void MostrarSaldo() { mensajeTitular("Saldo: " + saldo); } } public class Programa { public static void main(String [] args) { // Creamos un objeto cuenta corriente CuentaCorriente miCuenta = new CuentaCorriente("José Antonio González","12345678Z",1000); // Ingresamos 1000 euros miCuenta.IngresarDinero(1000); // Mostramos el saldo miCuenta.MostrarSaldo(); // Intentamos sacar 6000 euros miCuenta.SacarDinero(6000); // Mostramos el saldo miCuenta.MostrarSaldo(); // Intentamos ingresar una cantidad negativa -500 miCuenta.IngresarDinero(-500); // Mostramos el saldo miCuenta.MostrarSaldo(); } }
57 Revisado
por el cliente la funcionalidad de la clase creada, se ve la necesidad de realizar
las siguientes modificaciones: o o o
Poder almacenar los últimos 5 movimientos que se hagan. Poder crear una cuenta con un saldo inicial. Que los atributos no sean accesibles
//------------------------------------------------------------------------// Clase CuentaCorriente permite modelar una cuenta bancaria de un banco // Se pude ingresar dinero o sacar dinero de la cuenta. Se debe poder // mostrar el saldo existente. // Autor: Joaquin Alvarez // Fecha: 01/02/2014 // // Modificación para almacenar los últimos 5 movimientos del cliente // Autor: Joaquin Alvarez // Fecha: 02/02/2014 // ------------------------------------------------------------------------public class CuentaCorriente { static int TOTALMOVIMIENTOS = 5; // Número máximo de movimientos String nombre; String dni; float saldo; float limite; String [] movimientos = new String [TOTALMOVIMIENTOS]; int indiceMovimiento; // Método para crear una cuenta sin saldo inicial public CuentaCorriente(String nombre, String dni, float limite) { this.nombre = nombre; this.dni=dni; this.limite = limite; this.saldo=0; this.indiceMovimiento=0; mensajeTitular("Cuenta creada correctamente"); } // Método para crear una cuenta con saldo inicial public CuentaCorriente(String nombre, String dni, float saldoInicial, float limite) { this.nombre = nombre; this.dni=dni; this.saldo=saldoInicial; this.limite = limite; this.indiceMovimiento=0; mensajeTitular("Cuenta creada correctamente"); } // Método para almacenar el movimiento private void insertaMovimiento(String mensaje) { if (indiceMovimiento == movimientos.length) { // Pierdo el más antiguo for (int i=0;i 0) { saldo += cantidad; insertaMovimiento("Ingreso de "+cantidad); mensajeTitular("Operación realizada correctamente"); } else mensajeTitular("No es posible ingresar una cantidad negativa"); } // Método para sacar dinero public void SacarDinero (float cantidad) { if (cantidad > 0) { if (saldo >= cantidad) { saldo += cantidad; insertaMovimiento("Reintegro de "+cantidad); mensajeTitular("Operación realizada correctamente"); } else { if (saldo+limite >= cantidad) { saldo -= cantidad; insertaMovimiento("Reintegro de "+cantidad); mensajeTitular("Operación realizada correctamente. Se queda en números rojos"); } else mensajeTitular("La cantidad solicitada excede su límite"); } } else mensajeTitular("No es posible retirar una cantidad negativa"); } // Mostrar Movimientos public void MostrarMovimientos() { System.out.println("Movimientos Realizados por " + nombre + " " + dni ); for (String texto: movimientos) System.out.println(" " + texto); } // Muestra el saldo de la cuenta public void MostrarSaldo() { mensajeTitular("Saldo: " + saldo); } } public class Programa { public static void main(String [] args) { // Creamos un objeto cuenta corriente, con saldo inicial de 6000 euros CuentaCorriente miCuenta = new CuentaCorriente("José Antonio González","12345678Z", 6000, 1000); // Ingresamos 1000 euros miCuenta.IngresarDinero(1000); // Retiramos 1500 euros
miCuenta.SacarDinero(1500); // Retiramos 2000 euros miCuenta.SacarDinero(2000); // Intentamos ingresar una cantidad negativa -500 miCuenta.IngresarDinero(-500); // Ingresamos 1000 euros miCuenta.IngresarDinero(1000); // Ingresamos 500 euros miCuenta.IngresarDinero(500); // Mostramos los movimientos miCuenta.MostrarMovimientos(); // Retiramos 3500 euros miCuenta.SacarDinero(3500); // Mostramos los movimientos miCuenta.MostrarMovimientos(); } }
58
Disponiendo de la clase CuentaCorriente, diseñar una aplicación para gestionar un
pequeño banco, de tal forma que supondremos que el banco sólo tiene N-clientes, donde ese número viene definido por una constante. Cada cuenta corriente se identifica para el BNI de su propietario. Para gestionar las cuentas en el banco se utiliza el menú siguiente: 1.- Nuevo cliente 2.- Ingresar dinero 3.- Sacar dinero 4.- Mostrar datos de la cuenta 5.- Salir //------------------------------------------------------------------------// Clase CuentaCorriente permite modelar una cuenta bancaria de un banco // Se pude ingresar dinero o sacar dinero de la cuenta. Se debe poder // mostrar el saldo existente. // // Autor: Joaquin Alvarez // Fecha: 01/02/2013 // // Modificación para almacenar los últimos 5 movimientos del cliente // Autor: Joaquin Alvarez // Fecha: 02/02/2013 // ------------------------------------------------------------------------public class CuentaCorriente { static int TOTALMOVIMIENTOS = 5; // Número máximo de movimientos String nombre; String dni; float saldo; float limite; String [] movimientos = new String [TOTALMOVIMIENTOS]; int indiceMovimiento; // Método para crear una cuenta sin saldo inicial public CuentaCorriente(String nombre, String dni, float limite) { this.nombre = nombre; this.dni=dni; this.limite = limite; this.saldo=0; this.indiceMovimiento=0; mensajeTitular("Cuenta creada correctamente"); } // Método para crear una cuenta con saldo inicial public CuentaCorriente(String nombre, String dni, float saldoInicial, float limite) { this.nombre = nombre; this.dni=dni; this.saldo=saldoInicial; this.limite = limite; this.indiceMovimiento=0; mensajeTitular("Cuenta creada correctamente"); } // Método para almacenar el movimiento private void insertaMovimiento(String mensaje) { if (indiceMovimiento == movimientos.length) { // Pierdo el más antiguo for (int i=0;i 0) { saldo += cantidad; insertaMovimiento("Ingreso de "+cantidad); mensajeTitular("Operación realizada correctamente"); } else mensajeTitular("No es posible ingresar una cantidad negativa"); } // Método para sacar dinero public void SacarDinero (float cantidad) { if (cantidad > 0) { if (saldo >= cantidad) { saldo += cantidad; insertaMovimiento("Reintegro de "+cantidad); mensajeTitular("Operación realizada correctamente"); } else { if (saldo+limite >= cantidad) { saldo -= cantidad; insertaMovimiento("Reintegro de "+cantidad); mensajeTitular("Operación realizada correctamente. Se queda en números rojos"); } else mensajeTitular("La cantidad solicitada excede su límite"); } } else mensajeTitular("No es posible retirar una cantidad negativa"); } // Mostrar Movimientos public void MostrarMovimientos() { System.out.println("Movimientos Realizados por " + nombre + " " + dni ); for (String texto: movimientos) System.out.println(" " + texto); } // Muestra el saldo de la cuenta public void MostrarSaldo() { mensajeTitular("Saldo: " + saldo); } }
//------------------------------------------------------------------------// Clase Banco // Simula el funcionamiento de un banco, permitiendo abrir cuentas bancarias // y hacer operaciones de ingreso o reintegro de dinero // // Autor: Joaquin Alvarez // Fecha: 01/02/2014 // ------------------------------------------------------------------------public class Banco { private CuentaCorriente [] clientes; private int indiceClientes; public Banco(int numeroMaximoClientes) { clientes = new CuentaCorriente[numeroMaximoClientes]; } // Comprobar su existe un cliente. Devuelve la posición en la tabla private int existeCliente(String dni) { int i=0; boolean salir=false; // Buscamos el dni entre todos los clientes while ((i < indiceClientes) && (clientes[i].compara(dni) == false)) i++; // Si no llegamos a recorrer toda la tabla el cliente existe if (i == indiceClientes) return -1; else return i; } // Insertar un nuevo cliente public void NuevoCliente(String nombre, String dni, float saldo, float limite) { // Comprobamos si hay sitio para un nuevo cliente if (indiceClientes < clientes.length) { // Comprobamos si el cliente ya existe en el banco if (existeCliente(dni) == -1) { clientes[indiceClientes] = new CuentaCorriente(nombre, dni, saldo, limite); indiceClientes++; } else System.out.println("El cliente ya está registrado"); } else System.out.println("Banco Completo. No se admiten más clientes"); } // Procesamos un ingreso de dinero de un cliente public void IngresarDinero(String dni, float cantidad) { int posicion; // Buscamos el cliente posicion = existeCliente(dni); if (posicion != -1) clientes[posicion].IngresarDinero(cantidad); else System.out.println("El cliente no está registrado"); } // Procesamos un ingreso de dinero de un cliente public void SacarDinero(String dni, float cantidad) { int posicion; // Buscamos el cliente posicion = existeCliente(dni);
if (posicion != -1) clientes[posicion].SacarDinero(cantidad); else System.out.println("El cliente no está registrado"); } public void MostrarDatosCuenta(String dni) { int posicion; // Buscamos el cliente posicion = existeCliente(dni); if (posicion != -1) { clientes[posicion].MostrarMovimientos(); clientes[posicion].MostrarSaldo(); } else System.out.println("El cliente no está registrado"); } } // Clase Programa. Prueba la clase CuentaCorriente public class Programa { static int TOTALCLIENTES = 10; public static void main(String [] args) { Programa58 miPrograma = new Programa58(); CuentaCorriente [] cliente = new CuentaCorriente[TOTALCLIENTES]; String [] tablaMenu = {"1 - Nuevo Cliente", "2 - Ingresar Dinero", "3 - Retirar Dinero", "4 - Mostrar Información", "5 - Salir"}; int opcion, indiceClientes; indiceClientes = 0; // Bucle repetitivo para el menu de opciones do { // Llamamos a un método que gestiona el menu de opciones opcion=miPrograma.gestionMenu(tablaMenu); switch (opcion) { case 1: miPrograma.NuevoCliente(cliente,indiceClientes); break; case 2: IngresarDinero() break; case 3: SacarDinero(); break; case 4: Mostrar(); break: } } while (opcion!=5); } public void NuevoCliente(CuentaCorriente [] tablaClientes, int indiceClientes) { if (indiceClientes 59) { horaSuma.mm= horaSuma.mm - 60; horaSuma.hh += 1; } // Si la suma pasa de 23, la hora pasa a 0 if (horaSuma.hh > 23) horaSuma.hh = horaSuma.hh - 24; // Devolvemos la hora de la suma return horaSuma; } // Comprobamos si las horas son iguales public boolean mismaHora(Hora hora1, Hora hora2) { if ((hora1.hh == hora2.hh) && (hora1.mm == hora2.mm) && (hora1.ss == hora2.ss)) return true;
else return false; } // Copiamos public void { this.hh this.mm this.ss }
la hora que se recibe como parámetro sobre el objeto copiaHora(Hora hora) = hora.hh; = hora.mm; = hora.ss;
// Compara dos horas. Devuelve -1 si la primera es menor, 0 si son iguales y 1 si la primera es mayor public int compara(Hora hora) { int segundos1, segundos2; int valorComparacion; // Pasamos las horas a segundos para hacer la comparación segundos1 = this.hh * 3600 + this.mm * 60 + this.ss; segundos2 = hora.hh * 3600 + hora.mm * 60 + hora.ss; // Comprobamos el valor de los segundos if (segundos1 < segundos2) valorComparacion = -1; else if (segundos1 > segundos2) valorComparacion = 1; else valorComparacion = 0; // Devolvemos el valor resultado de la comparación return valorComparacion; } }
public class Programa { public static void main(String[] args) { Hora hora1 = new Hora(23,59,59); Hora hora2 = new Hora(23,59,59); Hora horaSuma= new Hora(); // Visualizamos la hora1 hora1.verHora(); // Visualizamos la hora2 hora2.verHora(); // Visualizamos la suma de las dos horas horaSuma = horaSuma.suma(hora1, hora2); horaSuma.verHora(); // Cambiamos la hora1 hora1.setHora(5); hora1.setMinuto(15); hora1.setSegundo(30); // Copiamos la hora1 sobre la hora2 hora2.copiaHora(hora1); // Mostramos la hora2 hora2.verHora(); // Comparamos hora1 y hora2 if (hora1.compara(hora2) == -1) System.out.println("hora1 es antes que hora2"); else if (hora1.compara(hora2) == 1) System.out.println("hora1 es despues que hora2"); else System.out.println("hora1 es igual que hora2"); } }