La Red de Conocimientos Pedagógicos - Conocimientos históricos - Diseño del plan de préstamo bibliotecario

Diseño del plan de préstamo bibliotecario

No escribí esto, pero puedo usarlo si lo modifico. Espero que ayude. . .

# incluir ltstdio.h gt

# incluir ltstring.h gt

# incluir ltstdlib.h gt

//

#define MAXSIZE 100 //El valor máximo se define como 100.

# define list _ init _ size 100 //El número máximo de usuarios de tarjetas de biblioteca se define como 100.

//Estructura del prestatario

Estructura Typedef Boro//Comportamiento del prestatario

{

char BNum[20] // El libro número del libro prestado

char RetDate[8] //Fecha de devolución

struct Boro * next

} Bor

typedef Libro de enlace de estructura

{

Bor * next//El comportamiento de préstamo de esta tarjeta de biblioteca

char CNum[20] //Número de certificado

int Total//Cantidad de libros prestados

} lend[LIST _ INIT _ SIZE]; //Matriz de prestatarios

//Información de estructura de los libros

typedef estructura LNode

{

char card num[20]; //Número de ID de biblioteca

struct LNode * next

}Lista de enlaces; //Prestatario

libro de estructura typedef

{//Los contenidos a registrar para cada libro incluyen ISBN, título, autor, editorial e inventario total y inventario existente.

Número de carácter[20]; //Número de libro

char name[20]; //Título del libro

char auth[20];

char pub[20]; //Presionado

int TotNum//Inventario total

int NowNum//Inventario actual

LinkList * next//Personas que piden prestados libros

} ook[MAXSIZE];

//

int Retotal//Número de lectores

int total//Definir variables externas. Número de libros

//

//Inicialización de estructura

void InitBo(ook amp; Boo) //Inicializar información del libro

{

for(int I = 0; i ltMAXSIZEi )

{

Shh [i]. NowNum = 0;

Shh [yo]. tot num = 0;

Shh [yo]. next = NULL

}

}

void InitRe(lend amp; Lin) //Inicializar la información del prestatario

{

for(int I = 0; i ltLIST _ INIT _ TAMAÑOi )

Lin[i]. next = NULL

}

//

int mid = 0; //Función externa mid, utilizada para devolver la posición encontrada.

Método de búsqueda binaria booleana (OOkboo, Charsearchnum[])//Búsqueda binaria y número de libro de comparación.

{//Se utiliza la función bool, pero como la función no puede tener dos valores de retorno, se configura una variable externa mid para devolver la posición encontrada.

int bajo=0, alto = total-1

int encontrado = 0

mientras(bajo lt; = alto)

{

mid=(bajo alto)/2; //Punto medio

If (strcmp (boo [mid]). num, buscar num) = = 0)/ / El número del libro es el mismo.

{

Encontrado = 1;

Devuelve verdadero

}//Buscar correctamente.

if(strcmp(boo[mid]).num,SearchNum)! =0)//El ISBN es diferente.

Alto = medio 1;

si no, bajo = medio 1

}

if(find==0)

Devuelve falso//La búsqueda falló.

}

Compra no válida (ook ampboo, char BuyNum[])

