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!