Este documento describe la implementación de clases para empleados, incluyendo las clases padre Empleado y sus subclases Operario y Administrativo. Se definen atributos, constructores, métodos get y set para encapsular datos, y métodos para calcular el sueldo base, bonificaciones, descuentos y sueldos bruto y neto. También incluye una interfaz Constantes y actividades en Android para calcular el sueldo neto de operarios y administrativos.
Descripción del caso de uso mediante UML:
El diagrama de casos de uso representa la forma en como un Cliente (Actor) opera con el sistema en desarrollo, además de la forma, tipo y orden en como los elementos interactúan (operaciones o casos de uso).
Descripción del caso de uso mediante UML:
El diagrama de casos de uso representa la forma en como un Cliente (Actor) opera con el sistema en desarrollo, además de la forma, tipo y orden en como los elementos interactúan (operaciones o casos de uso).
Ejercicio 2
Se quiere diseñar una base de datos relacional que almacene información relativa a los zoos existentes en el mundo, así como las especies animales que éstos albergan. De cada zoo se conoce el nombre, ciudad y país donde se encuentra, tamaño (en m2) y presupuesto anual. De cada especie animal se almacena el nombre vulgar y nombre científico, familia a la que pertenece y si se encuentra en peligro de extinción.
Además, se debe guardar información sobre cada animal que los zoos poseen, como su número de
Identificación, especie, sexo, año de nacimiento, país de origen y continente.
animal{ numidentificacion,especie, nombrevulgar,nombrecientifico,familiapertece,sexo,año,nacimiento,paisorigen,continente,peligroextincion
Esta presentación le pertenece a Tania Landivar.
Las estructuras de datos lineales (vectores ) obliga afijar por adelantado el espacio a ocupar en memoria, de modo que, cuando se desea añadir un nuevo elemento que rebase el tamaño prefijado del array, no es posible realizar la operación sin que se produzca un error en tiempo de ejecución, para evitar esto se hace uso de las listas enlazadas.
Una lista enlazada es una colección o secuencia de elementos llamados nodos, dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un “enlace” o “referencia”.
Ejercicio 2
Se quiere diseñar una base de datos relacional que almacene información relativa a los zoos existentes en el mundo, así como las especies animales que éstos albergan. De cada zoo se conoce el nombre, ciudad y país donde se encuentra, tamaño (en m2) y presupuesto anual. De cada especie animal se almacena el nombre vulgar y nombre científico, familia a la que pertenece y si se encuentra en peligro de extinción.
Además, se debe guardar información sobre cada animal que los zoos poseen, como su número de
Identificación, especie, sexo, año de nacimiento, país de origen y continente.
animal{ numidentificacion,especie, nombrevulgar,nombrecientifico,familiapertece,sexo,año,nacimiento,paisorigen,continente,peligroextincion
Esta presentación le pertenece a Tania Landivar.
Las estructuras de datos lineales (vectores ) obliga afijar por adelantado el espacio a ocupar en memoria, de modo que, cuando se desea añadir un nuevo elemento que rebase el tamaño prefijado del array, no es posible realizar la operación sin que se produzca un error en tiempo de ejecución, para evitar esto se hace uso de las listas enlazadas.
Una lista enlazada es una colección o secuencia de elementos llamados nodos, dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un “enlace” o “referencia”.
1. Problema
Una clase abstracta de nombre Empleado que tiene los siguientes atributos: apellidos, nombres, DNI. Además construya sus
métodos get y set (Encapsulamiento) y también declare los métodos abstractos como sueldo base y bonificación, además
construya métodos no abstractos como descuentos, cálculo del sueldo bruto: sueldo base + bonificación y del sueldo neto
que se calcula de: sueldo bruto – descuentos.
Construya una interface que permita manejar las siguientes constantes, el descuento de porcentajes del 17% para el AFP.
Que serán solo aplicables a la subclase Operario y Administrativo.
Luego construya la subclase Operario de la clase Empleado que tiene los atributos como: Código , categoría (A, B y C),
Turno (Mañana, tarde y noche), horas adicionales laborables. Construya su constructor y los metodos setter y get
(encapsulamiento). Para esta clase desarrolle los métodos abstractos heredados y que permitan hacer lo siguiente:
El sueldo base se calcula de la siguiente tabla
Categoría SUELDO BASE
MAÑANA TARDE NOCHE
A 1200 1300 1800
B 1400 1500 2000
C 1600 1700 2200
Las bonificaciones al operario se realizan según las horas adicionales laborables por cada hora adicional al
operario le pagan 20 soles cualquiera que sea su categoría y su horario de laboral.
Luego construya una subclase Administrativo de la clase Empleado que tendrá los atributos como: Código,
Categoría (Secretaria y Asistente), Condición (Contratado, Estable, Servicios No personales). Construya su
constructor y los métodos setter y getter (encapsulamiento). Para esta clase desarrolle los métodos abstractos
heredados y que permitan hacer lo siguiente:
El sueldo base se calcula de la siguiente tabla
Sueldo base
Categoría
Contratado Estable
Servicios no
Personales
Secretaria 2000 3000 1800
Asistente 2500 3900 2200
Los administrativos reciben una bonificación de 15% y 20% según la categoria
El descuento se aplica de acuerdo a las constantes establecidas.
Clases a Implementar
+SueldoBase() : double
+Bonificacion() : double
+Descuento() : double
+SueldoBruto() : double
+SueldoNeto() : double
-apellidos : string
-nombres : string
-dni : string
Empleado
+SueldoBase() : double
+Bonificacion() : double
-codigo : string
-categoria : char
-turno : char
-horasadicionales : int
Operario
+afp() : double
«interface»
Constantes
+SueldoBase() : double
+Bonificacion() : double
-codigo : string
-categoria : char
-condicion : char
Administrativo
2. //clase padre EMPLEADO
public abstract class Empleado {
//atributos privados
private String apellidos;
private String nombres;
private String dni;
//constructor
public Empleado(String apellidos, String nombres, String dni) {
this.apellidos = apellidos;
this.nombres = nombres;
this.dni = dni;
}
//encapsulamiento
//se hace por cada atributo
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public String getNombres() {
return nombres;
}
public void setNombres(String nombres) {
this.nombres = nombres;
}
public String getDNI() {
return dni;
}
public void setDNI(String dni) {
this.dni = dni;
}
//metodos abstractos
//se definen en la clase hija
public abstract double SueldoBase();
public abstract double Bonificacion();
//metodos no abstractos
public double Descuento()
{
return this.SueldoBase()*Constantes.afp;
}
public double SueldoBruto()
{
return this.SueldoBase()+this.Bonificacion();
}
public double SueldoNeto()
{
return this.SueldoBruto()-this.Descuento();
}
}
3. //clase hija ADMINISTRATIVO
public class Administrativo extends Empleado {
//atributos privados
private String codigo;
private char categoria;
private char condicion;
//constructor
public Administrativo(String codigo,String apellidos, String nombres, String dni,
char categoria, char condicion) {
super(apellidos, nombres, dni);
this.codigo = codigo;
this.categoria = categoria;
this.condicion = condicion;
}
//encapsulamiento
//se hace por cada atributo
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public char getCategoria() {
return categoria;
}
public void setCategoria(char categoria) {
this.categoria = categoria;
}
public char getCondicion() {
return condicion;
}
public void setCondicion(char condicion) {
this.condicion = condicion;
}
//metodos definidos de la clase PADRE
@Override
public double SueldoBase() {
// TODO Auto-generated method stub
int sueldobase=0;
switch (this.categoria)
{
case 'S':
{
switch (this.condicion)
{
case 'C':{sueldobase= 2000; break;}
case 'E':{sueldobase= 3000; break;}
case 'S':{sueldobase= 1800; break;}
}
}break;
case 'A':
{
switch (this.condicion)
4. {
case 'C':{sueldobase= 2500; break;}
case 'E':{sueldobase= 3900; break;}
case 'S':{sueldobase= 2200; break;}
}
}break;
}
return sueldobase;
}
@Override
public double Bonificacion() {
// TODO Auto-generated method stub
double bonificacion=0;
switch (this.categoria)
{
case 'S':{bonificacion=0.15; break;}
case 'T':{bonificacion= 0.2; break;}
}
return this.SueldoBase()*bonificacion;
}
}
//interface CONSTANTES
public interface Constantes {
double afp=0.17;
}
5. //clase hija OPERARIO
public class Operario extends Empleado {
//atributos privados
private String codigo;
private char categoria;
private char turno;
private int horasadicionales;
//constructor
public Operario(String apellidos, String nombres, String dni,
String codigo, char categoria, char turno, int horasadicionales) {
super(apellidos, nombres, dni);
this.codigo = codigo;
this.categoria = categoria;
this.turno = turno;
this.horasadicionales = horasadicionales;
}
//encapsulamiento
//se hace por cada atributo
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public char getCategoria() {
return categoria;
}
public void setCategoria(char categoria) {
this.categoria = categoria;
}
public char getTurno() {
return turno;
}
public void setTurno(char turno) {
this.turno = turno;
}
public int getHorasadicionales() {
return horasadicionales;
}
public void setHorasadicionales(int horasadicionales) {
this.horasadicionales = horasadicionales;
}
//metodos definidos de la clase PADRE
@Override
public double SueldoBase() {
// TODO Auto-generated method stub
int sueldobase=0;
switch (this.categoria)
{
case 'A':
{
6. switch (this.turno)
{
case 'M':{sueldobase= 1200; break;}
case 'T':{sueldobase= 1300; break;}
case 'N':{sueldobase= 1800; break;}
}
}break;
case 'B':
{
switch (this.turno)
{
case 'M':{sueldobase= 1400; break;}
case 'T':{sueldobase= 1500; break;}
case 'N':{sueldobase= 2000; break;}
}
}break;
case 'C':
{
switch (this.turno)
{
case 'M':{sueldobase= 1600; break;}
case 'T':{sueldobase= 1700; break;}
case 'N':{sueldobase= 2200; break;}
}
}break;
}
return sueldobase;
}
@Override
public double Bonificacion() {
// TODO Auto-generated method stub
return this.horasadicionales*20;
}
}
7. Considerar dos actividades para el diseño de las intefaces en android, encontrar el sueldo netoa pagar por cada operario y
administrativo
Activity OPERARIO
8. //Codigo JAVA para activity operario
public class activity_operario extends Activity {
//declaro los controles del activity
EditText edtCodigo;
EditText edtApellidos;
EditText edtNombres;
EditText edtDNI;
EditText edtHorasadicionales;
TextView txvSueldoNeto;
Spinner spnCategoria;
Spinner spnTurno;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//establesco el activity que se va a mostrar
setContentView(R.layout.activity_operario);
//enlazo los controles del activity
edtCodigo= (EditText)findViewById(R.id.edtCodigo);
edtApellidos= (EditText)findViewById(R.id.edtApellidos);
edtNombres= (EditText)findViewById(R.id.edtNombres);
edtDNI= (EditText)findViewById(R.id.edtDNI);
edtHorasadicionales= (EditText)findViewById(R.id.edtHorasadicionales);
txvSueldoNeto= (TextView)findViewById(R.id.txvSueldoNeto);
spnCategoria= (Spinner)findViewById(R.id.spnCategoria);
spnTurno= (Spinner)findViewById(R.id.spnCondicion);
//lleno el Spiner(COMBO) de las categorias
String []Categorias={"A","B","C"};
ArrayAdapter<String> opcionesCategoria=new
ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,Categorias);
spnCategoria.setAdapter(opcionesCategoria);
//lleno el Spiner(COMBO) de los turnos
String []Turnos={"Mañana","Tarde","Noche"};
ArrayAdapter<String> opcionesTurno=new
ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,Turnos);
spnTurno.setAdapter(opcionesTurno);
}
//metodo que calcula el sueldo neto
public void Calcular(View view)
{
//creo un objeto de la clase Operario
Operario operario=new Operario( edtApellidos.getText().toString(),
edtNombres.getText().toString(),
edtDNI.getText().toString(),
edtCodigo.getText().toString(),
spnCategoria.getSelectedItem().toString().charAt(0),
spnTurno.getSelectedItem().toString().charAt(0),
Integer.parseInt(edtHorasadicionales.getText().toString())
);
txvSueldoNeto.setText("Sueldo Neto: S/."+operario.SueldoNeto());
}
//esto se genera automaticamente obviar
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
10. //Codigo JAVA para activity operario
public class activity_administrativo extends Activity {
//declaro los controles del activity
TextView txvCodigo;
EditText edtApellidos;
EditText edtNombres;
EditText edtDNI;
TextView txvSueldoNeto;
Spinner spnCategoria;
Spinner spnCondicion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//establesco el activity que se va a mostrar
setContentView(R.layout.activity_administrativo);
//enlazo los controles del activity
txvCodigo= (TextView)findViewById(R.id.txvCodigo);
edtApellidos= (EditText)findViewById(R.id.edtApellidos);
edtNombres= (EditText)findViewById(R.id.edtNombres);
edtDNI= (EditText)findViewById(R.id.edtDNI);
txvSueldoNeto= (TextView)findViewById(R.id.txvSueldoNeto);
spnCategoria= (Spinner)findViewById(R.id.spnCategoria);
spnCondicion= (Spinner)findViewById(R.id.spnCondicion);
//lleno el Spiner(COMBO) de las categorias
String []Categorias={"Secretaria","Asistente"};
ArrayAdapter<String> opcionesCategoria=new
ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,Categorias);
spnCategoria.setAdapter(opcionesCategoria);
//lleno el Spiner(COMBO) de las condiciones
String []Condiciones={"Contratado","Estable","Servicios no personales"};
ArrayAdapter<String> opcionesCondiciones=new
ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,Condiciones);
spnCondicion.setAdapter(opcionesCondiciones);
}
//metodo que calcula el sueldo neto
public void Calcular(View view)
{
//creo un objeto de la clase Administrativo
Administrativo administrativo=new Administrativo(edtApellidos.getText().toString(),
edtNombres.getText().toString(),
edtDNI.getText().toString(),
spnCategoria.getSelectedItem().toString().charAt(0),
spnCondicion.getSelectedItem().toString().charAt(0)
);
txvCodigo.setText(administrativo.getCodigo());
txvSueldoNeto.setText("Sueldo Neto: S/."+administrativo.SueldoNeto());
}
//esto se genera automaticamente obviar
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}