Consulte el sistema de gestión de bibliotecas en lenguaje C. Gracias.

# incluir ltstdio.h gt

# 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

//{

//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- 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)

{

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)

{

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