C/Visual C - necesito un programa

 
Vista:

necesito un programa

Publicado por luis enrique (3 intervenciones) el 27/09/2001 04:32:06
hola a todos , por favor necesito que me regalen el siguiente programa en lenguaje c ,
se trata de :
elaborar un programa que tenga
una lista principal que contenga nombre de autores con opcion para crear estructura nombre del autor ; entrar los titulos de tales autores.
*dado el nombre de una obra decir cual es el autor .
*agregar una nueva obra
*eliminar una obra
*eliminar un autor
claro teniendo en cuenta que debe quedar eliminado las obras de tal autor eliminado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Programa de gestión de autores y obras en C

Publicado por Alejandro (913 intervenciones) el 15/10/2024 23:57:29
A continuación, te presento un ejemplo de un programa en C que cumple con los requisitos que has mencionado. Este programa permite gestionar una lista de autores y sus obras, incluyendo la capacidad de agregar, eliminar y buscar obras y autores.

Código del programa



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#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;
}

Explicación del código



1. Estructuras:
- `Obra`: Representa una obra con un título.
- `Autor`: Representa un autor con su nombre y un [i]array
de obras.

2. Funciones:
- `agregar_autor()`: Permite agregar un nuevo autor.
- `agregar_obra()`: Permite agregar una obra a un autor existente.
- `buscar_autor_por_obra()`: Busca el autor de una obra dada.
- `eliminar_obra()`: Elimina una obra de un autor.
- `eliminar_autor()`: Elimina un autor y todas sus obras.
- `mostrar_menu()`: Muestra el menú de opciones.

3. Menú principal: Un bucle `do-while` que permite al usuario seleccionar opciones hasta que decida salir.

Consideraciones



- Asegúrate de compilar el programa en un entorno que soporte C, como Turbo C o cualquier compilador moderno.
- Puedes mejorar el manejo de errores y la validación de entradas según sea necesario.

¡Saludos, Luis!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar