Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string.h>
- using namespace std;
- class BadInputException
- {
- private:
- char *ocenka_popravena;
- public:
- // Constructors
- BadInputException(const char *ocenka_popravena)
- {
- this->ocenka_popravena = new char[strlen(ocenka_popravena) + 1];
- strcpy(this->ocenka_popravena, ocenka_popravena);
- }
- ~BadInputException() { delete [] ocenka_popravena; }
- void popravi()
- {
- int count = 0;
- char *copy = ocenka_popravena;
- while(*copy++)
- {
- if(isalpha(*copy)) count++;
- }
- char *temp = new char[count + 1];
- while(*copy++)
- {
- if(isalpha(*copy)) *temp++ = *copy;
- }
- delete [] ocenka_popravena;
- temp -=(count + 1);
- ocenka_popravena = temp;
- }
- char *getPopraven() const { return ocenka_popravena; }
- void print(){ std::cout << "Greshna opisna ocenka" << std::endl; }
- };
- class StudentKurs{
- protected:
- char ime[30];
- int ocenka;
- bool daliUsno;
- static int MAX;
- static const int MINOCENKA;
- public:
- StudentKurs(char* ime,int finalenIspit){
- strcpy(this->ime,ime);
- this->ocenka=finalenIspit;
- this->daliUsno=false;
- }
- virtual ~StudentKurs(){}
- // Functions
- bool getDaliUsno() const { return daliUsno; }
- const char *getIme() const { return ime; }
- virtual int getOcenka() const { return ocenka; }
- static void setMAX(int x) { MAX = x; }
- static int getMAX() { return MAX; }
- static const int getMINOCENKA() { return MINOCENKA; }
- };
- int StudentKurs::MAX = 10;
- const int StudentKurs::MINOCENKA = 6;
- //вметни го кодот за StudentKursUsno
- class StudentKursUsno : public StudentKurs
- {
- private:
- char *opisna_ocenka; // dynamically allocated
- public:
- // Constructors
- StudentKursUsno(char *ime, int finalenIspit)
- : StudentKurs(ime, finalenIspit)
- {
- opisna_ocenka = new char[0];
- this->daliUsno = true;
- }
- ~StudentKursUsno() { delete [] opisna_ocenka; }
- // Functions
- int getOcenka() const override
- {
- if(strcmp(opisna_ocenka, "odlicen") == 0&&StudentKurs::getOcenka() + 2 <= getMAX()) return StudentKurs::getOcenka() + 2;
- else if(strcmp(opisna_ocenka, "dobar") == 0 && StudentKurs::getOcenka() + 1 <= getMAX()) return StudentKurs::getOcenka() + 1;
- else if(strcmp(opisna_ocenka, "losho") == 0 && StudentKurs::getOcenka() -1 > 1) return StudentKurs::getOcenka() - 1;
- else return StudentKurs::getOcenka();
- //ati
- // if(strcmp(opisna_ocenka, "odlicen")==0){
- // if( (StudentKurs::getOcenka() + 2) < getMAX()){
- // return (StudentKurs::getOcenka() + 2);
- // }else{
- // return getMAX();
- // }
- // }else if(strcmp(opisna_ocenka, "dobro")==0){
- // if( (StudentKurs::getOcenka() + 1) < getMAX()){
- // return (StudentKurs::getOcenka() + 1);
- // }else{
- // return getMAX();
- // }
- // }else if(strcmp(opisna_ocenka, "losho")==0){
- // if( (StudentKurs::getOcenka() - 1) > 1){
- // return (StudentKurs::getOcenka() - 1);
- // }else{
- // return 1;
- // }
- // }else{
- // return StudentKurs::getOcenka();
- // }
- }
- // Overloaded operators
- StudentKursUsno &operator +=(char *opisna1)
- {
- char *copi = opisna1;
- while(*copi)
- {
- if(!isalpha(*copi)) throw BadInputException(opisna1);
- copi++;
- }
- //delete [] this->opisna_ocenka;
- this->opisna_ocenka = new char[strlen(opisna1) + 1];
- strcpy(this->opisna_ocenka, opisna1);
- return *this;
- }
- };
- std::ostream &operator <<(std::ostream &output, const StudentKurs &ob)
- {
- output << ob.getIme() << " --- " << ob.getOcenka() << std::endl;
- return output;
- }
- class KursFakultet
- {
- private:
- char naziv[30];
- StudentKurs *studenti[20];
- int broj;
- public:
- KursFakultet(const char *naziv, StudentKurs** studenti,int broj ){
- strcpy(this->naziv,naziv);
- for (int i=0;i<broj;i++){
- //ako studentot ima usno isprashuvanje
- if (studenti[i]->getDaliUsno()){
- this->studenti[i]=new StudentKursUsno(*dynamic_cast<StudentKursUsno*>(studenti[i]));
- }
- else this->studenti[i]=new StudentKurs(*studenti[i]);
- }
- this->broj=broj;
- }
- ~KursFakultet(){
- for (int i=0;i<broj;i++) delete studenti[i];
- }
- //дополни ја класата
- void pecatiStudenti() const
- {
- std::cout << "Kursot " << naziv << " go polozile:" << std::endl;
- for(int i = 0; i < broj; i++)
- {
- if(studenti[i]->getOcenka() >= StudentKurs::getMINOCENKA() ) std::cout << *(studenti[i]);
- }
- }
- void postaviOpisnaOcenka(char *ime, char *opisnaOcenka)
- {
- for(int i = 0; i < broj; i++)
- {
- if( (strcmp(studenti[i]->getIme(), ime) == 0) && (studenti[i]->getDaliUsno()) )
- {
- StudentKursUsno *a = dynamic_cast <StudentKursUsno *>(studenti[i]);
- *a += opisnaOcenka;
- }
- }
- }
- };
- int main(){
- StudentKurs **niza;
- int n,m,ocenka;
- char ime[30],opisna[10];
- bool daliUsno;
- cin>>n;
- niza=new StudentKurs*[n];
- for (int i=0;i<n;i++){
- cin>>ime;
- cin>>ocenka;
- cin>>daliUsno;
- if (!daliUsno)
- niza[i]=new StudentKurs(ime,ocenka);
- else
- niza[i]=new StudentKursUsno(ime,ocenka);
- }
- KursFakultet programiranje("OOP",niza,n);
- for (int i=0;i<n;i++) delete niza[i];
- delete [] niza;
- cin>>m;
- for (int i=0;i<m;i++){
- cin>>ime>>opisna;
- try{
- programiranje.postaviOpisnaOcenka(ime,opisna); //ERROR
- }
- catch(BadInputException bie){
- bie.print();
- bie.popravi();
- programiranje.postaviOpisnaOcenka(ime,bie.getPopraven());
- }
- }
- StudentKurs::setMAX(9);
- programiranje.pecatiStudenti();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement