La Red de Conocimientos Pedagógicos - Currículum vitae - Diseño de cursos de lenguaje C: ¿Cuál es la idea básica del diseño de un sistema de gestión de libros?

Diseño de cursos de lenguaje C: ¿Cuál es la idea básica del diseño de un sistema de gestión de libros?

Los principales requisitos del sistema de gestión de bibliotecas son poder introducir libros, añadir bibliografías, buscar información de libros, eliminar o modificar información, y algunos también requieren mostrar si han sido prestados, etc.

Generalmente se utilizan matrices de estructura, listas enlazadas, operaciones con archivos y funciones personalizadas. Lo principal es tener un conocimiento firme de los conocimientos básicos.

Primero defina la estructura, luego defina los miembros de la estructura y seleccione una matriz para almacenar diversa información sobre el libro. La introducción de información se puede realizar mediante los bucles for y do while.

El almacenamiento de información requiere funciones de operación de archivos, como fopen, fwrite, etc.

Eliminar y agregar puede eliminar nodos o agregar nodos.

La búsqueda y similares se pueden implementar utilizando varias funciones que operan en cadenas.

Código fuente de referencia adjunto#include?lt;stdio.hgt;

#include?lt;string.hgt;

#include?lt;stdlib . hgt;

#include?lt;conio.hgt;

#definebooks?"f:\\books.txt"

#define?booksbak" f :\\booksbak.txt"

struct?bookinfo

{

char?isbn[20];

char?title [ 30];

char?autor[20];

int?count

}; > p>

{

struct?bookinfo?onebook;

struct?book?*siguiente;

};

struct ?book?*searchBook?(?struct?book?*listptr, char?isbn[])

{

while(listptr!=(struct?book?*)0 )

if?(strcmp(listptr-gt; onebook.isbn, isbn)==0)

return?listptr

else

listptr=listptr-gt; siguiente;

return?(struct?book?*)0;

}

void?MainSearchbook(struct? libro ?*firstptr)

