Catálogo de Libros

Iniciado por Pa531no5, Marzo 16, 2010, 01:50:28 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Marzo 16, 2010, 01:50:28 PM Ultima modificación: Febrero 08, 2014, 06:13:15 PM por Expermicid
Gestion de Catalogo de Libros, siendo 100 el número máximo de titulos.


CATALOGO DE LIBROS
------------------
1.-Añadir titulos al catalogo
2.-Consultar si existe un libro
3.-Consultar precios
4.-Modificar precios
5.-Visualizar el catalogo
6.-Finalizar el proceso
Teclee la opcion de proceso deseada

Código: c
#include "stdio.h"
#include "string.h"

#define ELEMENTOS 100

struct LIBRO
{
long int codigo;
char titulo[20];
char autor[20];
int precio;
};

int fopcion();

int finsertar_libros(int elementos, struct LIBRO *pvlibros);
void fconsultar_libros(int elementos, struct LIBRO *pvlibros);
void fconsultar_precios(int elementos, struct LIBRO *pvlibros);
void fmodificar_precios(int elementos, struct LIBRO *pvlibros);
void fvisualizar_libros(int elementos, struct LIBRO *pvlibros);

struct LIBRO fpedir_datos();
long int fpedir_codigo();
void fpedir_titulo(char*ptitulo);
void fpedir_autor(char*pautor);
int fpedir_precio();

void fvisualizar(int elementos,struct LIBRO*pvlibros);
int fbusqueda_lineal_t(int elementos,char*ptitulo,char*pautor,struct LIBRO*pvlibros);
int fbusqueda_lineal_c(int elementos,long int codigo,struct LIBRO*pvlibros);
void fordenar_baraja(int elementos, struct LIBRO*pvlibros);

void main()
{
int opcion;
int elementos=0;
struct LIBRO v_libros[ELEMENTOS];

do
{
  opcion=fopcion();
  switch(opcion)
  {
   case 1: elementos = finsertar_libros (elementos,v_libros);
     break;
   case 2:fconsultar_libros(elementos,v_libros);
     break;
   case 3:fconsultar_precios(elementos,v_libros); 
     break;
   case 4:fmodificar_precios(elementos,v_libros); 
     break;
   case 5:fvisualizar_libros(elementos,v_libros); 
     break;
   case 6:puts("\nFinal de p1450303");
     break;
   default : puts("\nOpcion erronea");
   }           
  }while(opcion!=6);
}

int fopcion()

