Baza danych- struktury C

0

Witam! Mam do napisania prostą książkę telefoniczną (Imię, Nazwisko jako napisy, Numer telefonu jako liczba typu long). Program musi pozwalać (poprzez funkcje) na dodanie, usunięcie i przeglądanie wpisów. Dane powinny być przechowywane w tablicy dynamicznej. Należy napisać funkcje:

  • dodającą do tablicy jeden rekord bazy,
  • wyszukującą w bazie (tablicy) rekord o podanym polu Numer (zwracającą indeks znalezionego rekordu lub -1)
  • wypisującą element tablicy o podanym indeksie - funkcja ma otrzymywać wskaźnik wypisywanego elementu.

Siedziałem nad tym programem już kilka godzin i nie wiem co mam źle, proszę o pomoc i zrozumienie, jako dla kompletnego laika w dziedzinie programowania.

#include <stdio.h>
#include <stdlib.h>

struct elem{
        char imie[10];
        char nazwisko[10];
        long int telefon;
};

typedef struct elem elem;

void dodaj(elem ** baza, elem nowy)
{
    int i=0;
    elem * temp = * baza;
    int rozmiar=0;

    while((temp!=NULL) && ((temp->telefon)!=(-1)))
    {
        rozmiar++;

    }


    temp=malloc((rozmiar+1)*sizeof(elem));
    if(temp==NULL)
    {
        free(*baza);
        *baza==NULL;
        return;

    }
    for(i=0;i<rozmiar;i++)
    {
        temp[i]=(*baza)[i];
    }
    temp[rozmiar]=nowy;
    elem koniec={"","",(-1)};
    temp[rozmiar+1]=koniec;
    if(*baza) free(*baza);
    *baza=temp;

}
int szukaj(elem* baza, int long numer)
{
        int i=0;

        for(i=0;(baza->telefon)!=(-1);i++)
        {
            if(baza[i].telefon==numer) return i;
            return -1;
        }
}

void wypisz(elem ** baza,int k, int n)
{
    int i=0;
    elem szukany;
    for(i=0;i<n;i++)
    {
        szukany=(*baza)[i];
        if((i+1)==k)
        {
            printf("Imie: %s\nNazwisko: %s\nNumer telefonu: %l\n",szukany.imie, szukany.nazwisko, szukany.telefon);
        }
    }
}

int main()
{
    elem * baza=NULL;
    elem nowy;
    int sterowanie;
    int i=0;
    int index;
    int ind=0;


    do
    {
        printf("Witaj w prostej bazie danych!\n");
        printf("Wybierz czynnosc, ktora chcesz wykonac:\n");
        printf("1.Dodaj wpis.\n");
        printf("2.Znajdz wpis na podstawie numeru telefonu.\n");
        printf("3.Znajdz wpis na podstawie indeksu.\n");
        printf("4.Zakoncz dzialanie programu.\n");

        scanf("%d", &sterowanie);

        switch(sterowanie)
        {
            case 1:
                printf("Podaj imie: ");
                scanf("%s", &nowy.imie);
                printf("Podaj nazwisko: ");
                scanf("%s", &nowy.nazwisko);
                printf("Podaj numer telefonu: ");
                scanf("%li", &nowy.telefon);
                dodaj(&baza, nowy);
                if(dodaj==1) printf("Dodawanie zakonczone sukcesem!");

                break;

            case 2:
                printf("Podaj numer telefonu osoby, aby zobaczyæ pod jakim indeksem sie znajduje: ");
                scanf("%l",&nowy.telefon);
                szukaj(&baza, nowy.telefon);
                if(szukaj==-1)printf("Nie znaleziono osoby o takim numerze!\n");
                else printf("Podana osoba jest przyporządkowana do indeksu %d", ind);
                break;

            case 3:
                printf("Podaj indeks osoby, ktorej dane chcesz zobaczyc: ");
                scanf("%d", &index);
                wypisz(&baza, index, i);
                break;
        }
    }while(sterowanie!=4);
    return 0;
}
0

Ten kod w ogóle działa cokolwiek? Proponuję Linked List http://www.thegeekstuff.com/2012/08/c-linked-list-example/ wystarczy tylko lekko przerobić.

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