Universidad de Costa Rica
Escuela de Computación
Examen 01
CI-0112 Programación I - 2017b
Profesor Jeisson Hidalgo-Céspedes

Cuando Lily Snaderstein visitó Costa Rica, se enamoró de sus costas y se quedó a vivir aquí. Abrió una tienda de artículos de playa en Carrillo, Guanacaste. Hace un par de años inauguró una sucursal en Liberia, y recientemente otra en Sardinal. Al inicio, saber la buena salud de su negocio era fácil para Lily pues era sólo una sucursal. Pero ahora se ha complicado de varias formas.

Lily ha sido muy meticulosa en llevar los registros de ventas en libros contables, un libro por cada tienda. En los libros, sus empleados anotan cada producto vendido, y al final del día, el total de ventas tras realizar el cierre de caja. Desdichadamente los libros contables están en papel. Lily ha pagado un proceso de digitación y actualmente se tienen los cierres de caja de cada una de las tres tiendas. El siguiente es un trozo del registro digitado:

Ejemplo de entrada:

28/06/2017 Carrillo 12490
13/07/2017 Sardinal 250995
14/07/2017 Sardinal 67913.5
14/07/2017 Liberia 196455
17/08/2017 Carrillo 29000

Cada línea del registro contiene un cierre de caja de una sucursal para un día particular. Por ejemplo, la primera línea indica que el 28 de junio de 2017, la sucursal de Carrillo vendió en total 12490 colones. Debe tenerse en cuenta que la digitación se realizó en función de la disponibilidad de los libros contables, pues los del último año están en uso aún. Por tanto, los cierres de caja pueden venir en cualquier orden en la entrada.

La estadística inmediata que más le podría a ayudar a Lily para tener un panorama general de la salud de sus negocios y poderlos comparar, es el promedio de ventas de cada sucursal. Sin embargo, dado que su negocio es dependiente del sector turismo, las estadísticas se afectan fuertemente por la temporada alta y baja de turismo. Lily desearía que los promedios se reporten en una tabla por cada sucursal tanto en temporada baja como alta. La temporada alta corresponde a los meses de vacaciones escolares hasta semana santa (diciembre a abril, inclusive) y las vacaciones de medio año (julio). La temporada baja corresponden a los demás meses.

Ejemplo de salida:

TIENDA                     BAJA            ALTA
=============== =============== ===============
Carrillo              20,745.00            0.00
Liberia                    0.00      196,455.00
Sardinal                   0.00      159,454.25

La tabla debe contener en las filas las tres sucursales ordenadas alfabéticamente. Los nombres de las sucursales se deben alinear a la izquierda. Los promedios de ventas en temporada baja y alta se deben imprimir en columnas de ancho 15, alineadas a la derecha. Los valores monetarios se deben imprimir con separadores de miles y dos decimales para facilitar a Lily la lectura.

Evaluación. Tenga presente que aprobar los casos de prueba no es suficiente para obtener la calificación máxima del examen. Se le dará crédito por su logro en lo siguiente.

  1. [25%] Pasar los casos de prueba.
  2. [20%] Generar al menos dos clases, una controladora y un modelo. Note que del controlador se debe crear únicamente una instancia y del modelo se debe crear exactamente tres instancias. El modelo debe ser capaz de llevar su contabilidad tanto en temporada baja como alta. Asigna responsabilidades apropiadas a ambas clases, de conocer (atributos) y de hacer (métodos).
  3. [10%] Proveer comentarios significativos de las clases y sus miembros con JavaDoc.
  4. [10%] Diseñar los algoritmos primero, de tal forma que el rastro queda como comentarios en el cuerpo de las subrutinas.
  5. [15%] Aplicar las buenas prácticas de programación vistas en el curso (indicadas en la carta al estudiante).
  6. [20%] Hacer un dibujo de rastro de memoria de su programa. Deténgase en la instrucción de su programa que va a leer el día (13) en la segunda línea del ejemplo de entrada. Recuerde dejar el rastro de lo ocurrido en la memoria, es decir, en lugar de borrar, tache lo que ya no existe.