La Red de Conocimientos Pedagógicos - Currículum vitae - Sistema de gestión de bibliotecas de diseño de cursos de estructura de datos en lenguaje C

Sistema de gestión de bibliotecas de diseño de cursos de estructura de datos en lenguaje C

#include

#include

#include

/ /

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

#define LIST_INIT_SIZE 100 //El valor máximo para usuarios de tarjetas de biblioteca se define como 100

// Estructura del prestatario

typedef struct Boro//Comportamiento del préstamo

{

char BNum[20];//Número de libro del préstamo

p>

char RetDate[8];//Fecha de regreso

struct Boro *next;

}Bor;

typedef struct LinkBook

{

Bor *next; //Comportamiento de préstamo de esta tarjeta de biblioteca

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

int Total; ; //El número de libros prestados

}lend[LIST_INIT_SIZE];//Matriz de prestatarios

//Información de estructura de los libros

typedef struct LNode

{

char CardNum[20];//Número de tarjeta de biblioteca

struct LNode *next;

}LinkList // Prestatario;

typedef struct book

{//Los contenidos que deben registrarse para cada libro incluyen ISBN, título del libro, autor, editorial, inventario total e inventario actual.

char num[20];//número de libro

char nombre[20];//título del libro

char auth[20];//autor

char pub[20];//editorial

int TotNum;//inventario total

int NowNum;//inventario actual

LinkList *next;//Personas que tomaron prestado el libro

}ook[MAXSIZE];

//

int Retotal;//Número de lectores

int total; //Definir variables externas

//

//Inicialización de estructura

void InitBo( ook &boo) //Inicializar información del libro

