¡Más alto! ! ! ! Programación en lenguaje c ~~~

Informe de diseño del curso de lenguaje C: (es difícil proporcionar un diagrama de flujo)

Sistema de gestión de biblioteca

Requisitos del sistema

1. Nombre, número de libro, inventario y cantidad disponible * * * Cuatro artículos. Primero, ingresa la información de tres libros y guárdala en el archivo "book.dat". Cuando se coloca un libro nuevo en la biblioteca, primero determine si el libro existe en el archivo (es decir, compare el título del libro, si es así, modifique el inventario y la información disponible, si no hay ningún libro, agregue la información del libro). al archivo.

2. Consulta de libro: ingrese el número del libro y busque el libro en el archivo. Si lo encuentra, se generará toda la información sobre el libro; si no se encuentra, se generará información que indique que la búsqueda falló. .

En tercer lugar, gestión de préstamos

(1) La información de cada lector incluye el nombre y el número de serie, 1 tarjeta de biblioteca (solo se puede pedir prestado un libro). Ingrese la información de los tres lectores y guárdela en el archivo "reader.dat".

(2) Registro de préstamo de libros: ingrese el número de lector y el número de libro del libro prestado, primero determine si el nombre está en el archivo "reader.dat", si es así, almacene el número de libro en una tarjeta de la biblioteca (Nota: la información de la tarjeta de la biblioteca comienza con cero y, después de tomar prestado el libro, la información de la tarjeta de la biblioteca cambia al número del libro. Modifique el contenido correspondiente del archivo "reader.dat" y modifique el archivo al mismo tiempo). tiempo.

(3) Gestión de devolución de libros: ingrese el número de lector y el número de libro del libro devuelto, establezca la información de la tarjeta de la biblioteca en cero, modifique el contenido correspondiente del archivo "reader.dat" y modifique el archivo "book.dat" al mismo tiempo La cantidad actual del libro en .

En cuarto lugar, genere toda la información del libro y toda la información del lector.

5. Salir del sistema.

Explicación complementaria para los verbos intransitivos: las funciones que deben mejorarse en el futuro del sistema incluyen: agregar lectores, y un lector puede pedir prestados y devolver varios libros al mismo tiempo.

Diseño general

Primero, lea atentamente los requisitos del sistema. En primer lugar, esta sistematización se divide en los siguientes módulos (es decir, las siguientes funciones).

1. El nuevo módulo de almacenamiento de libros se puede implementar mediante la función insert_new_book (charbook_num[], charbook_name[], int number). Los parámetros formales son: título del libro, número de libro, cuántos libros almacenar y luego escriba la información en el archivo boot.dat según sea necesario. Debido a que es necesario ingresar tres libros nuevos al principio, se puede agregar una función de inicialización init_book (), pero la función de inicialización solo se ejecuta una vez, es decir, cuando el sistema se ejecuta por primera vez. En este momento, puede decidir si desea realizar la función de inicialización en función de si existe el archivo boot.dat.

2. Módulo de consulta: Se puede implementar mediante una función void find_book(char book_num[]). Una vez encontrado, genere toda la información sobre el libro. Si no se puede encontrar, se generará un mensaje de error de búsqueda.

3. Módulo de gestión de préstamos:

(1) La información de tres lectores se puede completar durante la inicialización del sistema, es decir, el lector se puede inicializar utilizando la función de inicialización init_reader(). . Debido a que la función de inicialización del lector solo se ejecuta una vez cuando el sistema se ejecuta por primera vez, también puede determinar si ejecutar la función en función de si existe el archivo lector.dat. (Hasta ahora, se puede encontrar que es necesario llamar al menos dos funciones de inicialización en la función de inicialización del sistema).

(2) Módulo de registro de préstamo de libros: puede pasar una función "borrow_Book" (char lector_num [], charbook _ num []) para lograr. Funcionalmente, juzgue por separado.

Si el número de lector de a ya existe, en caso contrario, se generará un error.

b Si los libros prestados del lector están llenos (es decir, solo se puede pedir prestado 1 libro como máximo). Si es así, recuérdele al usuario que primero devuelva el libro.

Si existe el libro correspondiente al número de libro generado por C, si no, recuerde al lector que el libro no existe.

