Вы находитесь на странице: 1из 8

Universidad Nacional del Altiplano Puno

Escuela Profesional de Ingeniera de Sistemas


CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES

GUA ACADMICA Nro. 08

TEMA: SUBCLASES E INTERFACES (II)

Apellidos y Nombres: Nro. Matrcula: .

OBJETIVOS:

Aprender a programar en el Lenguaje Java

REQUERIMIENTOS:

PC con Windows.
jdk-6u10-windows-i586-p.exe
netbeans-6.5-ml-windows.exe

PARTE 1: EJEMPLOS DE JAVA

// Continuacin de la Gua Acadmica Nro 07

1.3 POLIMORFISMO

a. Ahora tenemos que crear la clase CLeer, para lo cual haga click derecho sobre el
package pcuenta ubicada en la parte izquierda superior del NetBeans, selecione la opcin
New, luego haga click en Java Class. El NetBeans le mostrar la Ventana New Java Class,
en la opcin Class Name coloque CLeer, fijese que el archivo que se va a crear pertenece
al proyecto pCuenta y al Package pcuenta, luego haga click en Finish.

b. Copie el siguiente cdigo (Archivo: CLeer.java):


package pcuenta;
import java.io.*;

public class CLeer


{
public static String dato()
{
String sdato = "";
try
{
// Definir un flujo de caracteres de entrada: flujoE
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader flujoE = new BufferedReader(isr);
// Leer. La entrada finaliza al pulsar la tecla Entrar
sdato = flujoE.readLine();
}
catch(IOException e)
{
System.err.println("Error: " + e.getMessage());
}
return sdato; // devolver el dato tecleado
}
public static short datoShort()
{
try
{
return Short.parseShort(dato());
}
catch(NumberFormatException e)
{
return Short.MIN_VALUE; // valor ms pequeo

Ing. Juan Antonio Flores Moroco 1


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
}
}
public static int datoInt()
{
try
{
return Integer.parseInt(dato());
}
catch(NumberFormatException e)
{
return Integer.MIN_VALUE; // valor ms pequeo
}
}
public static long datoLong()
{
try
{
return Long.parseLong(dato());
}
catch(NumberFormatException e)
{
return Long.MIN_VALUE; // valor ms pequeo
}
}
public static float datoFloat()
{
try
{
return Float.parseFloat(dato());
}
catch(NumberFormatException e)
{
return Float.NaN; // No es un Nmero; valor float.
}
}
public static double datoDouble()
{
try
{
return Double.parseDouble(dato());
}
catch(NumberFormatException e)
{
return Double.NaN; // No es un Nmero; valor double.
}
}
}

c. Ahora tenemos que crear la clase CBanco, para lo cual haga click derecho sobre el
package pcuenta ubicada en la parte izquierda superior del NetBeans, selecione la opcin
New, luego haga click en Java Class. El NetBeans le mostrar la Ventana New Java Class,
en la opcin Class Name coloque CBanco, fijese que el archivo que se va a crear pertenece
al proyecto pCuenta y al Package pcuenta, luego haga click en Finish.

d. Copie el siguiente cdigo (Archivo: CBanco.java):


package pcuenta;
import java.util.*;

// Clase CBanco: clase que mantiene una matriz de referencias a


// objetos de cualquier tipo de cuenta bancaria.
public class CBanco
{
// Matriz de objetos
private ArrayList<CCuenta> cuentas = new ArrayList<CCuenta>();

Ing. Juan Antonio Flores Moroco 2


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES

public CBanco()
{
// Reservar espacio para 100 elementos (elementos iniciales: cero)
cuentas.ensureCapacity(100);
}
public void aadir(CCuenta obj)
{
// Aadir un objeto a la matriz
cuentas.add(obj);
}
public boolean asignar( int i, CCuenta objeto )
{
// Asignar al elemento i de la matriz, un nuevo objeto
if (i >= 0 && i < cuentas.size())
{
cuentas.set(i, objeto);
return true;
}
else
{
System.out.println("ndice fuera de lmites");
return false;
}
}
public CCuenta obtener( int i )
{
// Devolver la referencia al objeto i de la matriz
if (i >= 0 && i < cuentas.size())
return cuentas.get(i);
else
{
System.out.println("ndice fuera de lmites");
return null;
}
}
public boolean eliminar(String s)
{
// Buscar la cuenta y eliminar el objeto
for ( int i = 0; i < cuentas.size(); ++i )
if (s.compareTo(cuentas.get(i).obtenerCuenta()) == 0)
{
cuentas.remove(i);
return true;
}
return false;
}
public int buscar(String str, int pos)
{
// Buscar un objeto y devolver su posicin
String nom, cuen;
if (str == null) return -1;
if (pos < 0) pos = 0;
for ( int i = pos; i < cuentas.size(); i++ )
{
// Buscar por el nombre
nom = cuentas.get(i).obtenerNombre();
if (nom == null)
continue;
// str est contenida en nom?
if (nom.indexOf(str) > -1)
return i;
// Buscar por la cuenta
cuen = cuentas.get(i).obtenerCuenta();
if (cuen == null)
continue;
// str est contenida en cuen?
if (cuen.indexOf(str) > -1)

Ing. Juan Antonio Flores Moroco 3


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
return i;
}
return -1;
}
public int longitud() { return cuentas.size(); }
}