{

for(int i=0;i

{

boo[i].NowNum=0;

boo[i].TotNum=0;

boo[i].next=NULL;

}

}

void InitRe(lend &Lin) //Inicializa la información del prestatario

{

for(int i=0;i < LIST_INIT_SIZE;i++)

Lin[i].next=NULL;

}

//

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

bool BinarySearch(ook boo,char SearchNum[]) //Búsqueda binaria y número de libro de comparación

{ //Usa 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 low=0,high=total-1;

int found= 0;

while(bajo<=alto)

{

medio=(bajo+alto)/2 //punto medio

if(strcmp(boo[mid].num,SearchNum)==0) //Mismo número de libro

{

found=1;

return true;

}//Buscar correctamente

if(strcmp(boo[mid].num,SearchNum)!=0)//El número de libro es diferente

alto=medio-1;

else bajo=medio+1;

}

if(found==0)

return false; //Encontrar error

}

void Buy(ook &boo, char BuyNum[])

{/1. Compre un libro nuevo si el libro ya existe en la cuenta de libros, se aumentará su inventario (incluido el inventario total y el inventario actual). Si el libro no existe, se agrega un libro a la cuenta de libros y el inventario total. y el inventario actual son ambos 1.

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

{

boo[mid].TotNum++ //Total; inventario Agregar 1

boo[mid].NowNum++ //Agregar 1 al inventario actual

printf("Almacenamiento exitoso.\n");

printf ( "La información del libro en la biblioteca ha sido cambiada. El autor del libro %s con el número %s es %s, el editor es %s, el inventario total actual es %d y el inventario actual es % d.\n",boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].TotNum,boo[mid].NowNum);

}

if(!BinarySearch(boo,BuyNum))

{

int i;

para (i=total;i>mid&&total;i --) //Insertar en la posición apropiada para mantener el orden

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

p>

printf("El libro está en No existe en la biblioteca. Para crear un libro nuevo, complete los detalles del libro \n");

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

printf(" La cantidad comprada de este libro es: ");

scanf(" %d",&boo[i].NowNum);

boo[i].TotNum=boo[i ].NowNum;

printf("El nombre del libro es:");

scanf( " %s",&boo[i].name);

printf("El autor de este libro es:");

scanf(" %s",&boo[i ].auth);

printf("La publicación de este libro La empresa es: ");

scanf(" %s",&boo[i].pub);/ /Información completa

boo[i].next=NULL;

total++;//Total +1

printf("Se ha añadido la información del libro. El autor del libro %s con el número %s es %s, el editor es %s y el inventario total actual es %d y el inventario actual es %d. \n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);

printf("Almacenamiento exitoso.\n");

}

}

void Delete(ook &boo,char DeleteNum[])

{//2. Borrar inventario: cierto tipo de libro no tiene valor de retención y se cancelará de la cuenta del libro.

if(BinarySearch(boo,DeleteNum)==false||total==0) //Si no existe tal libro

printf("No existe tal libro en el biblioteca.\n" );

if(BinarySearch(boo,DeleteNum))//si es así

{

if(!boo[mid]. siguiente)

{

int j;

for( j=mid;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].NowNum=boo[ j+1] .NowNum;

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

}

else printf("Este libro tiene un prestatario y no se puede eliminar \n");

}

}

void Borrow(ook &boo,lend &Lin,char BorrowNum[], char CaNum[])

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

/ /y registrarse para pedir prestado el número de tarjeta de biblioteca del autor y la fecha de devolución.

Bor *p,*q;

LinkList *m,*n;

if(!BinarySearch(boo,BorrowNum)||total==0 ) //Si no se encuentra este libro

printf("Este libro no está en la biblioteca.

\n");//Si existe este libro

if(BinarySearch(boo,BorrowNum)) //Está en la biblioteca

{

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

{

boo[mid].NowNum--;//Lend un libro, menos de 1

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

{

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

boo[mid].next=m;//El primer nodo de la lista vinculada en el libro información

strcpy(m->CardNum,CaNum);

m->next=NULL;//El siguiente 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->next;

n=(LinkList *)malloc(sizeof(LNode));//Asignar espacio, aumentar por 1 nodo

m->next=n;

strcpy(n->CardNum,CaNum);//Registra el número de tarjeta

n-> siguiente =NULL;

}

int i=0;

for(i=0;i

{

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

{

p =Lin[i].next;

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

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

p->next=q;

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

printf("Ingrese la fecha de regreso:");

scanf("%s",&q->RetDate);

q->next=NULL;

p>

printf("Préstamo exitoso.\n");

break; //Salir del bucle cuando se encuentre el certificado

}

}

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

{

strcpy(Lin[i ].CNum,CaNum); / /Registra el número de certificado

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

Lin[i]. next=p;

strcpy(p->BNum,BorrowNum);

printf("Ingrese la fecha de regreso:");

scanf(" %s",&p->RetDate);

p->next=NULL;

Retotal++ //Agregue 1 al número total de información del número de tarjeta de préstamo<; /p>

printf("Préstamo exitoso.\n");

}

}

else printf("Préstamo fallido. El libro está actualizado el inventario es 0. \n");

}

}

void Return(ook &boo,lend &Lin,char ReturnNum[],char BorrowerNum[] )

{/4. Devolución: Cancelar el registro del prestatario y cambiar la cantidad existente del libro.

Bor *p,*q;

LinkList *m,*n;

int flag=0;//Establecer un parámetro

if(!BinarySearch(boo,ReturnNum)||!total) //No hay libro

printf("No existe tal libro en la biblioteca.\n");

if( BinarySearch(boo,ReturnNum)) //Hay libros

{

m=boo[mid].next;

if(!strcmp (m-> CardNum,BorrowerNum)) //Si lo reembolsa el primer prestatario

{

boo[mid].NowNum++ //Agrega 1 al inventario actual;

boo[mid].next=m->next; //Eliminar nodo

free(m); //Liberar el espacio del nodo

}

else

{

while(m->next) //Encuentra el nodo prestatario del retornante

{

if(!strcmp(m->next->CardNum,BorrowerNum)) //Si se encuentra

{

n=m->next; se devuelve el nodo de préstamo del prestatario

m->next=n->next; //m apunta al siguiente nodo del nodo de préstamo del que regresa

free(n); Liberar espacio

boo[mid].NowNum++; //Agregar 1 al inventario actual

break;

}

m=m ->next;

}

}

}

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

for(int i=0;i

{

if(!strcmp(Lin[i].CNum,BorrowerNum)) //Si se encuentra el prestatario

{

p=Lin[i].next;

if(!strcmp(p->BNum,ReturnNum)) //Si es así El primero se devuelve el libro prestado

{

Lin[i].next=p->next; //Apunta al siguiente nodo de préstamo

free(p) ; //Liberar espacio en el nodo

printf("El libro se devolvió exitosamente.\n");

flag=1;

break;

}

else //No encontrado

{

while(p->next) //Nodo de préstamo de libros encontrado y devuelto

{

if(!strcmp(p->next->BNum,ReturnNum)) //Si se encuentra

{

q=p->next; //q es el nodo de préstamo del libro devuelto

p->next=q->next; //p apunta al siguiente nodo de préstamo

p>

free(q); //Liberar espacio

printf("El libro fue devuelto exitosamente.\n");

flag=1;

pausa;

}

p=p->siguiente;

}

}

}

}

for(int k=0;k

if(!Lin[k].next)

{

int j;

for(j=k;j

Lin[j]=Lin[j+ 1] ; //Avanzar todo un dígito a partir de entonces, sobrescribiendo la información actual

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

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

} //Eliminar información sobre las tarjetas de la biblioteca que no han tomado libros prestados en el estado actual para ahorrar espacio

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

}

//5. número de libro,

//Buscar por título de libro, buscar por autor. Nota: No es necesario implementar la búsqueda combinada, es decir, una búsqueda combinada de varias condiciones.

void SearchByNum(ook &boo,char SeaNum[])

{//BY NUM Búsqueda por número de libro

LinkList *p;

p=boo[mid].next;

if(BinarySearch(boo,SeaNum)==false)printf("Lo sentimos, no se encontró el libro que estaba buscando.

\n");//Búsqueda binaria no encontrada

else//Si se encuentra

{

{

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

printf("┃ ISBN┃ Título del libro┃ Autor┃ Editor┃ Inventario actual┃ Inventario total┃\n");

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

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

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

if(boo[mid].next! =NULL )

{

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

printf("┃ El libro ha sido prestado ┃ \n");

printf("┃ número de tarjeta de biblioteca┃\n");

while(p)

{

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

printf("┃%14s┃\n",p->NumTarjeta);

p =p->siguiente;

}

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

}

}

while(p)

{

printf(" %s ",p->CardNum); // Pulsa el número del libro La búsqueda. La función también muestra el número de identificación del prestatario que tomó prestado este libro

p=p->next;

}

printf(" \ n");

}//Mostrar información sobre los libros buscados

}

void SearchByName(ook &boo)

{/ /BY NAME Search basado en el título del libro

char SeaName[20];

printf("Ingrese el título del libro que desea encontrar:\n");

scanf(" %s",&SeaName);

printf("Los detalles del libro que coincide con el título encontrado son los siguientes:\n");

for(int i= 0;i

{

if(strcmp(SeaName,boo[i].name)==0)//Si los nombres de los libros son iguales

{

printf("ISBN: %s\nTítulo del libro: %s\nAutor: %s\nEditor: %s\nInventario total: %d\nInventario actual Cantidad: %d \n\n",boo[i].num,boo[i].nombre,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i]. No

wNum);

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

}

}

void SearchByAuth(ook &boo )

{// BY AUTH Buscar por autor

char SeaAuth[20];

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

scanf(" %s",&SeaAuth);

printf("Los detalles del libro que coincide con este autor se encontraron de la siguiente manera:\n");

for(int i=0;i

{

if(strcmp(SeaAuth,boo[i].auth)== 0)//Si el autor es el mismo

{

printf("ISBN: %s\nTítulo del libro: %s\nAutor: %s\nEditorial: %s\nInventario total: % d\nInventario actual: %d\n\n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum, boo [i].NowNum);

}//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 determinado número de tarjeta de biblioteca y puede ver todos los libros vencidos.

void ViewCard(ook &boo,lend &Lin)

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

char Num[20 ] ;

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

scanf(" %s",&Num);

Bor *p;

int qqq=0;

for(int i=0;i

{

if(strcmp(Lin[i].CNum,Num)==0) //Encontrar el certificado

{

printf("Los libros prestados por este certificado incluyen : \n");

p=Lin[i].siguiente;

mientras(p)

{

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

p=p->siguiente;

}

printf("\n"

qqq=1;

romper;

}

}

if(qqq==); 0)

printf("Este certificado no existe.\n");

}

void ViewBook(ook &boo,lend &Lin)

{//Ver todos los libros vencidos

char date[8];

Bor *p;

printf("Ingrese la fecha ( por favor ingrese en formato 20060605):\n");

scanf(" %s",&date);

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

for(int i=0;i

{

p=Lin[i].next;

while(p)//Cuando p no está vacío

{

if(strcmp(p->RetDate,date)<0) //Excede la fecha

{

printf("El número de libro es %s, el número de certificado es %s y la fecha de devolución es %s \n",p->BNum,Lin[i].CNum, p->RetDate) ;

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

p=p->next;

}

}

}

void Menu() //Menú

{

printf("┏——————— ——— ————————M E N U————————————————┓\n");

printf("│ │\n") ;

printf("│ 1. Adquisición y almacenamiento: compre un libro nuevo. Si el libro ya existe en la cuenta de libros, │\n");

printf(" │ luego aumentar su 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("│ El el inventario total y el inventario actual son números ingresados ​​│\n");

printf("│ 2. Borrar inventario: cierto tipo de libro no tiene valor de reserva, elimínelo de la cuenta de libros. Cerrar sesión │\n");

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

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

printf("│ 4. Devolución: cancelar el par El registro del prestatario cambia la cantidad existente del libro │\n");

printf("│ 5. Buscar por número de libro. │\n");

printf( "│ 6. Buscar por título del libro │\n");

printf("│ 7. Buscar por autor. │\n");

printf("│ 8 . Ver todos los libros. prestado por un prestatario con un determinado número de tarjeta de biblioteca │\n");

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

printf(" │ 0. Salir del sistema de gestión de biblioteca.

│\n");

printf("│ │\n");

printf("┗————————————Por favor elija su Requerido operaciones————————————┛\n");

}

void main()

{

ook Bo;

prestar Lin;

char BNum[20];

char CNum[20];

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

int elección=10;

int SearchCho=10,ViewCho=10;

while(choice!=0)

{

Menu();//Mostrar menú

scanf(" %d",&choice);< / p>

switch(choice)

{

case 1://Recopilar y compilar en la biblioteca

printf("Ingrese el número de el libro en la biblioteca ISBN: ");

scanf(" %s",BNum);

Buy(Bo,BNum);

break;

case 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 lo que desea tomar prestado. El ISBN del libro:\n");

scanf(" %s",&BNum);

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

scanf(" %s",&CNum);

Borrow(Bo,Lin,BNum,CNum);

break ;

caso 4: //Devolver

printf("Ingrese el ISBN del libro que desea devolver:\n");

scanf( " %s",&BNum);

printf("Por favor, introduzca su número de tarjeta de biblioteca:");

scanf(" %s",&CNum);

Return(Bo,Lin,BNum,CNum);

break;

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

printf( "Ingrese el número del libro:");//Ingrese el número del libro a buscar

scanf(" %s",&BNum);

SearchByNum(Bo,BNum);

break;

caso 6:// Buscar por título del libro

SearchByName(Bo);

break;

caso 7://Buscar por autor

SearchByAuth(Bo );

break;

case 8://Ver todos los libros prestados con una determinada tarjeta de biblioteca

ViewCard(Bo,Lin);

break;

caso 9: //Ver todos los libros vencidos

ViewBook(Bo,Lin);

break;

caso 0:// Salir del sistema

exit(0);break;

default:printf("¡Error de entrada!\n");exit(0);break;

}

}

}