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)
{ p>
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"); p >
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 ; p>
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 p>
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;
}