Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - diamonroyor

#1
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;
}