martes, 26 de noviembre de 2013

Ejercicio tipo examen sobre Clases e Interfaces en Java

Bueno, el siguiente ejercicio fue propuesto como un ejercicio tipo examen para el curso "Tecnología de la programación I" que estoy siguiendo (IV ciclo de Ingeniería de Sistemas).

Enunciado.

El departamento de Informática de un hospital está realizando un nuevo registro de datos de todas las personas que tienen relación con esa institución, que son: los empleados, los médicos y los pacientes.
Los empleados son categorizados en función de si son contratados por Planilla o de forma Eventual y son los encargados de los procesos administrativos.

Los médicos (que podrían considerarse un tipo especial de empleados contratados por Planilla) se encargan de las atenciones de las consultas médicas.
Para solicitar una cita, el paciente es atendido por un empleado. El paciente indica el servicio en el cual quiere pasar consulta y el empleado le indica el nombre del médico, la fecha y la hora de la cita.

Los atributos de cada uno de ellos se indican a continuación:

  • Persona: número de DNI, nombre, apellido, fecha de nacimiento, dirección, ciudad de procedencia.
  • Paciente: número de historia clínica, sexo, grupo sanguíneo, lista de medicamentos a los que es alérgico.
  • Empleado: código de Empleado, número de horas extras, fecha de ingreso, área, cargo.
  • Empleado por Planilla: salario mensual, porcentaje adicional por hora extra.
  • Empleado Eventual: honorarios por hora, número de horas totales (normales + extras) trabajadas, fecha de término del contrato.
  • Médico: especialidad (cirujano, oftalmólogo, etc.), servicio (cirugía, oftalmología, etc.), número de consultorio.

Las operaciones que involucren algún cálculo, deben desarrollarse a través de interfaces.
La aplicación a desarrollar debe permitir:
a) Registrar los datos de los empleados, los pacientes y los médicos.
b) Registrar los datos de una cita médica.
c) Listar los datos de los médicos ordenados en forma descendente por la especialidad.
d) Listar los datos (nombres y apellidos) de los pacientes atendidos por un médico determinado (ingresando su código).

Nota: En el diagrama y en la codificación deben mostrarse e implementarse los aspectos de ocultación, composición y/o agregación, herencia (simple y múltiple) y polimorfismo.

Solución.

El desarrollo se compone de clases e interfaces, a fin de cumplir todos los requisitos expuestos.
En este caso, se ha ordenado el programa en 2 paquetes: backend y frontend.
El primero incluye toda la lógica interna del programa y el segundo sólo lo referente a la lectura de datos y acerca de cómo se presentan las opciones y respuestas al usuario.
Dentro del primer paquete se encuentran las clases e interfaces: EEventual, EPlanilla, Empleado, Fecha, Medico (que contiene una clase interna llamada CitaMedica), Paciente, Persona, Saldo, SaldoEventual y SaldoPlanilla.
Dentro del segundo paquete se tiene: Aplicacion, Lector y Principal.

El siguiente video explica detalladamente el desarrollo del programa:
Clic para ver el video.

Desde el siguiente enlace pueden descargar el código fuente, para analizar más a fondo la aplicación:
Clic para descargar la aplicación.