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
#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;
}
}