{

struct?book?*ptr;

char?isbnno[20];

printf( " Introduzca el ISBN: ");

scanf("s", amp; isbnno

ptr=searchBook(firstptr, isbnno

); ? (ptr!=(struct?book?*)0)

{

printf("¡¡¡Encontrado!!!\n");

printf( "ISBN: s\n", ptr-gt; onebook.isbn);

printf ("Título: s\n", ptr-gt; onebook.title

); printf("Autor: s\n",ptr-gt;onebook.author);

}

else

printf("lo siento, ¿no? encontrado !!!\n");

}

int?addBook(struct?book?*listptr, struct?bookinfo?note)

{

while(listptr-gt; next!=0)

listptr=listptr-gt; siguiente;

listptr-gt; next=(struct?book?* )malloc(tamañode(struct?book));

<

p> listptr-gt; siguiente-gt; onebook=nota;

listptr-gt; siguiente=0; >}

void?MainAdd(struct?book?*listptr, FILE?*fp)

{

int?ok;

struct?bookinfo?note;

printf("Ingrese el ISBN:");

scanf("s",?e.isbn);

printf("Ingrese el título:");

scanf("s",?e.title);

printf("Ingrese el autor:");

scanf("s",?e.author);

ok=addBook(listptr, nota);

if?(ok==0)

{

//Escribe la imagen agregada en el archivo y guárdala

fprintf(fp, "\ns?s?s?d", note.isbn, note . title, note.author, 0);

printf("¡¡¡Libro agregado correctamente!!!\n"); >

printf("¡¡¡Error al agregar el libro!!!\n");

}

int?removeBook(struct?book?*listptr, char?isbn[] )

{

while(listptr-gt; next!=(struct?book?*)0)

{

si ?( strcmp(listptr-gt; next-gt; onebook.isbn, isbn)==0)

{

listptr-gt; next=listptr-gt; ; siguiente ;

return?0;

}

else

listptr=listptr-gt; p> }

return?-1;

}

void?MainRemove(struct?book?*listptr, FILE?*fp)

/************************************************ ** *************************/

/*? Eliminar función de libro, eliminar nodos de lista vinculados a través de ISBN y eliminar archivos correspondientes en el archivo. Información*/

/*? Eliminar una línea en el archivo, usando un método estúpido, escribir la información requerida en un archivo nuevo, eliminar el archivo antiguo, cambiar el nombre...* /

/****************************************** ************ *************************/

{

char?isbnno[20];

int?ok;

struct?bookinfo?onebook;

printf("Ingrese el ISBN:" );

scanf("s", amp;isb

nno);

ok=removeBook(listptr, isbnno);

if?(!ok)

{

ARCHIVO?* fpbak;

if?((fpbak=fopen(booksbak, "a "))==NULL)

printf("¡¡Error al abrir el archivo!!!\n");

fseek(fp, 0, SEEK_SET);?//Mover al principio del archivo

while((fscanf(fp, "s?s?s?d\n" , amp; onebook.isbn, onebook.title, onebook.author, onebook.count))!=EOF)

{

if?(strcmp(onebook.isbn, isbnno) !=0)

{

fprintf(fpbak, "s?s?s?d\n", onebook.isbn, onebook.title, onebook.author, onebook.count

}

}

fclose(fp);

fclose(fpbak); ?(remove(books))?//Devuelve un valor distinto de 0 si la eliminación falla

{

printf("¡¡Error al eliminar el archivo!!!\n");

return?;

}

else

if?(rename(booksbak, books))//El cambio de nombre falla y devuelve un valor distinto de cero valor

{

printf("¡¡¡Falló el cambio de nombre!!!\n");

retorno?; >

printf("¡¡¡Eliminación exitosa!!!\n");

}

else

printf("¡¡No se encontró ese libro!!! " );

}

intchoice(void)

{

int?c;

printf( " 1. Ver libros\n");

printf("2.Agregar libros\n");

printf("3.Eliminar libros\n");

printf("4.Salga del programa\n");

printf("Seleccione un número de serie:");

return?c=getchar( );

p>

//return?c=getche();

printf("\n\n");

}

int?addEntry (FILE?*fp,struct?book?*firstptr)

/******************** ************** ************************************* *******/

/*Se utiliza principalmente para cargar información del libro almacenada en el archivo*/

/************** ******************* ********************************** ************/

{

cadena

uct?bookinfo?onebook;

while((fscanf(fp,"s?s?s?d\n",& onebook.isbn,& onebook.title,& onebook.author, amp; onebook .count))!=EOF)

{

while(firstptr-gt; next!=0)

firstptr=firstptr-gt; /p>

firstptr-gt; next=(struct?book?*)malloc(sizeof(struct?book));

firstptr-gt; p>

primerptr-gt;siguiente-gt;siguiente=0;

}

retorno?0; >int?main(int?argc, char?*argv[])

{

int?ch;

struct?book?first ;

strcpy(first.onebook.isbn, "123456");

strcpy(first.onebook.title, "Programación?C"); .onebook.author, "yhb");

first.next=0;

struct?book?*firstptr=amp;first;?//Puntero de encabezado de lista vinculada

ARCHIVO?*fp;

if?((fp=fopen(books, "a "))==NULL)

printf("¡Error al abrir el archivo! !!");

addEntry(fp, firstptr);

while(1)

{

system(" CLS" );?//Borrar pantalla

/************************************ * **************************************/

/* Piensa Piensa en por qué necesitas borrar el búfer aquí*/

/*Debido a getchar() la última vez (función de elección), todavía queda un '\n' en el búfer... .*/

/*Puedes comentar esta oración y echarle un vistazo. Si no tienes esta oración, ¿tendrás problemas?*/

/*Si. no usa fflush, puede reemplazar getchar() arriba con getche ()*/

/*Compare getchar(), getch(), getche()...*/

/******** ************************************* *************** *************/

fflush(stdin);?

ch =elección()-48;

cambiar ?(ch)

{

caso?1:

MainSearchbook(firstptr);

descanso

c

ase?2:

MainAdd(firstptr, fp);

break;

case?3:

MainRemove(firstptr, fp)

descanso;

caso?4:

printf("Gracias por usar...\n"); > salir (0);

predeterminado:

printf("¡Ingrese el número de serie correcto!"); sistema("PAUSA ");

}

retorno?0;

}