Sistema de gestión de bibliotecas en lenguaje C
#incluye & ltstdio.h & gt
#incluye & ltstring.h & gt
#incluye & 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 Enlace de estructura libro
{
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; //Préstamo
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 toman 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 & 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<LIST_INIT_SIZEi++)
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=(low+high)/2; //Punto medio
If (strcmp (boo [mid]).num, search 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=medio1;
elselow=medio+1;
}
if(find==0)
p>
Devuelve falso//La búsqueda falló.
}
Compra no válida (ook & ampboo, char BuyNum[])
{//1. Editar almacenamiento: si se compra un libro nuevo, si. ha sido Si existe en la cuenta contable, aumente su inventario (incluido
//incluido el inventario total y el inventario actual. Si la cuenta no existe, agregue una cuenta a la cuenta y el total). El inventario y el inventario actual son ambos 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 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]. nombre, boo[medio]. autenticación, boo[medio]. boo[medio]. boo[medio]. If (! BinarySearch(boo,BuyNum))
{
int I;
for(I = total; i > mid and mid. & total; I -)//Insertar en la posición correcta y mantenerlo organizado.
boo[I]= boo[I-1]; // Deja la posición de inserción
Printf("No existe tal libro en la biblioteca. Para crear una nueva bibliografía, Complete los detalles de todo el libro.\n ");
strcpy(boo[i].num, BuyNum);
Printf("El número de libros comprados es :");
scanf(" %d ",&sh[i].NowNum);
sh[i]. TotNum=boo[i]. nome;
Printf("El nombre del libro es ");
scanf(" %s ",&sh[i].nombre); Printf("El autor de este libro es ");
scanf(" %s ", & sh[i].auth
Printf("Este libro El editor es ");
scanf("%s",&sh[i].pub); //Información completa
sh[i]. next = NULL
total++; //Cantidad total + 1
Printf("La información de este libro ha sido agregada. El autor del libro %s numerado %s es %s, el editor es % s, el inventario total actual es %d, el inventario actual es % d,\n ",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub, boo [i]. Tottenham, boo[i]. 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[中].Siguiente)
{
int j;
for(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=abucheo[j+1]. TotNum
boo[j]. AhoraNúm=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&boo,lend&lin,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, lendnum) | | 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) //Compruebe 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->CardNum,CaNum);
m->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 del certificado
n- > ;siguiente = NULL
}
int I = 0;
for(I = 0;i<Retotali++)//
{
If (! Lin[i].CNum, CaNum))//Si ya tienes la información de esta tarjeta de biblioteca,
{
p=lin[ i]. Next;
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); >
Printf("Ingrese la fecha de regreso:");
scanf("%s ", &q->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 regreso:");
scanf(" %s ", &p->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ó . Este El libro ya está disponible por £0.
\n ");
}
}
Devolución no válida(ook & ampboo, lend & ampLin, char ReturnNum[], char BorrowerNum[])
{//4. Devolver: cancelar el registro del prestatario y cambiar el número de libros existente
Bor *p, * q
Lista vinculada *m, * n;
int flag = 0; //Establecer parámetros
if (!BinarySearch(boo, ReturnNum)||!Total) //Sin libro. No hay libros en la biblioteca. \ n ");
If (método de búsqueda binaria (boo, return num))//Hay libros.
{ p>
m=boo[mid]. Next;
If (!strcmp(m-& gt; Cardnum, prestatarionum)//Si es devuelto por el primer prestatario.
{
nownum++; //Inventario actual más 1
next = m-& gt; //Eliminar nodo
Free(m); el espacio de este nodo
}
Otros
{
p>while(m->; Next)//Encontrar el nodo prestatario del retornante
{
If (! strcmp(m-& gt; Next. a->CardNum, BorrowerNum)) //Si se encuentra,
{
n = m->Next; //n es el nodo de préstamo del prestatario
m-& gt; /m apunta al siguiente nodo del prestatario
Free(n); //Liberar espacio
sh[nownum++] // Inventario actual más 1
Pausa;
}
m = m- >Siguiente;
}
}
}
//Encuentra la información del prestatario en la tabla de prestatarios
for(int I = 0; i<Retotali++)
{
if (!lin[I].cnum,borrowernum))//si el préstamo encontró personas,
{
p = lin[i]. p>
if (!strcmp(p->BNum, return num)) /// Si lo devuelves, será el primer libro que tomaste 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;
Romper;
}
Else //No encontrado.
{
while (p->; siguiente paso) // Encuentre el nodo de préstamo para devolver el libro.
{
If (!strcmp(p->Next->BNum, ReturnNum)) //Si se encuentra.
{
q = p->; Siguiente; //q es el nodo de préstamo para devolver libros.
p->next = q->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)
p>{
int j;
for(j = k; j & ltRetotalj++)
Lin[j]= Lin[j+ 1] ; //Más adelante un bit después de eso, cubriendo la 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. Buscar: buscar por una de las tres condiciones de consulta: buscar por número de libro,
//por Búsqueda de título y autor Nota: La búsqueda combinada, es decir, una búsqueda combinada de múltiples condiciones, puede no ser posible
void search bynum(ook & boo, char SeaNum[])
<. p> {//BY NUM Buscar por número de libroLinkList * 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 "); //Método de búsqueda binaria no encontrado
Else//Si se encuentra
{
{
printf("┏━━━━━━━┳━━━━━━━┳━━━━━━. ━ ━┳━━━━━━━━┳━━━━━┳━━━━━┓\n");
Printf("ISBN┃Título del libro┃Autor┃Editor┃Este número Inventario┃Inventario total┃\n");
printf("┣━━━━━━━╋━━━━━━━╋━━━━━━━━╋━━━━ ━━━━╋━━━━━╋━━━━━┫\n”);
printf("┃%14s┃%14s┃%16s┃%16s┃%10d┃%10d ┃\n",boo[mid].num, boo[mid]. Nombre, boo[mid]. auth, boo[mid]. Taberna, boo[mid]. Noam, boo[mid]. TotNum); p>
printf("┗━━━━━━━┻━━━━━━━┻━━━━━━━━┻━━━━━━━━┻━━ ━━┻ ━ ━━━━┛\n");
if(boo[mid]. ¡Siguiente!=null)
{
printf("┏ ━━ ━━━━━┓\n");
Printf("El libro prestado┃\n");
Printf("┃Número de biblioteca┃ \n");
mientras(p)
{
printf("┣━━━━━━━┫\n");
p >
printf("┃%14s┃\n",p->número de tarjeta);
p = p->Siguiente;
}
printf("┗━━━━━━━┛\n");
}
}
mientras(p)
{
printf(" %s ", p-> 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 "); información sobre el libro buscado.
}
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 "); s ", &SeaName);
Printf("Los detalles del libro encontrado con este título son los siguientes:\ n ");
for(int I = 0; i<Total; i++ )
{
If (strcmp (seaname, boo[i]).name)== 0)//Si los títulos son iguales.
{
Printf("ISBN:% s\nTítulo:% s\nAutor:% s\nEditor:% s\nInventario total:% d\n Inventario:% d\ n\n",boo[i].num,boo[i].name,boo[
}//Muestra la información de todos los libros que coinciden con la información.
}
}
anular búsqueda por autenticación(ook & amp; boo)
{//Buscar por autorización de autor p> p>
char sea auth[20];
Printf("Ingrese el autor del libro que desea encontrar:\ n ");
scanf(" %s ", & ampsea auth);
Printf("Encuentre los detalles de los libros que coinciden con el autor de la siguiente manera:\ 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\nEditor:% s\nInventario total:% d\n Inventario:% d\ n\n",boo[i].num,boo[i].name,boo[
}//Muestra información sobre todos los libros que coinciden con la información.
}
}
//6. Ver: puede ver todos los libros prestados por un prestatario con un número de tarjeta de biblioteca, así como todos los libros vencidos.
Vista no válida. tarjeta (ook & ampboo, lend & amplin)
{//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);
int qqq = 0;
for(int I = 0; i<Retotali++)
{
Si (strcmp (Lin [ I].cnum, num)== 0)//Buscar el certificado
{
Printf("El libro prestado por este certificado es: \n ");
p = Lin[I]. Siguiente;
mientras(p)
{
printf( " %s ", p- >BNum); // Número de libro
p = p->Siguiente;
}
printf ("\ n"); >
qqq = 1;
Romper
}
}
si (qqq==0)
Printf("Este certificado no existe. \ n ");
}
void view book(ook & amp; boo, lend & amp林) p>
{//Ver todos los libros caducados
char date[8];
bor * p;
Printf("Ingrese la fecha (ingrese en el formato 20060605): \ n ");
scanf(" %s ", &date);
Printf ("Todos los libros vencidos son:\n" );
for(int I = 0;i<Retotali++)
{
p =lin[i ]. Siguiente;
While(p)//Cuando p no está vacío
{
if(strcmp(p-& gt;RetDate, date) < 0) //Expirado
{
Printf("Número de libro %s, número de certificado %s, fecha de vencimiento %s \n ", p-& gt; Lin [i] .CNum,p->RetDate);
}//Muestra 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 almacenamiento : Compra de un nuevo libro, si ya hay uno en la cuenta del libro, │\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 del libro, │\ n ");
Printf("│Total inventario y El inventario existente se ingresa como un número │\ n ");
Printf("│ 2. Borrar inventario: un libro no tiene valor retenido y se da de baja del libro. │\ n ");
p>Printf("│ 3. Préstamo: Si el inventario de un libro es mayor que cero, preste un libro y reduzca el inventario en 1, │\n");
Printf("│") y registrar el número de tarjeta de biblioteca del prestatario y el período de devolución │\ n ");
Printf("│ 4. Devolución: Cancelar el registro del prestatario y cambiar el número existente de libros │\ n ");
Printf("│ 5. Buscar por ISBN. │\ n ");
Printf("│ 6. Buscar por título. │\ n ");
Printf("│ 7. Buscar por autor. │\ n ");
Printf("│ 8. Verifique el prestatario con un número de tarjeta de biblioteca Todos los libros. │\ n ");
Printf("│ 9. Ver todos los libros vencidos. │\ n ");
Printf("│ 0. Salir de la gestión de libros. System. │\ n ");
printf("││\ n ");
Printf ("┗——————————┛\ n— —Seleccione el deporte que necesita————————\ n ");
}
void main()
{ p >
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;< / p>
Y (select!=0)
{
menu(); //Mostrar menú
scanf(" %d ", & amp select);
Cambiar (seleccionar)
{
Caso 1://Edición y almacenamiento
Printf(" Ingrese el número de libro almacenado: ");
scanf(" %s ", BNum);
Comprar (Bo, BNum);
Pausa;
Caso 2://Borrar inventario
Printf("Ingrese el ISBN del libro que desea borrar:");
scanf( " % s ", BNum);
Eliminar (Bo, BNum);
Romper
Caso 3://préstamo
Printf ("Ingrese el número del libro que desea pedir prestado:\ n ");
scanf(" %s ", & ampBNum);
Printf(" Introduzca el número de biblioteca: ");
scanf(" %s ", & ampCNum);
Préstamo (Bo, Lin, BNum, CNum);
Descanso;
p>
Caso 4:// Devolución
Printf("Ingrese el ISBN del libro que desea devolver:\ n ");
scanf(" %s ", & ampBNum);
Printf("Ingrese el número de biblioteca:"); & ampCNum);
Return(Bo , Lin, BNum, CNum);
Break;
Caso 5://Buscar//Buscar por ISBN
Printf("Ingrese el ISBN:" ); //Ingrese el número del libro que desea encontrar.
scanf(" %s ", & ampBNum);
SearchByNum(Bo, BNum);
Caso 6; ://Buscar por título.
buscar por nombre(Bo);
Pausa;
Caso 7://Buscar por autor
SearchByAuth(Bo);
Descanso;
Caso 8:// Ver todos los libros prestados con una tarjeta de biblioteca.
Ver tarjeta (Bo, Lin);
Pausa;
Caso 9: //Ver todos los libros vencidos.
ViewBook(Bo, Lin);
Pausa;
Caso 0://Salir del sistema.
Salir(0); romper;
Predeterminado: printf("¡Error de entrada!\n "); salir(0); /p>
}
}