Red de conocimientos turísticos - Lugares de interés turístico - Sistema de gestión de bibliotecas en lenguaje C

Sistema de gestión de bibliotecas en lenguaje C

Este no es un sistema de gestión de biblioteca creado según sus necesidades, pero puede modificarlo usted mismo y echarle un vistazo.

#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

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

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.

{

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 libro

LinkList * 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);

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>

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

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

{

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>

}

}