                        GESTIN DE REVISTAS CIENTFICAS 

Las bibliotecas universitarias almacenan revistas cientficas que estn
clasificadas por reas temticas, por ejemplo Informtica, Fsica, Qumica,
etc.  y tambin por su calidad, que se expresa mediante un ndice de 1 a N.
Queremos que desarrollis una aplicacin para gestionar las revistas de una
biblioteca, incluyendo funcionalidades como aadir, eliminar o fusionar
revistas, o listar las revistas de una cierta calidad.

Una revista se puede clasificar en diferentes reas en funcin del grado de
precisin deseado (es decir, la mayor o menor relacin entre el rea y los
contenidos de la revista).  Una posible clasificacin podra realizarse a
partir del rea "General", que es la forma menos precisa de clasificar una
revista.  ste rea se subdivide en dos, "Ciencias" y "Letras", y as
sucesivamente, dando lugar a un esquema como el que mostramos a continuacin

                                                            / lentes 
                                                     ptica  
                                                    /       \ lser
                                                Fsica            
                                               /    \            / circuitos
                                              /      Electrnica 
                               C. Experimentales                 \ lser
                              /               \
                             /                 \
                            /                   Qumica ...
                           /  
                  C. Bsicas 
                  /        \                          An./Topol. ...
                 /          \                        /  
                /            \              Matemticas            
               /              \            /         \        
              /                \          /           Alg./Geom. ...
             /                C. Matemticas 
            /                             \ 
           /                               \ 
       Ciencias                           Prob./Estad. ...  
        /  \           
       /    \
      /      Ingeniera ...
     /
General
     \
      \       Polit./Soc. ... 
       \     /
        Letras                
             \ 
              Fil. y Letras ...


Una publicacin llamada "Revista_de_ptica" podra clasificarse dentro de
"ptica" pero tambin de "Fsica", "C. Experimentales", etc, es decir,
cualquier rea conectada desde ptica hasta "General", dependiendo de la
variedad de sus contenidos.

Consideramos que clasificar una revista consiste en asignarle una nica rea
que caracterice sus contenidos bajo un criterio objetivo. A este rea
caracterstica de una revista la denominaremos "rea temtica de la revista".
Definir un buen criterio es complejo y por ello emplearemos dos criterios
diferentes como veremos ms adelante.

Una revista tiene asociadas una o varias palabras clave que resumen sus
contenidos.  A su vez, las palabras clave pueden estar asociadas a diferentes
reas del esquema de clasificacin. Para simplificar, supondremos que todas
las posibles palabras clave de todas las revistas son un subconjunto de las
reas temticas de la clasificacin que no se subdividen en subreas.

Supongamos por ejemplo que la palabra clave "lser" solo est asociada a
"ptica" y a "Electrnica". Supongamos tambin que "lser" s la nica palabra
clave de "Revista_de_ptica".  Entonces para clasificar dicha revista debemos
asignarle un rea temtica entre las diferentes reas del esquema mostrado ms
arriba. En concreto, deseamos que sea la asignacin ms precisa posible en
relacin a la palabra clave "lser" (cuanto ms distante del rea "General"
sea el rea asignada, mayor precisin).

Como hemos dicho, emplearemos dos criterios diferentes para clasificar las
revistas, de forma que cada revista tendr asignadas dos reas temticas (una
para cada criterio, aunque podran ser la misma). El primer criterio (criterio
1) consiste en determinar el rea temtica que cubra las palabras claves con
la mayor precisin posible. En nuestro ejemplo la cuestin es sencilla, ya que
al tratarse de una sola palabra clave, el rea ms precisa coincide con dicha
palabra clave ("lser").  El segundo criterio (criterio 2) consiste en escoger
el rea temtica ms precisa que cubra *todas* las reas asociadas con dicha
palabra clave. En nuestro ejemplo el rea que resulta es "Fsica".

Notad que en ambos criterios, "C. Bsicas" y "C. Experimentales" quedan
descartadas por ser menos precisas que las reas asignadas, mientras que
"C. Matemticas" o "Fil. y Letras" son inapropiadas al no estar ni ellas ni
sus subclasificaciones asociadas a la palabra clave "lser". A continuacin
definimos con mayor detalle ambos criterios.

Criterios de clasificacin:
===========================

Consideremos la siguiente clasificacin de reas temticas

                                     a 
                                  /     \
                                 c        b
                               /    \    / \
                              e      f  g   t
                             / \    / \      \
                            k   i   w  g      h
                           / \     / \
                          h   p   l   m

Definimos las palabras clave "cubiertas" por una rea como

- ella misma si no tiene subreas o 

- la unin de las palabras clave de sus subreas (incluye el caso de que tenga
  solo un subrea)

En el ejemplo anterior, la palabra o palabras clave cubiertas por

- "a" son {g, h, i, l, m, p}
- "b" son {g, h}
- "c" son {g, h, i, l, m, p}
- "g" es nicamente {g}

Definimos el rea asociada a una revista por el criterio 1 como el rea ms
precisa (ms alejada de "a" en el ejemplo anterior) cuyas palabras cubiertas
incluyan al menos *una* aparicin de todas las palabras clave de la revista.
En caso de que ms de una rea de la misma profundidad cumpla esta propiedad
escogeremos la menor en orden alfabtico como clasificacin definitiva.  En el
ejemplo anterior, si una revista tiene como palabras clave

