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);
}
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.
<stdio.h> fscanf() Przegl danie pliku 5.
fgets()
Pobranie danych z pliku
feof()
Sprawdzanie ko ca pliku
fgetc()
Pobranie znaku
6.
eof()
Sprawdzanie ko ca pliku
7
read()
Czyta z pliku skojarzonego z uchwytem (handle)
8
<io.h>
open()
Otwiera plik do czytania i zapisywania i kojarzy go z uchwytem (handle) 9
close()
Zamyka plik skojarzony z uchwytem (handle)
10
write()
Zapisuje do pliku
Przykłady zastosowania funkcji:
fscanf()
fgets()
FILE *wsk_pliku;
FILE *wsk_pliku;
char znak;
char znak;
fscanf(wsk_pliku,&znak)
fgets(bufor,256,wsk_pliku);
open()
eof()
int uchwyt;
int uchwyt;
uchwyt=open("file.txt”, “O_CREAT | while (!eof(uchwyt)); O_TEXT”));
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