Przetwarzanie danych typu rekordowego

Do tej pory w C++ używaliśmy tablicowy typ danych. Tablice służą  do przechowywania danych tego samego typu. Często zdarza  się że na  opis pojedynczego obiektu składają się dane różnych typów, mówimy tutaj o typie strukturalnym który umożliwia zapisanie danych różnego typu w ramach jednej struktury.

Opis rekordu składającego się z różnych typów:

Dane opisujące ucznia:

Imie (ciąg znaków)
Nazwisko (ciąg znaków)
Wiek (liczba całkowita)

w kodzie źródłowym C++ wygląda następująco:

#include<iostream>

using namespace std;

struct TUczen
{
char imie[21];
char nazwisko [41];
int wiek;
};
struct TUczen Uczen;

int main()
{
    cout<<"Podaj imie: ";
    cin>>Uczen.imie;
    cout<<"Podaj nazwisko: ";
    cin>>Uczen.nazwisko;
    cout<<"Podaj wiek: ";
    cin>>Uczen.wiek;
    cout<<endl<<endl;
    cout<<"Imie ucznia to: "<<Uczen.imie<<endl;
    cout<<"Nazwisko ucznia to: "<<Uczen.nazwisko<<endl;
    cout<<"Wiek ucznia to: "<<Uczen.wiek<<endl;
}

Możliwa też jest sytuacja kiedy struktura może być elementem tablicy np.:

#include<iostream>

using namespace std;

struct TUczen
{
char imie[21];
char nazwisko [41];
int wiek;
};
struct TUczen Uczen[100];

int main()
{
    int n;
    
    cout<<"Podaj ile wpisac uczniow: ";
    cin>>n;
    
    for(int i=0;i<n;i++)
    {
    cout<<"Podaj imie: ";
    cin>>Uczen[i].imie;
    cout<<"Podaj nazwisko: ";
    cin>>Uczen[i].nazwisko;
    cout<<"Podaj wiek: ";
    cin>>Uczen[i].wiek;
    cout<<endl;
    }
    cout<<endl<<endl;
    for(int i=0;i<n;i++)
    {    
    cout<<"Imie ucznia to: "<<Uczen[i].imie<<endl;
    cout<<"Nazwisko ucznia to: "<<Uczen[i].nazwisko<<endl;
    cout<<"Wiek ucznia to: "<<Uczen[i].wiek<<endl;
    cout<<endl<<endl;
    }
}

 

Możliwe jest też zapamiętanie w rekordzie daty urodzenia konkretnego ucznia.
Odpowiednie odwołania do nowych pól będą  miały postać:

Uczen[i].Data_ur.dzien
Uczen[i].Data_ur.miesiac
Uczen[i].Data_ur.rok

cała struktura będzie miała postać:

struct TUczen
{
char imie[21];
char nazwisko [41];
int wiek;
    struct TData_ur
    {
        unsigned short dzien;
        unsigned short miesiac;
        int rok;
    } Data_ur;
};
struct TUczen Uczen[100];

link to programu z datą urodzin