C-Programm: Bücherdatenbank mit verketteter Liste einlesen
C-Programm: Bücherdatenbank mit verketteter Liste
Das folgende Programm liest eine Bücherdatenbank aus einer Datei ein und zeigt deren Inhalt an. Die Daten werden in einer verketteten Liste gespeichert.
Hauptprogramm (main)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include "funtzioak.h"
int main() {
char fizena[30];
pTNodo list = NULL;
printf("Geben Sie den Dateinamen ein, den Sie öffnen möchten: ");
gets(fizena);
cargarBD(fizena, &list);
mostrarContenido(list);
getchar();
return 0;
}
Datei funtzioak.c – Funktion cargarBD
void cargarBD(char *fizena, pTNodo *list)
{
int tmp = 0;
char datu[100];
pTNodo punt1, punt2, ini;
FILE *fd;
if ((fd = fopen(fizena, "rb")) != NULL) {
*list = (pTNodo) malloc(sizeof(tNode));
punt1 = *list;
while (!feof(fd)) {
if (tmp > 0) {
punt2 = (pTNodo) malloc(sizeof(tNode));
punt1->sig = punt2;
punt1 = punt2;
}
fgets(datu, 100, fd);
punt1->libro.titulo = (char *) malloc((strlen(datu) + 1) * sizeof(char));
if (punt1->libro.titulo != NULL) {
strcpy(punt1->libro.titulo, datu);
fgets(datu, 100, fd);
punt1->libro.autor = (char *) malloc((strlen(datu) + 1) * sizeof(char));
if (punt1->libro.autor != NULL) {
strcpy(punt1->libro.autor, datu);
fgets(datu, 100, fd);
punt1->libro.editorial = (char *) malloc((strlen(datu) + 1) * sizeof(char));
if (punt1->libro.editorial != NULL) {
strcpy(punt1->libro.editorial, datu);
fgets(datu, 100, fd);
sscanf(datu, "%d", &punt1->libro.paginas);
fgets(datu, 100, fd);
sscanf(datu, "%d", &punt1->libro.anio);
fgets(datu, 100, fd);
punt1->libro.ISBN = (char *) malloc((strlen(datu) + 1) * sizeof(char));
if (punt1->libro.ISBN != NULL) {
strcpy(punt1->libro.ISBN, datu);
tmp++;
} else printf("Nicht genügend Speicher vorhanden.\n");
} else printf("Nicht genügend Speicher vorhanden.\n");
} else printf("Nicht genügend Speicher vorhanden.\n");
} else printf("Nicht genügend Speicher vorhanden.\n");
}
punt1->sig = NULL;
fclose(fd);
} else printf("\nDie Datei kann nicht geöffnet werden.\n");
}
Funktion mostrarContenido
void mostrarContenido(pTNodo list)
{
pTNodo ini;
ini = list;
while (ini) {
printf("\n\n");
printf("\tTitulo -> %s", ini->libro.titulo);
printf("\tAutor -> %s", ini->libro.autor);
printf("\tEditorial -> %s", ini->libro.editorial);
printf("\tPaginas -> %d\n", ini->libro.paginas);
printf("\tAnio -> %d\n", ini->libro.anio);
printf("\tISBN -> %s\n", ini->libro.ISBN);
ini = ini->sig;
}
}
Datentypen (Header-Datei)
typedef struct Libro {
char *titulo;
char *autor;
char *editorial;
int paginas;
int anio;
char *ISBN;
} tLibro, *pTLibro;
typedef struct Nodo {
tLibro libro;
struct Nodo *sig;
} tNodo, *pTNodo;
void cargarBD(char *fizena, pTNodo *list);
void mostrarContenido(pTNodo list);
Bibliografie
biblio