Enzo Soalivery
@chico_pinico
Brazil, Uberaba
Institution: IFTM
#include <stdio.h> #include <string.h> #include <stdlib.h> struct livro { int id; char titulo[31]; char categoria[16]; int num_autores; char autor1[31]; char autor2[31]; char autor3[31]; int exemplares_totais; int exemplares_emprestados; }; typedef struct livro Livro; void ordenar_titulos(char titulos[][31], int contador) { int i = 0; while (i < contador - 1) { int j = 0; while (j < contador - 1 - i) { if (strcmp(titulos[j], titulos[j + 1]) > 0) { char temp[31]; strcpy(temp, titulos[j]); strcpy(titulos[j], titulos[j + 1]); strcpy(titulos[j + 1], temp); } j++; } i++; } } void imprimir_disponiveis(Livro livros[], int n, char *categoria) { char titulos[500][31]; int contador = 0; int i = 0; while (i < n) { if (strcmp(livros[i].categoria, categoria) == 0 && livros[i].exemplares_totais > livros[i].exemplares_emprestados) { strcpy(titulos[contador], livros[i].titulo); contador++; } i++; } ordenar_titulos(titulos, contador); printf("Categoria: %s\n", categoria); i = 0; while (i < contador) { int j = 0; while (j < n) { if (strcmp(titulos[i], livros[j].titulo) == 0 && livros[j].exemplares_totais > livros[j].exemplares_emprestados) { printf("- %s (%d): %d/%d exemplares\n", livros[j].titulo, livros[j].id, livros[j].exemplares_totais - livros[j].exemplares_emprestados, livros[j].exemplares_totais); } j++; } i++; } printf("\n"); } void imprimir_livros_autor(Livro livros[], int n, char *autor) { char titulos[500][31]; int contador = 0; int i = 0; while (i < n) { int encontrado = 0; if (strcmp(livros[i].autor1, autor) == 0 || (livros[i].num_autores >= 2 && strcmp(livros[i].autor2, autor) == 0) || (livros[i].num_autores == 3 && strcmp(livros[i].autor3, autor) == 0)) { strcpy(titulos[contador], livros[i].titulo); contador++; encontrado = 1; } i++; } ordenar_titulos(titulos, contador); printf("Autor: %s\n", autor); i = 0; while (i < contador) { int j = 0; while (j < n) { if (strcmp(titulos[i], livros[j].titulo) == 0) { printf("- %s (%s): %d/%d exemplares\n", livros[j].titulo, livros[j].categoria, livros[j].exemplares_totais - livros[j].exemplares_emprestados, livros[j].exemplares_totais); } j++; } i++; } printf("\n"); } void imprimir_status(Livro livros[], int n, int id) { int i = 0; int encontrado = 0; while (i < n && !encontrado) { if (livros[i].id == id) { printf("Livro: %s\n", livros[i].titulo); printf("Categoria: %s\n", livros[i].categoria); printf("Autores: %s", livros[i].autor1); if (livros[i].num_autores >= 2) { printf(", %s", livros[i].autor2); } if (livros[i].num_autores == 3) { printf(", %s", livros[i].autor3); } printf("\n"); int disponiveis = livros[i].exemplares_totais - livros[i].exemplares_emprestados; printf("Exemplares: %d/%d (%.0f%% disponibilidade)\n\n", disponiveis, livros[i].exemplares_totais, (float)disponiveis / livros[i].exemplares_totais * 100); encontrado = 1; } i++; } } int main() { Livro livros[500]; int i = 0, num_livros = 0, num_operacoes = 0, num_consultas = 0, emprestar_id, devolver_id; char operacao[15]; while (num_livros < 1 || num_livros > 500) { scanf("%d", &num_livros); } while (num_operacoes < 1 || num_operacoes > 1000) { scanf("%d", &num_operacoes); } while (num_consultas < 1 || num_consultas > 100) { scanf("%d", &num_consultas); } i = 0; while (i < num_livros) { scanf("%d", &livros[i].id); scanf("%s", livros[i].titulo); scanf("%s", livros[i].categoria); scanf("%d", &livros[i].num_autores); scanf("%s", livros[i].autor1); if (livros[i].num_autores >= 2) { scanf("%s", livros[i].autor2); } if (livros[i].num_autores == 3) { scanf("%s", livros[i].autor3); } scanf("%d", &livros[i].exemplares_totais); livros[i].exemplares_emprestados = 0; i++; } i = 0; while (i < num_operacoes) { scanf("%s", operacao); if (strcmp(operacao, "EMPRESTAR") == 0) { scanf("%d", &emprestar_id); int j = 0; int encontrado = 0; while (j < num_livros && !encontrado) { if (livros[j].id == emprestar_id) { if (livros[j].exemplares_totais > livros[j].exemplares_emprestados) { livros[j].exemplares_emprestados++; } encontrado = 1; } j++; } } else if (strcmp(operacao, "DEVOLVER") == 0) { scanf("%d", &devolver_id); int j = 0; int encontrado = 0; while (j < num_livros && !encontrado) { if (livros[j].id == devolver_id) { if (livros[j].exemplares_emprestados > 0) { livros[j].exemplares_emprestados--; } encontrado = 1; } j++; } } i++; } i = 0; while (i < num_consultas) { char consulta[20]; scanf("%s", consulta); if (strcmp(consulta, "DISPONIVEL") == 0) { char categoria[16]; scanf("%s", categoria); imprimir_disponiveis(livros, num_livros, categoria); } else if (strcmp(consulta, "AUTOR") == 0) { char autor[31]; scanf("%s", autor); imprimir_livros_autor(livros, num_livros, autor); } else if (strcmp(consulta, "STATUS") == 0) { int id; scanf("%d", &id); imprimir_status(livros, num_livros, id); } i++; } return 0; }
History of submissions(plaintext version)