Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-1201 Programación II - 2012b
Profesor Jeisson Hidalgo-Céspedes
. Duración máxima: 3 horas
En cada ejercicio se evaluará la eficiencia del código, el uso de identificadores significativos, la indentación, escritura correcta de llaves {} y el uso adecuado de la palabra reservada const. Se dispone de dos horas para entregar la prueba y debe realizarse en forma estrictamente individual.
Suponga que una exitosa Agencia de Eventos, especializada en cumpleaños, mariachis, bodas, té de canastilla, bautizos, primera comunión, etc., está experimentando un crecimiento exponencial en su demanda, y en la misma proporción su descontrol; tanto que hay sospechas de empleados cobrando más de lo debido a los clientes, o reportando a la empresa menos de lo pagado por los clientes. Preocupado, el dueño de la Agencia le ha contrado para automatizar parte de sus operaciones, con el fin de obtener estadísticas que le ayuden a corroborar el buen manejo del dinero y la salud de la empresa.
El dueño le ha solicitado en la fase inicial de desarrollo, implementar un sistema de control de los eventos más importantes: los cumpleaños, los mariachis y las bodas. Estos tres representan más del 90% de los ingresos actuales de la empresa.
Todo evento tiene una fecha, duración en horas, el número de participantes, el lugar donde se realizó, una persona de contacto, y su número de teléfono. Por política de la empresa, todo evento tiene un costo mínimo de 50,000 colones.
El costo de un cumpleaños es de 7,000 colones por participante, lo cual incluye tarjetas de invitación, el salón, comida, decoración y piñata. Si el cliente además quiere animación de payaso, se cobra un adicional de 25,000 colones por hora.
El costo de contratar un mariachi es de 85,000 colones la hora, indiferentemente de la cantidad de participantes.
El costo de organizar una boda es de 12,000 colones por participante, lo cual incluye tarjetas de invitación, comida, decoración, música y animación. Si el cliente desea asistencia de profesional de fotografía y filmación, tendrá a disposición tres paquetes: (1) 30,000 colones por 10 fotografías impresas. (2) 50,000 colones por 10 fotografías impresas, una en marco, y un DVD con todos los "negativos". (3) 120,000 colones por lo anterior más todo el evento filmado con edición básica y entregado en blue-ray.
El dueño de la empresa le ha indicado que necesita un programa que permita inicialmente hacer dos tareas: registrar eventos y obtener estadísticas. Cuando su programa se ejecuta, presentará repetitivamente un menú con tres opciones: las dos anteriores y una tercera para terminar su ejecución.
Cuando el empleado escoge la opción Registrar evento, el sistema le muestra un submenú con los tipos de eventos que realiza la empresa (cumpleaños, mariachis y bodas). El sistema solicitará luego los detalles del evento de acuerdo a su tipo, como la fecha (en formato AAAAMMDD donde AAAA es el año, MM el mes y DD el día), número de prticipantes, si quiere o no payaso en caso de cumpleaños, el tipo de paquete de fotografía en caso de boda, etc., etc.
Cuando se haya terminado de ingresar el evento, el sistema muestra el costo del evento en la pantalla y pregunta al empleado si desea guardar el evento en disco. En caso de responder afirmativamente, el sistema agrega el evento a un archivo histórico de eventos que la empresa ha organizado. Si responde negativamente, no se hace ninguna modificación al archivo; esto es útil para los empleados a la hora de realizar cotizaciones.
Cuando un empleado o el dueño de la empresa quiere Ver estadísticas, el sistema recorre el archivo histórico de eventos, y calcula la siguiente información:
Usted debe diseñar el sistema tan modular como le sea posible, dado que el dueño de la empresa pretende agregar los demás tipos de eventos en las fases subsecuentes de desarrollo. Además, la empresa está en crecimiento y evaluando la posibilidad de expandir la oferta a nuevos tipos de eventos aún no conocidos; por ejemplo, se rumora que se quiere incursionar en fiestas de graduación y despedidas de solteros. Con esto en mente, diseñe su solución polimórficamente para que la tarea de agregar un nuevo tipo de evento al sistema implique pocas modificaciones de código y disminuya la probabilidad de introducir errores.
[15%] Clase controladora que representa la aplicación como un todo. Presenta el menú. Correcto manejo de archivos, etc.
[25%] Registra eventos adecuada y polimórficamente.
[25%] Representa adecuadamente la jerarquía de clases. Obliga a nuevos eventos a implementar funcionalidad requerida. Eventos se comportan polimórficamente.
[25%] Imprime estadísticas correctamente. Para efectos de este examen basta con imprimir estadísticas de eventos y cumpleaños (no de mariachis ni bodas). Sugerencia puede utilizar variables estáticas.
[10%] Evita fugas de memoria a toda costa.