Boa noite to com trabalho e to tendo dificuldade
Cadastre autores: código, nome, sobrenome;
Remover autores pelo código;
Consultar um autor pelo código;
Listar todos os autores;
O problema que ao remover os autores acaba remove todos
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <locale.h>
/Fazer um sistema que:
Cadastre autores: codigo, nome, sobrenome;
Remover autores pelo codigo;
Consultar um autor pelo cC3digo;
Listar todos os autores;/
int i, j, posicao = 0;
struct Autor
{
int codigo;
char nome[20];
char sobrenome[40];
};
struct Autor a[70]; // ???
// Printa o menu na tela
int
exibeMenu ()
{
system (“cls”);
printf ("* SISTEMA DE REGISTRO DE AUTORES *\n\n") /
printf (“1 - Cadastrar autor\n”);
printf (“2 - Detalhar autor\n”);
printf (“3 - Listar todos os autores\n”);
printf (“4 - Remover autor\n”);
printf (“5 - Sair\n\n”);
printf ("Informe a opcaoo: ");
return 0;
}
// Cadastrar autores | posicao substitui o 'for’
int
cadastroAutores (int posicao)
{
system (“cls”);
printf ("[Cadastramento de autor]\n\n");
// Codigo cadastrado automaticamente
a[posicao].codigo = posicao + 1;
printf (“Nome do autor: “);
setbuf (stdin, NULL); // Limpa a memC3ria
scanf (”%s”, &a[posicao].nome);
printf (“Sobrenome do autor: “);
setbuf (stdin, NULL); // Limpa a memC3ria
scanf (”%s”, &a[posicao].sobrenome);
system (“cls”);
printf (“Autor: %s | CC3digo: %d\n\n”, a[posicao].nome, a[posicao].codigo);
printf (“Pressione enter para continuar…”);
getchar ();
getchar ();
return 0;
}
// Pesquisa o autor pelo codigo
int
detalharAutor (int tamanho_struct)
{
int codigo, posicao, busca = 0;
system (“cls”);
if (tamanho_struct == 0)
{
printf (“Nenhum autor registrado ainda \n\n”);
}
else
{
printf ("[Dados do autor]\n\n");
printf ("Informe o cC3digo do autor: ");
scanf ("%d", &codigo);
for (i = 0; i < tamanho_struct; i++)
{
if (codigo == a[i].codigo)
{
posicao = i;
busca = 1;
}
}
system ("cls");
if (busca == 0)
{
printf ("codigo informado estC! incorreto");
}
else
{
printf ("O código %d corresponde ao autor '%s %s'\n",
a[posicao].codigo, a[posicao].nome, a[posicao].sobrenome);
}
}
printf (“Pressione enter para continuar…”);
getchar ();
getchar ();
return 0;
}
// Exibe todos os autores
int
listarAutores (int tamanho_struct)
{
system (“cls”);
if (tamanho_struct == 0)
{
printf (“Nenhum autor registrado ainda \n\n”);
}
else
{
printf ("* Lista dos autores cadastrados *\n\n");
for (i = 0; i < tamanho_struct; i++)
{
printf ("Cod: %d\t| Nome: %s\t| Sobrenome: %s\t|\n", a[i].codigo,
a[i].nome, a[i].sobrenome);
}
}
printf (“Pressione enter para continuar…”);
getchar ();
getchar ();
return 0;
}
// Remover autor
int
Remover (int tamanho_struct)
{
int codigo,busca, j;
system (“cls”);
printf (“autores cadastrados:\n”);
int listarAutores (int tamanho_struct);
printf (“digite o código do autor para excluir:\n”);
scanf ("%d", &codigo);
for (i = 0; i < tamanho_struct; i++)
{
if (codigo == a[i].codigo){
posicao = i;
busca = 1;
for (j = i; j < tamanho_struct - 1; j++)
a[j].codigo = a[j + 1].codigo;
tamanho_struct--;
}
printf ("codigo = %d\n", a[i].codigo);
}
getchar ();
getchar ();
}
int
main ()
{
setlocale (LC_ALL, “portuguese”);
int opcao = 0;
int tamanho_struct = posicao;
exibeMenu ();
do
{
scanf ("%d", &opcao);
switch (opcao)
{
case 1: //Cadastrar
cadastroAutores (posicao);
posicao++;
return main ();
break;
case 2: //Detalhar autor
detalharAutor (tamanho_struct);
return main ();
break;
case 3: //Listar todos os autores
listarAutores (tamanho_struct);
return main ();
break;
case 4: // Remover autor
Remover (posicao);
return main ();
break;
case 5: //Sair do programa
system ("cls");
printf ("* Obrigado por utilizar nosso sistema *\n\n");
return 0;
break;
default:
system ("cls");
printf ("OpC'C#o invC!lida, tente novamente.\n\n");
printf ("Pressione enter para continuar...");
getchar ();
getchar ();
return main ();
}
}
while (opcao != 5);
return 0;
}