Witam wszystkich.
Mam do napisania program obsługi wypożyczalni płyt DVD. Program musi umożliwiać wykonanie: dodawania nowych płyt i klientów, wyszukiwanie, modyfikacja i usuwanie już istniejących oraz wypożyczanie. Bazy odczytywane i zapisywane do domyślnych plików.
Ponieważ program ma mieć nieskończenie wiele wpisów pomyślałem, żeby stworzyć listę łączoną, czyli, że każda struktura ma w sobie wskaźnik do następnej struktury. Strasznie gubię się w wskaźnikach, więc liczę na waszą pomoc.
Jest to mój trzeci program w życiu, więc proszę o wyrozumiałość :)
Napisałem część kodu odpowiadającą za dodawanie nowych płyt i klientów. I tu chyba wszystko działa. Lista istnieje i jest zapisywana do pliku.
Chciałem napisać funkcję do wyszukiwania określonej części listy. Mój pomysł: funkcja wczytuje z pliku dane i na nowo tworzy listę łączoną. I tu się robi problem.
struct DVD
{
char title[MAXT];
char category[MAXC]
float cost;
struct DVD *nast;
}
int szukaj()
{
struct DVD *glowny = NULL;
struct DVD *poprz, *biezacy;
struct DVD pierwszy;
daneplyt=fopen("plyty.c", "r");
while(fread(&pierwszy, sizeof(struct DVD), 1, daneplyt) == 1)
{
if(glowny == NULL)
{
glowny = &pierwszy;
biezacy = glowny;
}
else
{
biezacy=&pierwszy;
poprz->nast=biezacy;
}
biezacy -> nast= NULL;
poprz = biezacy;
printf("Film: %s \t Kategoria: %s \t cena: %0.2f\n", biezacy->title, biezacy->category, biezacy->cost);
}
fclose(daneplyt);
return(0);
}
Za pierwszym razem pętla while działa dobrze. Wczytuje to, co było w pliku. Za każdym następnym razem program wariuje. Podejrzewam, że błąd jest w "else". Ponieważ całość jest strasznie zrobiona na czuja, nie wiem co to za błąd i jak go naprawić.
Druga sprawa to jak wyszukać w liście łączonej to, co chcę? Musi być jakieś porównanie tego, co wprowadzi użytkownik z tym, co jest w liście. Jakaś wskazówka?
Pozdrawiam i z góry dziękuję za pomoc.