Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
II Semestre 2006
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Tarea #8 [solución]

Arquitectura de Tres Capas

      Implemente un programa para imprimir las facturas de una farmacia:

  1. Lea los datos de uno o muchos clientes.
  2. Permita hacer una venta registrando los datos de la factura.
  3. Calcule el total facturado aplicando el 13% de impuesto de ventas
  4. Implemente su programa usando un menú que incluya las siguientes opciones:
  5. Almacene todas los valores usando vectores de la biblioteca STL.

      Para almacenar las notas use varias relaciones que en conjunto formen una base de datos relacional. Almacene todos los valores en vectores, pero incluya una clase C++ de acceso a cada relación. Incluya mecanismos de acceso en sus vectores de manera que sea posible obtener los datos ordenados de acuerdo a los diferentes criterios que se necesita. Si es posible, use herencia para unificar el acceso a las relaciones de su base de datos. La interfaz de su programa puede ser una interfaz de programa en modo "consola", pero su programa sí debe estar construido en tres capas. En su implementación incluya los mecanismos necesarios para que los datos de sus vectores queden almacenados en disco. Incluya los datos de prueba requeridos para cada uno de los componentes del programa.

      Su programa debe estar implementado usando una arquitectura de 3 capas. Incluya pruebas de su programa usando la lista STL en la capa de datos, y también el diccionario. Puede usar como plantilla el siguiente programa:

// TresCapas.cpp (C) 2006 adolfo@di-mare.com

/** \file  TresCapas.cpp
    \brief Arquitectura de Tres Capas.

    \author Adolfo Di Mare <adolfo@di-mare.com>
    \date   2006
*/

#include <list>
#include <iostream>
#include <fstream>

/// Definido por la biblioteca C++ estándar.
namespace std {} // Está acá para que Doxygen lo documente
usign namespace std;

#include "Cliente.h" // Clientes de la farmacia

/// Clase que encarga de controlar todo el programa.
/// - Se encarga de invocar los métodos de las demás clases.
/// - Muchos la incluyen dentro de la capa de \c Algoritmo.
class Controlador {
    /// Método que se encarga de correr la aplicación.
    void run();
};

/// Esta clase contiene la lógica y los algoritmos del programa.
class Algoritmo {
};

/// Clase que sirve para interactuar con el usuario del programa.
/// - Se encarga de leer los datos del alumno
class Interfaz {
public:
    /// Lee los datos de un único \c Cliente.
    /// - En la variable \c A retornan los datos obtenidos
    ///   del flujo de entrada \c CIN.
    void LeeCliente_UNO( istream CIN, Cliente& A );

    /// Lee los datos de muchos \c Cliente's.
    /// - En la lista \c Las reornarn los datos de todos los alumnos
    ///   obetnidos del flujo de entrada \c CIN.
    void LeeCliente_MUCHOS( ifstream fCIN, list<Cliente>& Las );

    /// Interactúa con el usuario y le permite ingresar los datos.
    /// - Retorna el código de la acción a ejecutar.
    int Menu();
private: // Rep
};

/// Repositorio de datos de la aplicación.
/// - Esta clase está dise±ada para que el respositorio
///   pueda sar una simple liesta en memoria, un
///   diccionario o una base de datos SQL.
class Datos {
    /// Obtiene el alumno cuyo carnet es \c C.
    Cliente getIdentificacion( const string& C );

    /// Agrega el \c Cliente \c A al repositorio de datos.
    void agregaCliente( const Cliente& A );

    /// Obtiene una lista con todos los \c Cliente's.
    /// - El valor anterior de \c Las se pierde.
    /// - Sólo retorna los \c Cliente's para los que
    ///   pred()(a) es \c true.
    void getCliente_MUCHOS( PRED pred, list<Cliente>& Las );

    /// Obtiene una lista con todos los \c Cliente's.
    /// - Lista viene ordenada por número de carnet.
    void getCliente_Identificacion( list<Cliente>& Las );

    /// Obtiene una lista con todos los \c Cliente's.
    /// - Lista viene ordenada por nombre.
    void getCliente_Nombre( list<Cliente>& Las );

private: // Rep
};

class PRED {
    /// Retorna \c true si \c A es del grupo 17.
    bool operator() ( const Cliente& A )
         { return A.getGrupo() == 17; }
};

// EOF: TresCapas.cpp

      Entregue su tarea por correo electrónico, como lo hizo anteriormente.

[mailto:] Entrega de Tareas

Tiempo de entrega: 3 días
Entregue su documentación en la primera fecha, y luego entregue el programa completo en la segunda fecha.
Segunda etapa: 1 semana
Modalidad: En parejas

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2006
Derechos de autor reservados © 2006
[home] <> [/\]