jordanov

[ООП] Огласник 75%

Jan 28th, 2020
731
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.55 KB | None | 0 0
  1. /*За потребите на електронскиот огласник ФИНКИ-Огласи треба да се развие класа Oglas со информации за наслов (текстуална низа од максимум 50 знаци), категорија (текстуална низа од максимум 30 знаци), опис (текстуална низа од максимум 100 знаци) и цена изразена во евра (реален број). (5 поени)
  2. За оваа класа да се обезбедат:
  3. Оператор > за споредба на двa огласи според цената (5 поени)
  4. Оператор << за печатење на податоците за огласот во форма: (5 поени)
  5. [наслов]
  6. [опис]
  7. [цена] evra
  8. Да се развие класа Oglasnik во која се чуваат податоци за име на огласникот (текстуална низа од максимум 20 знаци), низа од огласи (динамички резервирана низа од објекти од класата Oglas) и број на огласи во низата (цел број) (5 поени)
  9. За оваа класа да се обезбедат:
  10. Оператор += за додавање нов оглас во низата од огласи. (5 поени) Ако цената на огласот што се внесува е негативна, треба да се генерира исклучок NegativnaVrednost (објект од класата NegativnaVrednost што посебно треба да се дефинира). Во ваков случај се печати порака “Oglasot ima nevalidna vrednost za cenata i nema da bide evidentiran!“ и не се додава во низата. (5 поени)
  11. Оператор << за печатење на огласите во огласникот. (5 поени) Печатењето треба да биде во следниот формат:
  12. [Име на огласникот]
  13. [наслов1] [опис1] [цена1]
  14. [наслов2] [опис2] [цена2]
  15. ...
  16. Функција void oglasOdKategorija(const char *k) со која се печатат сите огласи од категоријата k што е проследена како влезен аргумент на методот. (5 поени)
  17. Функција void najniskaCena() со која се печати огласот што има најниска цена. Ако има повеќе огласи со иста најниска цена, да се испечатат податоците за првиот од нив. (5 поени)
  18. Сите променливи во класите се приватни.
  19. Да се обезбедат сите потребни методи за правилно функционирање на програмата. (5 поени)*/
  20.  
  21.  
  22. #include<iostream>
  23. #include<string.h>
  24.  
  25.  
  26. using namespace std;
  27.  
  28. class NegativnaVrednost{
  29. private:
  30.     char error[100];
  31. public:
  32.     NegativnaVrednost(){}
  33.     NegativnaVrednost(char error[]){
  34.     strcpy(this->error,error);
  35.     }
  36.     void print(){
  37.     cout<<error<<endl;
  38.     }
  39. };
  40.  
  41. class Oglas{
  42. private:
  43.     char naslov[50];
  44.     char kategorija[30];
  45.     char opis[100];
  46.     float cena;
  47. public:
  48.     Oglas(){}
  49.  
  50.     Oglas(char naslov[],char *kategorija,char opis[],float cena){
  51.     strcpy(this->naslov,naslov);
  52.     strcpy(this->kategorija,kategorija);
  53.     strcpy(this->opis,opis);
  54.     this->cena=cena;
  55.     }
  56.  
  57.     bool operator>(Oglas &objekt){
  58.     if(this->cena>objekt.cena){
  59.         return true;
  60.     }else{
  61.         return false;
  62.     }
  63.     }
  64.  
  65.  
  66.     char* getNaslov(){
  67.     return naslov;
  68.     }
  69.     char* getOpis(){
  70.     return opis;
  71.     }
  72.     char* getKategorija(){
  73.     return kategorija;
  74.     }
  75.     float getCena(){
  76.     return cena;
  77.     }
  78.  
  79.     friend ostream &operator<<(ostream &output,Oglas &objekt){
  80.     output<<objekt.naslov<<endl;
  81.     output<<objekt.opis<<endl;
  82.     output<<objekt.cena<<" evra"<<endl;
  83.     return output;
  84.     }
  85.  
  86.     ~Oglas(){}
  87.  
  88. };
  89.  
  90. class Oglasnik{
  91. private:
  92.     char ime[20];
  93.     Oglas *oglasi;
  94.     int brojOglasi;
  95. public:
  96.     Oglasnik(){
  97.     oglasi=new Oglas[0];
  98.     brojOglasi=0;
  99.     }
  100.  
  101.     Oglasnik(char ime[]){
  102.     strcpy(this->ime,ime);
  103.     oglasi=new Oglas[0];
  104.     brojOglasi=0;
  105.     }
  106.  
  107.     //oglasnik+=oglas;
  108.     Oglasnik &operator+=(Oglas &novOglas){
  109.     if(novOglas.getCena()<0){
  110.         throw NegativnaVrednost("Oglasot ima nevalidna vrednost za cenata i nema da bide evidentiran!");
  111.     }
  112.     Oglas *tempNiza=new Oglas[brojOglasi];
  113.     for(int i=0;i<brojOglasi;i++){
  114.         tempNiza[i]=oglasi[i];
  115.     }
  116.     oglasi=new Oglas[brojOglasi+1];
  117.     for(int i=0;i<brojOglasi;i++){
  118.         oglasi[i]=tempNiza[i];
  119.     }
  120.     oglasi[brojOglasi]=novOglas;
  121.     brojOglasi++;
  122.     delete []tempNiza;
  123.     return *this;
  124.     }
  125.  
  126.     friend ostream &operator<<(ostream &output, Oglasnik &objekt){
  127.     output<<objekt.ime<<endl;
  128.     for(int i=0;i<objekt.brojOglasi;i++){
  129.         output<<objekt.oglasi[i].getNaslov()<<endl;
  130.         output<<objekt.oglasi[i].getOpis()<<endl;
  131.         output<<objekt.oglasi[i].getCena()<<" evra"<< endl;
  132.         output<<endl;
  133.     }
  134.     return output;
  135.     }
  136.  
  137.     void oglasiOdKategorija(const char *k){
  138.     for(int i=0;i<brojOglasi;i++){
  139.         if(strcmp(oglasi[i].getKategorija(),k)==0){
  140.             cout<<oglasi[i]<<endl;
  141.         }
  142.     }
  143.     }
  144.  
  145.     void najniskaCena(){
  146.     float minCena=9999999;
  147.     int pamtiIndex;
  148.     for(int i=0;i<brojOglasi;i++){
  149.         if(oglasi[i].getCena()<minCena){
  150.             minCena=oglasi[i].getCena();
  151.             pamtiIndex=i;
  152.         }
  153.     }
  154.     cout<<oglasi[pamtiIndex];
  155.     }
  156.  
  157.     ~Oglasnik(){
  158.     delete []oglasi;
  159.     }
  160.    
  161. };
  162.  
  163.  
  164. int main(){
  165.     char naslov[50];
  166.     char kategorija[30];
  167.     char opis[100];
  168.     float cena;
  169.     char naziv[50];
  170.     char k[30];
  171.     int n;
  172.  
  173.     int tip;
  174.     cin>>tip;
  175.  
  176.     if (tip==1){
  177.         cout<<"-----Test Oglas & operator <<-----" <<endl;
  178.         cin.get();
  179.         cin.getline(naslov,49);
  180.         cin.getline(kategorija,29);
  181.         cin.getline(opis,99);
  182.         cin>>cena;
  183.         Oglas o(naslov, kategorija, opis, cena);
  184.         cout<<o;
  185.     }
  186.     else if (tip==2){
  187.         cout<<"-----Test Oglas & operator > -----" <<endl;
  188.         cin.get();
  189.         cin.getline(naslov,49);
  190.         cin.getline(kategorija,29);
  191.         cin.getline(opis,99);
  192.         cin>>cena;
  193.         Oglas o1(naslov, kategorija, opis, cena);
  194.         cin.get();
  195.         cin.getline(naslov,49);
  196.         cin.getline(kategorija,29);
  197.         cin.getline(opis,99);
  198.         cin>>cena;
  199.         Oglas o2(naslov, kategorija, opis, cena);
  200.         if (o1>o2) cout<<"Prviot oglas e poskap."<<endl;
  201.         else cout<<"Prviot oglas ne e poskap."<<endl;
  202.     }
  203.     else if (tip==3){
  204.         cout<<"-----Test Oglasnik, operator +=, operator << -----" <<endl ;
  205.         cin.get();
  206.         cin.getline(naziv,49);
  207.         cin>>n;
  208.         Oglasnik ogl(naziv);
  209.         for (int i = 0; i < n; i++){
  210.             cin.get();
  211.             cin.getline(naslov,49);
  212.             cin.getline(kategorija,29);
  213.             cin.getline(opis,99);
  214.             cin>>cena;
  215.             Oglas o(naslov, kategorija, opis, cena);
  216.             ogl+=o;
  217.         }
  218.         cout<<ogl;
  219.     }
  220.     else if (tip==4){
  221.         cout<<"-----Test oglasOdKategorija -----" <<endl ;
  222.         cin.get();
  223.         cin.getline(naziv,49);
  224.         cin>>n;
  225.         Oglasnik ogl(naziv);
  226.         for (int i = 0; i < n; i++){
  227.             cin.get();
  228.             cin.getline(naslov,49);
  229.             cin.getline(kategorija,29);
  230.             cin.getline(opis,99);
  231.             cin>>cena;
  232.             Oglas o(naslov, kategorija, opis, cena);
  233.             ogl+=o;
  234.         }
  235.         cin.get();
  236.         cin.getline(k,29);
  237.         cout<<"Oglasi od kategorijata: " <<k<<endl;
  238.         ogl.oglasiOdKategorija(k);
  239.  
  240.     }
  241.     else if (tip==5){
  242.         cout<<"-----Test Exception -----" <<endl ;
  243.         cin.get();
  244.         cin.getline(naziv,49);
  245.         cin>>n;
  246.         Oglasnik ogl(naziv);
  247.         for (int i = 0; i < n; i++){
  248.             cin.get();
  249.             cin.getline(naslov,49);
  250.             cin.getline(kategorija,29);
  251.             cin.getline(opis,99);
  252.             cin>>cena;
  253.             Oglas o(naslov, kategorija, opis, cena);
  254.             ogl+=o;
  255.         }
  256.         cout<<ogl;
  257.  
  258.     }
  259.     else if (tip==6){
  260.         cout<<"-----Test najniskaCena -----" <<endl ;
  261.         cin.get();
  262.         cin.getline(naziv,49);
  263.         cin>>n;
  264.         Oglasnik ogl(naziv);
  265.         for (int i = 0; i < n; i++){
  266.             cin.get();
  267.             cin.getline(naslov,49);
  268.             cin.getline(kategorija,29);
  269.             cin.getline(opis,99);
  270.             cin>>cena;
  271.             Oglas o(naslov, kategorija, opis, cena);
  272.             ogl+=o;
  273.         }
  274.         cout<<"Oglas so najniska cena:"<<endl;
  275.         ogl.najniskaCena();
  276.  
  277.     }
  278.     else if (tip==7){
  279.         cout<<"-----Test All -----" <<endl ;
  280.         cin.get();
  281.         cin.getline(naziv,49);
  282.         cin>>n;
  283.         Oglasnik ogl(naziv);
  284.         for (int i = 0; i < n; i++){
  285.             cin.get();
  286.             cin.getline(naslov,49);
  287.             cin.getline(kategorija,29);
  288.             cin.getline(opis,99);
  289.             cin>>cena;
  290.             Oglas o(naslov, kategorija, opis, cena);
  291.             ogl+=o;
  292.         }
  293.         cout<<ogl;
  294.  
  295.         cin.get();
  296.         cin.get();
  297.         cin.getline(k,29);
  298.         cout<<"Oglasi od kategorijata: " <<k<<endl;
  299.         ogl.oglasiOdKategorija(k);
  300.  
  301.         cout<<"Oglas so najniska cena:"<<endl;
  302.         ogl.najniskaCena();
  303.  
  304.     }
  305.  
  306.     return 0;
  307. }
Add Comment
Please, Sign In to add comment