{/1. Editar almacenamiento: si se compra un libro nuevo, si es así. ya existe En la cuenta del libro, aumente su inventario (incluido

//incluido el inventario total y el inventario actual. Si el libro no existe, agregue un libro al libro y el inventario total y el inventario actual). ambos son 1.

If(BinarySearch(boo, BuyNum)) //Si este libro está en la biblioteca.

{

Shh [中]. totnum; //Suma 1 al inventario total

Shh [medio]. nownum; //Inventario actual más 1

Printf("Recibido correctamente.\n ");

Printf("La información de este libro en la biblioteca ha sido modificada. Número El autor del libro s para s es s, el editor es s, el inventario total actual es d, el inventario actual es d, \n ", boo[mid].num, boo[mid].name, boo[mid]. auth, boo[medio]. boo[medio]. Tottenham, boo[medio].

}

if (!BinarySearch(boo, BuyNum)

{

for(int I = total; i gt mid and mid. amp total; i-) // Insertar en la posición correcta y mantenerlo en orden.

boo[I]= boo[I-1]; //Desocupar la posición de inserción

Printf("Este libro no existe en la biblioteca. Para crear una nueva bibliografía, complete información detallada sobre todo el libro. \n ");

strcpy(boo[i].num, BuyNum);

Printf("La cantidad de libros comprados es : ");

p>

scanf(" d ", ampsh[i].NowNum);

sh[i]. TotNum=boo[i]. Nome;

Printf("El nombre del libro es ");

scanf(" s ", ampSh[i].name); ("El autor de este libro es ");

scanf(" s ", ampsh[i].auth);

Printf("El editor de este libro es ") ;

scanf(" s ", ampboo[me].pub); //Información completa

boo[me].

next = NULL

total; //Cantidad total 1

Printf("La información de este libro ha sido agregada. El autor del libro numerado s es s, el editor es s y el actual El inventario total es d, y el inventario actual es d, \n ",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i ].totna Mu, shh [yo]. NowNum);

Printf("Recibido correctamente.\n "); >

Eliminación no válida (ook ampboo, char DeleteNum[])

{/2. Borrar inventario: un determinado libro no tiene valor retenido, por lo que se da de baja de los libros.

If (método de búsqueda binaria (boo, eliminar num) = = false | | total = = 0)//Si no hay ningún libro

Printf("El libro no está en la biblioteca.\n ");

If (método de búsqueda binaria (boo, eliminar num))//Si es así.

{

if(!Sh[中].Next)

{

for(int j = mid; j lt Total ; j )

boo[j]= boo[j 1];

strcpy(boo[j].num, boo[j 1].num);

strcpy(boo[j].nombre, boo[j 1].nombre);

strcpy(boo[j].auth, boo[j 1].auth);

strcpy(boo[j].pub, boo[j 1].pub);

boo[j]. TotNum=boo[j 1]. TotNum

boo[j]. AhoraNum=boo[j 1]. Nome;

Printf("El libro se ha eliminado correctamente.\n ");

}

Else printf("Este libro tiene un prestatario y no puede Eliminar.\n");

}

}

Préstamo no válido(ook ampboo, lend amplin, char BorrowNum[], char CaNum[])

{//3. Préstamo: si el inventario existente de un libro es mayor que cero, preste un libro y reduzca el inventario existente en 1.

//Y registrar el número de tarjeta de biblioteca del prestatario y el plazo de devolución.

Bor *p, * q;

Lista enlazada *m, * n;

If (! Método de búsqueda binaria (boo, lendum) | | Total = = 0)//Si no se encuentra este libro

Printf("Este libro no está en la biblioteca. \ n "); //Si tienes este libro,

If (método de búsqueda binaria (boo, lendnum)) //Hay algunos en la biblioteca.

{

if(boo[mid].NowNum gt0) //Comprueba si el inventario actual es mayor que 0.

{

Shh [中]. NowNum-; //Pide prestado un libro, 1 menos.

If(boo[mid].next==NULL) //Si la información del libro muestra que el libro no ha sido prestado.

{

m =(LinkList *)malloc(sizeof(LNode)); //Distribución

Sh[中]. next = m; //El primer nodo de la lista vinculada en la información del libro.

strcpy(m- gt; CardNum, CaNum);

m- gt; next = NULL // El último nodo está vacío.

}

Else //Si alguien ya está tomando prestado este libro.

{

m=boo[mid]. Next;

while(m->;Next) //Atravesar hasta el último nodo

m = m- gt;Next;

n = (LinkList *)malloc(sizeof(LNode)); //Asigna espacio y agrega 1 nodo.

m- gt; next = n;

strcpy(n- gt; CardNum, CaNum); //Registra el número de certificado

n->; siguiente = NULL

}

int I = 0;

for(I = 0; i ltRetotali )//

{< / p>

If (! Lin[i].CNum, CaNum))//Si ya tienes la información de esta tarjeta de biblioteca,

{

p = Lin [I]. Siguiente;

while(p->; next)p = p- gt; next; //Atravesar hasta el último nodo

q = (Bor *)malloc( sizeof(Boro) )); //Asignar espacio

p->; next = q;

strcpy(q- gt;BNum, BorrowNum); //Registrar número de libro

Printf("Ingrese la fecha de retorno: ");

scanf("s ", ampq->RetDate);

q->next = NULL

p>

Printf("El préstamo fue exitoso.\n ");

Break; //Si se encuentra el certificado, salga del ciclo.

}

}

If(i==Retotal)//Si no hay información sobre este certificado,

{

Lin[1]. CNum, CaNum); //Registra el número del certificado

p = (Bor *)malloc(sizeof(Boro)); //Asigna espacio

Lin[I]. next = p;

strcpy(p- gt; BNum, BorrowNum);

Printf("Ingrese la fecha de retorno:

scanf(" s). ", ampp->RetDate);

p->next = NULL

retotal; //Suma 1 a la información total del número de tarjeta de la biblioteca.

Printf("El préstamo fue exitoso. \ n ");

}

}

Else printf("El préstamo falló

}

}

Devolución no válida(ook ampboo, lend ampLin, char ReturnNum[] , char BorrowerNum[])

{/4. Devolución: cancela el registro del prestatario y cambia el número de libros existente.

Bor *p, * q;

Lista enlazada *m, * n;

int flag = 0 //Establecer parámetros

if(!BinarySearch(boo, ReturnNum)||!Total) // Sin libro.

Printf("No hay libros en la biblioteca. \ n ");

If (método de búsqueda binaria (boo, devuelve num)) // Hay libros.

{

m=boo[mid]. Siguiente;

If (!strcmp(m- gt; Cardnum, prestatarionum)//Si lo devuelve el primer prestatario.

{

Sh[ mid]. nownum; //Inventario actual más 1

Shh[mid]; //Eliminar nodo

Free(m);

}

Otros

{

while(m->; siguiente paso) // Encuentra el nodo prestatario del retornante.

{

If (! strcmp(m- gt; Next - gt; CardNum, BorrowerNum)) // Si se encuentra,

{

n = m- gt; next; //n es el nodo de préstamo del prestatario

m- gt; next = n- gt; //m apunta al siguiente nodo de préstamo del prestatario nodo

Free(n); //Liberar espacio

Sh nownum; //Inventario actual agregar 1

Descanso;

}

m = m- gt;Siguiente;

}

}

}

//Buscar la información del prestatario en la tabla de prestatarios

for(int I = 0; I ltRetotali)

{

if(!lin[I].cnum,borrowernum ))//si se encuentra al prestatario,

{

p = lin[ I]. Siguiente;

If (!strcmp(p- gt;BNum, return num))///Si se devuelve, es el primer libro prestado.

{

Lin [yo]. next = p- gt; next; //Señala el siguiente nodo prestado

Free (p); //Libera espacio en el nodo

Printf("El libro se devolvió correctamente.\ n ");

flag = 1;

Break;

}

Else //No encontrado.

{

while (p->; siguiente paso) // Encuentre el nodo de préstamo para devolver el libro.

{

if (!strcmp(p- gt; next- gt; BNum, ReturnNum)) //Si se encuentra.

{

q = p->; Siguiente; //q es el nodo de préstamo para devolver libros.

p->; next = q- gt; next; //p apunta al siguiente nodo prestado.

Free (q); //Liberar espacio

Printf("El libro se devolvió correctamente. \ n ");

flag = 1; p >

Pausa;

}

p = p- gt;Siguiente;

}

}

}

}

for(int k = 0; k ltRetotalk)

if (!lin[k].next)

{

for(int j = k; j ltRetotalj )

Lin[j]= Lin[j 1] //Avanzar un bit después de eso, sobrescribiendo el información actual.

Lin[j].CNum, ""; //Eliminar el número de tarjeta de la biblioteca

retotal-; //Disminuir el número de tarjetas de la biblioteca en 1

}// Elimina la información de la tarjeta de la biblioteca de los libros no prestados en el estado actual para ahorrar espacio.

If(flag==0) printf("No hay información sobre este certificado. \ n ");

}

//5. : Presione Buscar por una de las tres condiciones de consulta: buscar por número de libro,

//Buscar por título y autor. Nota: Es posible que no sea posible una búsqueda combinada, es decir, una búsqueda combinada de múltiples condiciones.

void search bynum(ook amp; boo, char SeaNum[])

{//BY NUM busca por número de libro.

Lista de enlaces * p;

p=boo[mid]. Siguiente;

If (método de búsqueda binaria (boo, seanum) == false) printf ("Lo siento, no puedo encontrar el libro que estás buscando.\n "); encontrado Método de búsqueda

Else//Si se encuentra.

{

{

printf("┏━━━━━━━┳━━━━━━━┳━━━━━━━ ━┳━━━━━━━━┳━━━━━┳━━━━━┓\n");

Printf("ISBN┃Título del libro┃Autor┃Editor┃Este número de inventario ┃Inventario total┃\n");

printf("┣━━━━━━━╋━━━━━━━╋━━━━━━━━╋━━━━ ━ ━━━╋━━━━━╋━━━━━┫\n”);

printf("┃14s┃14s┃16s┃16s┃10d┃10d┃\n",boo [ mid].num, boo[mid]. auth, boo[mid]. boo[mid];

printf("┗━━━━━┻━━━━━━━┻━ ━━━━━━━┻━━━━━━━━┻━━━━ ━┻━━━━━┛ \n");

if(boo[mid].Siguiente! =null)

{

printf("┏━━━━━━ ━┓\n");

Printf("El libro prestado┃\ n");

Printf("┃Número de biblioteca┃\n");

mientras(p)

{

printf ("┣━━━━━━━┫\n");

printf ("┃14s┃\n", p-gt; num de tarjeta

p =); p- gt; siguiente;

}

printf( "┗━━━━━━━┛\n");

}

}

while(p)

{

printf(" s ", p- gt; card num); // El número de tarjeta del prestatario; También se muestra en la función de búsqueda por número de libro.

p = p- gt; siguiente;

}

printf(" \ n ");

}//mostrar información sobre el libro que se busca.

}

Anular búsqueda por nombre(ook amp; boo)

{//Buscar por nombre y título.

char SeaName[20];

Printf("Ingrese el título del libro que está buscando: \ n ");

scanf(" s " , ampSeaName);

Printf("Los detalles del libro con este título encontrado son los siguientes:\ n ");

for(int I = 0; i lt total ; i )

{

If (strcmp (seaname, boo[i]).name)==0)//Si los títulos son iguales.

{

Printf("ISBN: s\nTítulo: s\nAutor: s\nEditorial: s\nStock total: d\nStock: d\n \n ", boo [ i]. num, boo [i]. Nombre, boo [

}//Muestra la información de todos los libros que coinciden con la información.

}

}

búsqueda nula por autenticación(ook amp; boo)

{//Buscar por autorización del autor

char sea auth[20];

Printf("Ingrese el autor del libro que desea encontrar: \ n ");

scanf(" s ", ampsea auth);

Printf( "El Los detalles para encontrar libros que coincidan con el autor son los siguientes: \ n ");

for(int I = 0; i lt total; i )

{

If (strcmp (seaauth, boo[i]).auth)= = 0)//Si los autores son los mismos.

{

Printf("ISBN: s\nTítulo: s\nAutor: s\nEditorial: s\nStock total: d\nStock: d\n \n ", boo [ i]. num, boo [i]. Nombre, boo [

}//Muestra la información de todos los libros que coinciden con la información.

}

}

//6. Ver: puede ver todos los libros prestados por el prestatario con un número de tarjeta de biblioteca, así como todos los libros vencidos.

Tarjeta de vista no válida (ook ampboo. , lend amp林)

{//Ver todos los libros prestados por el prestatario con un número de tarjeta de biblioteca

Número de carácter [20]

Printf(" Ingrese el número de tarjeta de la biblioteca que desea ver:\ n ");

scanf(" s ", ampnum);

bor * p;

p>

int qqq = 0;

for(int I = 0; i ltRetotali )

{

If (strcmp (Lin [I] .cnum, num) = = 0) // Busca el certificado

{

Printf("El libro prestado por este certificado es: \ n "); >

p = lin[i].next;

mientras(p)

{

printf(" s ", p- gt; BNum ); //Número de libro

p = p- gt;

}

printf(" \ n "); > qqq = 1;

Romper

}

}

Si (qqq==0)

Printf("Este certificado no existe.

\n ");

}

anular ver libro(ook amp;boo,lend amp林)

{//Ver todos los libros vencidos. p>

char date[8];

bor * p;

Printf("Ingrese la fecha (ingrese en el formato 20060605): \n ");

scanf(" s ", amp fecha);

Printf("Todos los libros vencidos son: \ n ");

for(int I = 0; i ltRetotali )

{

p = 林[i].

Mientras(p)//cuando p no está vacío

{

if(strcmp(p- gt; RetDate, fecha) lt; 0) //Expirado

{

Printf( "ISBN s, número de certificado s, fecha de vencimiento s \n ", p- gt; CNum, p- gt;

}//Mostrar información sobre todos los libros vencidos.

p = p- gt; siguiente

}

}

}

Menú nulo() //Menú

{

printf("┏————————————————m·e·n·u———— — ———————————┓\n”);

printf("││\ n ");

Printf("│ 1. Editar en biblioteca : Compra de un nuevo libro, si ya hay uno en la cuenta de libros, │\n");

Printf("│") aumentará su propio inventario (incluido el inventario total y el inventario actual). │\ n " );

Printf("│Si el libro no existe, agregue un libro a la cuenta de libros, │\ n ");

Printf("│Ambos el total inventario y el inventario existente Es un número de entrada │\ n ");

Printf("│ 2. Borrar inventario: un libro no tiene valor retenido y se da de baja de los libros. │\ n ");

Printf("│ 3. Préstamo: si el inventario de un libro es mayor que cero, entonces preste un libro y reduzca el inventario en 1, │\ n");

Imprimaf("│ ") y registre el número de tarjeta de biblioteca del prestatario y el período de devolución. │\ n ");

Printf("│ 4. Devolución: cancelar el registro de prestatario y cambiar el número de libros existente. │\ n ");

Printf("│ 5. Buscar por ISBN │\ n ");

Printf("│ 6. Buscar por título. │\ n ");

Printf("│ Buscar. │\ n ");

Printf("│ 8. Verifique todos los libros prestados por un prestatario con un número de tarjeta de biblioteca. │\ n ");

Printf ("│ 9. Ver todos los libros vencidos │\ n ");

Printf("│ 0. Salga del sistema de gestión de libros.

│\ n ");

printf("││\ n ");

Printf ("┗————————————┛\n— Seleccione el deporte que necesita————————\n ");

}

void main()

{

Libro de libro

Prestado a Lin;

char BNum[20];

char CNum[20];

Printf (" -¡Bienvenido al sistema de gestión de bibliotecas! -\ n \ n ");

int Choice = 10

int SearchCho=10, ver CHO = 10; >

And(select!=0)

{

menu(); //Mostrar menú

scanf(" d ", amp select) ;

Cambiar (seleccionar)

{

Caso 1: //Edición y almacenamiento

Printf("Ingrese el Libro de almacenamiento número: ");

scanf(" s ",BNum);

Comprar(Bo,BNum);

Romper;

Caso 2: //Borrar inventario

Printf("Ingrese el ISBN del libro que desea borrar:");

scanf(" s ", BNum); /p>

Delete (Bo, BNum);

Break;

Caso 3: //Préstamo

Printf("Ingrese lo que desea Número de libro del libro prestado: \ n ");

scanf(" s ", ampBNum);

Printf("Ingrese el número de biblioteca: ");

scanf(" s ", ampCNum);

Préstamo(Bo, Lin, BNum, CNum);

Break; // Return

Printf("Ingrese el ISBN del libro que desea devolver: \ n "

scanf(" s ", ampBNum

);

Printf ("Ingrese el número de la biblioteca:");

scanf(" s ", ampCNum);

Return(Bo, Lin, BNum, CNum); /p>

Pausa;

Caso 5: //Buscar//Buscar por número de libro

Printf("Ingrese ISBN:"); //Ingrese el número de libro desea encontrar

scanf(" s ", ampBNum);

SearchByNum(Bo, BNum); >Caso 6: //Buscar por título.

buscar por nombre(Bo);

Break;

Caso 7: //Buscar por autor

SearchByAuth(Bo);

Descanso;

Caso 8: //Ver todos los libros prestados con tarjeta de biblioteca.

Ver tarjeta (Bo, Lin);

Pausa;

Caso 9: //Ver todos los libros vencidos.

ViewBook(Bo, Lin);

Break;

Caso 0: //Salir del sistema.

Salir(0); romper

Predeterminado: printf("¡Error de entrada! \n "); salir(0); /p>

}

}