class
Grupa
{
public:
Student*tab;
int liczba;
// liczba studentów – i niektórych int count;
int rozmiar; // rozmiar tablicy
bool zwiekszRozmiarTablicy(int nowyRozmiar);
/// reszta bez zmian !!!!
};
// liczba, rozmiar i tab
mają być zerowane w konstruktorze.
bool Grupa::zwiekszRozmiarTablicy(int nowyRozmiar)
{
// Student *tmp = new Student[nowyRozmiar];
// jeśli rozmiar !=0 to przepisz zawartość tab do tmp
// i usuń niepotrzebną
tablice za pomocą operatora delete ( delete[] bo tablica)
// ustaw tab = tmp; rozmiar=nowyRozmiar
}
Pierwszy etap

Drugi etap

W funkcjach
bool add(Student&s)
bool add(const char*imie,
const char*nazw, const char*nr)
należy sprawdzić czy liczba==rozmiar – w takim przypadku należy zwiększyć rozmiar tablicy
bool Grupa::add(...)
{
if(liczba==rozmiar){
bool ok = zwiekszRozmiarTablicy(rozmiar+10); // zwiększamy o 10
if(!ok) return false;
}
.... // reszta bez zmian
}
Destruktor musi być zaimplementowany, ponieważ klasa alokuje pamięć.
Group::~Group(){
if(tab!=0)delete []tab;
}
void Group::read(istream&is)
{
for(;;){ // pętla nieskończona
if(!is)break;
Student st;
//
przeczytaj st ze strumienia
//
dodaj st do grupy (ewentualnie sprawdź wcześniej, czy nie ma pustej zawartości
}
}
Wczytaj plik z danymi (grupa.txt) i wypisz zawartość grupy na ekranie
bool match(const
char*key)const;
Funkcja poszukuje tekstu key w imieniu nazwisku i numerze
indeksu.
Możesz użyć funkcji strstr()
bool
select(Grupa&wynik, const char*key)
Funkcja dodaje do grupy wynik wszystkich studentów, dla których wywołanie funkcji match(key) zwraca true.
1) odczytaj grupę z pliku
2) wprowadź szukany tekst
3) wypisz grupę powstałą w wyniku operacji select na ekranie oraz do pliku
void main()
{
Grupa gr;
//odczyt z pliku
Grupa wynik;
gr.select(wynik,”Daniel”);
wynik.write(cout);
}
Uwagi do wersji z godz. 12.30
grupa::grupa(const char *im,const char *naz,
const char *nrA){
void grupa::write(ostream&os) const{
int i;
for(i=0;i < count; i++){
os << tab[i].imie
<< " " << tab[i].nazwisko << " " <<
tab[i].nrAlb <<
endl;
}
}
przez
void grupa::write(ostream&os) const{
int i;
for(i=0;i < count; i++){
tab[i].write(os);
}
}
bool grupa::add(const char *im, const char
*naz, const char *nrA){
if(count
< SIZE){
strcpy(tab[count].imie,im);
strcpy(tab[count].nazwisko,naz);
strcpy(tab[count].nrAlb,nrA);
count++;
}
return
true;
}
bool grupa::add(student&s){
if(count
< SIZE){
strcpy(tab[count].imie,s.imie);
strcpy(tab[count].nazwisko,s.nazwisko);
strcpy(tab[count].nrAlb,s.nrAlb);
count++;
}
return
true;
}
przez
bool grupa::add(const char *im, const char *naz, const char *nrA){
Student
s(im,naz,nrA);
return
add(s);
}
bool grupa::add(student&s){
if(count==SIZE)return false;
tab[count]=s;
count++;
return true;
}