pobierz plik

Transkrypt

pobierz plik
#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
{
char nazwisko[25];
char stanowisko[20];
short int rok_urodzenia;
char numer_telefonu[15];
}pracownik;
main()
{
char wybor;
int id,ilosc;
FILE *fp;
do
{
// deklaracja składowych struktury
// deklaracja zmiennej "pracownik", której wzorzec stanowi struktura pracownicy
// deklaracja zmiennej typu znakowego
// deklaracja zmiennych typu całkowitego (liczb)
// deklaracja wskaźnika położenia w pliku
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);
return 0;
}
// definicja struktury pracownicy - jest to określenie własnego zbioru danych
// dopóki wartość zmiennej wybor jest różna od 27 (Esc = 27-my znak ASCII)
// 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