Sistema de gestión de libros de biblioteca (lenguaje C)
# include & ltstdlib.h & gt
# include & ltstdio.h & gt
# include & ltconio.h & gt
#Contiene "graphics.h"
#Contiene "math.h"
#Definición m 1
Datos de estructura
{ int año;
int mes;
int día
};
Lectura de estructura Nodo del dispositivo
{
Número de carácter [20];
Estructurar datos hermano
Estructurar los datos nuevamente;
};
Nodo del libro de estructura
{
título char[15];
escritor char[15];
int currentnum
int totalnum
char brief[30];
lector de nodo lector de estructura[20];
} ;
Estructura TreeNode
{
int n;
estructura TreeNode * prt
int clave[2 * m];
struct book node * rec[2 * m];
struct TreeNode * link[2 * m+1];
};
struct book node * input node();
struct TreeNode * MB search(struct TreeNode * BTH, int x, int *k, int * flag);
struct TreeNode * mbinsert(struct TreeNode * BTH);
struct TreeNode * MB del(struct TreeNode * BTH);
void nodo de salida (struct TreeNode * BTH);
préstamo nulo(struct TreeNode * BTH);
retorno nulo(struct TreeNode * BTH);
menú char( void);
struct TreeNode * MB search(struct TreeNode * BTH, int x, int *k, int *flag)
{
struct TreeNode * p, * q
p = bth* bandera = 0; q = p;
Y ((p! = NULL)&&(*flag==0))
{
* k = 1; q = p;
mientras(( * k <q->n)&&(pregunta->clave[*k-1]<x))*k = *k+1;
Si (q->clave[*k-1 ]==x)*flag=1;
else if((*k===q->n)&&(Q ->key[* k-1]<x)){ p = q->enlace[*k];p->PRT = q;}
else { p = q->enlace[*k-1];
p->; PRT = q; * k = * k-1 }
}
Retorno (q);
}
struct TreeNode * mbinsert(struct TreeNode * BTH)
{
int flag, j, k, t
int y, x, z;
Estructura TreeNode *p, *q, *u, *s;
struct BookNode *r, *l;
clr SCR(); p>
p>
printf(" \ n \ tIngrese el libro que desea insertar: "
scanf("%d ", & ampx
);q= mbsearch(bth,x,&k&flag);
if(flag==1)
{
printf(" \ n \ t Ya existen %d libros de este tipo ¿Quieres agregar otro? (y/n)\n ", (q-& gt; rec[k-1])-& gt; total num);
z = getch();
if(z=='y'||z=='Y ')
{
(Q ->rec[k-1])->núm total++;(Q->rec[k-1])->núm actual++;
printf(" \ n \ t Ahora hay un total de %d libros de este tipo, ", (q->rec[k-1])->total num);
printf("\n\tActualmente en el biblioteca Hay %d en ella.
, (q-& gt; rec[k-1])-& gt; num actual);
}
Retorno (BTH);
}
r = nodo de entrada (BTH);
if(bth==NULL)
{
BTH = p =(struct TreeNode *)malloc(tamaño de(struct TreeNode));
p->;n = 1;p->;key[0]= x;p->;rec[0]= r; p->; prt = NULL
for(j = 1; j & lt= 2 * m+1; j++)p-& gt;
Retorno (p);
}
p = NULLt = 0;
mientras(t==0)
{
if(k = = q-& gt; n){ y = x; l = r; u = p;}
Otro
{
y = q->key[q->n-1];l = q->rec[q->n-1];u = q-> ->n];
for(j =(q->n)-1;j>= k+1;j-)
{
q->key[j]= q->key[j-1];q->rec[j]= q->rec[j-1]; q->enlace[j];
}
q->;key[k]= x;q-> ;rec[k]= r;q->; enlace[k+1]= p;
if (p!= NULL)p->PRT = q;
}
si (q- >n<2*m)
{
q->n = (q->n) +1;
t = 1;
q->clave[(q->n)-1]=y;q->rec[(q-& gt;n)-1]=l;q->enlace[q->n] =u;
if (u!= NULL) u->prt = q;
}
Otros
{
p =(struct TreeNode *)malloc(sizeof(struct TreeNode)).
p->n = m q->n = m p->prt = q->prt
x = q->clave [m]; -& gt; Sugerencia [m];
for(j = 1; j & lt= m-1; j++)
{
p-> ; clave[j-1]=q->clave[m+j]; rec[j-1]=q->rec[m+j]; q->enlace[m+j];
if (q->;enlace[m+j]!= NULL)(q-& gt;enlace[m+ j])-& gt; = p;
}
p->; enlace[m-1]=q->enlace[2 * m];
p->; enlace[m]= u;
p->;clave[m-1]= y;
p->;rec[m- 1]= l;
if (u!= NULL)u-& gt; PRT = p;
for(j = m+2; j & lt= 2 * m +1; j++)
{
q->; enlace[j-1]= NULL; enlace[j-1]= NULL;
}
if (q->;prt==NULL)
{
s =(struct TreeNode *)malloc(sizeof(struct TreeNode )).
s-& gt;key[0]= x; s->rec[0]= r;
s->enlace[0]= s- >enlace[1]=p;
s->n=1;s->prt=NULLq->;PRT=s;p->;PRT=s ;
for(j = 3; j & lt= 2 * m+1; j++)s-& gt; enlace[j-1]= NULL;
BTH = s ;t = 1;
}
Otro
{
q = q-& gt;prtk = 1;
Y ((k & lt= q->n)&& amp(pregunta->clave[k-1]<x))k = k+1;
k = k-1;
}
}
}
Retorno (BTH);
}
Árbol de estructura nodo *mbdel (nodo de árbol de estructura *bth)
{
int flag, j, k, t;
int x, y;
Estructura TreeNode *u, *s, *p, *q;
struct BookNode *r, *l;
clr SCR();
printf(" \ n \ tIngrese el libro que desea eliminar: ");
scanf("%d ", & ampx); bth,x,&k&flag);
if(flag==0){ printf("\n\t¡El libro no existe!\n "); return (BTH);}
p = q-& gt; enlace[k];
if (p!=null)
{
mientras(p-> ;enlace[0]!= NULL)p = p->enlace[0];
q->;clave[k-1] =p->clave[0];
q->; rec[k-1]=p->rec[0];
k = 1; q = p; p>for(j = k; j & lt= q->; n-1; j++)
{
q->;clave[j-1]=q- >tecla[j];
q->;rec[j-1]=q->sugerencia[j];
}
q-> n = q->n-1;
Y ((q! = BTH)&(Q->n<m))
{
p = q->prtj = 1;
mientras(p->enlace[ j-1]!= q)j=j+1
if ((j<= p->n)&&(( p->link[j])->n>m))
{
s = p->link[j];
y = s->key[0];
l = s->rec[0];
u = s->link[0] ];
for(k = 1; k & lt= s-& gt; n-1; k++)
{
s-> clave[k-1]= s->clave[k];
s-& gt;rec[k-1]=s->rec[k];
s-& gt;enlace[k-1]= s-& gt;enlace[k] ;
}
s-&
gt;enlace[s->n-1]=s->enlace[s->n];
s->enlace[s->n]= NULL ;
s-& gt;n = s-& gt;n-1;q->;n = q-& gt;n+1;
q->; >n-1]=p->tecla[j-1]
q->rec[q->n-1]= p->rec[ j-1];
q->;Enlace[q->n]= u;
p->;clave[j-1]= y;
p-> p>
p->; rec[j-1]= l;
if (u!= NULL)u-& gt;
else if((j>1);&((p->;link[j-2])->n>m))
{
s = p -> enlace [j-2];
q->; n = q-> n]= q->Enlace[q->n-1];
for(k = q->n-1; k & gt=1;k -)
{
q->;clave[k]= q-& gt;clave[k-1];
q->rec[k]= q-> ;rec[k-1]
q->enlace[k]= q->enlace[k-1] ;
}
q- >;clave[0]= p-& gt;clave[j-2];
q->;rec[ 0]= p-& gt;sugerencia[j-2];
u = s->enlace[s->n];
q->; enlace[0]= u;
if (u!= NULL )u-> PRT = q;
p->; clave[j-2]= s- >clave[s->n-1];
p ->rec[j-2]=s->rec[s->n-1];
s->link[s->n]= NULL;
s->n = s->n-1;
}
Otro
{
if(j = = p-& gt; n+1)
{ q = p ->enlace[j-2];s = p->enlace[j-1];j=j-1 ;}
else s = p->link[j ];
q->;key[q->;n]= p->key[j-1 ];
q->;rec[q-> ;n]= p-& gt;rec[j-1];
t = q-& gt;n+ 1;
for(k = 1;k & lt = s-& gt;n;k++)
{ q->;clave[t+k-1]= s -& gt;tecla[k-1];
q->;rec[t+k-1]= s->rec[k-1];
u = s->enlace[k-1];
q->;enlace[t+k-1]= u;
if (u! = NULL)u->PRT = q;
}
u = s->enlace[s->n];q->;enlace[ t+s ->n]= u;
si (u!= NULL)u->prt = q;
q->n = 2 * m ;
Gratis
tarifa;
for(k = j;k & lt= p->;n-1;k++)
{
p->;key[ k-1]=p->clave[k];
p->; rec[k-1]=p->rec[k];
p->; enlace[k]= p->enlace[k+1];
}
p->;n = p->n-1;s = q ;q = p;
}
}
if((q = = BTH)&&(Q->n==0 ))
{gratis(BTH); BTH = s; BTH = NULL
if(s-& gt; n = = 0){ BTH = NULL }
}
printf("\n\t¡Este libro ha sido eliminado!");
Devolver (BTH);
}
struct BookNode *InputNode()
{
struct book nodo * p;
int I;
p = (struct BookNode *)malloc(sizeof(struct BookNode));
clr SCR();
fflush(stdin);
printf("\n \tTítulo de entrada:");
Get(p->Título);
printf("\n\tEscritor de entrada:");
Obtener (p-& gt; escritor);
printf("\n\tIngrese el monto actual del libro:");
scanf("%d",&p-> número actual);
printf("\n\tIngrese el monto total del libro:");
scanf("%d ",&p->;número total); p>
fflush(stdin);
printf("\n\tIngrese una breve descripción del libro: ");
get(p->short);
for(i = 0;i<20;i++)
(p->lector[i]).
num[0]= '\0';
Retorno (p);
}
nodo de salida nulo (struct TreeNode * BTH)
{
estructura TreeNode * q;
estructura libro nodo * p;
int k;
int x;
int flag;
clr SCR();
printf("\n\tIngrese el libro que desea buscar:");
scanf("%d ", &x);
q=mbsearch(bth,x,&k&flag);
if(flag==1 )
{
p = q-& gt; rec[k-1];
printf("\n\tTítulo: %s ", p ->Título );
printf("\n\tEscritor: %s ", p->Escritor);
printf("\n\tCantidadActual: % d ", p-& gt; número actual);
printf("\n\tMontoTotal: %d ", p-& gt; número total);
printf(" \ n \ tbreve introducción: % s \ n ", p-& gt; breve);
}
else printf(" \ n \ t¡Este libro no existe!" );
}
préstamo nulo(struct TreeNode *bth)
{
struct TreeNode * q;
struct book node * p
Nodo lector de estructura * r;
int i, k, x, flag, t
clr SCR() ;
printf(" \ n \ tIngrese el libro que desea pedir prestado: ");
scanf("%d ", & ampx); x,&k&flag);
if(flag==1)
{
p = q- >rec[k-1];
printf("\n\t¿Quieres este libro? (s/n)");
printf("\n\tTítulo: %s ", p-& gt; título);
printf("\n\tEscritor: %s ", p-& gt; escritor);
printf("\n\tCurrentAmount: %d ", p-& gt; número actual);
printf(" \n\tMontoTotal: %d ", p-& gt; número total);
printf(" \ n \ tbreve introducción:% s ", p-& gt; breve);
t = getch();
if(t=='y'||t=='Y ')
{
si ( (p->numero actual)== 0)printf("\n\tLo sentimos, todo este libro ha sido retirado...");
Otro
{
clr SCR();
for(I = 0;i<20;i++)if((p->lector[i])
. num[0]= = ' \ 0 ')break;
printf(" \ n \ tIngrese su número de certificado: "); p->reader[i]).num);
printf("\n\tPor favor ingrese los datos prestados:");
printf("\n \tAño:" );
scanf("%d ", & amp((p->lector[I]). bro. año);
printf(" \ t mes: ") ;
scanf("%d ", & amp((p->lector[I]). bro. mes);
printf(" \ tDay: ");
scanf("%d ", & amp((p->reader[I]). bro. day);
printf(" \ n \tIngrese los datos de devolución: ");
printf(" \ n \tAño:");
scanf("%d ",& amp((p->; lector[I]).volver .año);
printf(" \ t mes:");
scanf("%d ", & amp((p->; lector[I]).back .mes));
printf("\tDía:");
scanf("%d ",& amp((p->; lector[I]).back .day));
p->;current num-;
printf("\n\tHas tomado prestado este libro.
);}
}
}
else printf(" \ n \ t¡Este libro no existe!");
}
reciclaje de vacíos (struct TreeNode *bth)
{
struct TreeNode * q;
struct book node * p;< / p>
int i, k, x, bandera, t, j;
int año, mes, día, d
Salario variable
< p; >Temperatura de carga[20];clr SCR();
printf("\n\tPor favor, introduzca el libro que desea reembolsar:");
scanf("%d ", &x);
q=mbsearch(bth,x,&k&flag);
if(flag==1 )
{
p = q->rec[k-1];
printf("\n\tQuieres pagar este libro (s/n)");
printf("\n\tTítulo: %s ", p-& gt; título);
printf("\n\ tEscritor: %s ", p-& gt ; escritor);
printf("\n\tCurrentAmount: %d ", p-& gt; número actual);
printf ("\n\tTotalAmount: %d " ,p->numero total);
printf("\n\tbreve introducción:% s",p->short);
printf("\n\tbrief introducción:% s",p->short);
p>
t = getch();
if(t=='y'||t= ='Y ')
{
if ((p->currentnum)>=(p->;cantidad total))
printf(" \n\tQuieres proporcionar más libros\n");
Otros
{
clr SCR();
printf ("\n\tPor favor ingrese su número de certificado:");
p>scanf("%s ", temp);
j = 0;
for(I = 0;i<20;i++)
{
if (!(strcmp(temp, (p-& gt;lector[i])). num)){ j = 1; break;}
}
if(j = = 0){ printf(" \ n \ tNo tomaste prestado este libro.") ; Return; }
printf("\n\tHoy es:");
printf("\n\tAño:");
scanf (" %d",&año);
printf("\t mes:");
scanf("%d",&mes);
printf( "\tDía:");
scanf("%d", & día);
d = 0;
if(año<(p-> lector[i]).back.year)d = 1
if(año<=(p->reader[i]).& mes<(p->reader[i]).back.month )d = 1
if(año<=(p->lector[i]).
&&mes<=(p->lector[i]), back.month&&day<(p->lector[I]).back.day)d=1;
If (d==0)
{
clr SCR();
Salario = (año-(p-& gt;lector[i] ).back.year)*365+ (mes-(p-& gt; lector[I]). atrás. mes)* 3(día-(p-& gt; lector[I]). atrás. día) ;
printf (" \ n \ tTomaste prestado este libro en %d-%d-%d ", (p-& gt; lector[i]).bro.año, ( p->lector[I])bro.mes, (p->reader[I]).bro.day);
printf("\n\tdebe estar en %d- %d-%d "Pagar dentro de, (p-& gt; lector[i]).año atrás, (p->lector[i]).año atrás, (p->lector[i] ]
printf). (" \ n \ tHoy es %d-%d-%d ", año, mes, día
printf( "\n\n\tAsí que has salido del día de pago") ;
printf("\n\tTienes que pagar %2.1f yuanes.", 0.1*pay);
}
(p->; lector[i]). num[0]= '\0';
p->;num actual++;
printf("\n\tHas devuelto este libro.");
}
}
}
else printf(" \ n \ t¿Quieres devolver un libro que no existe? ");
}
Donghua()
{ int Graphdriver = VGA
int Graphmode = VGAHI
int i, j;
registerbgidriver(EGA VGA _ driver);
iniciar gráfico(& controlador gráfico & modo gráfico, "";
clr SCR(); p>
for(I = 0;i<=150;i+=5)
{ establecer color(I);
fondo de texto(rojo);
settextstyle(0, 0, 2);
outtextxy(100, i+140, "Sistema de gestión de biblioteca");
Retraso(1000000);
clr SCR();
}
setcolor(rojo);
outtextxy(50, 200, "Cargando"); p>Retraso (10000000000);
outtextxy(50, 200, "Cargando.
");
Retraso(10000000000);
outtextxy(50, 200, "Cargando..");
Retraso(10000000000);
outtextxy(50, 200, "Cargando...");
Retraso (10000000000);
outtextxy(50, 200, "Cargando...") ; Cargando...");
Retraso(10000000000);
outtextxy(50, 200, "Cargando...");
Tiempo de retraso (10000000000);
outtextxy(50, 200, "Cargando...");
Retraso(10000000000);
outtextxy(50, 200, "Cargando...");
Retraso (10000000000);
outtextxy(50, 200, "Cargando...");
Retraso (10000000000);
outtextxy(50, 200, "Cargando...");
Retraso (10000000000);
outtextxy(50, 200, "Cargando...");
Retraso (10000000000);
outtextxy (50, 200, "Cargando...");
outtextxy( 50, 200, "Cargando...");
outtextxy(50, 200, "Cargando...");
p>Retraso(10000000000);
for(I = 0;i<=10;i++)
Retraso(10000000000);
clr SCR();
} p>
Menú de caracteres (no válido)
{
clr SCR();
Ventana (1, 1, 80, 25); p>
modo de texto (mono);
fondo de texto (negro);
color del texto (5);
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\t *****Bienvenido a la gestión de la biblioteca sistema* * * * *);
printf(" \ n \t * * * * * * * * * * * * * * * * * * * * * * * *); p>
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n \ t *1. Añadir un libro*);
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\t *2. Eliminar un libro* ";
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\t *3. Buscar un libro*);
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\t *4.
Pedir prestado libros*";
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\t *5.
"Devuelve el libro*";
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf(" \ n \ t * 0 . salir * ");
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\tPor favor seleccione:");
Devolver getch();
} p>
Donghua Oriental
{ int graphdriver = VGA
int graphmode = VGAHI
int i, j;
char c;
registerbgidriver(EGA VGA_driver);
init graph(& controlador gráfico & modo gráfico, "";
/* * * * * * * * * * * * *Shi Fu Fang Bo Dong Hua? *******************/
printf:{ establecer color(ROJO);
settextstyle(3,0,5);
outtextxy(100,30,"Fang Bo Donghua?");
outtextxy(150,80,"Sí " );
outtextxy(300, 80, "No");
c = getch();
if(c=='Y'| | c=='y ')
{Donghua();
menú();
}
Otros
p>if(c=='N'||c=='n ')
menu();
Otros
{setcolor (verde);
settextstyle(3, 0, 8);
outtextxy(200, 240, "¡Error!"); ;
clr SCR();
ir a printf
}
}
/*** * ************************************/
}
void main()
{
char c, t;
int x
int k, bandera, p =; 1 ;
estructura TreeNode * bth = NULL
Bofang Donghua();
mientras(1)
{
c = menú();
parche(c);
getch();
Cambiar(c)
{
caso ' 1 ':BTH = mbinsert(BTH);
Pausa;
Caso ' 2 ':BTH = MB del(BTH);
Pausa;
p>
Pausa;
Caso "3": nodo de salida (BTH);
Pausa;
Caso "4": Préstamo (BTH);
Pausa;
Caso '5': devolución(BTH);
Pausa ;
Caso '0': clrscr( );
printf(" \ n \ t¿Quieres regresar? (s/n)");
t = getch();
if(t = = '
Y ' | t = = ' Y ')salir(0);
Romper;
def ult:romper;
}
printf(" \ n \ tPresione cualquier tecla para ingresar al menú principal...");
getch();
}
}