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 { private String dni; private String nombre; private String apellidos; protected java.util.GregorianCalendar fechaIngreso;

public Empleado () { dni = "00000000"; nombre = "NN";

apellidos = "NA"; fechaIngreso = new

java.util.GregorianCalendar(1800,0,1);

}

public Empleado (String dni, String nombre, String apellidos, java.util.GregorianCalendar fechaIngreso) { this.dni = dni; this.nombre = nombre; this.apellidos = apellidos; this.fechaIngreso = fechaIngreso;

}

public void setDni (String dni) { this.dni = dni;

}

public String getDni () { return dni;

}

public void setNombre (String nombre) {

public String getNombre () { return nombre;

}

public void setApellidos (String apellidos) { this.apellidos = apellidos;

}

public String getApellidos () { return apellidos;

}

public void setFechaIngreso (java.util.GregorianCalendar fechaIngreso) { this.fechaIngreso = fechaIngreso;

}

public java.util.GregorianCalendar getFechaIngreso () { return fechaIngreso;

}

//@Override public String toString () { int dia, mes, año; dia = getFechaIngreso().get(java.util.Calendar.DAY_OF_ MONTH); mes = getFechaIngreso().get(java.util.Calendar.MONTH)

+1;

año = getFechaIngreso().get(java.util.Calendar.YEAR);

return "DNI: " + getDni() + "\nNombre y Apellidos: " + getNombre() + " " + getApellidos() + "\nFecha de ingreso: " + (dia<=9?"0"+dia:dia) + "/" + (mes<=9?"0"+mes:mes) + "/" + año;

}

}

//SUBCLASE Clase EContratado package entidades;

import java.util.Calendar; import java.util.GregorianCalendar;

public class EContratado extends Empleado { private float salarioB;

public EContratado () { super(); salarioB = 0.0f;

}

public EContratado (String dni, String nombre, String apellidos, java.util.GregorianCalendar fechaIngreso, float salarioB) { super(dni, nombre, apellidos, fechaIngreso); this.salarioB = salarioB;

}

public void setSalario (float salarioB) { this.salarioB = salarioB;

}

public float getSalario () { GregorianCalendar Actual = new GregorianCalendar(); int anios = Actual.get(Calendar.YEAR) - fechaIngreso.get(Calendar.YEAR);

if(fechaIngreso.get(Calendar.MONTH)>Actual.get( Calendar.MONTH) || fechaIngreso.get(Calendar.MONTH)==Actual.get( Calendar.MONTH) && fechaIngreso.get(Calendar.DAY_OF_MONTH)>Act ual.get(Calendar.DAY_OF_MONTH) ) anios--; switch(anios)

{

case 0: // break;

case 1:

case 2:

case 3: return 1.05f*salarioB; case 4:

case 5:

case 6:

case 7: return 1.10f*salarioB; case 8:

case 9:

case 10:

case 11:

case 12:

case 13:

case 14:

case 15: return 1.15f*salarioB; default: return 1.20f*salarioB;

}

}

@Override

public String toString () { return super.toString() + "\nSalario: " + getSalario();

}

}

//SUBCLASE Clase EDestajo package entidades;

public class EDestajo extends Empleado { private int clientesCaptados; public static final float salarioD = 130.05f;

public EDestajo () { super(); clientesCaptados = 0;

}

public EDestajo (String dni, String nombre, String apellidos, java.util.GregorianCalendar fechaIngreso, int clientesCaptados) { super(dni, nombre, apellidos, fechaIngreso); this.clientesCaptados = clientesCaptados;

}

public void setClientesCaptados (int clientesCaptados) { this.clientesCaptados = clientesCaptados;

}

public int getClientesCaptados () { return clientesCaptados;

}

 

//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: " + getSalario();

4. Salir */

*

}

}

Clase ListaEmpleados package datos;

import entidades.Empleado; import java.util.ArrayList;

package presentacion;

import datos.ListaEmpleados; import entidades.*; import java.util.GregorianCalendar; import java.util.Scanner;

public class Aplication {

public class ListaEmpleados { private ArrayList listaE; private int posicion; // Última posición.

int opt; ListaEmpleados ListaContratados = new

private static String Leer(String msje)

public ListaEmpleados () { listaE = new ArrayList(); posicion = -1;

ListaEmpleados(); ListaEmpleados ListaDestajos = new ListaEmpleados(); private static Scanner Lector = new

}

Scanner(System.in);

public void addEmpleado (Empleado empleado) { listaE.add(empleado);

public static final short CONTRATADO = 0; public static final short POR_DESTAJO = 1;

++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;

{

}

public int getPosicion () { return posicion;

}

@Override public String toString () { String cadena = ""; for(int i=0; i<=posicion; i++) cadena += "\n\tEmpleado " + (i+1) + ":\n" + listaE.get(i); return cadena;

}

}

String dni = Leer("Ingrese su DNI"); String nombre = Leer("Ingrese su nombre"); String apellidos = Leer("Ingrese sus apellidos"); System.out.println("Ingrese fecha de ingreso:"); int anio = Integer.parseInt( Leer("Año") ); int mes = Integer.parseInt( Leer("Mes (1- 12)") ); int dia = Integer.parseInt( Leer("Día") ); GregorianCalendar fechaIngreso = new

GregorianCalendar(anio,mes-1,dia);

if(Type == CONTRATADO)

{

int salarioB = Integer.parseInt(

Leer("Ingrese salario base") ); ListaContratados.addEmpleado( new EContratado(dni, nombre, apellidos, fechaIngreso, salarioB) );

break; case 3:

MostrarSalarios(); break; 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 empleados contratados: "); for(int i=0; i<=ListaContratados.getPosicion();

do{ opt = Menu(); 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();

++i)

System.out.println( ListaDestajos.getEmpleado(i) );

}

}

Clase AplicationRunner package presentacion;

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);

}