Tworzenie bazy danych w pliku (wcześniej nie istniejącym) (C)

0

Witam, zbliżam się powoli do końca książki "Język C. Szkoła programowania". Natknąłem się na problem, którego rozwiązania kompletnie nie mogę sobie wyobrazić. Problem sprawia mi tylko samo zaczęcie zadania, toteż dalszej jego części nie zamieszczam.
Skleiłem coś takiego:

#include <stdio.h>
#include <stdlib.h>
#define MAX 12

struct dane{
    char imie[12];
    char nazwisko[16];
    };

struct samolot{
    int id;
    int stan;
    struct dane pas;
    };
int main(void)
{
    struct samolot rez[MAX];
    int licznik=0;
    int i;
    FILE * fp;
    char ch; //menu
    fp=fopen("samolot", "rb");
    rewind(fp);
    while(licznik<MAX && fread(&rez[licznik], sizeof(struct samolot), 1, fp)==1)
        continue;
    printf("%d", licznik);
    if(licznik==0)
    {
        puts("\nProgram bedzie dzialal od nastepnego uruchomienia, trwa konfiguracja bazy danych");
        for(i=0;i<MAX;i++)
        {
            rez[i].id=i+1;
            rez[i].stan=0;
        }
    }
    fclose(fp);
    fp=fopen("samolot", "wb");
    for(i=0;i<MAX;i++)
    fwrite(&rez[i], sizeof(struct samolot), 1, stderr);
    fclose(fp);

Początkowo chciałem otworzyć plik w trybie "r+b", otwarcie go raz w trybie tylko do odczytu i drugi raz w trybie tylko do zapisu miało (z założenia) wyeliminować powstały problem. Idea tego fragmentu programu jest taka, by przy pierwszym uruchomieniu programu baza danych została uzupełniona o wartość .id oraz .stan. Zarówno ID jak i STAN są konieczne do poprawnego działania programu (będę musiał podać ilość wolnych mijsc, tj takich dla których stan=0 jak i listę(ID) wolnych miejsc). Niestety - nie mam pojęcia w jaki sposób mam zadeklarować taką "pustą" bazę danych. Zdawało mi się, że wyżej przedstawiony sposób powinien działać - program wpisze wartości do indeksów .id i .stan i zarezerwuje miejsce na tablice z imieniem i nazwiskiem. Niestety - program wyświetla TYLKO krzaczki, tak jakby nie zapisywał również wartości rez[i].id.
Bardzo serdecznie proszę o wyjaśnienie mi w jaki sposób należy obsługiwać tego rodzaju problemy, albo o odesłanie do odpowiedniej literatury bądź też posta (nie byłem w stanie nic znaleźć - prawdopobnie po prostu źle dobrałem słowa klucz, wątpię bym tylko ja miał z tym problem).
Stukrotne dzięki za każdą pomoc, nie oczekuję gotowego kodu, ale jakiś solidny drogowskaz byłby naprawdę zbawieniem.

Polecenie do zadania brzmi (może się zabieram do niego w ogóle ze złej strony...):

Flota linii lotniczych Colossus sklada sie z jednego samolotu o 12 miejscach. Samolot ten odbywa jeden rejs dzinnie. 
 Napisz program do rezerwacji miejsc spelniajacy nastepujace warunki: 

 1. program wykorzystuje tablice 12 class. kazda z nich powinna przechowywac numer identyfikacyjny miejsca, znacznik okreslajacy, czy miejsce jest wolne, oraz imie i nazwisko osoby, ktora dokonala rezerwacji. 
 2. Pogam wyswietla ponizsze menu: 
 Aby wybrac opcje, wpisz jej oznaczenie literowe: 
 * a. Pokaz liczbe pustych miejsc 
 * b. Pokaz liste pustych miejsc 
 * c. Pokaz alfabetyczna liste miejsc 
 * d. Zarezerwuj miejsce dla klienta 
 * e. Usun rezerwacje miejsca 
 * f. Koniec 
 3. program wykonuje czynnosci zapowiedziane w menu. Opcje d) i e) wymagaja podania dodatkowych danych; każda z nichpowinna umozliwic przerwanie programu  
 4. po wykonaniu jednej z funkcji program powinien ponownie wyswietlic menu (nie dotyczy funkcji f ) 
 5. Infomacje o rezerwacji sa przechowywane w pliku

Pozdrawiam!

0

nie prosciej bedzie to zrobic na bazie danych sqlite ?

0

sory za spam ale nie dalo sie edytowac:
-do tych opcji wypadalo by użyć switch'a
-mozna w tym pliku zapisac poczatkowo shemat:
id-stan-imie-nazwisko\n x12 np (gdzie i rowne jest od 1 do 12)
i++-0-0-0\n
wszystko mozesz sprawdzac np wczytujac wszystko do struktury
uzywajac fscanf albo wczytac wszystko jako char i zebrac dane sscanfem
a potem operowac \n lub \r lub zapisz:
1A
imie
nazwisko
stan
id
2A
imie
nazwisko
stan
id
tak bedzie chyba latwiej operowac.

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