Está en la página 1de 4

HERENCIA Y POLIMORFISMO

Enunciado: La empresa XYZ requiere una aplicación informática para administrar los datos de su personal.
Del personal se conoce: número de DNI, nombre, apellidos y fecha de ingreso.
Existen dos categorías de personal: el personal contratado y el personal a destajo. Los empleados
contratados tienen un sueldo básico y un porcentaje adicional en función al tiempo laborado: de 0 a 3 años:
5%; de 4 a 7 años: 10%; de 8 a 15 años: 15% y más de 15 años: 20%. Los empleados a destajo tienen un
número de clientes captados y un monto por cliente captado.

El desarrollo se compone de 3 paquetes: datos, entidades y presentación.


En el paquete datos se encuentra una clase llamada ListaEmpleados.
Dentro de entidades tenemos la clase padre Empleado de la que heredan las clases EContratado y EDestajo.
Finalmente, el paquete presentacion incluye las clases: Aplication y AplicationRunner.

SUPERCLASE this.nombre = nombre;


package entidades; }

public class Empleado { public String getNombre () {


private String dni; return nombre;
private String nombre; }
private String apellidos;
protected java.util.GregorianCalendar public void setApellidos (String apellidos) {
fechaIngreso; this.apellidos = apellidos;
}
public Empleado () {
dni = "00000000"; public String getApellidos () {
nombre = "NN"; return apellidos;
apellidos = "NA"; }
fechaIngreso = new
java.util.GregorianCalendar(1800,0,1); public void setFechaIngreso
} (java.util.GregorianCalendar fechaIngreso) {
this.fechaIngreso = fechaIngreso;
public Empleado (String dni, String nombre, }
String apellidos, java.util.GregorianCalendar
fechaIngreso) { public java.util.GregorianCalendar
this.dni = dni; getFechaIngreso () {
this.nombre = nombre; return fechaIngreso;
this.apellidos = apellidos; }
this.fechaIngreso = fechaIngreso;
} //@Override
public String toString () {
public void setDni (String dni) { int dia, mes, año;
this.dni = dni; dia =
} getFechaIngreso().get(java.util.Calendar.DAY_OF_
MONTH);
public String getDni () { mes =
return dni; getFechaIngreso().get(java.util.Calendar.MONTH)
} +1;
año =
public void setNombre (String nombre) { getFechaIngreso().get(java.util.Calendar.YEAR);
return "DNI: " + getDni() + "\nNombre y case 1:
Apellidos: " + getNombre() + case 2:
" " + getApellidos() + "\nFecha de case 3: return 1.05f*salarioB;
ingreso: " + case 4:
(dia<=9?"0"+dia:dia) + "/" + case 5:
(mes<=9?"0"+mes:mes) + "/" + año; case 6:
case 7: return 1.10f*salarioB;
}
case 8:
}
case 9:
case 10:
//SUBCLASE Clase EContratado case 11:
package entidades; case 12:
case 13:
import java.util.Calendar; case 14:
import java.util.GregorianCalendar; case 15: return 1.15f*salarioB;
default: return 1.20f*salarioB;
public class EContratado extends Empleado { }
private float salarioB; }

