Advertisement
196040

OOP zadaci za vezbanje 1 Gitari

May 26th, 2020
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.80 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. class Gitara { //За таа цел, треба да се креира класа Gitara (5 поени).
  5. private://Класата треба да содржи:
  6. char seriskibroj[25]; //Сериски број (низа од 25 знаци)
  7. double nabavna; //Набавна цена (реален број)
  8. int godina; //Година на производство (цел број)
  9. char tip[40]; //Тип (низа од 40 знаци)
  10. public:
  11. Gitara() {
  12.     strcpy(this->seriskibroj, "");
  13.     this->nabavna = 0.0;
  14.     this->godina = 0;
  15.     strcpy(this->tip, "");
  16. } //defaulten
  17. Gitara(char * tip, char * seriskibroj,  int godina, double nabavna)  {
  18.     strcpy(this->seriskibroj, seriskibroj);
  19.     this->nabavna = nabavna;
  20.     this->godina = godina;
  21.     strcpy(this->tip, tip);
  22. } //konstruktor so argumenti
  23. Gitara(const Gitara &g) {
  24.     strcpy(this->seriskibroj, g.seriskibroj);
  25.     this->nabavna = g.nabavna;
  26.     this->godina = g.godina;
  27.     strcpy(this->tip, g.tip);
  28. }//copy konstruktor
  29.     Gitara &operator=(const Gitara &g){
  30.         if(this!=&g) {
  31.         strcpy(this->seriskibroj, g.seriskibroj);
  32.     this->nabavna = g.nabavna;
  33.     this->godina = g.godina;
  34.     strcpy(this->tip, g.tip);
  35.         }
  36.         return *this;
  37.     }
  38. bool daliIsti(Gitara &g) { //Да се дефинира метод daliIsti кој како аргумент ќе добие
  39.  if(strcmp(this->seriskibroj, g.seriskibroj) == 0)
  40.  return true;
  41.  else return false;
  42. } //објект од тип Gitara и ќе ги спореди двете гитари според нивниот сериски број (5 поени)
  43. void pecati() { //Дополнително, за оваа класа да се направи функција pecati()
  44. cout<<seriskibroj<<" "<<tip<<" "<<endl;
  45. //за печатење на објектот во следниот формат (5 поени):
  46. }//_[СерискиБрој] [Тип] [Цена]_
  47.     double getNabavna() {
  48.     return nabavna;
  49.     }
  50.     int getGodina(){
  51.     return godina;
  52.     }
  53.     char * getSeriski(){
  54.     return seriskibroj;
  55.     }
  56.     char * getTip(){
  57.     return tip;
  58.     }
  59. };
  60. class Magacin { //Да се креира класа Magacin (5 поени)
  61. private: //која содржи:
  62. char ime[30]; //Име на магацинот (низа од 30 знаци)
  63. char lokacija[60]; //Локација на магацинот (низа од 60 знаци)
  64. Gitara * niza; //Низа од гитари кои ги поседува магацинот (динамички алоцирана низа од објекти од класата Gitara)
  65. int broj; //Број на објекти во низата (цел број)
  66. int godina; //Година на отвoрање (цел број)
  67. public://За класите да се дефинираат потребните конструктори
  68. Magacin(char * ime = "", char * lokacija = "", int godina=0) {
  69.     strcpy(this->ime, ime);
  70.     strcpy(this->lokacija, lokacija);
  71.     this->godina = godina;
  72.     this->broj = 0;
  73.     this->niza = new Gitara[0];
  74. } // konstruktor so argumenti
  75. Magacin(const Magacin &m) {
  76.     strcpy(this->ime, m.ime);
  77.     strcpy(this->lokacija, m.lokacija);
  78.     this->broj = m.broj;
  79.     this->godina = m.godina;
  80.     for(int i=0;i<m.broj;i++)
  81.     this->niza[i] = m.niza[i];
  82. } // copy constructor
  83.     Magacin &operator=(const Magacin &m) {
  84.         if(this!=&m) {
  85.          strcpy(this->ime, m.ime);
  86.     strcpy(this->lokacija, m.lokacija);
  87.     this->broj = m.broj;
  88.     this->godina = m.godina;
  89.     for(int i=0;i<m.broj;i++)
  90.     this->niza[i] = m.niza[i];
  91.         }
  92.         return *this;
  93.     }
  94. ~Magacin() {
  95.    // delete [] niza;
  96. }// деструктор
  97.     double vrednost() { //За класата Magacin да се дефинира метод double vrednost () што ќе ја пресметува
  98. double total = 0.0;//моменталната вредност на гитарите кои се наоѓаат во магацинот. Таа се пресметува
  99.         for(int i=0;i<broj;i++)// како збир од вредноста на сите гитари од кои е составен магацинот (5 поени).
  100.             total = total+niza[i].getNabavna();
  101.         return total;
  102.     }//Дополнително, за класата да се дефинираат функциите
  103. void dodadi(Gitara d) { //void dodadi(Gitara d) за сместување на нова гитара
  104.     Gitara * tmp = new Gitara[broj+1];
  105. for(int i=0; i<broj; i++)
  106. tmp[i] = niza[i];
  107. tmp[broj++] = d;
  108. niza = tmp;
  109. } //во магацин (додавање на нов објект од класата Gitara во динамички алоцираната низа со гитари)
  110.      
  111.    void prodadi(Gitara p) { //void prodadi(Gitara p) за бришење на дадена гитара од магацинот (бришење на
  112. int count = 0;
  113.     for(int i=0; i<broj; i++)
  114.         if(niza[i].daliIsti(p) == false)
  115.         count++;
  116.    Gitara * tmp = new Gitara[count];
  117.     count=0;
  118.     for(int i=0; i<broj; i++)  {
  119.         if(niza[i].daliIsti(p) == false) {
  120.           tmp[count++] = niza[i];
  121.     }
  122.     }
  123.     //delete [] niza;
  124. niza = tmp;
  125.    broj = count;
  126. } //сите објекти кои се исти како аргументот проследен во фунцијата)(10 поени)
  127.   void pecati(bool daliNovi) {//void pecati(bool daliNovi) за печатење на информации за магацинот така што
  128.   cout<<ime<<" "<<lokacija<<endl;  
  129.     if(daliNovi == false) { //во првиот ред ќе биде прикажано имете и локацијата на магацинот, а потоа во
  130.     for(int i=0;i<broj;i++) {//секој нареден ред ќе бидат прикажани гитарите кои се наоѓаат во магацинот.
  131.        cout<<niza[i].getSeriski()<<" ";
  132.        cout<<niza[i].getTip()<<" ";
  133.         cout<<niza[i].getNabavna()<<endl;
  134.     }
  135.     }//Доколку пратената променлива има вредност true ќе се печатат само гитарите кои
  136.     else if(daliNovi == true) {//имаат година на производство понова од годината на отварање на магацинот. Во
  137.         for(int i=0; i<broj;i++) {//спротивно се печатат сите гитари (5 поени).
  138.             if(niza[i].getGodina() > this->godina) {
  139.         cout<<niza[i].getSeriski()<<" ";
  140.        cout<<niza[i].getTip()<<" ";
  141.         cout<<niza[i].getNabavna()<<endl;
  142.     }
  143.  }
  144. }
  145. }
  146. };
  147.     int main() {
  148.     // se testira zadacata modularno
  149.     int testCase;
  150.     cin >> testCase;
  151.     int n, godina;
  152.     float cena;
  153.     char seriski[50],tip[50];
  154.     if(testCase == 1) {
  155.         cout << "===== Testiranje na klasata Gitara ======" << endl;
  156.         cin>>tip;
  157.         cin>>seriski;
  158.         cin >> godina;
  159.         cin >> cena;
  160.         Gitara g(tip,seriski, godina,cena);
  161.         cout<<g.getTip()<<endl;
  162.         cout<<g.getSeriski()<<endl;
  163.         cout<<g.getGodina()<<endl;
  164.         cout<<g.getNabavna()<<endl;
  165.     } else if(testCase == 2){
  166.         cout << "===== Testiranje na klasata Magacin so metodot print() ======" << endl;
  167.         Magacin kb("Magacin1","Lokacija1");
  168.         kb.pecati(false);
  169.     }
  170.     else if(testCase == 3) {
  171.         cout << "===== Testiranje na klasata Magacin so metodot dodadi() ======" << endl;
  172.         Magacin kb("Magacin1","Lokacija1",2005);
  173.         cin>>n;
  174.             for (int i=0;i<n;i++){
  175.                 cin>>tip;
  176.                 cin>>seriski;
  177.                 cin >> godina;
  178.                 cin >> cena;
  179.                 Gitara g(tip,seriski, godina,cena);
  180.                 cout<<"gitara dodadi"<<endl;
  181.                 kb.dodadi(g);
  182.             }
  183.         kb.pecati(true);
  184.     }
  185.     else if(testCase == 4) {
  186.         cout << "===== Testiranje na klasata Magacin so metodot prodadi() ======" << endl;
  187.         Magacin kb("Magacin1","Lokacija1",2012);
  188.             cin>>n;
  189.             Gitara brisi;
  190.             for (int i=0;i<n;i++){
  191.                 cin>>tip;
  192.                 cin>>seriski;
  193.                 cin >> godina;
  194.                 cin >> cena;
  195.  
  196.                 Gitara g(tip,seriski, godina,cena);
  197.                 if(i==2)
  198.                     brisi=g;
  199.                 cout<<"gitara dodadi"<<endl;
  200.                 kb.dodadi(g);
  201.             }
  202.         kb.pecati(false);
  203.         kb.prodadi(brisi);
  204.         kb.pecati(false);
  205.     }
  206.     else if(testCase == 5) {
  207.         cout << "===== Testiranje na klasata Magacin so metodot prodadi() i pecati(true) ======" << endl;
  208.         Magacin kb("Magacin1","Lokacija1",2011);
  209.             cin>>n;
  210.             Gitara brisi;
  211.             for (int i=0;i<n;i++){
  212.                 cin>>tip;
  213.                 cin>>seriski;
  214.                 cin >> godina;
  215.                 cin >> cena;
  216.                 Gitara g(tip,seriski, godina,cena);
  217.                 if(i==2)
  218.                     brisi=g;
  219.                 cout<<"gitara dodadi"<<endl;
  220.                 kb.dodadi(g);
  221.             }
  222.         kb.pecati(true);
  223.         kb.prodadi(brisi);
  224.         cout<<"Po brisenje:"<<endl;
  225.         Magacin kb3;
  226.         kb3=kb;
  227.         kb3.pecati(true);
  228.     }
  229.    else if(testCase ==6)
  230.         {
  231.         cout << "===== Testiranje na klasata Magacin so metodot vrednost()======" << endl;
  232.         Magacin kb("Magacin1","Lokacija1",2011);
  233.             cin>>n;
  234.             Gitara brisi;
  235.             for (int i=0;i<n;i++){
  236.                 cin>>tip;
  237.                 cin>>seriski;
  238.                 cin >> godina;
  239.                 cin >> cena;
  240.  
  241.                 Gitara g(tip,seriski, godina,cena);
  242.                 if(i==2)
  243.                     brisi=g;
  244.                 kb.dodadi(g);
  245.             }
  246.         cout<<kb.vrednost()<<endl;
  247.         kb.prodadi(brisi);
  248.         cout<<"Po brisenje:"<<endl;
  249.         cout<<kb.vrednost();
  250.         Magacin kb3;
  251.         kb3=kb;
  252.         }
  253.     return 0;
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement