Baza danych studentów

0x01 graphic

class BazaDanych {

Student m_baza_danych[10];

...

}

Klasa BazaDanych przechowuje tablice 10 obiektów statycznych klasy Student.

Studenci to obiekty statyczne w bazie danych - oznacza to tyle, że w chwili stworzenia obiektu klasy BazaDanych zostaje stworzonych 10 obiektów statycznych klasy Student.

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

BazaDanych baza;

}

Klasa BazaDanych przechowuje tablice 10 obiektów statycznych klasy Student.

Studenci to obiekty statyczne w bazie danych - oznacza to tyle, że w chwili stworzenia obiektu klasy BazaDanych zostaje stworzonych 10 obiektów statycznych klasy Student.

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

BazaDanych baza;

}

0x01 graphic

Zobaczmy co się stanie jeśli zawołamy metodę DodajStudenta

0x01 graphic

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

BazaDanych baza;

baza.DodajStudenta();

}

//wpisywanie danych nowego studenta do bazy

void BazaDanych::DodajStudenta()

{

if(m_ilosc<10)

{

cout << "Wprowadz dane studenta o numerze rekordu " << m_ilosc << "\n";

m_baza_danych[m_ilosc].PobierzDane();

m_ilosc++;

}

else

{

cout << "Baza danych jest pełna! \n";

}

}

void Student::PobierzDane ()

{

cout << "Podaj imie: ";

//cin reprezentuje klawiature

// >> przepycha teksty wpisane na klawiaturze do zmiennej (szuflady) m_imie

cin >> m_imie;

cout << "Podaj nazwisko: ";

cin >> m_nazwisko;

cout << "Podaj rok: ";

cin >> m_rok;

}

A co się stanie jeśli zawołamy metodę DodajStudenta drugi raz?

0x01 graphic

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

BazaDanych baza;

baza.DodajStudenta();

baza.DodajStudenta();

}

//wpisywanie danych nowego studenta do bazy

void BazaDanych::DodajStudenta()

{

if(m_ilosc<10)

{

cout << "Wprowadz dane studenta o numerze rekordu " << m_ilosc << "\n";

m_baza_danych[m_ilosc].PobierzDane();

m_ilosc++;

}

else

{

cout << "Baza danych jest pełna! \n";

}

}

void Student::PobierzDane ()

{

cout << "Podaj imie: ";

//cin reprezentuje klawiature

// >> przepycha teksty wpisane na klawiaturze do zmiennej (szuflady) m_imie

cin >> m_imie;

cout << "Podaj nazwisko: ";

cin >> m_nazwisko;

cout << "Podaj rok: ";

cin >> m_rok;

}

Co by było gdybyśmy przechowywali tablicę wskaźników do Studentów?

0x01 graphic

class BazaDanych {

Student* m_baza_danych[10];

...

}

Klasa BazaDanych przechowuje tablice 10 wskaźników do obiektów klasy Student (kartek z adresami obiektów klasy Student).

W chwili stworzenia obiektu klasy BazaDanych zostaje stworzonych 10 kartek z adresami

(10 wskaźników).

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

BazaDanych baza;

}

0x01 graphic

W chwili stworzenia obiektu klasy BazaDanych zostaje stworzonych 10 kartek z adresami

(10 wskaźników).

ale nie są jeszcze tworzone żadne obiekty klasy Student

Trzeba dopisać konstruktor w klasie BazaDanych, w którym stworzymy 10 obiektów klasy student

//wpisywanie danych nowego studenta do bazy

void BazaDanych::BazaDanych()

{

m_baza_danych = new Student[10];

}

Teraz, konstruktor tworzy 10 obiektów klasy Student, i przechowuje ich wskaźniki (adresy)

w tablicy m_baza_danych.

0x01 graphic

Co jeszcze należy zmodyfikować w programie?

//wpisywanie danych nowego studenta do bazy

void BazaDanych::DodajStudenta()

{

if(m_ilosc<10)

{

cout << "Wprowadz dane studenta o numerze rekordu " << m_ilosc << "\n";

m_baza_danych[m_ilosc]->PobierzDane();

m_ilosc++;

}

else

{

cout << "Baza danych jest pełna! \n";

}

}

Teraz

m_baza_danych[m_ilosc]

to wskaźnik do obiektu klasy Student

Ze wskaźnika do obiektu przechodzimy z pomocą strzałki

m_baza_danych[m_ilosc]->

Trzeba więc wszędzie gdzie zaglądamy do tablicy studentów dopisać strzałki