Una vez completado el proceso de préstamo, escriba el número de préstamo en la información de préstamo en la información del lector y modifique el inventario.

(3) Módulo de gestión de devolución de libros: puede utilizar una función return_book(char lector_num[],

Char libro_num[]). Al implementar esta función, debe determinar si:

aEl nombre del lector ya existe. De lo contrario, se generará un error.

Si el lector tomó prestado este libro. De lo contrario, se generará un error.

c. Una vez completado el proceso de devolución del libro, borre la información de préstamo de libros en la información del lector y modifique el inventario.

4. Generar información del libro y del lector: esto se puede lograr mediante print_book() y print_reader() respectivamente.

Lea información directamente desde el archivo book.dat y el archivo Reader.dat y envíela.

5. Salir del sistema: Esto se puede lograr mediante la función exit(). Primero, guarde la información en un archivo, libere el espacio de memoria creado dinámicamente y luego salga del programa.

Diseño detallado

1. Diseño de interfaz

La interfaz del sistema está diseñada con gráficos y menús digitales.

La interfaz principal está diseñada de la siguiente manera:

Sistema de gestión de biblioteca

Menú principal del Sistema de gestión de biblioteca

Seleccione el número correspondiente para ejecutar las Funciones correspondientes:

0: Salir del sistema.

1: Almacenamiento de libros nuevos

2. Consulta de libros

3. Registro de préstamo de libros

4. >

5. Muestra toda la información del libro y del lector.

Cada subinterfaz es la siguiente:

1. Nueva interfaz de almacenamiento de libros:

Seleccione el número correspondiente para realizar la función correspondiente:

10: Volver al menú principal

11: Hay libros nuevos almacenados.

Ingrese el nuevo nombre del libro:

Ingrese el nuevo número de libro:

Ingrese la nueva cantidad de libros:

( Nota: Se agregan libros nuevos. Una vez que la biblioteca se carga correctamente, el programa regresa a la subinterfaz 1).

2. Interfaz de consulta de libros:

Por favor seleccione el número correspondiente para realizar la función correspondiente:

20: Regresar al menú principal

21: Consulta de libro

Ingrese el número de libro que desea consultar:

(Nota: una vez completada la consulta del libro, regrese a la subinterfaz 2)

