PD. Por curiosidad mire el codigo y es un aborto de la naturaleza.
sos un poeta eternal  
  
 #include "conio.h"
 
primero que todo eso no es estandar, aun si lo quisieras mantener lo tenes que rodear
por <> ya que esta en la ruta include por defecto, y si estas escribiendo c++ (supongo por la
extencion) no le tenes que poner el .h
 es necesario?
es recomendad hacer
int main( int argc, char **argv )
 
 y retornar un codigo asi se sabe cual 
fue el codigo de finalizacion del programa (por lo general 0)
 
    textattr(30);
 
    gotoxy(28,8);
 
    cprintf("Menu Principal\n");
 
    gotoxy(28,9);
 
    textattr(14);
 
    cprintf("1");
 
    textattr(7);
 
    cprintf(" - ADICIONAR\n");
...
 
 
no notas un poco de funcionalidad repetida? no te parece que podrias hacer una funcion?
if(bib) bib=NULL; delete bib;
 
 ???
un consejo no uses variable globales
 
void listar() //FUNCION PARA LISTAR LOS LIBROS
{
  clrscr();
  int y = 2;
 
  for( int i = 0; i < tam; i++ )
  {
    if( bib[ i ] )
    {
      g( 1, 1 );
      textcolor( GREEN );
      cputs("CODIGO TITULO           AUTOR           EDITORIAL      GENERO      FECHA  " );
 
       g(1,y);
       cout<<bib[i]->cod;
       
       g(8,y);
       cout<<bib[i]->tit;
 
            g(25,y);  
      cout<<bib[i]->aut;
 
            g(41,y);
      cout<<bib[i]->edi;
 
      g(56,y);
      cout<<bib[i]->gen;
 
      g(66,y);
      cout<<bib[i]->fec;
 
      y++;
    }
  }
 
  getch();
  clrscr();
}
 
 
(hice lo mejor que pude con las tabulaciones)
es mejor que
 
void listar() //FUNCION PARA LISTAR LOS LIBROS
 
{clrscr();int y=2;
 
 for(int i=0;i<tam;i++)
 
  {if(bib[i])
 
   {
 
    g(1,1);textcolor(GREEN);cputs("CODIGO TITULO           AUTOR           EDITORIAL      GENERO      FECHA  ");
 
    g(1,y);cout<<bib[i]->cod;
 
    g(8,y);cout<<bib[i]->tit;
 
    g(25,y);cout<<bib[i]->aut;
 
    g(41,y);cout<<bib[i]->edi;
 
    g(56,y);cout<<bib[i]->gen;
 
    g(66,y);cout<<bib[i]->fec;
 
    y++;
 
   }
 
  }
 
  getch();clrscr();
 
}
 
 
etc