Cómo crear un sistema de gestión de bibliotecas utilizando lenguaje C
Las notas son muy claras
Si tienes alguna duda, pregúntame.
# 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]; /*publisher*/
char Pb hora[15];/ *Fecha de publicación */
char loginnum[10]; /*Número de inicio de sesión*/
Precio flotante; /*Precio*/
char classfy[10 ];/ *Número de categoría*/
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);/*Insertar*/
void delete doc( struct books _ list * head, int num); /*Delete*/
void Print _ Book _ Doc(struct books _ list * head /*Browse*/
); void search _ book(struct books _ list * head); /*consulta*/
void info _ change(struct books _ list * head); void save(struct books _ list * head);/*Guardar datos en un archivo*/
/*Crear un nuevo nodo principal de lista vinculada*/
struct Books _ list * Crear _ Libros _ Doc()
{
Libros de estructura _ lista * cabeza
cabeza =(libros de estructura _ lista *)malloc(tamaño de( libros de estructura _ list));/*Asignar espacio para el nodo principal*/
head->;next = NULL/*El campo de puntero del nodo principal se inicializa y se establece en nulo*/
Devolver encabezado;
}
/*Guardar datos en un archivo*/
void save(struct books_list * head)
{
Libros de estructura _ lista * p;
FILE * fp
p = head
fp=fopen("data .txt; "," w+"); /*Cree y abra el archivo data.txt escribiendo */
fprintf(fp,"┏━━━┳━━━━━┳━━━━━ ┳ ━━━━━┳━━━━━━┳━━━┳━━━━┓\n”; /*Salir de la tabla a un archivo*/
Fprintf(fp,"┃ Número de registro┃Título del libro┃Autor┃Unidad editorial┃Tiempo de publicación┃Número de clasificación┃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* /<
/p>
mientras(p->; siguiente! = vacío)
{
p = p-& gt; siguiente;
fprintf( fp,"┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f ┃\n",p-> >Título del libro, p->Autor,p->Editor,p->pbtime,p->classfy,p->Precio);
}
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)
{
/* Definir la variable de puntero de estructura S para apuntar a la primera dirección p del nuevo nodo abierto como una variable intermedia */
struct books_list *s, * p;
char flag = ' Y/* Definir la bandera para facilitar al usuario la elección de entradas repetidas*/
p = head;
/*Atravesar hasta el nodo final, p apunta al nodo final*/
mientras (p->;Siguiente!=null)
{
p = p->Siguiente;
}
/*Abre un nuevo espacio, almacena datos y agrégalos a la lista enlazada*/
while(flag=='Y'||flag=='y ')
{
s =(struct books _ list *)malloc(size of(struct books _ list));
printf("\nIngrese el número de registro del libro:");< / p>
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(" \ n Por favor ingrese 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); /p>
printf("\nIngrese la hora de publicación del libro:");
fflush(stdin);
scanf("%s ",s-& gt ;Pb time);
printf(" \ nIngrese el número de clasificación del libro: "
fflush(stdin
scanf("%s); ", s-& gt; classfy);
printf(" \nIngrese el precio del libro: ");
fflush(stdin);
scanf ("%f",&s->price);
printf("\n");
p->next = s;/*Agregar nuevo Se agrega el nodo a la lista enlazada*/
p = s /*p apunta al nodo de cola y se mueve hacia atrás*/
s-& gt; p>pri
ntf ("━ ━ ━¡Agregado exitosamente!━━━━");
printf(" \ n¿Continuar agregando? (Y/N):);
fflush(stdin );
scanf("%c ", & bandera);
printf(" \ n ");
if(bandera=='N '|| bandera=='n ')
{ break}
else if(flag=='Y'||flag=='y ')
{ Continuar;}
}
Guardar (encabezado); /*Guardar datos en el archivo*/
Volver;
} p>
/*Operación de consulta*/
void search _ book(struct books _ list * head)
{
Estructura books_list * p;
Temperatura de carga [20];
p = cabeza
if(cabeza == NULL | | cabeza-& gt ;Next==NULL) / *Determinar si la base de datos está vacía*/
{
Printf ("━ ━ ━¡La base de datos está vacía!━━━\ n ");
}
Otro
{
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*/ p >
mientras(p->; siguiente!=null)
{
p = p-& gt; siguiente;
if (strcmp( p->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->loginnum);
Printf (" Título: %s\t\ n ", p-& gt; título del libro);
Printf("Nombre del autor: %s\t\n ", p-& gt; autor);
Printf( "Nombre del autor: %s\t\n ", p-& gt; autor);
p>
Printf ("Editorial: %s\t\n ",p-& gt; Editor);
Printf("Fecha de publicación: %s\t\n ",p- & gt; Pb time
Printf ("Número de clasificación: %s\t); \n ", p-& gt; classfy);
Printf ("precio: %. 2f\t\n ", p-> precio);
} p>
If (p->; next==NULL)
{
printf("\n¡Consulta completada! \ n ");
}
}
}
Devolver;
}
/*Operación de navegación*/
void Print _ Book _ Doc(struct books _ list * head)
{
Estructura libros _ list * p;
if(head == NULL | | head-& gt; Next==NULL) /*determina si la base de datos está vacía*/
{
Printf ("\ n ━ ━¡No hay registro en el libro! ━━━\ n \ n "); ;
printf("┏━━━┳
━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓\n”); Número de registro ┃ título del libro ┃ autor ┃ unidad editorial ┃ hora de publicación ┃ número de clasificación ┃ precio ┃n”
printf("┣━━━╋━━━━━╋━━━━━╋); ━━━━━╋━━━━━━╋━━━╋━━━━┫\n”);
/*El puntero se mueve desde el nodo principal al nodo posterior, y el la información del libro se genera en secuencia*/
while(p->; next!=null)
{
p = p-& gt;
printf("┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f ┃\n",p -> loginnum, p ->Título del libro,p->Autor,p->Editor,p->pbtime,p->Classfy,p->Precio);/*Tabla de salida de bucle* /
}
printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━ ━ ━┻━━━━┛\n");
printf(" \ n ");
}
/*Operación de modificación*/< / p>
void info _ change(struct books _ list * head)
{
estructura libros _ list * 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 = p-& gt; siguiente
if(strcmp(p-& gt;nombre del libro, temperatura) ==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:
);fflush(stdin);
p>
scanf("%s ", p-& gt; autor);
printf("\nPor favor ingrese el libro editor:");
fflush( stdin);
scanf("%s ",p-& gt; editor);
printf("\ nIngrese la hora de publicación del libro:");
fflush(stdin);
scanf("%s ", p-& gt; Pb time);
printf("\nIngrese el número de clasificación del libro: ");
fflush(stdin);
scanf("%s ",p->classfy);
printf("\nIngrese el precio del libro: ");
fflush(stdin);
scanf("%f ", &p->; precio
printf( " \ n ");
panduan = 1;
}
}
si(panduan==
0)
{
Printf ("\ n ━ ━¡No hay registro en el libro! ━━━\ n \ n "
}
Regresar;
}
/*Eliminar operación*/
anular eliminar documento(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 la bibliografía*/
panduan = 0
p = s =head
; printf("[ Ingrese el título del libro que desea eliminar]:);
scanf("%s ", temp);
/*Atravesar hasta el nodo final */
Y (p!=null)
{
if(strcmp(p-> nombre del libro, temp)==0)
{ p>
Panduan++;
Pausa;
}
p = p-& gt;Siguiente;
}
if(panduan==1)
{
for(;s->next!= p;)/*buscar el nodo A anterior elimina el nodo del número de tarjeta*/
{
s = s-& gt; s-& gt; next = p-& gt; next; /*Asigna la dirección del siguiente nodo al campo de puntero del nodo anterior*/
Free(p);
Printf ("\ n ━ ━¡Eliminación exitosa!━━━\ n ");
}
Else /*No se encontró ningún libro correspondiente*/
{
Printf("La bibliografía que ingresó no existe, ¡confírmela e ingrese! \ n ");
}
Regresar; >
}
int main(void)
{
Libros de estructura _ lista * encabezado
selección de caracteres; p>
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("Por favor seleccione:");
fflush(stdin);
scanf("%c ", & elección de amplificador);
if(choice=='1 ')
{
if(head==NULL)
{
head = Crear _ Libros _ Doc();
}
insertar doc(head);
else if(choice=='2 ')
{
Print_Book_Doc (encabezado);
}
else if (choice=='3 ')
{
search_book(head);
}
else if(choice==' 4')
{
info_change(header);
}
si no(choice=='5') p>
{
eliminar documento(head);
}
si no(choice=='6 ')
{
printf(" \ n ");
Printf ("━ ━ ━ ━ ━ ━ ━Gracias por usar el sistema de gestión de bibliotecas━━n "); >
Pausa;
}
Otro
{
Printf ("━ ━ ━Error de entrada, vuelva a ingresar ! ━━━━");
Romper;
}
}
Devuelve 0;
}