Comencemos creando las interfaces, por ejemplo IOperacionEmpleado
public interface IOperacionEmpleado {
public Empleado crearEmpleado();
public void listarEmpleados();
public void consultarEmpleado();
public void calcularSueldoEmpleado();
}
Fíjate que al ser una interfaz, no incluye código. Solo se pone "la firma" de los métodos, es decir, nombre de los métodos, tipo que retorna y, si fuera necesario, los parámetros a recibir entre paréntesis.
Lo mismo con la interface IOperacionEmpresa.
En esta ocasión, el método asignarEmpleado() probablemente necesitaremos recibir como parámetro el Empleado que hay que asignar.
public interface IOperacionEmpresa {
public void crearEmpresa();
public void asignarEmpleado(Empleado emp);
public void listarEmpresas();
public void contarEmpleadosdeEmpresa();
}
Vamos a ver ahora las clases que van a implementar estas interfaces.
Empecemos por la clase OperacionEmpleado, la cuál tendrá un ArrayList donde guardar los empleados que el usuario vaya creando.
Al indicarle a esta clase que ha de implementar la interface que hemos escrito antes, automáticamente se nos "obliga" a sobreescribir los métodos de dicha interfaz.
import java.util.ArrayList;
public class OperacionEmpleado implements IOperacionEmpleado {
private ArrayList<Empleado> empleados = new ArrayList<Empleado>();
@Override
public Empleado crearEmpleado() {
}
@Override
public void listarEmpleados() {
}
@Override
public void consultarEmpleado(String documento) {
}
@Override
public void calcularSueldoEmpleado(String documento, int horasTrabajadas) {
}
}
Es aquí, ahora, donde hay que escribir el código para que cada uno de estos métodos funcionen.
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class OperacionEmpleado implements IOperacionEmpleado {
private ArrayList<Empleado> empleados = new ArrayList<Empleado>();
@Override
public Empleado crearEmpleado() {
//Preguntamos que tipo empleado se va a crear
int tipo = JOptionPane.showOptionDialog(null, "Elija tipo de Empleado quiere crear",
"Crear Empleado", 0, 3, null,
new String[] {"Admin", "Desarrollador", "Gestor Proyectos"}, null);
//Pedimos datos del empleado
String documento = JOptionPane.showInputDialog(null, "Documento:", "Crear Empleado", 3);
String nombre = JOptionPane.showInputDialog(null, "Nombre:", "Crear Empleado", 3);
double sueldoHora = Double.parseDouble(JOptionPane.showInputDialog(null,
"Sueldo x Hora:", "Crear Empleado", 3));
//Comprobamos elección para determinar que empleado hay que crear
switch(tipo) {
case 0: //Admin
Admin admin = new Admin(documento, nombre, sueldoHora);
empleados.add(admin);
return admin;
case 1: //Desarrollador
Desarrollador desarr = new Desarrollador(documento, nombre, sueldoHora);
empleados.add(desarr);
return desarr;
case 2: //Gestor de proyectos, requiere pedir otro dato
String area = JOptionPane.showInputDialog(null, "Area:", "Crear Empleado", 3);
GestorProyectos gesPro = new GestorProyectos(documento, nombre, sueldoHora, area);
empleados.add(gesPro);
return gesPro;
default:
return null;
}
}
@Override
public void listarEmpleados() {
JOptionPane.showMessageDialog(null, "Se mostrará un listado en la consola",
"Listar Empleados", 1);
System.out.println("\n\t\tLISTA EMPLEADOS");
System.out.println("\t\t----- ---------\n");
for (Empleado emp: empleados)
System.out.println(emp);
}
@Override
public void consultarEmpleado() {
String documento = JOptionPane.showInputDialog(null, "Documento del empleado:", "Consultar Empleado", 3);
//Buscamos el empleado
Empleado buscar = null;
for (Empleado emp: empleados)
if (emp.getDocumento().equals(documento))
buscar = emp;
//Comprobamos si lo hemos encontrado
if (buscar == null)
JOptionPane.showMessageDialog(null, "No hay ningún empleado con ese documento",
"Consultar Empleado", 0);
else
JOptionPane.showMessageDialog(null, buscar,
"Listar Empleados", 1);
}
@Override
public void calcularSueldoEmpleado() {
String documento = JOptionPane.showInputDialog(null, "Documento del empleado:", "Calcular Sueldo", 3);
int horas = Integer.parseInt(JOptionPane.showInputDialog(null, "Horas trabajadas:", "Calcular Sueldo", 3));
//Buscamos empleado
Empleado buscar = null;
for (Empleado emp: empleados)
if (emp.getDocumento().equals(documento))
buscar = emp;
//Comprobamos si lo hemos encontrado
if (buscar == null)
JOptionPane.showMessageDialog(null, "No hay ningún empleado con ese documento",
"Calcular Sueldo", 0);
else {
double calculo = buscar.getSueldoHora() * horas;
JOptionPane.showMessageDialog(null,String.format("Sueldo: %.2f", calculo),
"Calcular Sueldo", 1);
}
}
}
Lo mismo con la clase OperacionEmpresa, implementamos la interfaz y escribimos el código para los métodos.
La clase cuenta con su ArrayList para guardar empresas.
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class OperacionEmpresa implements IOperacionEmpresa {
private ArrayList<Empresa> empresas = new ArrayList<Empresa>();
@Override
public void crearEmpresa() {
String nit = JOptionPane.showInputDialog(null, "NIT:", "Crear Empresa", 3);
String nombre = JOptionPane.showInputDialog(null, "Nombre:", "Crear Empresa", 3);
String direc = JOptionPane.showInputDialog(null, "Direccion:", "Crear Empresa", 3);
String ciudad = JOptionPane.showInputDialog(null, "Ciudad:", "Crear Empresa", 3);
empresas.add(new EmpresaDesarrollo(nit, nombre, direc, ciudad));
}
@Override
public void asignarEmpleado(Empleado emp) {
String nit = JOptionPane.showInputDialog(null, "Indique NIT de la empresa:", "Asignar Empleado", 3);
//Buscamos empresa
Empresa buscar = null;
for (Empresa empre: empresas)
if (empre.getNit().equals(nit))
buscar = empre;
//Comprobamos
if (buscar == null)
JOptionPane.showMessageDialog(null, "No hay empresas con ese NIT", "Asignar Empleado", 0, null);
else {
buscar.asignarEmpleado(emp);
JOptionPane.showMessageDialog(null, "Empleado asignado", "Asignar Empleado", 1, null);
}
}
@Override
public void listarEmpresas() {
JOptionPane.showMessageDialog(null, "Se mostrará un listado en la consola", "Listar Empresas", 1, null);
System.out.println("\n\t\tLISTA EMPRESAS");
System.out.println("\t\t----- --------\n");
for (Empresa empre: empresas)
System.out.println(empre);
}
@Override
public void contarEmpleadosdeEmpresa() {
String nit = JOptionPane.showInputDialog(null, "Indique NIT de la empresa:", "Contar Empleados", 3);
//Buscamos empresa
Empresa buscar = null;
for (Empresa empre: empresas)
if (empre.getNit().equals(nit))
buscar = empre;
//Comprobamos
if (buscar == null)
JOptionPane.showMessageDialog(null, "No hay empresas con ese NIT", "Contar Empleados", 0, null);
else
JOptionPane.showMessageDialog(null,
String.format("Empleados contados: %d", buscar.contarEmpleados()), "Contar Empleados", 1, null);
}
}
Y con esto ya podemos crear la clase Main.
Usamos tu menú, habrá que añadir objetos de las clases OperacionEmpleado y OperacionEmpresa y ya prácticamente solo será necesario invocar a los métodos necesarios para cada opción:
public class Main {
private static OperacionEmpleado empleados = new OperacionEmpleado();
private static OperacionEmpresa empresas = new OperacionEmpresa();
public static void main(String[] args) {
int op = 0;
String menu = "Bienvenido, por favor ingrese la información solicitada: \n";
menu += "1. Ingresar Empresa: \n";
menu += "2. Ingresar datos del Empleado\n";
menu += "3. Consular información del Empleado: \n";
menu += "4. Consultar todas las empresas: \n";
menu += "5. Consultar todos los empleados: \n";
menu += "6. Calcular sueldo de empleado: \n";
menu += "7. Cantidad de empleados en la empresa: \n";
menu += "8. Salir \n";
menu += "Selecciona una de las opciones del menú \n";
do {
op = Integer.parseInt(JOptionPane.showInputDialog(menu));
switch (op) {
case 1:
empresas.crearEmpresa();
break;
case 2:
//Creamos empleado y lo recogemos
Empleado emp = empleados.crearEmpleado();
//Y ahora lo asignaremos a una empresa
empresas.asignarEmpleado(emp);
break;
case 3:
empleados.consultarEmpleado();
break;
case 4:
empresas.listarEmpresas();
break;
case 5:
empleados.listarEmpleados();
break;
case 6:
empleados.calcularSueldoEmpleado();
break;
case 7:
empresas.contarEmpleadosdeEmpresa();
}
} while (op != 8);
}
}
Pruébalo, y pregunta lo que no entiendas.
Un saludo.