Problem z połączeniem list i struktur

0

Witam, mam do napisania projekt w języku C. Problem polega na tym, że nigdy nie tworzyłem baz danych, więc sprawia mi to problem. Doszedłem do tego momentu (kod poniżej) i zastanawiam się jak z tego wybrnąć. Proszę o pomoc, pozdrawiam. (PONIZEJ ZDJECIE TRESCI)

#include <stdio.h>
#include <stdlib.h>
#include "Biblioteka.h"
#include <ctype.h>
#include <string.h>



int main()
{
    int licznik_glowny=0;
    ADRES pierwszy=NULL;
    ADRES ostatni=NULL;
    ADRES pom;

    FILE *plik=fopen("Uczestnicy.txt","r");
    if(!plik) return 1;
    int i=0;
    int licznik=0;
    while(licznik!=(-1))
    {
        if(fscanf(plik,"%s",uczestnicy[i].nazwisko)==EOF) break;
        {
            if(strcmp(uczestnicy[i].nazwisko,uczestnicy[i+1].nazwisko)!=0)
                licznik++;
        }
        fscanf(plik,"%s",uczestnicy[i].imie);
        fscanf(plik,"%s",uczestnicy[i].email);
        fscanf(plik,"%d",&uczestnicy[i].rok_urodzenia);
        fscanf(plik,"%s", uczestnicy[i].identyfikator2);
        i++;
    }
    licznik_glowny=licznik;
    fclose(plik);

    for(i=0; i<licznik_glowny; i++)
        if(printf("%s\t%s\t%s\t%d\t%s\n",uczestnicy[i].nazwisko,uczestnicy[i].imie,uczestnicy[i].email,uczestnicy[i].rok_urodzenia,uczestnicy[i].identyfikator2)==EOF);

    FILE *plik2=fopen("Wydarzenia.txt","r");
    if(!plik2) return 1;
    int j=0;
    do
    {
        pom=(ADRES)malloc(sizeof(IMPREZA));
        if(fscanf(plik2,"%s",pom->nazwa)==EOF) break;
        fscanf(plik2,"%s",pom->data);
        fscanf(plik2,"%s",pom->miejsce);
        pom->liczba_uczestnikow=U;
        fscanf(plik2,"%d",&(pom->minimalny_wiek));
        fscanf(plik2,"%s",pom->identyfikator);
        j++;
        pom->nast=NULL;
        if(pierwszy==NULL)
        {
            pierwszy=pom;
            ostatni=pom;
        }
        else
        {
            ostatni->nast=pom;
            ostatni=pom;
        }
    }
    while(j!=(-1));
    fclose(plik2);


    return 0;
}
//teraz deklaracje stuktur i list:

#ifndef BIBLIOTEKA
#define BIBLIOTEKA



#endif // BIBLIOTEKA

#define U 10
#define M 50


struct Uczestnik
{
    char nazwisko[50];
    char imie[20];
    char email[30];
    int rok_urodzenia;
    char identyfikator2[50];
};

typedef struct Uczestnik UCZESTNIK;


struct Impreza
{
    char nazwa[50];
    char data[15];
    char miejsce[50];
    int liczba_uczestnikow;
    int minimalny_wiek;
    char identyfikator[50];
    struct Impreza *nast;
};
typedef struct Impreza IMPREZA;
typedef IMPREZA *ADRES;

IMPREZA tablica_imprezy;

UCZESTNIK uczestnicy[U*M];

struct Festiwal
{
    ADRES adres;
    UCZESTNIK uczestnicy[U*M];
    struct Festiwal *nastepny;
};
typedef struct Festiwal FESTIWAL;
typedef FESTIWAL *ADRES2;

0

Include Guard powinien wyglądać tak:

#ifndef [NAZWA]
#define [NAZWA]

/* Tutaj wszystko - struktury, funkcje, zmienne itd. */

#endif

Typedef-struct można zrobić tak:

typedef struct Impreza
{
	/* Wszystkie pola Imprezy */
} IMPREZA;

Później masz dziwną konstrukcję

IMPREZA tablica_imprezy;

bo nazwa zmiennej mówi o jakieś tablicy, tymczasem jest to tylko struktura.

A teraz powiedz mi, jak z pliku głównego rozróżnisz wskaźnik typu Impreza od wskaźnika typu Festiwal? Odpowiedź - nijak. Albo pozmieniaj nazwy poniższych zmiennych albo kompletnie się tych linii pozbądź.

typedef IMPREZA *ADRES;
...
typedef FESTIWAL *ADRES2;

I na samym końcu - jakie jest pytanie? Bo nie rozumiem z czego chcesz wybrnąć.

0

Nie odpowiadaj w komentarzach na rzeczy związane z oryginalnym postem.

Zauważyłem jeszcze kilka problemów.
Tutaj

if(fscanf(plik,"%s",uczestnicy[i].nazwisko) == EOF) break; // Ten if zamyka się tutaj
{ // Zbędny nawias
    if(strcmp(uczestnicy[i].nazwisko,uczestnicy[i+1].nazwisko)!=0)
        licznik++;
} // Zbędny nawias

Nie wiem dlaczego tworzysz nową zmienną licznik_glowny, która jest kopią licznik i która pozostaje nie zmieniona. Nie można po prostu użyć zmiennej licznik?

Poza tym wszystkim Twój tok myślenia wydaję mi się ok.

Porozbijaj to na funkcje to będzie łatwiej dodawać kolejne rzeczy i analizować co już jest zrobione.

1 użytkowników online, w tym zalogowanych: 0, gości: 1