- {g} entonces su rea temtica es "g" 

- {g, l} entonces su rea temtica es "f"

- {g, h} entonces su rea temtica es "b" (no es "c", por el desempate)

- {h, i} entonces su rea temtica es "e"

- {i, m, p} entonces su rea temtica es "c"

Definimos el rea asociada a una revista por el criterio 2 como el rea ms
precisa (ms alejada de "a" en el ejemplo anterior) cuya palabras cubiertas
incluyan a *todas* las apariciones de todas las palabras clave de la revista.
En este criterio no existe la posibilidad de empates.

En el ejemplo anterior, si una revista tiene como palabra clave

- {i} entonces su rea temtica es "i" 

- {g} entonces su rea temtica es "a"

- {h, i} entonces su rea temtica es "a"

- {l, m} entonces su rea temtica es "w"

- {l, m, p} entonces su rea temtica es "c"


Dicha aplicacin debe almacenar informacin sobre el esquema de clasificacin
en reas, que es fijo (pero independiente de la bilioteca) y contiene al menos
un rea.

A continuacin presentamos todas las funcionalidades del programa. La
aplicacin debe permitir gestionar altas y bajas de revistas, fusionar
revistas y listar las revistas con un determinado ndice de calidad.


SE PIDE
=======

Disear un programa modular razonablemente eficiente para la aplicacin de
gestin de revistas descrita.

En primer lugar, debe leer el N, el valor mximo del ndice de calidad de las
revistas, que ser un entero mayor que 0.

Seguidamente leer el esquema de clasificacin de revistas, que incluye las
relaciones jerrquicas entre reas. Dicho esquema contendr al menos una rea
y es independiente de la biblioteca (diferentes bibliotecas podran usar un
mismo esquema).

Despus tendr que ir procesando las diversas tareas que se le pidan. stas
podrn ser las siguientes:

1) Alta de revista. Se proporciona el nombre, la secuencia de palabras clave y
el ndice de calidad de la revista, que es una puntuacin de 1 a N. La revista
no ha de estar previamente en el sistema.

El efecto de esta operacin es el almacenamiento de dicha informacin en la
aplicacin y tambin la asignacin dos reas temticas a la revista, una para
cada uno de los dos mtodos de clasificacin explicados ms arriba. 

2) Baja de revista. Solo se proporciona su nombre de la revista y sta ha de
estar en el sistema. Esta operacin tiene como consecuencia que toda
informacin relativa a la revista se elimina del sistema.

3) Fusin de revistas.  Se proporcionan los nombres de las dos revistas a
fusionar, por ejemplo R1 y R2, que han de ser distintas y pertenecer al
sistema.  La fusin implica lo siguiente:

- R1 conserva su nombre, su ndice de calidad y sus palabras clave. Adems, las
  palabras clave de R2 pasan a serlo tambin de R1

- Se asignan a R1 dos nuevas reas temticas, una para cada criterio, ya que
  sus palabras clave han podido cambiar segn el punto anterior

- R2 desaparece del sistema


4) Listado de revistas. Se proporcionar un ndice de calidad (un entero entre
1 y N) y un criterio de clasificacin (1 o 2).  Se han de listar todas las
revistas con dicho ndice de calidad. En el listado, las revistas se han de
agrupar por el rea temtica obtenida segn el criterio especificado. En el
listado deben aparecer los nombres de las reas temticas y los de las
revistas.  El orden es alfabtico por rea temtica y, dentro de cada rea,
por nombre de la revista.

5) Consultar revista. Se proporciona el nombre de una revista, que puede estar
en el sistema o no. Se ha de escribir toda la informacin de la revista: si
existe o no, y en su caso, su ndice de calidad, sus palabras clave (en orden
alfabtico) y sus reas (criterio 1 y criterio 2, por este orden).

Supondremos que los nombres de revista y rea (lo cual incluye las palabras
clave) estn formados por una sola palabra (excluyendo as series de palabras
separadas por espacios en blanco como "Genmica Funcional"; se admite en
cambio "Genmica_Funcional"). Supondremos tambin que los caracteres vlidos
para formar parte de dichos nombres y la longitud mxima de stos son los
mismos que los de la clase string de C++. No puede suponerse un nmero mximo
determinado de revistas o de reas (lo cual incluye las palabras clave).

La forma de comunicarnos con el programa para que realice dichas tareas ser
parecida a la del caso de estudio "Cubeta" que aparece en la sesin 8 de
laboratorio. Podis disear un esquema provisional que ya refinaris cuando
conozcis el juego de pruebas pblico.

En das sucesivos se completarn los detalles que se hayan podido pasar por
alto en este enunciado y se publicarn las aclaraciones oportunas.

La sintaxis *exacta* de los datos y resultados, acompaada del juego de pruebas
pblico, se conocer tres semanas antes del da de entrega de la prctica.
Hasta entonces no podris implementar de forma definitiva las operaciones de
lectura y escritura necesarias para los tipos que utilicis, aunque s podris
especificarlas.

