#include <iostream>
#include <string>
using namespace std;
// Klasa student
class Student{
protected:
string ime,prezime;
int broj_ocjena,broj_indeksa;
double srednja_ocjena;
public:
Student(string ime,string prezime,int broj_indeksa):
ime(ime),prezime(prezime),broj_indeksa(broj_indeksa),srednja_ocjena(0),
broj_ocjena(0) {}
void UpisiOcjenu(int ocjena);
virtual void IspisiPodatke();
int Index(){return broj_indeksa; }
};
void Student::UpisiOcjenu(int ocjena){
if (ocjena<1||ocjena>5) cout<< "Krivi unos ocjene."<<endl;
else
if (srednja_ocjena==0) srednja_ocjena=ocjena;
else srednja_ocjena=((srednja_ocjena*broj_ocjena)+ocjena)/(broj_ocjena+1);
broj_ocjena++;
}
void Student::IspisiPodatke(){
cout<<"Student "<<ime<<" "<<prezime<<" sa brojem indeksa "<<broj_indeksa<<
" ima prosjek "<<srednja_ocjena<<"."<<endl;
}
// Klasa Student_Prvi_Stupanj
class Student_Prvi_Stupanj:
public Student{
public:
Student_Prvi_Stupanj(string ime,string prezime,int broj_indeksa):
Student(ime,prezime,broj_indeksa){}
virtual void IspisiPodatke();
};
void Student_Prvi_Stupanj::IspisiPodatke(){
cout<<"Student prvog stupnja "<<ime<<" "<<prezime<<" sa brojem indeksa "
<<broj_indeksa<<" ima prosjek "<<srednja_ocjena<<"."<<endl;
}
// Klasa Student_Drugi_Stupanj
class Student_Drugi_Stupanj:
public Student{
public:
Student_Drugi_Stupanj(string ime,string prezime,int broj_indeksa):
Student(ime,prezime,broj_indeksa) {}
virtual void IspisiPodatke();
};
void Student_Drugi_Stupanj::IspisiPodatke(){
cout<<"Student drugog stupnja"<<ime<<" "<<prezime<<" sa brojem indeksa "
<<broj_indeksa<<" ima prosjek "<<srednja_ocjena<<"."<<endl;
}
// Klasa Student_specijalist
class Student_specijalist:
public Student{int godina_diplomiranja;
public:
Student_specijalist(string ime,string prezime,int broj_indeksa,
int godina_diplomiranja):Student(ime,prezime,broj_indeksa),
godina_diplomiranja(godina_diplomiranja) {}
virtual void IspisiPodatke();
};
void Student_specijalist::IspisiPodatke(){
cout<<"Student specijalistickog studija "<<ime<<" "<<prezime<<" sa brojem indeksa "
<<broj_indeksa<<", diplomirao godine "<<godina_diplomiranja<<", ima prosjek "
<<srednja_ocjena<<"."<<endl;
}
class StudentskaSluzba{
int broj_studenata;
const int MaxBrStudenata;
Student **studenti;
public:
explicit StudentskaSluzba(int Max):
broj_studenata(0), MaxBrStudenata(Max),studenti(new Student*[Max]) { }
~StudentskaSluzba() {
for(int i=0;i<broj_studenata;i++)
delete studenti[i];delete[] studenti;}
void UpisiStudenta(int br_indexa,char *Ime,char *Prezime,int a);
void UpisiOcjenu(int index,int ocjena);
void IspisiSpisak();
};
void StudentskaSluzba::UpisiStudenta(int br_indexa, char *Ime, char *Prezime,int a){
if (MaxBrStudenata==broj_studenata) cout<< "Ne moze se vise unijeti novih studenata."<<endl;
Student *St;
if (a==1) St=new Student_Prvi_Stupanj(Ime,Prezime,br_indexa);
else if (a==2) St = new Student_Drugi_Stupanj(Ime, Prezime, br_indexa);
else St = new Student_specijalist(Ime,Prezime,br_indexa,a);
studenti[broj_studenata]=St;
broj_studenata++;
}
void StudentskaSluzba::UpisiOcjenu(int index,int ocjena){
int pom;
bool istina(true);
for (int i=0;i<broj_studenata;i++)
if(index==studenti[i]->Index()) { istina=false; pom=i; }
if (istina==false) studenti[pom]->UpisiOcjenu(ocjena);
else cout<< "Student ne postoji."<<endl;
}
void StudentskaSluzba::IspisiSpisak(){
if (broj_studenata==0) cout<< "Nema unesenih studenata."<<endl;
for (int i=0;i<broj_studenata;i++) studenti[i]->IspisiPodatke();
}
// Glavni program
int main(){
StudentskaSluzba tvz(15);
tvz.UpisiStudenta(1,"Ivo","Ivic",1);
tvz.UpisiStudenta(2,"Meho","Mehic",1998);
tvz.UpisiStudenta(3,"Vaso","Vasic",2);
tvz.UpisiStudenta(4,"Ibro","Ibric",1);
tvz.UpisiStudenta(5,"Marko","Markovic",2001);
tvz.UpisiOcjenu(1,3);
tvz.UpisiOcjenu(1,4);
tvz.UpisiOcjenu(1,3);
tvz.UpisiOcjenu(3,2);
tvz.UpisiOcjenu(5,4);
tvz.IspisiSpisak();
getchar();
return 0;
}
|