Ver Mensaje Individual
  #7 (permalink)  
Antiguo 30/08/2010, 19:12
Delber
 
Fecha de Ingreso: agosto-2010
Mensajes: 10
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Problema con un error de estructura

Gestion de libros

Código:
#include <cstdlib>
#include <iostream>
#include <string>
#include <conio2.h>
#include "Libreria.h"
struct L_Libros *cap,*aux,*f,*p;
using namespace std;

void Gestion_de_Libros(void)
{ 

int op;    
struct Libros lib;
do{
    gotoxy(36,5); cout << " GESTION DE LOS LIBROS " << endl;
    
    gotoxy(33,6); cout << " -------------------------- " << endl; 
    
    gotoxy(33,7); cout << " 1-Introducir Libros " << endl; 
    
    gotoxy(33,8); cout << " 2-Borrar Libros  " << endl;
    
    gotoxy(33,9); cout << " 3-Visualizar Libros  " << endl;    
    
    gotoxy(33,10); cout << " 4-Volver al menu principal  " << endl;
     
    gotoxy(33,11); cout << " -------------------------- " << endl; 
    
    gotoxy(33,13); cout << " Que opcion desea elegir? ";
    cin >> op;
    
    switch(op){
               case 1: poner_libros();
                       break;
               case 2: Borrar_libros();
                       break;
               case 3: Visualizar_libros();
                       break;
               case 4: system("PAUSE");
                       return;
                       exit(1);
               }
}while(op!=4);
               system("PAUSE");
}
void poner_libros(void)
{
   aux=(struct L_Libros *)malloc(sizeof(struct L_Libros));
  clrscr( );
   cout<< " Introduce el Codigo del Libro: ";
   cin>>aux->cod_libro;
   aux->seg=NULL;
   if (cap==NULL)
       cap=aux;
   else if (cap->cod_libro > aux->cod_libro)
        {
           aux->seg=cap;
           cap=aux;
         }
         else
            {
              p=f=cap;
              while (p->cod_libro < aux->cod_libro && p->seg!=NULL)
                 {
                   if (p==cap) p=p->seg;
                   else
                      {
                        p=p->seg;
                        f=f->seg;
                       }
                  }

                  if(p->seg==NULL && p->cod_libro<aux->cod_libro)
                    {
                     aux->seg=p->seg;
                     p->seg=aux;
                     }
                  else
                    {
                     aux->seg=f->seg;
                     f->seg=aux;
                     }
            }

   cout<< " Introduce el Codigo del Cliente: ";
   cin>>aux->cod_clientes;
   aux->seg=NULL;
   if (cap==NULL)
       cap=aux;
   else if (cap->cod_clientes > aux->cod_clientes)
        {
           aux->seg=cap;
           cap=aux;
         }
         else
            {
              p=f=cap;
              while (p->cod_clientes < aux->cod_clientes && p->seg!=NULL)
                 {
                   if (p==cap) p=p->seg;
                   else
                      {
                        p=p->seg;
                        f=f->seg;
                       }
                  }

                  if(p->seg==NULL && p->cod_clientes<aux->cod_clientes)
                    {
                     aux->seg=p->seg;
                     p->seg=aux;
                     }
                  else
                    {
                     aux->seg=f->seg;
                     f->seg=aux;
                     }
            }
   cout<< " Introduce el nombre del Libro : ";
   cin>>aux->nom_libro;
   aux->seg=NULL;
   if (cap==NULL)
       cap=aux;
   else if (cap->nom_libro > aux->nom_libro)
        {
           aux->seg=cap;
           cap=aux;
         }
         else
            {
              p=f=cap;
              while (p->nom_libro < aux->nom_libro && p->seg!=NULL)
                 {
                   if (p==cap) p=p->seg;
                   else
                      {
                        p=p->seg;
                        f=f->seg;
                       }
                  }

                  if(p->seg==NULL && p->nom_libro<aux->nom_libro)
                    {
                     aux->seg=p->seg;
                     p->seg=aux;
                     }
                  else
                    {
                     aux->seg=f->seg;
                     f->seg=aux;
                     }
            }
 cout<< " Introduce el Autor: ";
   cin>>aux->autor;
   aux->seg=NULL;
   if (cap==NULL)
       cap=aux;
   else if (cap->autor > aux->autor)
        {
           aux->seg=cap;
           cap=aux;
         }
         else
            {
              p=f=cap;
              while (p->autor < aux->autor && p->seg!=NULL)
                 {
                   if (p==cap) p=p->seg;
                   else
                      {
                        p=p->seg;
                        f=f->seg;
                       }
                  }

                  if(p->seg==NULL && p->autor<aux->autor)
                    {
                     aux->seg=p->seg;
                     p->seg=aux;
                     }
                  else
                    {
                     aux->seg=f->seg;
                     f->seg=aux;
                     }
            }
    cout<< " Introduce la Editorial: ";
   cin>>aux->editorial;
   aux->seg=NULL;
   if (cap==NULL)
       cap=aux;
   else if (cap->editorial > aux->editorial)
        {
           aux->seg=cap;
           cap=aux;
         }
         else
            {
              p=f=cap;
              while (p->editorial < aux->editorial && p->seg!=NULL)
                 {
                   if (p==cap) p=p->seg;
                   else
                      {
                        p=p->seg;
                        f=f->seg;
                       }
                  }

                  if(p->seg==NULL && p->editorial<aux->editorial)
                    {
                     aux->seg=p->seg;
                     p->seg=aux;
                     }
                  else
                    {
                     aux->seg=f->seg;
                     f->seg=aux;
                     }
            }
            system("cls");
            
}