e. Modifique, agregue y ejecute el siguiente cdigo (Archivo: CCuentaMain.java):


import java.io.*;
import java.util.*;

// Aplicacin para trabajar con la clase CBanco y la jerarqua


// de clases derivadas de CCuenta
public class CCuentaMain
{
// Para la entrada de datos se utiliza CLeer
public static CCuenta leerDatos(int op)
{
CCuenta obj = null;
String nombre, cuenta;
double saldo, tipoi, mant;
System.out.print("Nombre.................: ");
nombre = CLeer.dato();
System.out.print("Cuenta.................: ");
cuenta = CLeer.dato();
System.out.print("Saldo..................: ");
saldo = CLeer.datoDouble();
System.out.print("Tipo de inters........: ");
tipoi = CLeer.datoDouble();
if (op == 1)
{
System.out.print("Mantenimiento..........: ");
mant = CLeer.datoDouble();
obj = new CCuentaAhorro(nombre, cuenta, saldo, tipoi, mant);
}
else
{
int transex;
double imptrans;
System.out.print("Importe por transaccin: ");
imptrans = CLeer.datoDouble();
System.out.print("Transacciones exentas..: ");
transex = CLeer.datoInt();
if (op == 2)
obj = new CCuentaCorriente(nombre, cuenta, saldo, tipoi, imptrans, transex);
else
obj = new CCuentaCorrienteConIn(nombre, cuenta, saldo, tipoi, imptrans, transex);
}
return obj;
}
public static int men()
{
System.out.print("\n\n");
System.out.println("1. Saldo");
System.out.println("2. Buscar siguiente");
System.out.println("3. Ingreso");
System.out.println("4. Reintegro");
System.out.println("5. Aadir");
System.out.println("6. Eliminar");
System.out.println("7. Mantenimiento");
System.out.println("8. Salir");
System.out.println();
System.out.print(" Opcin: ");
int op;
do
op = CLeer.datoInt();

Ing. Juan Antonio Flores Moroco 4


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
while (op < 1 || op > 8);
return op;
}

public static void main(String[] args)


{
// Definir una referencia al flujo estndar de salida: flujoS
PrintStream flujoS = System.out;

// Crear un objeto banco vaco (con cero elementos)


CBanco banco = new CBanco();

int opcin = 0, pos = -1;


String cadenabuscar = null;
String cuenta;
double cantidad;
boolean eliminado = false;

do
{
opcin = men();
switch (opcin)
{
case 1: // saldo
flujoS.print("Nombre total o parcial, o cuenta ");
cadenabuscar = CLeer.dato();
pos = banco.buscar(cadenabuscar, 0);
if (pos == -1)
if (banco.longitud() != 0)
flujoS.println("bsqueda fallida");
else
flujoS.println("no hay cuentas");
else
{
flujoS.println(banco.obtener(pos).obtenerNombre());
flujoS.println(banco.obtener(pos).obtenerCuenta());
flujoS.println(banco.obtener(pos).estado());
}
break;
case 2: // buscar siguiente
pos = banco.buscar(cadenabuscar, pos + 1);
if (pos == -1)
if (banco.longitud() != 0)
flujoS.println("bsqueda fallida");
else
flujoS.println("no hay cuentas");
else
{
flujoS.println(banco.obtener(pos).obtenerNombre());
flujoS.println(banco.obtener(pos).obtenerCuenta());
flujoS.println(banco.obtener(pos).estado());
}
break;
case 3: // ingreso
case 4: // reintegro
flujoS.print("Cuenta: "); cuenta = CLeer.dato();
pos = banco.buscar(cuenta, 0);
if (pos == -1)
if (banco.longitud() != 0)
flujoS.println("bsqueda fallida");
else
flujoS.println("no hay cuentas");
else
{
flujoS.print("Cantidad: "); cantidad = CLeer.datoDouble();
if (opcin == 3)
banco.obtener(pos).ingreso(cantidad);
else

Ing. Juan Antonio Flores Moroco 5


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
banco.obtener(pos).reintegro(cantidad);
}
break;
case 5: // aadir
flujoS.print("Tipo de cuenta: 1-(CA), 2-(CC), 3-(CCI) ");
do
opcin = CLeer.datoInt();
while (opcin < 1 || opcin > 3);
banco.aadir(leerDatos(opcin));
break;
case 6: // eliminar
flujoS.print("Cuenta: "); cuenta = CLeer.dato();
eliminado = banco.eliminar(cuenta);
if (eliminado)
flujoS.println("registro eliminado");
else
if (banco.longitud() != 0)
flujoS.println("cuenta no encontrada");
else
flujoS.println("no hay cuentas");
break;
case 7: // mantenimiento
for (pos = 0; pos < banco.longitud(); pos++)
{
banco.obtener(pos).comisiones();
banco.obtener(pos).intereses();
}
break;
case 8: // salir
banco = null;
}
}
while(opcin != 8);
}
}
Resultados:

