Witam. Zmagam się z takim małym dziennikiem, mocno okrojonym. Wiem, że najłatwiej byłoby zrobić to na wektorach, ale staram się zrobić w najbardziej tradycyjny sposób i po swojemu napisać funkcję push_back po swojemu z użyciem konstruktora kopiującego, ale ni cholery nie rozumiem zasady działania. Jakieś sugestie jak się za to zabrać?
#include <conio.h>
#include <istream>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
class Student
{
public:
string nazwisko;
int indeks;
bool obecnosc[7];
float *oceny;
Student(string nazw="NAZWISKO",int ind=0)
{
nazwisko=nazw;
indeks=ind;
}
};
class Dziennik
{
private:
Student *tablica;
unsigned iloscstudentow;
unsigned licznikzajec;
public:
Dziennik(unsigned iloscs=0,unsigned licznikz=1):tablica()
{
tablica=new Student[iloscstudentow];
iloscstudentow=iloscs;
licznikzajec=licznikz;
}
Dziennik(Dziennik &);
void dodajStudenta(Student stu)
{
Student *nowa(tablica);
nowa=new Student[iloscstudentow+1];
nowa[iloscstudentow+1]=stu;
delete []tablica;
++iloscstudentow;
tablica=nowa;
}
void sprawdzObecnosc()
{
cout<<licznikzajec;
bool x;
switch(licznikzajec)
{
case 1:
{
for(int i=0;i<iloscstudentow;i++)
{
cout<<"Czy uczen: "<<tablica[i].nazwisko<<" jest obecny? (1-tak, 0-nie)";
cin>>x;
tablica[i].obecnosc[1]=x;
}
}
break;
case 2:
{
for(int i=0;i<iloscstudentow;i++)
{
cout<<"Czy uczen: "<<tablica[i].nazwisko<<" jest obecny? (1-tak, 0-nie)";
cin>>x;
tablica[i].obecnosc[2]=x;
}
}
break;
case 3:
{
for(int i=0;i<iloscstudentow;i++)
{
cout<<"Czy uczen: "<<tablica[i].nazwisko<<" jest obecny? (1-tak, 0-nie)";
cin>>x;
tablica[i].obecnosc[3]=x;
}
}
break;
case 4:
{
for(int i=0;i<iloscstudentow;i++)
{
cout<<"Czy uczen: "<<tablica[i].nazwisko<<" jest obecny? (1-tak, 0-nie)";
cin>>x;
tablica[i].obecnosc[4]=x;
}
}
break;
case 5:
{
for(int i=0;i<iloscstudentow;i++)
{
cout<<"Czy uczen: "<<tablica[i].nazwisko<<" jest obecny? (1-tak, 0-nie)";
cin>>x;
tablica[i].obecnosc[5]=x;
}
}
break;
case 6:
{
for(int i=0;i<iloscstudentow;i++)
{
cout<<"Czy uczen: "<<tablica[i].nazwisko<<" jest obecny? (1-tak, 0-nie)";
cin>>x;
tablica[i].obecnosc[6]=x;
}
}
break;
case 7:
{
for(int i=0;i<iloscstudentow;i++)
{
cout<<"Czy uczen: "<<tablica[i].nazwisko<<" jest obecny? (1-tak, 0-nie)";
cin>>x;
tablica[i].obecnosc[7]=x;
}
}
break;
default: cout<<"Zajec bylo tylko 7!";
}
++licznikzajec;
}
void dodajOcene(int indeks,float ocena)
{
}
};
int main()
{
Dziennik dzien;
for(;;)
{
cout<<"Dostepne opcje: "<<endl;
cout<<"1. Dodanie studenta."<<endl;
cout<<"2. Sprawdzenie obecnosci."<<endl;
cout<<"3. Dodanie oceny."<<endl;
cout<<"4. Wyjscie."<<endl;
cout<<"Wybieram: ";
char odpowiedz;
odpowiedz=_getch();
cout<<endl;
switch(odpowiedz)
{
case '1':
{
string nazw;
int ind;
cout<<"Podaj nazwisko studenta: ";
cin>>nazw;
cout<<"Podaj indeks studenta: ";
cin>>ind;
Student *s=new Student(nazw,ind);
dzien.dodajStudenta(*s);
}
break;
case '2':
{
dzien.sprawdzObecnosc();
}
break;
case '3':
{
int ik;
float oc;
cout<<"Podaj numer indeksu studenta dla ktorego chcesz wprowadzic ocene: ";
cin>>ik;
cout<<"Podaj jaka ocene chcesz wprowadzic: ";
cin>>oc;
dzien.dodajOcene(ik,oc);
}
break;
case '4':
{
exit(0);
}
break;
default: cout<<"Nie ma takiej opcji w menu!";
}
getchar();
getchar();
system("cls");
}
return 0;
}