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;
}