# include ltstdio.h gt
# include ltmath.h gt
# include ltstring.h gt
# include ltstdlib.h gt
Estructura books_list
{
char autor[20] /*nombre del autor*/
< p; >char nombre del libro[20];/*Título*/char editor[20];/*Editor*/
char Pb hora[15];/*Fecha de publicación */
char loginnum[10]; /*Número de inicio de sesión*/
Precio flotante; /*Precio*/
char classfy[10];/ *Categoría número*/
estructura libros _ lista * siguiente/*Campo puntero de lista enlazada*/
};
estructura Libros _ lista * Crear _ Libros _ Doc();/*Crear una nueva lista enlazada*/
void insert doc(struct books _ list * head);/*Insert*/
void delete doc(struct books _ list * head, int num);/*Eliminar*/
void Print _ Book _ Doc(struct books _ list * head /*Browse*/
void search); _ book(struct books _ list * head); /*consulta*/
void info _ change(struct books _ list * head); (struct books _ list * head);/*Guardar datos en un archivo*/
/*Crear un nuevo nodo principal de lista vinculada*/
struct Books _ list * Create _ Books _ Doc()
{
Libros de estructura _ lista * cabeza
cabeza =(libros de estructura _ lista *)malloc(tamaño de(libros de estructura _ lista ));/*Asignar espacio para el nodo principal*/
head->;next = NULL/*El campo de puntero del nodo principal se inicializa y se establece en nulo*/
Regresar header ;
}
/*Guardar datos en un archivo*/
void save(struct books_list * head)
{ p>
Estructura books_list * p;
ARCHIVO * fp
p =head;
fp=fopen("data.txt " , " w "); /*Crea y abre el archivo data.txt escribiendo */
fprintf(fp, "┏━━━┳━━━━━┳━━━━━┳━━ / Libro título┃Autor
┃Unidad de publicación┃Tiempo de publicación┃Número de categoría┃Precio\n);
fprintf(fp, "┣━━━╋━━━━━╋━━━━━╋━━━━━╋ ━━━━━━╋━━━╋━━━━┫\n”);
/*El puntero se mueve desde el nodo principal al nodo final y la información del libro se genera en secuencia */
while(p->; siguiente! = vacío)
{
p = p- gt;
fprintf(fp, "┃ -6.6s┃-10.10s┃-10.10s┃-10.10s┃-12.12s┃-6.6s┃.2f ┃\n", p-gt; loginnum, p- gt; título del libro, p- gt; p- gt; editor, p- gt; pbtime, p- gt; classfy, p- gt;
}
fprintf(fp, "┗━━━ ┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛\n”);
fclose(FP );
Printf("Los datos del libro se han guardado en el archivo data.txt\n ");
}
/ *Insert*/
void insert doc(struct books _ list * head)
{
/*Defina la variable de puntero de estructura S para que apunte a la primera dirección p del nuevo nodo abierto como variable intermedia */
struct books_list *s, * p;
char flag = ' Y/*Definir bandera para facilitar la selección del usuario de repetidos input*/
p = Head;
/*Atravesar hasta el nodo de cola, p apunta al nodo de cola*/
while(p->; siguiente! = vacío)
{
p = p- gt;
}
/*Abrir un nuevo espacio, almacenar datos y agregarlos a la lista vinculada*/ p>
while(flag=='Y'||flag=='y ')
{
s =(struct books _ list *)malloc(size of (struct books _ list));
printf(" \ nIngrese el número de registro del libro:
fflush; (stdin);
scanf( "s ", s- gt; loginnum
printf(" \nIngrese el título del libro:
fflush(stdin);
scanf("s ", s- gt; título del libro);
printf(" \nIngrese el nombre del autor del libro: ");
fflush(stdin);
scanf("s ", s- gt; autor);
printf("\nIngrese el editor del libro: " );
fflush(stdin);
scanf("s", s- gt; editor);
printf(" \nIngrese la publicación del libro. tiempo: ");
fflush (stdin);
scanf("s",s- gt;Pb tiempo);
printf("\nPor favor ingrese el número de clasificación del libro: ");
fflush(stdin);
scanf("s ",s- gt; classfy);
printf( "\n
Introduzca el precio del libro: ");
fflush(stdin);
scanf("f ", amps- gt; precio);
printf( " \n ");
p->; next = s;/*Agregar el nodo recién agregado a la lista vinculada*/
p = s; el nodo de cola y retroceder */
s- gt; next = NULL
Printf ("━ ━ ━¡Agregado exitosamente!━━━━"); p> printf("\n¿Continuar agregando? (S/N):);
fflush(stdin);
scanf("c ", amp flag);
printf(" \ n ");
if(flag=='N'||flag=='n ')
{ break}
else if(flag=='Y'||flag=='y ')
{Continue;}
}
Guardar (encabezado) ;/*Guardar datos en el archivo*/
Volver;
}
/*Operación de consulta*/
anular búsqueda _ libro (struct books _ list * head)
{
Libros de estructura _ list * p;
Temperatura de carga[20];
p = head;
if(head == NULL | | head- gt; Next==NULL) /*determina si la base de datos está vacía*/
{
Printf ("━ ━ ━¡La biblioteca está vacía! ━━━\ n "
}
Otros
{
);Printf("Ingrese el título del libro que está buscando: ");
fflush(stdin);
scanf("s ", temp);
/*El puntero se mueve desde el nodo principal al nodo final para buscar información bibliográfica*/
while(p->; next!=null)
{ p>
p = p- gt; siguiente
if(strcmp(p- gt; nombre del libro, temp)==0)
{
printf("\n¡Un libro encontrado!\n");
printf("\n");
Printf("Número de inicio de sesión: s\t\n ", p- gt; loginnum);
Printf ("Título: s\t\n ", p- gt; título del libro);
Printf ("Nombre del autor: s \t\n ", p- gt; Autor);
Printf ("Editorial: s\t\n ", p- gt; Editor);
Printf(" Lanzamiento fecha: s\t\n ", p- gt; Pb hora);
Printf("Número de clasificación: s\t\n ", p- gt; classfy);
Printf ("precio: .2f\t\n ", p- gt; precio
}
if (p->; next==NULL)
p>{
printf("\n¡Consulta completada! \ n ");
}
}
}
Devolver;
}
/*Operación de exploración*/
void Print _ Book _ Doc(struct books _ list * head)
{
Estructura libros _ list * p;
if(head == NULL | | head- gt; Next==NULL) /*Determinar si la base de datos está vacía*/
{
Printf ( " \ n ━ ━¡No hay registro en el libro! ━━━\ n \ n ");
Regresar
}
p = encabezado
printf("┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━ ┓\n") ;
Printf("┃Número de registro┃Título del libro┃Autor┃Unidad de publicación┃Tiempo de publicación┃Número de categoría┃Precio┃n");
printf("┣━━━╋ ━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫\n”); comienza desde el principio El nodo se mueve al nodo de cola y genera información del libro en secuencia*/
while(p->; next! = vacío)
{
p = p- gt; siguiente;
printf("┃-6.6s┃-10.10s┃-10.10s┃-10.10s┃-12.12s┃-6.6s┃.2f ┃\n ", p-gt; loginnum, p- gt; título del libro, p- gt; autor, p- gt; editor, p- gt; pbtime, p- gt; classfy, p- gt; precio); /* salida en bucle table */
}
printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━ ┻━━━ ┻━━━━┛\n");
printf(" \ n ");
}
/*Operación de modificación* /
void info _ change(estructura libros _ lista * cabeza)
{
estructura libros _ lista * p;
int pan Duan = 0 ;/*Esta variable se utiliza para determinar si se encuentra el directorio de literatura*/
Temperatura de carga[20];
p = head;
Printf("Ingrese el título del libro que desea modificar: ");
scanf("s ", temp
while(p->; next! = vacío); )
{
p = p- gt; siguiente;
if(strcmp(p- gt; nombre del libro, temp)==0)
{
printf(" \nIngrese el número de tarjeta de inicio de sesión del libro: "
fflush(stdin
scanf("s); ", p- gt; loginnum);
printf("\nIngrese el título del libro: ");
fflush(stdin);
scanf( "s",p- gt; título del libro);
printf(" \ nIngrese el nombre del autor del libro: "); >
scanf("s ", p- gt; autor);
printf(" \nIngrese el editor del libro: "); /p>
scanf ("s ", p- gt; fuera
Editor);
printf(" \ nIngrese la hora de publicación del libro: ");
fflush(stdin); - gt; Pb time);
printf(" \ nIngrese el número de clasificación del libro: "
fflush(stdin); s ", p- gt; classfy);
printf(" \nIngrese el precio del libro: ");
fflush(stdin);
scanf ("f", ampp->;precio);
printf("\n");
panduan = 1;
}
}
if(panduan==0)
{
Printf ("\ n ━ ━¡No hay registro en el libro! ━━━\ n \ n ");
}
Regresar;
}
/*Eliminar operación*/
void eliminar doc(struct books _ list * head)
{
struct books_list *s, * p /*s es una variable intermedia, p es un puntero*/
Temperatura de carga[20];
int panduan/*Esta variable se utiliza para determinar si se ha encontrado el directorio de literatura*/
panduan = 0;
p = s = header;
printf("[Ingrese el título del libro que desea eliminar]:);
scanf("s ", temp
/*Atravesar hasta el nodo final*/
Y (p! = vacío)
{
if(strcmp). (p- gt; nombre del libro, temp )==0)
{
Panduan;
Pausa;
}
p = p - gt; siguiente
}
if(panduan==1)
{
para (; s- gt; ¡Siguiente! = p;)/*Buscar el nodo anterior y eliminar el nodo del número de tarjeta*/
{
s = s- gt;Siguiente;
}
s- gt; next = p- gt; /*Asigna la dirección del siguiente nodo al campo de puntero del nodo anterior*/
Free(p);
Printf ("\ n ━ ━¡Eliminar correctamente! ━━━\ n ");
}
Else /*No se encontró ningún libro correspondiente*/
{
Printf( "La bibliografía que ingresaste no existe, ¡confirma e ingresa! \n "
}
Regresar
}
int main(void)
{
Libros de estructura _ list * head
selección de caracteres;
head = NULL
for(;;)/*Realizar entradas y selecciones repetidas*/
{
printf(“┏━┓━━━━━━━━━━━ ━ ━━━━━━━┏━┓\n”);
printf(“┃┃\n sistema de gestión de bibliotecas socat”).
printf("┃┗━━━━━━━━━━━━━━━━━━━┛┃\n"); [1]Entrada de información del libro┃\n ");
printf("┃┃\n");
Printf(" ┃ ●[2] Exploración de información del libro┃\n ");
printf("┃┃\n");
Printf(" ┃ ●[3] Consulta de información del libro┃\n ");
printf("┃┃\n");
Printf(" ┃ ●[4] Modificación de información del libro┃\n ");
printf("┃┃\n"
Printf(" ┃ ●[5]Eliminar información del libro┃\n ");
printf("┃┃\n"); Printf(" ┃ ●[6]Salir del sistema┃\n ");
printf("┗━━━━━━━━━━━━━━━━━━━━━━ ━ ┛\n");
Printf("Seleccione: ");
fflush(stdin);
scanf("c ", selección de amplificador ) ;
if(choice=='1 ')
{
if(head==NULL)
{ p >
head = Crear _ Libros _ Doc();
}
insertar doc(head)
}
else if(elección=='2 ')
{
Print_Book_Doc(encabezado);
}
else if(elección =='3 ')
{
search_book(head);
}
else if(choice=='4 ' )
{
info_change(encabezado);
}
else if(choice=='5 ')
{
eliminar documento(head);
}
else if(choice=='6 ')
{
printf(" \ n ");
Printf ("━ ━ ━ ━ ━ ━ ━Gracias por usar el sistema de gestión de bibliotecas━━n "); p >Pausa;
}
Otro
{
Printf ("━ ━ ━Error de entrada, ¡vuelve a ingresar! ━━━━");
Romper;
}
}
Devuelve 0;
}