1.4 INTERFACES

a. Ahora tenemos que crear la clase CIFecha, para lo cual haga click derecho sobre el
package pcuenta ubicada en la parte izquierda superior del NetBeans, selecione la opcin
New, luego haga click en Java Class. El NetBeans le mostrar la Ventana New Java Class,
en la opcin Class Name coloque CIFecha, fijese que el archivo que se va a crear
pertenece al proyecto pCuenta y al Package pcuenta, luego haga click en Finish.

b. Copie el siguiente cdigo (Archivo: CIFecha.java):


package pcuenta;
import java.util.*;

// Interfaz IFecha: mtodos y constantes para obtener el da, mes y ao


public interface CIFecha
{
public final static int DIA_DEL_MES = Calendar.DAY_OF_MONTH;
public final static int MES_DEL_AO = Calendar.MONTH;
public final static int AO = Calendar.YEAR;

public abstract int da();


public abstract int mes();
public abstract int ao();
}

Ing. Juan Antonio Flores Moroco 6


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES

c. Modifique y agregue el siguiente cdigo (Archivo: CCuentaAhorro.java):


package pcuenta;
import java.util.*;

// Clase CCuentaAhorro: clase derivada de CCuenta


public class CCuentaAhorro extends CCuenta implements CIFecha
{
//...
//...
public void comisiones()
{
// Se aplican mensualmente por el mantenimiento de la cuenta
if (da() == 1) reintegro(cuotaMantenimiento); // fa[0] => da
}
public double intereses()
{
if (da() != 1) return 0.0; // fa[0] => da
// Acumular los intereses por mes slo los das 1 de cada mes
double interesesProducidos = 0.0;
interesesProducidos = estado() * obtenerTipoDeInters() / 1200.0;
ingreso(interesesProducidos);
// Devolver el inters mensual por si fuera necesario
return interesesProducidos;
}
// Implementacin de los mtodos de la interfaz CIFecha
public int da()
{
GregorianCalendar fechaActual = new GregorianCalendar();
return fechaActual.get(DIA_DEL_MES);
}
public int mes() { return 0; } // no se necesita
public int ao() { return 0; } // no se necesita
}

d. Modifique y agregue el siguiente cdigo (Archivo: CCuentaCorriente.java):


package pcuenta;
import java.util.*;

// Clase CCuentaCorriente: clase derivada de CCuenta


public class CCuentaCorriente extends CCuenta implements CIFecha
{
//...
//...
public void comisiones()
{
// Se aplican mensualmente por el mantenimiento de la cuenta
if (da() == 1)
{
int n = transacciones - transExentas;
if (n > 0) reintegro(n * importePorTrans);
transacciones = 0;
}
}
public double intereses()
{
if (da() != 1)
return 0.0;
// Acumular los intereses por mes slo los das 1 de cada mes
double interesesProducidos = 0.0;
// Hasta 3000 euros al 0.5%. El resto al inters establecido.
if (estado() <= 3000)
interesesProducidos = estado() * 0.5 / 1200.0;
else
{

Ing. Juan Antonio Flores Moroco 7


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
interesesProducidos = 3000 * 0.5 / 1200.0 +
(estado() - 3000) * obtenerTipoDeInters() / 1200.0;
}
ingreso(interesesProducidos);
// Este ingreso no debe incrementar las transacciones
decrementarTransacciones();
// Devolver el inters mensual por si fuera necesario
return interesesProducidos;
}
// Implementacin de los mtodos de la interfaz CIFecha
public int da()
{
GregorianCalendar fechaActual = new GregorianCalendar();
return fechaActual.get(DIA_DEL_MES);
}
public int mes() { return 0; } // no se necesita
public int ao() { return 0; } // no se necesita
}

e. Modifique y agregue el siguiente cdigo (Archivo: CCuentaCorriente.java):


package pcuenta;
import java.util.*;

// Clase CCuentaCorrienteConIn: clase derivada de CCuentaCorriente


public class CCuentaCorrienteConIn extends CCuentaCorriente
{
//...
//...
public double intereses()
{
if (da() != 1 || estado() < 3000) return 0.0;
// Acumular inters mensual slo los das 1 de cada mes
double interesesProducidos = 0.0;
interesesProducidos = estado() * obtenerTipoDeInters() / 1200.0;
ingreso(interesesProducidos);
// Este ingreso no debe incrementar las transacciones
decrementarTransacciones();
// Devolver el inters mensual por si fuera necesario
return interesesProducidos;
}
}

Ing. Juan Antonio Flores Moroco 8

Вам также может понравиться