|
GestMusicMain:
Esta es la capa principal y
a su vez la más superficial
del programa, la que tiene
mayor interacción directa
con el usuario. Esta
compuesta por un único
archivo .cpp que incluye el
main. La interfaz está
realizada con ncurses.
Aquí se carga el fichero
discos.dat que guarda toda
la información de la
discoteca. También se
declara la ventana con la
que vamos a trabajar con
ncurses. El main está
básicamente compuesto por un
menú. Las distintas opciones
de este llaman a distintas
funciones del módulo
"funciones". Se ha intentado
que este archivo contenga el
menor número de líneas de
código posible.
Funciones:
El
módulo "funciones" está
compuesto por dos archivos.
Uno .h donde están
declaradas las distintas
funciones y otro .cpp donde
están definidas. Estas son
las funciones incluidas:
void PintarOpciones();
void ShutDown();
void MovernosIzda(int &x,
int &y);
void MovernosDcha(int &x,
int &y);
void MovernosConTab(int &x,
int &y);
void Insert(CDiscoteca &disx);
void Supr(CDiscoteca &disx);
void CompruebaGenero(TDisco
&dd);
void
CompruebaPuntuacion(TDisco &dd);
Todas estas funciones son
llamadas exclusivamente
desde el principal. Aquí
están las funciones que
presentan por pantalla la
interfaz principal y nos
permiten movernos por ella
utilizando el teclado.
También están incluidas las
funciones que llaman a las
funciones de la clase
discoteca que se encargan de
la gestión de la discoteca
propiamente dicha
(inserción, edición y
borrado) según las
instrucciones del usuario.
Con
motivo de hacer la interfaz
principal lo más minimalista
posible, la opción de
editado no aparece
directamente, sino que se
accede a ella a través de la
opción de inserción. Cuando
se intenta introducir un
disco ya perteneciente a la
colección, el programa nos
pregunta si queremos editar
su información. Cuando
editamos, si queremos dejar
algún campo con su valor
anterior sin modificar no
tenemos más que pulsar intro
cuando se nos pida en el
menú de edición para pasar
al siguiente campo.
Como se ha mencionado
anteriormente, el usuario no
tiene por que introducir de
golpe toda la información
correspondiente a un disco.
Puede que no conozca toda la
información, o que no le
haga falta, o que prefiera
introducirla en otro
momento. Por esto, cuando
accedemos a la opción de
inserción, el programa
inmediatamente nos pregunta
si deseamos introducir tan
solo el título del álbum o
toda su información. Si
elegimos la primera opción,
el resto de los parámetros
se le asignan por defecto.
Estos parámetros por defecto
serán cadenas vacía para
todos los parámetros que
sean de caracteres (artista,
formato y tracklist), un 0
para el año y la puntuación,
y el código de género 12 que
se corresponde con el género
"Other".
Durante la inserción de un
disco con toda su
información se nos
preguntará por el género del
disco. La identificación del
género se hace a través de
un código. Estos códigos son
los definidos por las
etiquetas ID3 que incluyen
todos los archivos mp3. Como
lo más probable es que el
usuario no conozca el código
correspondiente a cada
género, se le da la opción
de visualizar todo el
listado de códigos antes de
introducir el género. Como
estamos trabajando con
ncurses, el tamaño de la
ventana es invariable, de
modo que si tratásemos de
presentar todo el listado de
golpe en la pantalla, este
se saldría de la ventana.
Por esto, he hecho que
aparezcan los discos de diez
en diez, y que podamos
scrollar con las flechas
arriba y abajo del teclado
para así movernos por toda
la lista.
Las
funciones CompruebaGenero y
CompruebaPuntuacion se
encargan de comprobar que el
género introducido es uno de
los 129 definidos y que la
puntuación introducida es un
valor entero entre 0 y 10.
Herramientas:
Este módulo está compuesto
por los archivos
herramientas.cpp y
herramientas.h. El fin de
este módulo es alojar todas
aquellas funciones que se
necesiten en varios varios
puntos del programa pero que
no estén claramente
relacionadas con ninguna de
las clases, sino que sean
más genéricas. Por ahora la
única función que hay
incluida es ComparaCadenas,
pero en un futuro se podrían
añadir cuantas funciones
fuesen necesarias para la
mejora del programa.
CDiscoteca:
La
clase discoteca esta
compuesta por los archivos
CDiscoteca.h y
CDiscoteca.cpp. Los métodos
de la parte pública de la
clase son los siguientes:
CDiscoteca();
~CDiscoteca();
bool ListaDiscosVacia();
void InsertarDisco(TDisco
d);
void EliminarDisco(int posi);
void EditarDisco(TDisco d,
int posi);
TDisco BuscarDisco(int posi);
void CargarDiscosLista(const
char *NOMBREFICHERO);
void
GuardarDiscosLista(const
char *NOMBREFICHERO);
int NumDiscos();
void VerListadoGeneros();
void ImprimirGeneros(int g);
Casi todas estas funciones
son llamadas desde el
principal y llaman a la
clase lista no acotada.
InsertarDisco recibe desde
el principal un objeto disco
con todos sus parámetros y
lo único que tiene que hacer
es llamar a la función
insertar de la clase lista
pasándole como elemento a
insertar el objeto tipo
disco recibido. Como la
lista es no ordenada, se
calcula la longitud de esta
con la función NumDiscos() y
se inserta en la posición
NumDiscos()+1. EditarDisco
funciona de manera idéntica
solo que ahora hay que
indicarle la posición del
elemento que queremos
editar. Esta posición se
calcula en funciones.cpp
mediante un bucle que va
recorriendo la lista hasta
que encuentra un disco con
el mismo titulo que el que
buscamos. Lo mismo para
EliminarDisco.
CPintarLista:
Esta clase esta formada por
los archivos
CPintarLista.cpp y
CPintarLista.h. Consta de
una función en su parte
publica y otra en su parte
privada. En la parte pública
está PintarLista, que recibe
como parámetros los campos
álbum, artista y fecha que
el usuario tiene la opción
de introducir desde la
interfaz principal. Estos
campos están inicialmente
vacíos (álbum y artista son
cadenas vacías y la fecha es
0). En este caso en el que
los tres campos están
vacíos, se muestra por
pantalla el listado completo
de discos. Cuando el usuario
rellena uno o varios de esos
tres campos, la función
PintarLista, comprueba
cuales de los discos de la
colección se corresponden
con los parámetros
introducidos y los presenta
por pantalla.
He
dado por hecho que en la
colección no va a haber más
de un disco con el mismo
título, por lo tanto, si el
único campo de consulta que
ha sido rellenado es el de
álbum, la función
PintarLista busca ese álbum
en la discoteca y en vez de
mostrarnos solo el título
como en el resto de los
casos, nos muestra
directamente toda su
información.
La
función de la parte privada
es PintarGenero y se encarga
simplemente de imprimir el
género correspondiente a
cada código.
CListaNoAc:
Se
trata de una clase lista no
acotada implementada con
plantillas luego solo consta
de un archivo .hpp. En este
programa se maneja una única
lista, controlada por esta
clase, pero si decidiésemos
ampliar el programa y para
ello necesitásemos más
listas recurriríamos
directamente a esta clase.
|