#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; } |
|
|