# incluir ltstdlib.h gt
# incluir ltstring.h gt
#Definición pedir prestado 1
#Definir NOBORROW 0
/*Definir estructura del libro*/
Estructura del libro
{
int _ id//Número, único
char _ name[32]; //El nombre del libro no es único.
char _ autor[32]; //El autor del libro no es único.
int _ type//El tipo de libro no es único.
int_status//Estado del libro, prestado o no.
int _ count//El número de veces que se ha prestado un libro
struct Book * _ next//Siguiente libro
Estructura del libro * _ prev/ /Último libro
};
/*definir estructura de lector*/
//estructura de lector
//{ p>
//int _ rid;
//char _ rname[32];
/*Solicitud de directorio para operación*/
char book_menu[][32] =
{
"Gestión de libros",
"Gestión de lectores",
"Gestión de préstamos de libros ",
"Gestión de Devoluciones",
"Consulta y Estadísticas",
"Sistema de Salida",
"Pila",
"",
};
/*Solicitud de directorio para la operación 1*/
char book_menu_sub[][32 ] =
{
"Consulta de libro",
"Pregunta del lector",
"",
} ;
/*Agregar tipo de libro (editorial), mostrar información del usuario*/
char book_types[][32] =
{
"Editor 1",
"Editor 2",
"Editor 3",
"",
p >
};
/*Agregar estado del libro, se mostrará la información del usuario*/
char book_status[][32] =
{
"No rápido",
"Arrendamiento",
"",
};
/* Agregue libros, la identificación se numerará automáticamente*/
int add_books(Book* head, Book* book_for_add)
{
Libro* p = head;
p>if(!p)
return-1;
mientras(p->;_next)
{ p>
p = p- gt;_ siguiente
};
p->;_ siguiente = libro _ para _ agregar
libro _ for _ add-gt;_id = p-gt;_id 1;
book_for_add-gt;_prev = p;
book_for_add-gt; _ next = NULL
libro _ para _ add-gt; _ cuenta = 0;
libro _ para _ add-gt;
Return 0; p>};
/*Agregar lectores, los identificadores se numerarán automáticamente*/
//int add_readers(Reader* head, Reader* Reader_for_add )
//{
//Lector * p = rhead;
//if (! p)
//return-1;
// while(p- gt;_rnext)
// {
/ /p = p- gt;_ rnext
// };
//p- gt;_
rnext = lector _ para _ agregar
//lector _ para _ agregar- gt; _ rid = p- _ id 1
//lector _ para _ agregar-; gt;_ rprev = p;
//reader _ for _ add- gt;_ rnext = NULL
//Return 0;
//} ;
/*Crear una lista vinculada para la gestión de libros*/
Libro*Create_List (Book*Book_Head)
{
if (book_head)
{
book_head-gt;_prev = book_head
book_head-gt;_next = NULL
book_head-gt; _id=1;
book_head-gt;_count=0;
book_head-gt;_status = 0;
}
Volver the book_head;
}
/*Liberar la lista enlazada*/
anular lista libre (Libro* book_head)
{
Libro *p, *p 1;
p = libro _ cabeza
mientras(p)
{
p 1 = p->;_ siguiente
libre(p);
p = p 1;
}
}
/*Imprimir información del libro*/
void print_book(Libro* libro)
{
Printf ("ISBN: d , título: s, autor: s, editorial: s, estado: s, tiempos prestados: d\n ",
libro-gt;_id,libro-gt;_nombre,libro-gt;_autor, book-gt;_type],
book_status[book-gt;_status],book - gt;_count);
}
/*Lista todos los registrados libros*/
Lista vacía_Libros (Libro* cabeza_libro) p>
{
Libro* p = cabeza_libro;
mientras (p)
{
imprimir _ libro (p);
p = p- gt;_ siguiente
}
}
/* Tomar prestado el libro y devolver el puntero del libro; de lo contrario, se devuelve NULL.
Puede que no haya ningún libro o que haya sido prestado*/
Libro * préstamo_libros(Libro * Libro_cabeza, int id)
{
Libro * p = book_head;
mientras (p)
{
if (p->;_id == id)
romper;
p = p- gt;_ next
}
si (!P)/*no existe*/
Devolver NULL
Si (p->_status != 0) /*Ha sido prestado*/
Devolver NULL
p->_ status = 1; /*Registro de préstamo de libros*/
p->;_ count; /*Número de préstamos 1 */
Devolver p;
}
/*Busque el título del libro y devuelva el ISBN encontrado. El título del libro se puede repetir y un libro puede tener varios libros, pero el ID es único*/
int search_books_by_name (Libro * Libro_cabeza, char * nombre) p >
{
int count = 0;
Libro* p = book_head;
mientras (p)
{
if(strcmp(p- gt;_name, nombre) == 0)
{
print_book(p);
Recuento;
}
p = p- gt;_ next
}
Recuento de retorno;
}
/*Encuentra el tipo de libro y devuelve el número encontrado. Un tipo tendrá muchos libros*/
int search _ books _ by _ type(Book * Book _ head, int type)
{
int count = 0;
Libro * p = book_head;
mientras (p)
{
si (p->; _tipo = = tipo)
{
imprimir _ libro(p);
contar;
}
p = p- gt;_ next
}
Recuento de devoluciones;
}
//int buscar _ libros _ por _ id (Libro * Libro _ head, char* id)
//{
//int count = 0;
//Libro * p = Libro _ head;
// while (p)
// {
//if(strcmp(p- gt;_id, id) == 0)
// {
//imprimir _ libro(p);
// contar
// }
//p = p- gt;_ next
// }
//
//recuento de retornos;
//}
/*Devuelve el libro.
Si se devuelve normalmente, devuelve el puntero del libro; de lo contrario, devuelve NULL */
Libro * return _ books(Libro * Libro _ head, int id)
{
libro* p = book_head;
mientras (p)
{
if (p->;_id = = id amp ampp- >_status! = 0)
{
p->_status = 0;/*Registro de devolución de libro*/
Pausa;
p>}
p = p- gt;_ next
}
Devolver p;
}
/* Opciones de operación de impresión*/
void print_menu(char menus[][32])
{
int no = 0;
printf(" \ nSistema de gestión de préstamos de libros\ n ");
while (strlen(menus[no]))
{
printf("d.s\ n ", no 1, menús[no]);
No;
}
Printf("opción de menú(" );
mientras(no)
{
printf("/d ", no-);
}
printf(" ):);
}
/*función principal*/
int main(void)
{
char key = 0;
char ss[128];
int loop = 1;
Libro first_book,* pBooks, * pTmp
strcpy(first_book._name, "Guía de la biblioteca");
strcpy(first_book._author, "admin");
No.
_ tipo = 0;
pBooks = crear _ lista( amp; primer _ libro
mientras(bucle)
{
imprimir _ menú(libro _ menú);
gets(ss);
clave = ss[0]-48;
if(clave lt; 1 | | clave gt; 7)
Printf("¡Error de entrada, vuelva a ingresar!\n ");
Otros
Printf("Entrada Opciones: d\n ",key);
Cambiar (tecla)
{
Caso 1: //Agregar libros
pTmp =(Libro *)malloc(tamañode(Libro));
IF (pTmp)
{
Printf("Agregar título: ");
gets(ss);
strncpy(pTmp- gt;_name, ss, 31);
Printf("Agregar autor:");
gets(ss);
strncpy(pTmp- gt;_author, ss, 31);
print_menu(libro_tipos);
gets(ss);
clave = ss[0]-48;
if(clave lt; = 0 | | clave gt(tamañode(libro _ tipo)/ 32 ))
clave = 1;
pTmp- gt;_ tipo = clave-1;
add_books(pBooks, pTmp);
}
Pausa;
Caso 2: //Agregar lector
Caso 3: //Pedir prestado el libro
Printf( " Ingrese el número del libro prestado: ");
gets(ss);
key = atoi(ss);
pTmp = lend_books(pBooks, key) ;
If (!pTmp)
Printf("Préstamo fallido, ISBN: d\n ", clave);
Otros
{
Printf("¡Préstamo exitoso!\n ");
print _ book(pTmp);
}
Pausa ;
Caso 4: //Devolver libros
Printf("Ingrese el ISBN a devolver: ");
gets(ss);
clave = atoi(ss);
pTmp = return_books(pBooks, clave);
if (! pTmp)
Printf("Devolución fallida, ISBN: d\n ", clave);
Otros
{
Printf( "¡Regreso exitoso! \ n ");
print _ book(pTmp);
}
Pausa
Caso 5: //Buscar libros
print _ menu(book _ menu _ sub);
gets(ss
key = ss[0]-48; ;
Printf("Opción de entrada: d
\n ",key);
Cambiar (tecla)
{
Caso 1: //Buscar libros por nombre
Printf ("Ingrese el título:");
gets(ss);
clave = buscar _ libros _ por _ nombre(pBooks, ss); (key == 0)
Printf("¡No hay libro! \ n ");
Caso 2: //Buscar libros por tipo
print _ menú (libro _ tipos);
gets(ss);
clave = ss[0]-48
clave = buscar _ libros _ por _ type (pBooks, clave);
if(key == 0)
Printf("¡No existe tal editorial!\n ");
Caso 3 : //Buscar libros por id
Printf("Ingrese ISBN:");
gets(ss);
//key = buscar _ libros _ por _ id(pBooks,ss);
if(key == 0)
Printf("¡Sin libro! \ n ");
Valor predeterminado :
Pausa;
}
Pausa;
Caso 6: //Salir
bucle = 0 ;
Break;
Valor predeterminado:
Break;
Caso 7: //Listar libros
list _ books(pBooks);
Break;
}
Printf(" -Enter para continuar-");
obtiene (ss);
}
lista _ gratuita (pBooks);
Devuelve 0;
}
No he probado el programa antes, puedes cambiarlo tú mismo