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

Tarea #7 [solución]

Listado de notas en 3 capas

      Reprograma su solución a la tarea anterior, pero use 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 "Alumno.h" // Viejilllos de las notas


/// 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 Alumno.
    /// - En la variable \c A retornan los datos obtenidos
    ///   del flujo de entrada \c CIN.
    void LeeAlumno_UNO( istream CIN, Alumno& A );

    /// Lee los datos de muchos \c Alumno's.
    /// - En la lista \c Las reornarn los datos de todos los alumnos
    ///   obetnidos del flujo de entrada \c CIN.
    void LeeAlumno_MUCHOS( ifstream fCIN, list<Alumno>& 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.
    Alumno getCarnet( const string& C );

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

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

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

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

private: // Rep
};

class PRED {
    /// Retorna \c true si \c A es del grupo 17.
    bool operator() ( const Alumno& 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: 7 días
Modalidad: En parejas

Soluciones

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