Diseño del plan de préstamo bibliotecario
# incluir ltstdio.h gt
# incluir ltstring.h gt
# incluir ltstdlib.h gt
// p>
#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 p; >
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
{ p >
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 ) p>
{
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> 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>
}
}