C-Programm: Bücherdatenbank mit verketteter Liste einlesen

Informatik4,22 KB

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

Herunterladen

PDF Word HTML