Sistema Registro de Autores

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 :frowning: \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 :frowning: \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;
}