Por favor me podrian ayudar a pasar este codigo a C++.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAXCAD 1000
enum { Anyadir=1, BuscarPorTituloDisco, BuscarPorInterprete, BuscarPorTituloCancion,
Mostrar, EliminarDisco, Salir};
struct Cancion {
char * titulo;
struct Cancion * sig;
};
typedef struct Cancion * TipoListaCanciones;
struct Disco {
char * titulo;
char * interprete;
int anyo;
TipoListaCanciones canciones;
struct Disco * sig;
};
typedef struct Disco * TipoColeccion;
TipoListaCanciones crea_lista_canciones(void)
{
return NULL;
}
TipoListaCanciones anyade_cancion(TipoListaCanciones lista, char titulo[])
{
struct Cancion * nuevo = malloc(sizeof(struct Cancion));
nuevo->titulo = malloc((strlen(titulo)+1)*sizeof(char));
strcpy(nuevo->titulo, titulo);
nuevo->sig = lista;
lista = nuevo;
return lista;
}
TipoListaCanciones libera_canciones(TipoListaCanciones lista)
{
struct Cancion * aux, * siguiente;
aux = lista;
while (aux != NULL) {
siguiente = aux->sig;
free(aux->titulo);
free(aux);
aux = siguiente;
}
return NULL;
}
int contiene_cancion_con_titulo(TipoListaCanciones lista, char titulo[])
{
struct Cancion * aux;
for (aux=lista; aux!=NULL; aux=aux->sig)
if (strcmp(aux->titulo, titulo)==0)
return 1;
return 0;
}
struct Disco * busca_disco_por_titulo_cancion(TipoColeccion coleccion, char titulo[])
{
struct Disco * aux;
for (aux=coleccion; aux!=NULL; aux=aux->sig)
if (contiene_cancion_con_titulo(aux->canciones, titulo))
return aux;
return NULL;
}
struct Disco * busca_disco_por_titulo_disco(TipoColeccion coleccion, char titulo[])
{
struct Disco * aux;
for (aux=coleccion; aux!=NULL; aux=aux->sig)
if (strcmp(aux->titulo, titulo) == 0)
return aux;
return NULL;
}
struct Disco * busca_disco_por_interprete(TipoColeccion coleccion, char interprete[])
{
struct Disco * aux;
for (aux=coleccion; aux!=NULL; aux=aux->sig)
if (strcmp(aux->interprete, interprete) == 0)
return aux;
return NULL;
}
TipoColeccion borra_disco_por_titulo_e_interprete( TipoColeccion coleccion, char titulo[],
char interprete[])
{
struct Disco *aux, *atras;
for (atras = NULL, aux=coleccion; aux != NULL; atras = aux, aux = aux->sig)
if (strcmp(aux->titulo, titulo) == 0 && strcmp(aux->interprete, interprete) == 0) {
if (atras == NULL)
coleccion = aux->sig;
else
atras->sig = aux->sig;
free(aux->titulo);
free(aux->interprete);
libera_canciones(aux->canciones);
free(aux);
return coleccion;
}
return coleccion;
}
TipoColeccion crea_coleccion(void)
{
return NULL;
}
TipoColeccion anyade_disco( TipoColeccion lista, char titulo[], char interprete[],
int anyo, TipoListaCanciones canciones)
{
struct Disco * disco;
disco = malloc(sizeof(struct Disco));
disco->titulo = malloc((strlen(titulo)+1)*sizeof(char));
strcpy(disco->titulo, titulo);
disco->interprete = malloc((strlen(interprete)+1)*sizeof(char));
strcpy(disco->interprete, interprete);
disco->anyo = anyo;
disco->canciones = canciones;
disco->sig = lista;
lista = disco;
return lista;
}
TipoColeccion libera_coleccion(TipoColeccion lista)
{
struct Disco * aux, * siguiente;
aux = lista;
while (aux != NULL) {
siguiente = aux->sig;
free(aux->titulo);
free(aux->interprete);
aux->canciones = libera_canciones(aux->canciones);
free(aux);
aux = siguiente;
}
return NULL;
}
void muestra_canciones(TipoListaCanciones lista)
{
struct Cancion * aux;
for (aux=lista; aux!=NULL; aux=aux->sig)
printf(" %s\n\n", aux->titulo);
}
void muestra_disco(struct Disco eldisco)
{
printf("Titulo: %s\n", eldisco.titulo);
printf("Interprete: %s\n", eldisco.interprete);
printf("Fecha de edicion: %d\n", eldisco.anyo);
printf("Canciones: ");
muestra_canciones(eldisco.canciones);
}
void muestra_coleccion(TipoColeccion lista)
{
struct Disco * aux;
for (aux=lista; aux!=NULL; aux=aux->sig)
muestra_disco(*aux);
}
int main(void)
{
int opcion;
TipoColeccion coleccion;
char titulo_disco[MAXCAD+1], titulo_cancion[MAXCAD+1], interprete[MAXCAD+1];
char linea[MAXCAD+1];
int anyo;
struct Disco * undisco;
TipoListaCanciones lista_canciones;
coleccion = crea_coleccion();
do {
printf("\n\nMenu\n");
printf(" 1) Agregar disco\n");
printf(" 2) Buscar por titulo del disco\n");
printf(" 3) Buscar por interprete\n");
printf(" 4) Buscar por titulo de cancion\n");
printf(" 5) Mostrar todo\n");
printf(" 6) Eliminar un disco por titulo e interprete\n");
printf(" 7) Finalizar\n");
printf("Opcion: "); gets(linea); sscanf(linea, "%d", &opcion);
system ("cls");
switch(opcion) {
case Anyadir:
printf("Titulo: "); gets(titulo_disco);
printf("Interprete: "); gets(interprete);
printf("Fecha de edicion: "); gets(linea); sscanf(linea, "%d", &anyo);
lista_canciones = crea_lista_canciones();
do {
printf("Titulo de cancion (pulse esc para acabar): ");
gets(titulo_cancion);
if (strlen(titulo_cancion) > 0)
lista_canciones = anyade_cancion(lista_canciones, titulo_cancion);
} while (strlen(titulo_cancion) > 0);
coleccion = anyade_disco(coleccion, titulo_disco, interprete, anyo, lista_canciones);
break;
case BuscarPorTituloDisco:
printf("Titulo: "); gets(titulo_disco);
undisco = busca_disco_por_titulo_disco(coleccion, titulo_disco);
if (undisco != NULL)
muestra_disco(*undisco);
else
printf("No hay discos con titulo '%s'n", titulo_disco);
break;
case BuscarPorInterprete:
printf("Interprete: "); gets(interprete);
undisco = busca_disco_por_interprete(coleccion, interprete);
if (undisco != NULL)
muestra_disco(*undisco);
else
printf("No hay discos de %sn", interprete);
break;
case BuscarPorTituloCancion:
printf("Titulo: "); gets(titulo_cancion);
undisco = busca_disco_por_titulo_cancion(coleccion, titulo_cancion);
if (undisco != NULL)
muestra_disco(*undisco);
else
printf("No hay discos con alguna cancion titulada '%s'n", titulo_cancion);
break;
case Mostrar:
muestra_coleccion(coleccion);
break;
case EliminarDisco:
printf("Titulo: "); gets(titulo_cancion);
printf("Interprete: "); gets(interprete);
coleccion = borra_disco_por_titulo_e_interprete(coleccion, titulo_cancion, interprete);
break;
}
} while (opcion != Salir);
coleccion = libera_coleccion(coleccion);
return 0;
}