La Red de Conocimientos Pedagógicos - Conocimientos históricos - Ejemplo de sistema de gestión de préstamo de libros

Ejemplo de sistema de gestión de préstamo de libros

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

#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.

{

Descubrido = 1;

Devuelve verdadero

} // Búsqueda exitosa.

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

{

for(int I = total; i & gt mid and mid. & total; i-) // Insertar en la posición correcta, manténgase 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, abucheo [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)

{

for(int j = mid; j & lt total; j++)

boo[j]= boo[j+1];

strcpy(boo[j].num, boo[j+1].num); /p>

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

}

}

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

Libre (m);

}

Otros

{

while(m->; next. One step) //Encontrar el nodo prestatario del retornador.

{

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

{

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

m-& gt; next = n-& gt; next; //m apunta al siguiente nodo del prestatario.

Free(n); //Liberar espacio

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

Descanso;

}

m = m->Siguiente;

}

}

}

// Busque la información del prestatario en la tabla de prestatarios.

for(int I = 0; i<Retotali++)

{

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

{

p = 林[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;

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>

{

for(int j = k; j & ltRetotalj++)

Lin[j]= Lin[j+1];//luego avanza uno bit para sobrescribir 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. : 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 & 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 "); //Método de búsqueda binaria no encontrado

Else//Si se encuentra.

{

{

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

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

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

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

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

if(boo[mid ]. ¡Siguiente! = vacío)

{

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

Printf(" El número del libro prestado┃\n");

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

while(p)

{

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

printf("┃%14s┃\n",p-> num 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 "); //Muestra información sobre los libros buscados

búsqueda nula por nombre(ook & 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<total;i++)

{

If (strcmp (nombre de mar, boo [i ]). nombre)= = 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. sistema.

│\ 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 Seleccionar);

Cambiar (Seleccionar)

{

Caso 1://Edición y almacenamiento

Printf("Ingrese el número de libro del libro almacenado: ");

scanf(" %s ", BNum);

Comprar (Bo, BNum);

Break;

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("Ingrese el número de biblioteca:") ;

scanf(" %s ", & ampCNum);

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

Break;

Caso 4:// Return

Printf("Ingrese el número del libro que desea devolver: \ n "); scanf(" %s ", & ampBNum );

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

scanf(" %s ", & ampCNum); p>

Retorno(Bo, Lin, BNum, CNum);

Pausa

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>

}

}