Laboratorium nr 6
Temat: Definiowanie struktur - pojedynczych jak i tablic. Prosta struktura bazy danych.
1) Definiowanie struktury pojedynczej jak i tablicy struktur.
# include <stdio.h>
# include <string.h>
struct baza {
char imie[10];
char nazwisko[25];
char telefon[10];
};
main() {
struct baza osoba;
/*pobranie danych*/
printf("Podaj dane:\n");
printf("\tImie: ");
gets(osoba.imie);
printf("\tNazwisko: ");
gets(osoba.nazwisko);
printf("\tNumer telefonu: ");
gets(osoba.telefon);
/*wypisanie danych*/
printf("\nDane osobowe:\n");
printf("\tImie: %s\n", osoba.imie);
printf("\tNazwisko:%s\n",osoba.nazwisko);
printf("\tTelefon:%s\n",osoba.telefon);
return 0;
}
# include <stdio.h>
# include <string.h>
struct baza {
char imie[10];
char nazwisko[25];
char telefon[10];
};
main() {
struct baza osoby[2];
int i;
/*pobranie danych*/
for(i=0;i<2;i++) {
printf("\nPodaj dane osoby[%i]:\n",i);
printf("\tImie: ");
gets(osoby[i].imie);
printf("\tNazwisko: ");
gets(osoby[i].nazwisko);
printf("\tTelefon: ");
gets(osoby[i].telefon);
};
/*wypisanie danych*/
for(i=0;i<2;i++){
printf("\nDane osoby[%i]:\n",i);
printf("\tImie: %s\n",osoby[i].imie);
printf("\tNazwisko:%s\n",osoby[i].nazwisko);
printf("\tTelefon:%s\n",osoby[i].telefon);
};
return 0;
}
Uwaga:
a. Podstawowe informacje o strukturach - struct
●
Struktury danych pozwalają połączyć pod jedną nazwą różne typy danych, np.
char + int +
float
, itp.
●
Strukturę definiuje się używając słowa kluczowego struct
struct moja_struktura {
typ1 zmienna1;
typ2 zmienna2;
…
} zmienna_struktury, zmienne_struktury[5];
b. Przykładowe operacje na łańcuchu dostępne w <stdio.h> oraz <string.h>
Np.
Funkcja
Działanie
1.
gets()
pobranie łańcucha z klawiatury
2.
fgets()
pobranie łańcucha (całej linii) z pliku
3.
read()
pobiera określoną liczbę bajtów z pliku do bufora
4.
fread()
pobranie bloku n-elementów o danym rozmiarze z pliku
5.
strcpy()
skopiowanie łańcucha
6.
strcat()
połączenie dwóch łańcuchów,
7.
strlen()
podanie długości łańcucha
8.
strcmp()
porównanie kolejności dwóch łańcuchów
2) Odwołanie do struktury poprzez wskaźnik.
# include <stdio.h>
struct baza {
char imie[10];
char nazwisko[25];
int telefon;
};
int main() {
FILE *wsk_pliku;
struct baza osoba, *wsk_osoby;
wsk_osoby=&osoba;
printf("\nPodaj dane osoby:\n");
printf("\tImie: "); scanf("%s",osoba.imie);
printf("\tNazwisko: "); scanf("%s",osoba.nazwisko);
printf("\tTelefon: "); scanf("%d",&osoba.telefon);
if((wsk_pliku=fopen("baza.txt","w+"))!=NULL) {
fprintf(wsk_pliku,"%s",wsk_osoby->imie); fprintf(wsk_pliku,"\n");
fprintf(wsk_pliku,"%s",wsk_osoby->nazwisko); fprintf(wsk_pliku,"\n");
fprintf(wsk_pliku,"%d",wsk_osoby->telefon); fprintf(wsk_pliku,"\n");
fclose(wsk_pliku);
}
if((wsk_pliku=fopen("baza.txt","r"))!=NULL) {
fscanf(wsk_pliku,"%s",wsk_osoby->imie);
fscanf(wsk_pliku,"%s",wsk_osoby->nazwisko);
fscanf(wsk_pliku,"%d",&wsk_osoby->telefon);
fclose(wsk_pliku);
}
else
printf("Blad otwarcia pliku\n");
printf("\nDane osoby:\n");
printf("\tImie: %s\n",wsk_osoby->imie);
printf("\tNazwisko: %s\n", wsk_osoby->nazwisko);
printf("\tTelefon: %d", wsk_osoby->telefon);
return 0;
}
Uwaga:
W przypadku struktur istnieje także możliwość korzystania ze wskaźników. W tym celu, w języku C
wprowadzono specjalny operator, który jest nazywany operatorem strzałki
−
>
struct moja_struktura {
typ1 zmienna1;
typ2 zmienna2;
…
} zmienna, *wsk_zmiennej;
…
wsk_zmiennej=&zmienna;
wsk_zmiennej->zmienna1="…";
wsk_zmiennej->zmienna2="…";
…
3) Zadanie
: Opracuj program tworzący prostą bazę danych np. osobowych. Program powinien zawierać
możliwość wprowadzenia danych, zapisania oraz pobrania danych z dysku. Program powinien
korzystać z funkcji oraz sprawdzać poprawność wprowadzanych danych. Przykładowe menu:
1. Wprowadź dane
2. Zapisz dane na dysk
3. Pobierz dane z dysku
4. Wyświetl dane
5. Koniec