void Borrar_libros(void)
{
int var;
    if (cap==NULL) return;
    clrscr( );
    cout<<"Introduce el codigo de libro a eliminar: ";
    cin>>var;
    if (cap->cod_libro==var)
      {
        p=cap;
        cap=cap->seg;
        free(p);
      }
   else
     {
       p=f=cap;
      while (p->cod_libro != var && p->seg!=NULL)
         {
            if (p==cap)p=p->seg;
            else
              {
                p=p->seg;
                f=f->seg;
              }
         }
       if (p->seg==NULL && p->cod_libro!=var)
          {
            cin.get();
            cout<<"Este valor no esta en la lista";
            cin.get();
            cout<<endl;
            return;
          }
       f->seg=p->seg;
       free(p);
    }
              system("cls");
}

void Visualizar_libros(void)
{
   if (cap==NULL)
      {
        cout<<"La llista esta vacia";
        cin.get();
        return;
      }
  clrscr( );
  aux=cap;
  while (aux!=NULL)
    {
      cout<<aux->nom_libro;
      aux=aux->seg;
     }
   cin.get( );
   system("cls");
}

void crear_lista_libros(void)
{
   struct L_Libros lib;
   FILE *f1;
   
   if((f1=fopen("libros.dat", "rb"))==NULL){
   cout << "El archivo \"libros.dat\" no se puede leer." << endl;
   cin.get();
   exit(1);
   }
   
   fread(&lib, sizeof(lib),1,f1);
   
   while(!feof(f1)){
    aux=(struct L_Libros *)malloc(sizeof(struct L_Libros));   
    aux->cod_libro=lib.cod_libro;
    strcpy(aux->nom_libro,lib.nom_libro) ;
    strcpy(aux->autor,lib.autor);   
    strcpy(aux->editorial,lib.editorial);   
    aux->seg=NULL;
   
    if (cap==NULL)
     cap=aux;
    else if (cap->cod_libro > aux->cod_libro){
     aux->seg=cap;
     cap=aux;
     }else{
      p=f=cap;
      while (p->cod_libro < aux->cod_libro && p->seg!=NULL){
       if (p==cap) p=p->seg;
       else{
        p=p->seg;
        f=f->seg;
       }
      }

    if(p->seg==NULL && p->cod_libro<aux->cod_libro){
     aux->seg=p->seg;
     p->seg=aux;
     }else{
      aux->seg=f->seg;
      f->seg=aux;
     }
    }
    
    fread(&lib, sizeof(lib),1,f1);
        
   }
   fclose(f1);
}

void guardar_lista_libros(void)
{
 struct L_Libros lib;
 FILE *f1;
     
 if((f1=fopen("libros.dat", "wb"))==NULL){
  cout << "El archivo \"libros.dat\" no se puede leer." << endl;
  cin.get();
  exit(1);
  }

    aux=cap;
    while(!feof(f1)){
    aux->cod_libro=lib.cod_libro;
    strcpy(lib.nom_libro,aux->nom_libro);
    strcpy(lib.autor,aux->autor);   
    strcpy(lib.editorial,aux->editorial);  
    fwrite(&lib, sizeof (lib),1,f1);
    aux->seg=NULL;
   
   }
   
   fclose(f1);
}

[/CODE]