` 3. Interfaz de registro de préstamo:

Por favor seleccione el número correspondiente para realizar la función correspondiente:

30: Regresar al menú principal

31: Registro de préstamo de libros

Ingrese el número de lector:

Ingrese el número de libro de préstamo:

(Nota: una vez completado el proceso de préstamo, devuelva a subinterfaz 3)

` ` 4. Gestión de devolución de libros:

Por favor seleccione el número correspondiente para realizar la función correspondiente:

40: Volver a el menú principal

41: Registro de devolución de libro

Ingrese el número de lector:

Ingrese el número de libro de préstamo:

( Nota: Una vez completado el proceso de devolución del libro, regrese a la subinterfaz 4)

5. Genere todos los libros y la información del lector:

Seleccione el número correspondiente para realizar la función correspondiente. :

50: Volver al menú principal

51: Generar toda la información del libro :

Título del número de libro: Cantidad de stock actual

52: Genera toda la información del lector:

Número de lector Nombre del lector Número de libro prestado

(Nota: después de generar la información del libro y del lector, regrese a la subinterfaz 5)

2. Diseño de estructura de datos

Considerando que la información del libro y la información del lector contienen diferentes tipos de datos, el programa establece que hay dos tipos de estructuras: información del libro e información del lector. Debido a que la cantidad de libros y lectores no es fija, se implementa mediante almacenamiento en cadena dinámico.

Tipo de libro:

estructura typedef bk{

char book _ num[11] /* El ISBN está codificado con 10 bits y el último 1 bit; es una cadena El final de (lo mismo a continuación).

*/

char book_name[41];/*El nombre del libro está limitado a 40 letras (20 caracteres chinos)*/

Book_kc sin firmar, book_xc/* book_kc Representa el haz de inventario , book_xc representa el stock existente */

struct bk * next

}book;

Tipo de lector:

typedef Structure rd{

char lector_num[11];/*El número del lector de tarjetas está codificado por 10 dígitos*/

char lector_nombre[11];/*Nombre del lector */

char Reader _ book _ num[11]; /*Indica el número del libro prestado, el valor inicial es "0" */

struct bk * next

}Reader;

Código del programa:

# include & ltstdio.h & gt

# include & ltgraphics.h & gt/*Archivo de encabezado de función gráfica*/

# include & ltmath.h & gt

# include & ltstring.h & gt

typedef estructura bk {

char book _ num [11];

char libro _ nombre[41];

int libro _ kc

int libro _ xc

struct bk * siguiente

}libro; /*información del libro*/

estructura typedef rd {

char lector _ num[11];

char lector _ nombre[11];

char lector _ libro _ num[11];

Estructura rd * siguiente

} Lector /*Lector; información*/

struct bk *h_book, *h_reader/*Variable global, es decir, el puntero principal apunta a la lista vinculada de información del libro y a la lista vinculada de información del lector*/

void Form_Insert_New_Book();/*Menú de almacenamiento de libros nuevos*/

void Form_Find_Book().

/*Menú de consulta de libros*/

void Form _ Borrow _ Book(); /*Menú de préstamo de libros*/

void Form _ Return _ Book() /*Return a book Menu*/

void Find _ Book(char *); Consultar libros*/

void Insert_New_Book(char *, char *, int /* Los libros nuevos son); poner en la base de datos, es decir, insertar un nuevo nodo en la lista vinculada*/

void Borrow_Book(char *, char * /*Pedir libros prestados y modificar la información de préstamo del lector y la información existente de); el libro*/

void Return_Book(char *, char *);/*Devolver el libro, modificar la información prestada del lector y la información existente del libro*/

void print _ book(struct bk *);/*Imprimir toda la información del libro*/

void print _ lector(struct rd *);/*Imprimir toda la información del lector*/

void load _ data();/*Leer del archivo Obtener datos, el puntero del encabezado de la lista vinculada apunta al primer nodo*/

void init _ lector() /*Inicializar tres lectores cuando ejecutando el programa por primera vez*/

void init _ book();/*Inicializa tres libros cuando ejecutas el programa por primera vez*/

void save(); /*Guardar la información de la lista enlazada en un archivo*/

Void M_Form()/*Menú principal*/

{ char ch

printf( "\nVentana principal del sistema de gestión de bibliotecas");

Printf("\n 0:Cerrar sesión en el sistema");

Printf("\n 1:Almacenamiento de libros nuevos ");

Printf("\n 2:Consulta de libro") ;

Printf("\n 3:Registro de préstamo de libro");

Printf ("\n 4: Gestión de devolución de libros");

Printf( "\n 5: Generar toda la información");

Do{ /*Este bucle se utiliza para garantizar que se selecciona la tecla numérica correcta para realizar la función correspondiente*/

printf(" \ n\nSeleccione el código de función correspondiente:

scanf("%c ", & ampch);

fflush(stdin); /* Se utiliza para borrar el búfer del teclado. Caracteres redundantes en el área*/

} while(ch! = ' 0 ' & amp&ch! = ' 1 ' &&ch! = ' 2 ' &&ch! = ' 3 ' & amp&ch! = ' 4 ' & amp&ch! ='5');

Switch (ch) /*Selecciona y ejecuta el módulo correspondiente según los caracteres de entrada*/

{Case "0": Exit (0);

p>

caso ' 1 ': Formulario _ Insertar _ Nuevo _ Libro();

Caso "2": Formulario _ Buscar _ Libro(); p>

Caso "3": Form_Borrow_Book(); roto;

Caso "4": Form_Return_Book();

Caso "5": load_data(); print_book(h_book); print_reader(h_reader); m_Form();

Valor predeterminado: printf(" error \ n ");Salir(0);

}

}

Formulario anulado_

Find_Book()

{ char ch

char book _ num[11];

printf(" \nMódulo de función de consulta de libro, seleccione el código de función correspondiente :\ n ");

Printf(" 0: Volver al menú principal\ n ");

Printf(" 1: Consulta de libro");

Haga {

printf("\n\nSeleccione el código de función correspondiente:");

scanf("%c", & ampch);

fflush(stdin);

} while(ch!= ' 0 ' & amp& ampch!= '1');

Cambiar (canal)

{Case "0": M_Form(); Break; /*Seleccione 0 para volver al directorio anterior, el menú principal*/

Case "1":

{ printf (" \ nIngrese el número del libro que desea consultar: ");

scanf("%s ", book _ num

fflush(stdin

);

buscar _ Libro(Libro _ num);/*Ejecutar consulta*/

Form_Find_Book(). /*Una vez completada la consulta, continúe regresando a la ventana de consulta y ejecute la siguiente consulta*/

}

Valor predeterminado: printf (" error \ n "); (0);

}

}

void find _ book(char book _ num[])/*Consultar módulo de libro, consulta basada en el número de libro. */

{ struct bk * p;

p = h _ book

Y (p! = NULL & amp& ampstrcmp(p-& gt; número_libro , book_number )! =0)

p = p-& gt; Siguiente /*Este bucle se utiliza para buscar. Si se encuentra en el medio, P no puede apuntar a nulo al final */

if(p == null)printf(" \ n \ t¡El libro correspondiente a este número no existe! \ n ") ;

else { printf("\n\tNúmero de libro\tNombre del libro\tInventario\tCantidad disponible\n");

printf(" % 10s \t % 10s \t %d\t%d\t\n",p->book_num,p->book_name,p->book_kc,p->book_xc);

}

getch();

}

Void init_book() /*Inicializar el módulo del libro*/

{Booka [3];

ARCHIVO * fp

int I;

printf("\nEl sistema está a punto de inicializarse, reserve el módulo de inicialización:\n");

printf("\nPor favor ingrese el ISBN, título y cantidad de los tres libros (separados por espacios):\n");

for(I = 0;I& lt3;I++) /*Ingrese 3 libros para inicialización*/

scanf("%s%s%d ", ba[i].book_num, ba[i]. Nombre del libro & ampba[ i].book_KC);

for(I = 0;i<3;i++) {ba[i]. libro_xc=ba[i].

book_kc}/*Inventario inicial = disponible*/

If ((FP = fopen ("book.dat", "WB")) == null)/*Crear un nuevo archivo de libro. dat se está preparando para escribir datos*/

{printf("¡No se puede crear el archivo del libro, falló la inicialización! ¡Reinicie el sistema!\n return;}

for( I = 0 ;I<3;I++)/*Escribe los tres libros inicializados en el archivo book.dat */

{ if(fwrite(& ba[i], sizeof(struct bk), 1 , fp )! =1)

{printf("\¡Error al escribir datos!\n "); salida(0);}

}

fclose(FP) );

}

Void init() /*Inicializa funciones gráficas, información del libro e información del lector (este programa no utiliza funciones gráficas por el momento)*/

{ int drive=DETECT, modo = 0;

init gráfico(& modo unidad y amplificador, "";

init_book().

init_reader();

}

void Insert_New_Book(char Book_num[], char book_name[], int número)

/ *Agregue 1 libro nuevo, lea el nombre, número y cantidad del libro nuevo*/

{ struct bk * book _ fp

Estructura bk *p , *q, * t;

q = p = h _ libro

Y (p! = NULL & amp& ampstrcmp(p-& gt; número_libro, número_libro )! = 0){ q = p ; p = p-> next;}

if(strcmp(p->book_num, book_num)= 0)

{ printf(" \ n \ t \ tEl número ya existe, vuelva a ingresar! \ n ");

Return;

}

t=(structure bk *)malloc(sizeof(structure bk ));

strcpy(t-& gt; num_libro, num_libro);

strcpy(t-& gt; nombre_libro, nombre_libro

t-); >; libro_KC = t-& gt; libro_xc = número

q->; siguiente = t; t ->; siguiente = NULL

if((libro_fp=fopen("libro .dat","ab"))==NULL)

{printf("¡No se puede crear el archivo del libro, falló la inicialización! \n "); return;}

/*Agregar información del nuevo libro en el archivo*/

fwrite(t, sizeof(struct bk), 1, book_FP);

fclose(book_FP);

}

void print_book(estructura bk *h)

/*Información del libro de salida*/

{ struct bk * p

p; = h;

printf(" \ n \ tNúmero de libro\ t Nombre del libro\tInventario\tCantidad disponible\n");

while (p!=null)

{ printf(" % 10s \t % 10s % 10d \t % 10d \n ",p->núm_libro,p->nombre_libro,p->libro_kc,p->libro_xc);

p = p-> ;Siguiente;

}

}

void print_reader(estructura rd *h)

/*Información del lector de salida*/

{ struct rd * p;

p = h

printf("\n\tNúmero de lector\tLector; nombre\tNúmero de préstamo\ n ");

Y (p! = vacío)

{ printf(" % 10s \ t % 10s % 10s \ n ",p->reader_num,p->reader_name,p->reader_book_num );

p = p-& gt;Siguiente;

}

getch();

}

void Form_Borrow_Book()

/*Interfaz del menú de préstamo*/

{ char ch

>

char book_num[11], lector_num[11];

printf("\nMódulo de función de préstamo de libros, seleccione el código de función correspondiente:\n");

Printf(" 0: Volver al menú principal\ n ");

Printf(" 1: Préstamo de libros\ n "); printf(" \ n \ nSeleccione el código de función correspondiente: ");

scanf("%c ", & ampch;

fflush(stdin);

p>

} while(ch!= ' 0 ' & amp& ampch!= '1');

Cambiar (canal)

{Ejemplo "0" :M _ Form(); Break;

Case "1":

{ printf("\nIngrese el número del lector y el número del libro prestado: (separados por espacios)") ;

scanf("%s%s ", núm_lector, núm_libro

fflush(stdin);

Libro_préstamo(núm_lector, núm_libro); ); /* Llama a la función de préstamo para ejecutar la función de préstamo*/

form _ Borrow _ Book() /*Después de tomar prestado el libro, el programa vuelve al menú de préstamo*/

;

}

Valor predeterminado: printf(" error \ n "); salida

}

}

void Borrow _ Book(char lector _ num[ ], char book_num[])

/*Ingrese el número de lector y el número de libro que se va a tomar prestado, y ejecute la función de préstamo de libros*/

{ struct bk * libro _ p;

p>

struct rd * lector _ p;

libro _ p = h _ libro

Y (libro_p!= NULL & amp& ampstrcmp(libro_p-& gt; número_libro, número_libro)! =0)

libro_p = libro_p-> >if(book_p==NULL)

{ printf(" \ n \ t¡El libro correspondiente a este número no existe! \ n

form _ Borrow _ Book( );

}

lector_p = h_lector

Y (lector_p! = NULL & amp& amp(strcmp(lector _ p-& gt; número de lectores, número de lectores)! = 0))

lector _ p = lector _ p-& gt; p >

if(reader_p==NULL)

{ printf(" \ n \ t¡El lector de tarjetas correspondiente a este número no existe! \ n

formulario); _ Pedir prestado _ Libro();

}

else if(strcmp(reader _ p-& gt;reader_book_num, " 0 ")!=0)

{ printf(" \ n \ tSe ha alcanzado el número máximo de préstamos, ¡no puedes pedir prestados más libros! \ n ");

form _ Borrow _ Book()

>}

En caso contrario{

book _ p-& gt; book _ xc = book _ p-& gt; book _ xc-1; el libro*/

>strcpy(reader _ p-& gt; lector_book_num, book_p->book _ num); /*Modificar la información de préstamo del lector*/

save() /*Guardar la información modificada en el archivo * /

cargar _ data();/*Leer los datos en el nuevo archivo*/}

form _ Borrow _ Book();/*Después de ejecutar el programa, regresar para pedir prestado Interfaz de menú*/

}

void Form_Return_Book()

/*Devolver menú de libro*/

{ char ch

char book_num[11], lector_num[11];

printf("\nRegrese al módulo de función del libro, seleccione el código de función correspondiente:\n");

Printf(" 0: Regresar al menú principal\ n ");

Printf(" 1: Regresar el libro\ n "); p>

printf(" \ n \ nSeleccione el código de función correspondiente: ");

scanf("%c ", & ampch

fflush(stdin) ;

p>

} while(ch!= ' 0 ' & amp& ampch!= '1');

Cambiar (canal)

{Ejemplo "0":M _ Form(); Break;

Caso "1":

{ printf("\nIngrese el número del lector y el número del libro devuelto: (separados por espacios)");

p>

scanf("%s%s ",reader_num,book_num);

fflush(stdin);

Return_Book( número de lectores, número de libros);/ *Llamar a la función de devolución de libros*/

Form_Return_Book().

}

Valor predeterminado: printf (" error \ n "); salida

}

}

void Return _ Book(char lector _ num[], char book_num[])

/*Ingrese el número de lector y el número del libro devuelto para devolver el libro*/

{ struct bk * libro _ p;

struct rd * lector _ p

libro _ p = h _ libro

Y (libro_p! = NULL & amp& ampstrcmp(libro _ p-& gt; número_libro, número_libro) =0)

libro _ p = libro _ p-& gt; siguiente;

if(libro_p ==NULL)

{ printf(" \ n \ t¡El libro correspondiente a este número no existe! \ n ");

}

lector_p=h_lector

And (reader_p! = NULL & amp& amp(strcmp(lector_p-& gt; número de lectores, número de lectores)! =0))

lector _ p = lector _ p-& gt

if(reader_p==NULL)

{ printf(" \ n \ t¡El lector de tarjetas correspondiente a este número no existe! \ n ");

Form_Return_Book().

}

else if(strcmp(lector_p-& gt; lector_libro_num, libro_num)!=0)

{printf ("\n\tLectores Este libro no es prestado\n ");

Form_Return_Book().

}

En caso contrario{

book_p->book_xc = book_p->book_xc+1;/* Después de devolver el libro, modifica el inventario de libros* /

strcpy(reader _ p-& gt; lector_libro_num, "0"); /*Después de devolver el libro, modifica la información de préstamo del lector*/

save();/ *Guardar en archivo*/

load_data();/*Leer datos en archivo*/}

Form_Return_Book().

}

void init_reader()

/*Cuando el sistema se ejecuta por primera vez, la información de los tres lectores se inicializa y se lee del teclado*/

{ ARCHIVO * fp

Lector ra[3]

int I

printf("\nEl sistema; está a punto de inicializar la lectura Lector:\n ");

printf(" \nIngrese los números y nombres de tres lectores (separados por espacios):\n ");

for(I = 0;i<3;i++)

scanf("%s%s ", ra[i].reader_num, ra[i].

nombre_lector);

for(I = 0;i<3;i++)

strcpy(ra[i].reader_book_num, " 0 ");

if( (fp=fopen("reader.dat "," wb"))==NULL)

{printf("¡No se pudo crear el archivo del lector, falló la inicialización! ¡Reinicie el sistema!\n "); return }

for(I = 0; I<3;I++)/*Escribe la información de tres lectores en un archivo*/

{ if(fwrite (& ra[i] , sizeof(struct rd), 1, fp)! =1)

{printf("\Error al escribir datos!\n ");

}

void Form_Insert_New_Book()

/*Añadir nuevo menú de libro*/

{ char ch

Estructura bk t;

printf(" \nNuevo módulo de función de almacenamiento de libros, seleccione el código de función correspondiente:\n ");

Printf(" 0: Volver al menú principal menu\ n ");

Printf(" 1: Nuevo libro almacenado");

Hacer {

printf( " \ n \ n Seleccione el código de función correspondiente: ");

scanf("%c ", & ampch);

fflush(stdin);

} while(ch! = ' 0 ' & amp& ampch!= ' 1 ' & amp;& ampch!= ' 2 ' & amp& ampch!= ' 3 ' & amp& ampch!= ' 4 ' & amp& ampch!= '5');

Cambiar (canal)

{Caso "0": M_Form(); Break;

Caso "1":

{ printf( "\nPor favor ingrese el número, nombre y cantidad del nuevo libro en orden (separado por espacios):");

scanf("%s%s%d ", t.book_num, t.book_name , ampt.book_KC);

fflush(stdin);

Insert_New_Book(t.book_num, t.book_name, t.Book_KC);

Form_Insert_New_Book() .

}

Valor predeterminado: printf(" error \ n "); salida

}

}

void load_data()

/*Leer los datos en el archivo book.dat y el archivo Reader.dat en la memoria*/

/*Los datos que se read Almacenado en dos listas enlazadas */

{ struct bk *book_p1, *book_p2, * book_p3

struct rd *reader_p1, *reader_p2, *reader_p3

ARCHIVO *fp_book, * fp_reader

fp_book=fopen("book.dat", "Rb");

book_p 1 =(struct bk * )malloc(tamaño of(struct bk));

fread(book_p1,sizeof(struct bk),1,FP_book);

h_book = libro_P3 = libro _ p2 = libro _ p 1; /p>

Y (!feof(fp_book))

{ libro _ p 1 =(struct bk *)malloc(tamaño de(struct bk) );

fread (book_p1,sizeof(struct bk),1,FP_book);

book_p2->next = book_p 1;book_p3 = book_p2book_p2 =book_p1;

}

book_p3->next = NULL

gratis(book_p 1);

fclose(FP_book);

fp_reader=fopen("reader.dat", "Rb");

reader_p 1 =(struct rd *)malloc(tamaño de(struct rd));

fread(reader_p1,sizeof(struct rd),1,FP_reader );

h_reader = lector_P3 = lector_p2 = lector_p 1;

Y (! feof(fp_reader))

{ lector _ p 1 =(struct rd *)malloc(sizeof(struct rd)).

fread(reader_p1, sizeof(struct rd), 1, FP_reader);

reader_p2-> next = lector_p 1;

}

reader_p3->next = NULL

free(reader_p 1);

fclose(FP_reader);

}

Guardar no válido()

/*Convertir los datos en la lista vinculada Guardar en la memoria */

{ ARCHIVO *book_fp, * lector _ fp

struct bk * libro _ p;

struct rd * lector _ p

book_p = h_bookreader_p = h_reader

if(( book_fp=fopen("book.dat","wb"))==NULL)

{printf("¡No se puede crear el archivo del libro, falló la inicialización! ¡Reinicie el sistema!\n "); }

Y (book_p! = vacío)

{ if(fwrite(book_p, sizeof(struct bk), 1, book_fp)!=1)

{printf("\Error al escribir datos!\n "); exit(0);

libro _ p = libro _ p-& gt; p>

fclose(libro _ FP);

if((lector _ FP = fopen(" lector . dat "," wb"))==NULL)

{printf("No se puede crear el archivo del libro, ¡falló la inicialización! ¡Reinicie el sistema!\n "}

And (reader_p!=null)

{ if( fwrite(reader_p, sizeof(struct rd), 1, lector_fp)!=1)

{printf("\Error al escribir datos!\n "); p>lector _ p = lector _ p-& gt;

p>

}

fclose(lector _ FP);

}

main()

{ FILE * fp

Temperatura de la pieza de trabajo de la estructura;

clr SCR();

h _ libro = NULLh _ lector = NULL

if((fp= fopen("book.dat", "r")== NULL)

init(); / *Inicialización al ejecutar el sistema por primera vez*/

fclose(FP) ;

load_data();/*Leer datos del archivo*/

m_Form();/*Mostrar el menú principal*/

save();/*Guardar los datos en la memoria (es decir, los datos en la lista vinculada) en un archivo*/

getch();

}

Problemas y soluciones planificados

Problema 1: en el módulo de gestión de préstamo de libros, cuando el número de libros existentes Si se ingresan correctamente los lectores y el número de libros prestados, el sistema le indicará que no existe dicho lector.

Soluciones y pasos:

1. Genere los números de serie de todos los lectores uno por uno, verifique si el lector está en el archivo y descubra que así es.

2. Dado que existe este lector, verifique el bucle para determinar si hay algún problema con la oración del lector.

3. Genere la información del lector utilizada para realizar el bucle para verificar la oración y encontrar caracteres confusos.

3. Analizó cuidadosamente la causa del código confuso y finalmente descubrió que el tipo de variable era incorrecto y que la variable de puntero de estructura del tipo de lector se definió erróneamente como una variable de puntero del tipo de libro. .

(Nota: esta parte debe tener al menos 2 páginas, aquí solo se proporciona el formato)

Aprende de la experiencia

A través del diseño de este curso, ¿Obtuve una comprensión profunda del desarrollo de programas complejos, lo que me permitió comprender mejor la importancia de la modularidad en el desarrollo de programas?

(Nota: Necesitas escribir más en esta parte)

>