background image

Laboratorium nr 8 

Temat:  Definiowanie  struktur  oraz  strumieni  tekstowych  –  czytanie,  zapisywanie  oraz  dopisywanie 

danych. Program obsługuj cy prost  struktur  bazy danych. 

 

1)

  Definiowanie struktury bazy, pobieranie, zapisywanie oraz odczyt danych z pliku zewn trznego 

 

# include <stdio.h> 
# include <conio.h> 
struct baza { 
        char imie[10]; 
        char nazwisko[25]; 
        char telefon[10]; 
}; 
int wczytaj_dane(struct baza *wsk){ 
        fprintf(stdout,"\nPodaj dane osoby\n"); 
        fprintf(stdout,"Podaj imie: ");        gets(wsk->imie); 
        fprintf(stdout,"Podaj nazwisko: ");    gets(wsk->nazwisko); 
        fprintf(stdout,"Podaj telefon: ");     gets(wsk->telefon); 
return(0); 

int zapisz_dane(struct baza *wsk){ 
FILE *wsk_pliku; 
        if((wsk_pliku=fopen("baza.txt","a+"))!=NULL) { 
                fprintf(wsk_pliku,wsk->imie);       fprintf(wsk_pliku," "); 
                fprintf(wsk_pliku,wsk->nazwisko);   fprintf(wsk_pliku," "); 
                fprintf(wsk_pliku,wsk->telefon);    fprintf(wsk_pliku,"\n"); 
                fclose(wsk_pliku); 
        } 
return(0); 

int pobierz_dane(struct baza *wsk){ 
FILE *wsk_pliku; 
char znak, bufor[256]; 
int i; 
        if((wsk_pliku=fopen("baza.txt","r"))!=NULL) { 
                do { 
                        i=0; 
                        do { 
                                znak=fgetc(wsk_pliku); 
                                bufor[i++]=znak; 
                        } while (znak!='\n'); 
                sscanf(bufor,"%s %s %s", wsk->imie, wsk->nazwisko, wsk->telefon); 
                } while (fscanf(wsk_pliku,&znak)!=EOF); 
                fclose(wsk_pliku); 
        } 
return(0); 

int wyswietl_dane(struct baza *wsk){ 
        fprintf(stdout,"Poczatek bazy\n"); 
        fprintf(stdout,"Imie: %s",wsk->imie); 
        fprintf(stdout,"\tNazwisko: %s", wsk->nazwisko); 
        fprintf(stdout,"\tTelefon: %s\n", wsk->telefon); 
        fprintf(stdout,"Koniec bazy"); 
return(0); 

 
main() { 
struct baza *wsk_osoby; 
        wczytaj_dane(wsk_osoby); 
        zapisz_dane(wsk_osoby); 
        pobierz_dane(wsk_osoby); 
        wyswietl_dane(wsk_osoby); 
        getch(); 
return(0); 

background image

Uwaga: 

a. Standardowe strumienie tekstowe i ich fizyczne poł czenia 

Strumie  

Poł czenie 

Stdout 

Ekran 

Stdin 

Klawiatura 

Stdprn 

Drukarka 

Stdaux 

Ekran 

Stderr 

Ekran 

 

b. Wykaz przykładowych funkcji obsługuj cych pliki zewn trzne 

Np.  Biblioteka 

Funkcja 

Działanie 

1. 

fopen() 

Otwieranie pliku 

2. 

fclose() 

Zamykanie pliku 

3. 

fprintf() 

Zapisywanie do pliku 

4. 

fscanf() 

Przegl danie pliku 

5. 

fgets() 

Pobranie danych z pliku 

 

feof() 

Sprawdzanie ko ca pliku 

 

<stdio.h> 

fgetc() 

Pobranie znaku 

6. 

eof() 

Sprawdzanie ko ca pliku 

read() 

Czyta z pliku skojarzonego z uchwytem (handle) 

open() 

Otwiera plik do czytania i zapisywania i kojarzy go z uchwytem (handle) 

close() 

Zamyka plik skojarzony z uchwytem (handle) 

10 

<io.h> 

write() 

Zapisuje do pliku 

 

Przykłady zastosowania funkcji: 

 

fscanf() 

fgets() 

FILE *wsk_pliku; 
char znak; 
   fscanf(wsk_pliku,&znak)

 

FILE *wsk_pliku; 
char znak; 
   fgets(bufor,256,wsk_pliku); 

 

open()

 

eof()

 

int uchwyt; 
   uchwyt=open("file.txt”, “O_CREAT | 
   O_TEXT”));

 

int uchwyt; 
   while (!eof(uchwyt));

 

 

c. Znaki specjalne 

•  Koniec linii: '\n' (sekwencja znaków ASCII 13 i 10 tzn. <cr> - carrage return  <lf> - line feed) 

•  Koniec pliku tekstowego: '^Z' (kod ASCII 26) 

 

2)

 

Zadanie: Zmodyfikuj powy szy program tworz cy prost  baz  danych osobowych tak, aby  

•  istniała mo liwo  dopisywania kolejnych rekordów danych, 

•  wy wietlania wybranych lub wszystkich rekordów zawartych w bazie/pliku, 

•  wy wietlania wybranych pól bazy, np. nazwisko 

•  poszczególne pola rekordu powinny by  rozdzielone znakami charakterystycznymi np. *, ^,%,$  

Adam | Nowak % 123456789 $  * Jas | Kowalski % 123456789 $ * 

•  program powinien korzysta  z funkcji oraz sprawdza  poprawno  wprowadzanych danych. 

 

Uwaga:  Przykładowe menu programu: 

1.

  Wprowad  dane 

2.

  Zapisz dane na dysk 

3.

  Pobierz dane z dysku 

4.

  Wy wietl dane 

5.

  Wy wietl pole 

6.

  Koniec