public EContratado () { @Override


super(); public String toString () {
salarioB = 0.0f; return super.toString() + "\nSalario: " +
} getSalario();
}
public EContratado (String dni, String nombre, }
String apellidos, java.util.GregorianCalendar
fechaIngreso, float salarioB) { //SUBCLASE Clase EDestajo
super(dni, nombre, apellidos, fechaIngreso); package entidades;
this.salarioB = salarioB;
} public class EDestajo extends Empleado {
private int clientesCaptados;
public void setSalario (float salarioB) { public static final float salarioD = 130.05f;
this.salarioB = salarioB;
} public EDestajo () {
super();
public float getSalario () { clientesCaptados = 0;
GregorianCalendar Actual = new }
GregorianCalendar();
int anios = Actual.get(Calendar.YEAR) - public EDestajo (String dni, String nombre,
fechaIngreso.get(Calendar.YEAR); String apellidos, java.util.GregorianCalendar
fechaIngreso, int clientesCaptados) {
if(fechaIngreso.get(Calendar.MONTH)>Actual.get( super(dni, nombre, apellidos, fechaIngreso);
Calendar.MONTH) this.clientesCaptados = clientesCaptados;
|| }
fechaIngreso.get(Calendar.MONTH)==Actual.get(
Calendar.MONTH) public void setClientesCaptados (int
&& clientesCaptados) {
fechaIngreso.get(Calendar.DAY_OF_MONTH)>Act this.clientesCaptados = clientesCaptados;
ual.get(Calendar.DAY_OF_MONTH) }
) anios--;
switch(anios) public int getClientesCaptados () {
{ return clientesCaptados;
case 0: // break; }
//APLICACIÓN
public float getSalario () { Clase Aplication
return salarioD*clientesCaptados; /*
} * Menú de opciones:
* 1. Registrar empleados contratados
@Override * 2. Registrar empleados a destajo
public String toString () { * 3. Mostrar salarios por empleado
return super.toString() + "\nSalario: " + * 4. Salir
getSalario(); */
}
} package presentacion;

Clase ListaEmpleados import datos.ListaEmpleados;


package datos; import entidades.*;
import java.util.GregorianCalendar;
import entidades.Empleado; import java.util.Scanner;
import java.util.ArrayList;
public class Aplication {
public class ListaEmpleados {
private ArrayList listaE; int opt;
private int posicion; // Última posición. ListaEmpleados ListaContratados = new
ListaEmpleados();
public ListaEmpleados () { ListaEmpleados ListaDestajos = new
listaE = new ArrayList(); ListaEmpleados();
posicion = -1; private static Scanner Lector = new
} Scanner(System.in);
public static final short CONTRATADO = 0;
public void addEmpleado (Empleado public static final short POR_DESTAJO = 1;
empleado) {
listaE.add(empleado); private static String Leer(String msje)
++posicion; {
} System.out.print(msje+": ");
return Lector.nextLine();
public Empleado getEmpleado (int pos) { }
if(pos>=0 && pos<=posicion)
return listaE.get(pos); private void Leer(int Type)
return null; {
} String dni = Leer("Ingrese su DNI");
String nombre = Leer("Ingrese su nombre");
public int getPosicion () { String apellidos = Leer("Ingrese sus
return posicion; apellidos");
} System.out.println("Ingrese fecha de
ingreso:");
@Override int anio = Integer.parseInt( Leer("Año") );
public String toString () { int mes = Integer.parseInt( Leer("Mes (1-
String cadena = ""; 12)") );
for(int i=0; i<=posicion; i++) int dia = Integer.parseInt( Leer("Día") );
cadena += "\n\tEmpleado " + (i+1) + ":\n" + GregorianCalendar fechaIngreso = new
listaE.get(i); GregorianCalendar(anio,mes-1,dia);
return cadena;
} if(Type == CONTRATADO)
} {
int salarioB = Integer.parseInt( break;
Leer("Ingrese salario base") ); case 3:
ListaContratados.addEmpleado( new MostrarSalarios();
EContratado(dni, nombre, apellidos, break;
fechaIngreso, salarioB) ); case 4:
}else{ System.out.println("Cerrando programa
int clientesObtenidos = Integer.parseInt( . . .");
Leer("Ingrese clientes reclutados") ); break;
ListaDestajos.addEmpleado( new default:
EDestajo(dni, nombre, apellidos, fechaIngreso, System.err.println("Al menos ingresa
clientesObtenidos) ); una opción válida ._.");
} }
} }

private void MostrarSalarios() public void Ejecutar () {


{
System.out.println("Salarios de los do{
empleados contratados: "); opt = Menu();
for(int i=0; i<=ListaContratados.getPosicion(); Accionar(opt);
++i) }while(opt!=4);
System.out.println(
ListaContratados.getEmpleado(i) ); }
System.out.println("Salarios de los }
empleados por destajo: ");
for(int i=0; i<=ListaDestajos.getPosicion(); Clase AplicationRunner
++i) package presentacion;
System.out.println(
ListaDestajos.getEmpleado(i) ); public class AplicationRunner {
}
public static void main(String[] args) {
new Aplication().Ejecutar();
private int Menu() }
{
System.out.print( }
"MENU DE OPCIONES\n"
+ "---- -- --------\n"
+ "1. Registrar empleados contratados.\n"
+ "2. Registrar empleados a destajo.\n"
+ "3. Mostrar salarios por empleado.\n"
+ "4. Salir.\n");
return Integer.parseInt( Leer("Seleccione
opción") );
}

private void Accionar(int opt)


{
switch(opt)
{
case 1:
Leer(CONTRATADO);
break;
case 2:
Leer(POR_DESTAJO);

También podría gustarte