XIV. Struktury danych
14.1. Organizacja danych
Jeśli próbowałeś już pisać jakąś bazę danych, np. przechowującą kontakty telefoniczne do różnych osób to zauważyłeś pewnie, że szukanie nazw tablic i posługiwanie się wieloma tablicami dla jednej osoby nie jest wygodne. Z pomocą przychodzą tu struktury, które pozwalają na zorganizowanie danych w wygodniejszy sposób. Struktury potrafią przechowywać różne typy danych. Deklaracja struktury wygląda następująco:
//struktura dla użytkowników forum
struct Uzytkownicy_DDT //deklaracja struktury
{ //opis struktury
std::string nik;
std::string haslo;
short data_zalozenia_konta;
std:string status;
};
Elementy charakteryzujące ten typ danych to:
→ słowo kluczowe struct, które informuje kompilator, że będzie definiowana struktura,
→ opis struktury opisujący zawartość struktury,
→ jest to najprostsza postać klasy.
W przykładzie został wykorzystana biblioteka string, zapoznaj się z nią nim przejdziesz do analizy kursu!
14.2. Wykorzystanie struktury w praktyce
Ponieważ wiemy już jak utworzyć własny, bardziej złożony typ danych to dobrze by było, gdybyśmy teraz wiedzieli jak go możemy wykorzystać. Zmienną deklarujemy tak samo, jak w przypadku standardowych typów danych.
//struktura dla użytkowników forum------
#include <iostream>
#include <string>
#include <conio.h>
//struktura dla użytkowników forum
struct Uzytkownicy_DDT //deklaracja struktury
{
//opis struktur
std::string nik;
std::string haslo;
short lp;
std::string status;
std::string rodzaj_konta;
};
int main()
{
using namespace std;
//Tworzenie obiektu struktury i wypełnianie-------
Uzytkownicy_DDT PiotrSzawdynski =
{
"PiotrSzawdynski",
"!@#$%%^",
1,
"Aktywny",
"Admin"
};
/*WAŻNE dla niektórych kompilatorów należy
użyć zapisu static Uzytkownicy_DDT PiotrSzawdynski =*/
Uzytkownicy_DDT Pietrzuch =
{
"Pietrzuch",
"@m@m$@#@",
24,
"Aktywny",
"Moderator"
};
/*inny sposób wprowadzania danych do
obiektu*/
//tworzenie obiektu
Uzytkownicy_DDT Piotrus_Pan;
/*wypełnianie obiektu wartościami dla
poszczególnych typów danych*/
Piotrus_Pan.haslo = "PanPiotr";
Piotrus_Pan.lp = 927;
Piotrus_Pan.nik = "Piotrus_Pan";
Piotrus_Pan.rodzaj_konta = "Uzytkownik";
Piotrus_Pan.status = "zablokowany";
//wyświetlenie obiektów
cout << "Oto lista uzytkownikow forum DDT"
<< endl << "Nik " << PiotrSzawdynski.nik
<< endl << "haslo " << PiotrSzawdynski.haslo
<< endl << "Nr usera " << PiotrSzawdynski.lp
<< endl << "Status " << PiotrSzawdynski.status
<< endl << "Rodzaj Konta "
<< PiotrSzawdynski.rodzaj_konta
<< endl
<< endl << "Nik " << Pietrzuch.nik
<< endl << "haslo " << Pietrzuch.haslo
<< endl << "Nr usera " << Pietrzuch.lp
<< endl << "Status " << Pietrzuch.status
<< endl << "Rodzaj Konta "
<< Pietrzuch.rodzaj_konta
<< endl
<< endl << "Nik " << Piotrus_Pan.nik
<< endl << "haslo " << Piotrus_Pan.haslo
<< endl << "Nr usera " << Piotrus_Pan.lp
<< endl << "Status " << Piotrus_Pan.status
<< endl << "Rodzaj Konta "
<< Piotrus_Pan.rodzaj_konta;
getch();
return(0);
}
14.3. Analiza kodu
Jak pewnie się zorientowałeś strukturę można wypełnić podobnie jak tablicę, gdy oczywiście przed uruchomieniem programu znamy wartości jakie ma zawierać. Co warte podkreślenia struktura Uzytkownicy_DDT posiada trzy obiekty PiotrSzawdynski, Pietrzuch, Piotrus_Pan. By wprowadzić bądź wyświetlić wartości danego obiektu, musimy użyć kropki( . )!!!
nazwa_obiektu.nazwa_zmiennej = wartość_wprowadzana
Większość kompilatorów po wprowadzeniu kropki z klawiatury wyświetla podpowiedz dla danego obiektu(typy danych dla tego obiektu(struktury)).
WAŻNE !!! dla niektórych kompilatorów należy użyć słowa kluczowego static Uzytkownicy_DDT PiotrSzawdynski.
static Uzytkownicy_DDT PiotrSzawdynski =
{
"PiotrSzawdynski",
"!@#$%%^",
1,
"Aktywny",
"Admin"
};
14.4. Tablice struktur
//Tablice struktur------------------------------
#include <iostream>
#include <string>
#include <conio.h>
//struktura dla użytkowników forum
struct DDT //deklaracja struktury
{
//opis struktury
std::string nik;
std::string haslo;
std::string status;
std::string rodzaj_konta;
};
int main()
{
using namespace std;
//Tworzenie obiektu struktury-------
DDT Uzytkownicy[3];
cout << "Wprowadz dane.\n";
//wprowadzenie 3 uzytkowników
for(short licz = 0; licz < 3; licz++){
cout << "Podaj nik ";
cin >> Uzytkownicy[licz].nik;
cout << "Podaj haslo ";
cin >> Uzytkownicy[licz].haslo;
}
//wyswietlanie wprowadzonych danych
cout << endl
<< "Oto rezultat wprowadzonych danych:"
<< endl;
for(short licz = 0; licz < 3; licz++){
cout << "Uzytkownik " << licz + 1
<< " Nik " << Uzytkownicy[licz].nik
<< " haslo " << Uzytkownicy[licz].haslo
<< endl;
}
getch();
return(0);
}
//--------------------------------------------
Właściwie nie ma różnić między użyciem tablicy zmiennych a tablicy struktur. Oczywiście możemy też wypełnić tablice w ten sposób:
DDT Uzytkownicy[3] =
{
//Użytkownik[0]
{"PiotrSzawdynski", "!@#$%%^"},
//Użytkownik[1]
{"Pietrzuch", "@m@m$@#@"},
//Użytkownik[2]
{"Piotrus_Pan", "PanPiotr"}
};
14.5. Przypisanie struktury do struktury
Tak jak zmienną można przypisać do innej zmiennej tak samo można postąpić z strukturą danych. Wystarczy użyć operatora „=”.
//Przypisanie struktur------------------------------
#include <iostream>
#include <string>
#include <conio.h>
//struktura dla użytkowników forum
struct DDT //deklaracja struktury
{
//opis struktury
std::string nik;
short wiek;
char plec;
};
int main()
{
using namespace std;
DDT Monika, Mariola, Kasia;
Monika.nik = "Mika";
Monika.plec = 'K';
Monika.wiek = 20;
//przypisanie struktur
Kasia = Mariola = Monika;
cout << "Wyswietla uzytkownikow plci pieknej"
<< endl
<< "Nik - " << Kasia.nik << endl
<< "Nik - " << Mariola.nik << " wiek "
<< Mariola.wiek << endl
<< "Nik - " << Monika.nik << " plec "
<< Monika.plec << endl;
getch();
return(0);
}
//--------------------------------------------
14.6. Ćwiczenia
1. Farmer zwrócił się do Ciebie z prośbą byś napisał program, który będzie przechowywał informacje o rodzajach zwierząt jakie posiada. Zwierzęta to krowa, koza, kura, pies i świnia. Cechy tych zwierząt to nazwa, waga, wiek(podany w tygodniach), oraz data nabycia(zakupu). Farmer dodał, iż krowę i świnię kupił 24-04-08r od znajomego, pies przybłąkał się 6.05.02r, natomiast kozę i kurę dostał w prezencie od wójta 23.02.09. Niestety resztę cech musisz określić sam, na podstawie przyjętych średnich(google) dla tych zwierząt. Dane mają być zawarte w strukturze. Rezultatem programu ma być:
a) pierwszy program→ wyświetlenie wszystkich danych w przejrzysty i zrozumiały dla użytkownika sposób, użytkownik nic nie podaje, program wyświetla tylko dane.
b) drugi program→ program ma poprosić o wprowadzenie nazwy i wagi(w kilogramach) zwierzęcia(mają być wprowadzone trzy zwierzaki) , oraz wyświetleniu danych w odwrotny sposób do tego w jaki zostały wprowadzone, oraz zachowaniu takiej kompozycji
Trzoda zawiera m.in.:
1.→ nazwa_zwierzęcia jego waga to waga_zwierzęcia(podana w gramach) gram.
2.→
3.→
Informacja
Niniejsza lekcja została pierwotnie opracowana przez Piotra Szawdyńskiego. Autorem późniejszych modyfikacji jest już natomiast Dante, który jednocześnie dołożył swoją cegiełkę w rozwój kursu jak i serwisu.