{
  int opcion;
  puts("\n C A T A L O G O    D E    L I B R O S"
       "\n 1.-Añadir titulos al catalogo de libros"
       "\n 2.-Consultar si existe un libro"
       "\n 3.-Consultar precios"
       "\n 4.-Modificar precios"
       "\n 5.-Visualizar el catalogo"
       "\n 6.-Finalizar el proceso"
       "\n Teclee la opcion de proceso deseada");
     scanf("%d",&opcion);
     return(opcion);
     
   }
   
  int finsertar_libros(int elementos,struct LIBRO*pvlibros)
  {
   char res;
   
   do
   {
    if(elementos==ELEMENTOS)
     {
      puts("\nNo hay espacio para almacenar mas libros");
      goto fin;
      }
     pvlibros[elementos]=fpedir_datos();
     elementos++;
     puts("\n¿Quieres añadir otro titulo al catalogo?");
     fflush(stdin);
     res=getchar();
     }while(res=='s'||res=='S');
     fin:puts("\nFinal de la opcion de proceso 1");
     return(elementos);
     }
     
  struct LIBRO fpedir_datos()
  {
   struct LIBRO libro;
   
   libro.codigo=fpedir_codigo();
   fpedir_titulo(libro.titulo);
   fpedir_autor(libro.autor);
   libro.precio=fpedir_precio();
   return(libro);
   }
   
   long int fpedir_codigo()
   {
   long int codigo;
   puts("\nTeclea codigo del libro");
   scanf("%ld",&codigo);
   return(codigo);
   }
   
   void fpedir_titulo(char *ptitulo)
   {
    puts("\nTeclea titulo del libro");
    fflush(stdin);
    gets(ptitulo);
   }
   
   void fpedir_autor(char*pautor)
   {
    puts("\nTeclea autor del libro");
    fflush(stdin);
    gets(pautor);
   }
   
   int fpedir_precio()
   {
    int precio;
    puts("\nTeclea precio del libro");
    scanf("%d",&precio);
    return(precio);
   }
   
   void fconsultar_libros(int elementos,struct LIBRO * pvlibros)
   {
    int i;
    char titulo[20];
    char autor[30];
    char res;
   
   
    if(elementos==0)
    {
     puts("\nNo existen libros en el catalogo");
     goto fin;
    }
   
    do
    {
     fpedir_titulo(titulo);
     fpedir_autor(autor);
     
     i=fbusqueda_lineal_t(elementos,titulo,autor,pvlibros);
     
     if(i!=-1)
     printf("\nEl libro de titulo %s y autor %s tiene de codigo %ld y precio de %d pts",
      (pvlibros+i)->titulo,(pvlibros+i)->autor,(pvlibros+i)->codigo,(pvlibros+i)->precio);
      else
       printf("\nEl libro de titulo %s y autor %s no existe",titulo,autor);
       
       puts("\n¿Quiere buscar otro libro?");
       fflush(stdin);
       res=getchar();
     
       }while(res=='s'||res=='S');
        fin:puts("\nFinal de la opcion de proceso 2");
        }
       
     int fbusqueda_lineal_t(int elementos,char *ptitulo,char*pautor,struct LIBRO*pvlibros)
     {
      int i;
      i=0;
      while(i<(elementos-1)&&(strcmp(pvlibros->titulo,ptitulo)!=0
           ||strcmp(pvlibros->autor,pautor)!=0))
           
     {
      i++;
      pvlibros++;
     }
                   
     if(strcmp(pvlibros[i].titulo,ptitulo)==0&&
      strcmp(pvlibros[i].autor,pautor)==0)
      return(i);
      else
       return(-1);
      }
     
    void fconsultar_precios(int elementos,struct LIBRO*pvlibros)
    {
     int i;
     long int codigo;
     char res;
      if(elementos==0)
       {
        puts("\nNo existen libros en el catalogo");
        goto fin;
        }
       
        do
        {
        codigo=fpedir_codigo();
        i=fbusqueda_lineal_c(elementos,codigo,pvlibros);
       
        if(i!=-1)
         printf("\nEl codigo %ld correspondiente al titulo %s y autor %s y su precio es %d pts",
          (pvlibros+i)->codigo,(pvlibros+i)->titulo,(pvlibros+i)->autor,
          (pvlibros+i)->precio);
          else
         printf("\nEl libro de codigo%ld no existe",codigo);
         
         puts("\n¿Quieres consultar otro precio?");
         fflush(stdin);
         res=getchar();
         }while(res=='s'||res=='S');
         
         fin:puts("\nFinal de la opcion de proceso 3");
         }
         
         
         int fbusqueda_lineal_c(int elementos,long int codigo,struct LIBRO*pvlibros)
         {
          int i;
          i=0;
          while(i<(elementos-1)&& pvlibros->codigo!=codigo)
          {
          i++;
          pvlibros++;
          }
         
          if(pvlibros->codigo==codigo)
          return(i);
          else
          return(-1);
          }
         
          void fmodificar_precios(int elementos,struct LIBRO*pvlibros)
          {
          int i;
          long int codigo;
          int precio;
          char res;
         
          if(elementos==0)
          {
           puts("\nNo existen libros en el catalogo");
           goto fin;
           }
           
           do
           {
            codigo=fpedir_codigo();
            i=fbusqueda_lineal_c(elementos,codigo,pvlibros);
           
            if(i!=-1)
            {
             precio=fpedir_precio();
             printf("\nEl codigo %ld correspondiente al titulo %s y autor%s que tiene precio %d pts pasa a costar %s pots",
              (pvlibros+i)->codigo,(pvlibros+i)->titulo,(pvlibros+i)->autor,
              (pvlibros+i)->precio,precio);
              (pvlibros+i)->precio=precio;
              }
              else
              printf("\nEl libro de codigo %ld no existe",codigo);
             
              puts("\n¿Quieres modificar el precio de otro libro?");
              fflush(stdin);
              res=getchar();
             
             
            }while(res=='s'||res=='S');
           
            fin:puts("\nFinal de la opcion de proceso 3");
           
            }
           
           
            void fvisualizar_libros(int elementos,struct LIBRO*pvlibros)
            {
             int i;
             struct LIBRO wpvlibros[ELEMENTOS];
             
             if(elementos==0)
             {
              puts("\nNo existen libros en el catalogo");
              goto fin;
             } 
           
        for (i=0;i<elementos;i++)
         wpvlibros[i] = *(pvlibros+i);
         
         fordenar_baraja(elementos,wpvlibros);
         
         fvisualizar(elementos,wpvlibros);
         fin:puts("\nFinal de la opcion de proceso 5");
         
         }
         
      void fvisualizar(int elementos,struct LIBRO*pvlibros)
      {
       int i;
       
       puts("    CATALOGO DE LIBROS");
       puts("    ------------------");
       puts("  TITULO   AUTOR   PRECIO");
       puts("  ------   -----   ------");
       for (i=0;i<elementos;i++,pvlibros++)
         printf("\n %s  %s  %d",pvlibros->titulo,pvlibros->autor,pvlibros->precio);
           
        }
       
        void fordenar_baraja(int elementos,struct LIBRO*pvlibros)
        {
         int i;
         int j;
         struct LIBRO aux;
         struct LIBRO*pj;
         
         
         for (i=1,pvlibros++;i<elementos;i++,pvlibros++)
         {
          aux=(*pvlibros);
          j = i-1;
          pj=pvlibros-1;
          while(j > 0&& strcmp (pj -> titulo,aux.titulo)>0)
          {
           *(pj+1)=*(pj);
           j--;
           pj--;
          }
           if(strcmp(pj->titulo,aux.titulo)>0)
           {
            *(pj+1)=*(pj);
            *(pj) = aux;
           }
            else
            *(pj+1)=aux;
         }
      }