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