#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "listaLibros.h"
#include "fichero.h"
void FechaActual(char cad[])
{
time_t t; /* Tipo de dato para almacenar TIEMPO */
struct tm *f; /* Estructura para datos de tipo FECHA y HORA */
int d,m,a;
time(&t); /* Obtiene el día y hora actual en segundos */
f = localtime( &t ); /* Convierte el tiempo (día y hora) en la estructura 'tm' */
d=f->tm_mday; /* 'tm_mday' es el día del mes (de 1 a 31) */
m=f->tm_mon + 1; /* 'tm_mom' va de 0 a 11 (0 = Enero) */
a=f->tm_year + 1900; /* 'tm_year' es el año actual, menos 1900 */
sprintf(cad,"%d/%d/%d",d,m,a);
}
void Cabecera(char *cad)
{
system("cls");
printf("-----------------------------\n");
printf("GESTION DE LIBROS Y PRESTAMOS\n");
printf("-----------------------------\n");
printf("%s\n", cad);
printf("-----------------------------\n\n");
}
void main()
{
TListaLibros lista;
TNodoLibro *nodo;
int i,j;
char cad[100];
char aux[100];
Inicializar(&lista);
if(!LeerFichero(&lista))
{
printf("ERROR: No se puede leer el fichero 'biblioteca.txt'\n\n");
return; /* el programa termina */
}
while(1)
{
Cabecera(" * * * Menu Principal * * * ");
printf("1- Alta de nuevo libro\n");
printf("2- Baja de un libro\n");
printf("3- Prestamo de libros\n");
printf("4- Devolucion de libros\n");
printf("5- Listado de libros\n");
printf("6- Listado de morosos\n");
printf("7- Guardar fichero\n");
printf("8- Salir\n\n");
printf("Seleccione opcion: ");
gets(cad);
if(cad[1]!='\0')
cad[0]='*';
switch(cad[0])
{
/************************
*CASO 1: ALTA DE LIBROS*
************************/
case '1':
Cabecera(" * * Alta de Nuevo Libro * * ");
if((nodo=malloc(sizeof(TNodoLibro))) == NULL)
{
printf("ERROR: No queda memoria para mas libros\n");
printf("(Pulse [INTRO]) ");
gets(cad);
break; /* Esto sale del 'case' y del 'switch' */
}
printf(" Titulo: ");
gets(nodo->titulo);
printf(" Autor: ");
gets(nodo->autor);
printf(" Editorial: ");
gets(nodo->editorial);
printf("Año Edicion: ");
gets(cad);
nodo->anyoEdicion=atoi(cad);
printf(" Tema: ");
gets(nodo->tema);
printf("\nEsta todo Correcto?\n");
printf("(Pulse 's'+[INTRO] para guardar libro, cualquier otro para cancelar) ");
gets(cad);
if(cad[0]=='s' && cad[1]=='\0')
{
strcpy(nodo->prestadoA,"[nadie]");
strcpy(nodo->fechaPrestamo,"00/00/0000");
Insertar(&lista,0,nodo);
}
else
free(nodo); /* Si el libro no se guarda liberamos la memoria */
break;
/************************
*CASO 2: BAJA DE LIBROS*
************************/
case '2':
Cabecera(" * * * Baja de Libro * * * ");
printf("Introduzca el numero del libro a eliminar: ");
gets(cad);
i=atoi(cad);
if((nodo=Consultar(&lista,i)) == NULL)
{
printf("El libro introducido no existe, no se puede eliminar\n");
printf("(Pulse [INTRO] para continuar) ");
gets(cad);
}
else
{
printf("El libro seleccionado es este:\n\n");
printf(" Titulo: %s\n",nodo->titulo);
printf(" Autor: %s\n",nodo->autor);
printf(" Editorial: %s\n",nodo->editorial);
printf("Año Edicion: %d\n",nodo->anyoEdicion);
printf(" Tema: %s\n",nodo->tema);
printf(" Prestado a: %s\n",nodo->prestadoA);
printf("F. Prestamo: %s\n\n",nodo->fechaPrestamo);
printf("Desea elemininar este libro?\n");
printf("(Pulse 's'+[INTRO] para eliminar, cualquier otro para continuar)");
gets(cad);
if(cad[0]=='s' && cad[1]=='\0')
Eliminar(&lista,i);
}
break;
/****************************
*CASO 3: PRESTAMO DE LIBROS*
****************************/
case '3':
Cabecera(" * * * Prestamo Libros * * * ");
printf("Introduzca el numero del libro a prestar: ");
gets(cad);
i=atoi(cad);
if((nodo=Consultar(&lista,i)) == NULL)
{
printf("El libro introducido no existe, no se puede prestar\n");
printf("(Pulse [INTRO] para continuar) ");
gets(cad);
}
else if(strcmp(nodo->prestadoA,"[nadie]")!=0)
{
printf("El libro introducido '%s' ya esta prestado\n\n",nodo->titulo);
printf("Prestado a: %s\n",nodo->prestadoA);
printf("F.Prestamo: %s\n\n",nodo->fechaPrestamo);
printf("(Pulse [INTRO] para continuar) ");
gets(cad);
}
else
{
printf("Datos del libro:\n\n");
printf(" Titulo: %s\n",nodo->titulo);
printf(" Autor: %s\n",nodo->autor);
printf("Editorial: %s\n\n",nodo->editorial);
printf("Introduzca la siguiente informacion:\n");
printf("Prestado a: ");
gets(nodo->prestadoA);
FechaActual(aux);
printf("F.Prestamo: %s\n\n",aux);
printf("Desea formalizar este prestamo?\n");
printf("(Pulse 's'+[INTRO] para prestar, cualquier otro para continuar)");
gets(cad);
if(cad[0]=='s' && cad[1]=='\0')
strcpy(nodo->fechaPrestamo,aux);
else
strcpy(nodo->prestadoA,"[nadie]");
}
break;
/******************************
*CASO 4: DEVOLUCION DE LIBROS*
******************************/
case '4':
Cabecera(" * * Devolucion Libros * * ");
printf("Introduzca el numero del libro a devolver: ");
gets(cad);
i=atoi(cad);
if((nodo=Consultar(&lista,i)) == NULL)
{
printf("El libro introducido no existe\n");
printf("(Pulse [INTRO] para continuar) ");
gets(cad);
}
else if(strcmp(nodo->prestadoA,"[nadie]")==0)
{
printf("El libro introducido '%s' no esta prestado\n\n",nodo->titulo);
printf("(Pulse [INTRO] para continuar) ");
gets(cad);
}
else
{
printf("Datos del libro:\n\n");
printf(" Titulo: %s\n",nodo->titulo);
printf(" Autor: %s\n",nodo->autor);
printf(" Editorial: %s\n",nodo->editorial);
printf("Prestado a: %s\n",nodo->prestadoA);
printf("F.Prestamo: %s\n\n",nodo->fechaPrestamo);
printf("Desea formalizar esta devolucion?\n");
printf("(Pulse 's'+[INTRO] para devolver, cualquier otro para continuar)");
gets(cad);
if(cad[0]=='s' && cad[1]=='\0')
{
strcpy(nodo->fechaPrestamo,"00/00/0000");
strcpy(nodo->prestadoA,"[nadie]");
}
}
break;
/***************************
*CASO 5: LISTADO DE LIBROS*
***************************/
case '5':
i=0;
while(i<Longitud(&lista))
{
Cabecera(" * * Listado de Libros * * ");
for( j=0 ; j<5 && i<Longitud(&lista) ; j++ )
{
nodo=Consultar(&lista,i);
if(strcmp(nodo->prestadoA,"[nadie]")==0)
strcpy(aux," ");
else
strcpy(aux,"[P]");
printf("%3d - %s %s\n",i,aux,nodo->titulo);
printf(" %s\n\n",nodo->autor);
i++;
}
if(i<Longitud(&lista))
{
printf("[P]: Prestado\n");
printf("* Pulse 'm'+[INTRO] para volver al menu, cualquier otro para seguir. ");
gets(cad);
if(cad[0]=='m' && cad[1]=='\0')
i=Longitud(&lista);
}
else
{
printf("[P]: Prestado\n");
printf("Fin Listado - Pulse [INTRO] para volver al menu: ");
gets(cad);
}
}
break;
/****************************
*CASO 6: LISTADO DE MOROSOS*
****************************/
case '6':
Cabecera(" * * * Listado Morosos * * * ");
printf("Esta parte queda como ejercicio\n");
printf("Pulse [INTRO] para volver al menu: ");
gets(cad);
break;
/***************************
*CASO 7: GUARDAR LOS DATOS*
***************************/
case '7':
Cabecera(" * * * Guardar Fichero * * * ");
if(!GuardarFichero(&lista))
printf("\n*** ERROR ***\nNO SE HA PODIDO GUARDAR LA INFORMACIÓN\n\n");
else
printf("\nDATOS GUARDADOS\n\n");
printf("Pulse [INTRO] para volver al menu: ");
gets(cad);
break;
/************************
*CASO 8: SALIR *
************************/
case '8':
if(!GuardarFichero(&lista))
printf("*** ERROR***\nNO SE HA PODIDO GUARDAR LA INFORMACIÓN\n\n");
else
printf("\n\nDATOS GUARDADOS\n\nAdios\n\n\n");
Vaciar(&lista);
return; /* el programa termina */
break;
default:
putchar(7);
break;
}
}
}