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