#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_AUTORES 100
#define MAX_OBRAS 100
#define NOMBRE_MAX 50
#define TITULO_MAX 100
typedef struct { char titulo[TITULO_MAX];
} Obra;
typedef struct { char nombre[NOMBRE_MAX];
Obra obras[MAX_OBRAS];
int num_obras;
} Autor;
Autor lista_autores[MAX_AUTORES];
int num_autores = 0;
void agregar_autor() { if (num_autores >= MAX_AUTORES) { printf("No se pueden agregar más autores.\n"); return;
}
printf("Ingrese el nombre del autor: "); scanf(" %[^\n]", lista_autores[num_autores].nombre); lista_autores[num_autores].num_obras = 0;
num_autores++;
printf("Autor agregado exitosamente.\n");}
void agregar_obra() { char nombre_autor[NOMBRE_MAX];
printf("Ingrese el nombre del autor: "); scanf(" %[^\n]", nombre_autor);
for (int i = 0; i < num_autores; i++) { if (strcmp(lista_autores.nombre, nombre_autor) == 0) { if (lista_autores[i].num_obras >= MAX_OBRAS) { printf("No se pueden agregar más obras a este autor.\n"); return;
}
printf("Ingrese el título de la obra: "); scanf(" %[^\n]", lista_autores[i].obras[lista_autores[i].num_obras].titulo); lista_autores[i].num_obras++;
printf("Obra agregada exitosamente.\n"); return;
}
}
printf("Autor no encontrado.\n");}
void buscar_autor_por_obra() { char titulo[TITULO_MAX];
printf("Ingrese el título de la obra: "); scanf(" %[^\n]", titulo);
for (int i = 0; i < num_autores; i++) { for (int j = 0; j < lista_autores[i].num_obras; j++) { if (strcmp(lista_autores[i].obras[j].titulo, titulo) == 0) { printf("El autor de la obra '%s' es: %s\n", titulo, lista_autores[i].nombre); return;
}
}
}
printf("Obra no encontrada.\n");}
void eliminar_obra() { char nombre_autor[NOMBRE_MAX], titulo[TITULO_MAX];
printf("Ingrese el nombre del autor: "); scanf(" %[^\n]", nombre_autor); printf("Ingrese el título de la obra a eliminar: "); scanf(" %[^\n]", titulo);
for (int i = 0; i < num_autores; i++) { if (strcmp(lista_autores[i].nombre, nombre_autor) == 0) { for (int j = 0; j < lista_autores[i].num_obras; j++) { if (strcmp(lista_autores[i].obras[j].titulo, titulo) == 0) { // Mover las obras restantes hacia adelante
for (int k = j; k < lista_autores[i].num_obras - 1; k++) { lista_autores[i].obras[k] = lista_autores[i].obras[k + 1];
}
lista_autores[i].num_obras--;
printf("Obra eliminada exitosamente.\n"); return;
}
}
printf("Obra no encontrada.\n"); return;
}
}
printf("Autor no encontrado.\n");}
void eliminar_autor() { char nombre_autor[NOMBRE_MAX];
printf("Ingrese el nombre del autor a eliminar: "); scanf(" %[^\n]", nombre_autor);
for (int i = 0; i < num_autores; i++) { if (strcmp(lista_autores[i].nombre, nombre_autor) == 0) { // Mover los autores restantes hacia adelante
for (int j = i; j < num_autores - 1; j++) { lista_autores[j] = lista_autores[j + 1];
}
num_autores--;
printf("Autor y sus obras eliminados exitosamente.\n"); return;
}
}
printf("Autor no encontrado.\n");}
void mostrar_menu() { printf("\nMenu:\n"); printf("1. Agregar Autor\n"); printf("2. Agregar Obra\n"); printf("3. Buscar Autor por Obra\n"); printf("4. Eliminar Obra\n"); printf("5. Eliminar Autor\n"); printf("6. Salir\n");}
int main() { int opcion;
do { mostrar_menu();
printf("Seleccione una opción: "); scanf("%d", &opcion);
switch (opcion) { case 1:
agregar_autor();
break;
case 2:
agregar_obra();
break;
case 3:
buscar_autor_por_obra();
break;
case 4:
eliminar_obra();
break;
case 5:
eliminar_autor();
break;
case 6:
printf("Saliendo del programa.\n"); break;
default:
printf("Opción no válida. Intente de nuevo.\n"); }
} while (opcion != 6);
return 0;
}