background image

#include <stdio.h> // instrukcja include nakazuje preprocesorowi umieszczenie w programie zawartości plików

#include <conio.h> // nagłówkowych stdio.h oraz conio.h (program pobiera i wysyła informacje na ekran (input-output)

struct pracownicy                 // definicja struktury pracownicy - jest to określenie własnego zbioru danych
{

        char nazwisko[25];
        char stanowisko[20];      // deklaracja składowych struktury

        short int rok_urodzenia;
        char numer_telefonu[15];

}pracownik;                       // deklaracja zmiennej "pracownik", której wzorzec stanowi struktura pracownicy

main()
{

        char wybor;               // deklaracja zmiennej typu znakowego
        int id,ilosc;             // deklaracja zmiennych typu całkowitego (liczb)

        FILE *fp;                 // deklaracja wskaźnika położenia w pliku

        do
        {

                if(wybor==13)     // jeżeli zmiennej typu znakowego równa się 13 (Enter = 13-sty znak ASCII)
                {

                        fp=fopen("pracownicy.txt","a"); // otwarcie pliku w trybie dołączającym dane na koniec pliku
                        fflush(stdin); // czyści bufor (klawiatury)

                        printf("\n Podaj nazwisko pracownika: ");
                        gets(pracownik.nazwisko); // gets - funkcja wczytująca łańcuch

                        fflush(stdin);
                        printf("\n Podaj stanowisko pracownika: ");

                        gets(pracownik.stanowisko);
                        fflush(stdin);

                        printf("\n Podaj rok urodzenia pracownika: ");
                        scanf("%d",&pracownik.rok_urodzenia);

                        fflush(stdin);
                        printf("\n Podaj numer telefonu pracownika: ");

                        gets(pracownik.numer_telefonu);
                        fflush(stdin);

                        fwrite(&pracownik,sizeof(struct pracownicy),1,fp); // funkcja zapisuje do pliku poczynając
                                                                           // od miejsca położenia wskaźnika fp

                                                                           // dane (bity) z pamięci zaczynając od
                                                                           // adresu zmiennej pracownik na długości

                                                                           // jednej struktury typu pracownicy
                        fclose(fp);

                }
                else

                        if((fp=fopen("pracownicy.txt","r"))==NULL) // jeżeli nie da się otworzyć pliku do odczytu
                                printf("\n Baza danych nie zawiera zadnych danych o pracownikach...");

                        else                                       // jeżeli można otworzyć pliku w trybie do odczytu
                        {

                                fseek(fp,0,SEEK_END);              // przesunięcie wskaźnika względem końca pliku
                                ilosc=ftell(fp)/sizeof(struct pracownicy); // ftell podaje aktualne położenie wskaźnika

                                                            // operator sizeof zwraca podany w bajtach rozmiar obiektu
                                fseek(fp,0,SEEK_SET);              // przesunięcie wskaźnika względem początku pliku

                                printf("\n Nazwisko \t Stanowisko \t Rok \t Telefon");
                                for(id=0;id<ilosc;id++)

                                {
                                        fread(&pracownik,sizeof(struct pracownicy),1,fp); // funkcja odczytuje z pliku

                                                // przypisuje zmiennej pracownik dane (bajty) z pliku rozpoczynając
                                                // przypisywanie od miejsca położenia wskaźnika fp na długości równej

                                                // jednej strukturze typu pracownicy
                                        printf("\n %s \t %s \t %d \t %s",

                                        pracownik.nazwisko,pracownik.stanowisko,pracownik.rok_urodzenia,pracownik.numer_telefonu);
                                }

                                fclose(fp);     // zamyka plik - upewnia, że wszystkie dane w buforze zostały zapisane
                                                // zamknięcie zwalnia też wskaźnik do pliku

                        }
                printf("\n\n Wybierz:");

                printf("\n Enter - wprowadzenie danych nowego pracownika");
                printf("\n Esc - wyjscie z programu");

                printf("\n Spacja - wyswietlenie zawartosci bazy danych pracownikow");
                wybor=getch();    // pobranie znaku z klawiatury

                clrscr();
        }

        while(wybor!=27);         // dopóki wartość zmiennej wybor jest różna od 27 (Esc = 27-my znak ASCII)

        return 0;                 // za pomocą słowa kluczowego return zwracana jest wartość z funkcji main
                                  // wartość 0 dla funkcji main oznacza, że program zakończył się pomyślnie

}