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

Tarea #8 [solución]

Listado de notas en 3 capas

      Implemente un programa para sacar el listado de notas del curso:

  1. Lea el carnet, nombre y notas de muchos de alumnos.
  2. Calcule la nota del cursos usando la fórmula que está en
          http://www.di-mare.com/adolfo/cursos/2009-1/ci-1201.htm#evaluacion
  3. Haga un menú con 3 opciones:
    1. Listado de notas ordenado por carnet
    2. Listado de notas ordenado por nombre
    3. güich.
  4. Almacene todas las notas en una lista STL.

      Para construir su solución 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) 2008 adolfo@di-mare.com

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

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

#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 © 2009
Derechos de autor reservados © 2009
[home] <> [/\]