Advertisement
Guest User

Vozila

a guest
Apr 24th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.15 KB | None | 0 0
  1. #include <iostream>
  2. #include<conio.h>
  3.  
  4. using namespace std;
  5.  
  6.  
  7.  
  8. enum TipVozila { DRUMSKO = 1, VAZDUSNO, PLOVNO };
  9. char *enumTipVozila[] = { "DRUMSKO","VAZDUSNO","PLOVNO" };
  10.  
  11. char *crt = "\n--------------------------\n";
  12. struct Datum
  13. {
  14.     int *_dan, *_mjesec, *_godina;
  15.     void Unos(int d, int m, int g)
  16.     {
  17.         if (g < 1900 || g>2017)
  18.             return;
  19.         if (d < 1 || d>31)
  20.             return;
  21.         if (m < 1 || m>12)
  22.             return;
  23.         switch (m)
  24.         {
  25.         case 1:
  26.         case 3:
  27.         case 5:
  28.         case 7:
  29.         case 8:
  30.         case 10:
  31.         case 12:
  32.             if (d > 31)
  33.                 return; break;
  34.         case 2:
  35.             if (g % 4 == 0 && d > 28)
  36.                 return;
  37.             else if (g % 4 != 0 && d > 29)
  38.                 return; break;
  39.         default:
  40.             if (d > 30)
  41.                 return;
  42.             break;
  43.         }
  44.         _dan = new int;
  45.         _mjesec = new int;
  46.         _godina = new int;
  47.         *_dan = d;
  48.         *_mjesec = m;
  49.         *_godina = g;
  50.     }
  51.     void Ispis()
  52.     {
  53.         cout << *_dan << "." << *_mjesec << "." << *_godina << endl;
  54.     }
  55.     void Dealociraj()
  56.     {
  57.         delete _dan, _mjesec, _godina;
  58.         _dan = _mjesec = _godina = NULL;
  59.     }
  60. };
  61. struct Ostecenje
  62. {
  63.     char * _nazivOstecenogDijela;
  64.     float _cijenaOriginalnogDijela;
  65.     float _cijenaZamjenskogDijela;
  66.     bool _mogucPopravak;
  67.     //na osnovu primljenih parametara incijlizovati potrebne atribute.
  68.     //ukoliko je cijena zamjenskog dijela veća od cijene originalnog oporvak se smatra nemogucim, u suprotnom se
  69.     //smatra mogucim.
  70.     void Unos(char *naziv, float cijenaOrig, float cijenaZamj)
  71.     {
  72.         int vel = strlen(naziv) + 1;
  73.         _nazivOstecenogDijela = new char[vel];
  74.         strcpy_s(_nazivOstecenogDijela, vel, naziv);
  75.  
  76.         _cijenaOriginalnogDijela = cijenaOrig;
  77.         _cijenaZamjenskogDijela = cijenaZamj;
  78.  
  79.         if (cijenaZamj > cijenaOrig)
  80.             _mogucPopravak = false;
  81.         else _mogucPopravak = true;
  82.     }
  83.     void Ispis()
  84.     {
  85.         cout << "Naziv ostecenog dijela: " << _nazivOstecenogDijela << endl;
  86.         cout << "Cijena originalnog dijela: " << _cijenaOriginalnogDijela << endl;
  87.         cout << "Cijena zamjenskog dijela: " << _cijenaZamjenskogDijela << endl;
  88.  
  89.     }
  90.     void Dealokacija()
  91.     {
  92.         delete[]_nazivOstecenogDijela; _nazivOstecenogDijela = nullptr;
  93.     }
  94. };
  95. struct Nezgoda
  96. {
  97.     char* _lokacija; //npr.magistralni put M17
  98.     Datum _datumNezgode;
  99.     Ostecenje *_listaOstecenja[10]; //smatramo da je maksimalan broj ostecenja 10.
  100.     int _brojOstecenja; //broji ostecenja.
  101.     char *_napomene[50]; //svako ostecenje ne mora imati napomenu.
  102.                          //osmisliti mehanizam pracenja napomene uz ustecenje za koje je napomena namijenjena.
  103.                          //Funkcije Unos, Ispis i Dealokaciju implementirati van strukture!
  104.     void Unos(char * lok, Datum * d)
  105.     {
  106.         int vel = strlen(lok) + 1;
  107.         _lokacija = new char[vel];
  108.         strcpy_s(_lokacija, vel, lok);
  109.  
  110.         _datumNezgode.Unos(*d->_dan, *d->_mjesec, *d->_godina);
  111.         _brojOstecenja = 0;
  112.  
  113.        
  114.     }
  115.    
  116.     void Ispis()
  117.     {
  118.         cout << "Lokacija: " << _lokacija << endl;
  119.         _datumNezgode.Ispis();
  120.         cout << "Napomene: " << _napomene << endl;
  121.     }
  122.     void Dealokacija()
  123.     {
  124.         delete[]_lokacija; _lokacija = nullptr;
  125.         _datumNezgode.Dealociraj();
  126.         for (size_t i = 0; i < _brojOstecenja; i++)
  127.         {
  128.             delete _listaOstecenja[i]; _listaOstecenja[i] = nullptr;
  129.         }
  130.     }//Implementirati sljedeće funkcije: //
  131.                         //2. AddOstecenje :: dodaje podatke o ostecenom dijelu.
  132.                         //Svako ostecenje ne mora imati napomenu //u jednoj nezgodi mogu se desiti najviše dva ista oštećenja.
  133.                         //smatra se da je ostecenje isto ako ima isti naziv. za poredjenje naziva
  134.     //implementirati vlastitu funkciju! /*
  135.                         //3. RemoveOstecenje::
  136.                         //uklanja podatke o svim ostecenjima na osnovu naziva ili dijela naziva
  137.     //ostecenog dijela koji je primljen kao parametar */ }
  138.                         // Rekurzijom pronaći oštećenje čiji je zamjenski dio najskuplji u odnosu na originalni (najveca razlika u cijeni).
  139.                         //implementirati funkciju kao i poziv u main-u.
  140.     bool AddOstecenje(Ostecenje *o,char *napomena="---")
  141.     {
  142.         int counter = 0;
  143.         if (_brojOstecenja > 2)
  144.             return false;
  145.  
  146.         for (size_t i = 0; i < _brojOstecenja; i++)
  147.         {
  148.             if (_listaOstecenja[i]->_nazivOstecenogDijela == o->_nazivOstecenogDijela)
  149.                 counter++;
  150.         }
  151.  
  152.         _listaOstecenja[_brojOstecenja] = new Ostecenje;
  153.         _listaOstecenja[_brojOstecenja] ->Unos(o->_nazivOstecenogDijela, o->_cijenaOriginalnogDijela, o->_cijenaZamjenskogDijela);
  154.         _brojOstecenja++;
  155.         return true;
  156.     }
  157.     int RemoveOstecenje(char *naziv)
  158.     {
  159.         char *p = NULL; int counter = 0;
  160.         for (size_t i = 0; i < _brojOstecenja; i++)
  161.         {
  162.             p = strstr(_listaOstecenja[i]->_nazivOstecenogDijela, naziv);
  163.             if (p != NULL)
  164.             {
  165.                
  166.                     for (size_t j = i; j < _brojOstecenja - 1; j++)
  167.                     {
  168.                         _listaOstecenja[j] = _listaOstecenja[j + 1];
  169.                     }
  170.                     --_brojOstecenja;
  171.                
  172.             }
  173.             p = NULL;  
  174.             counter++;
  175.    
  176.         }
  177.         return counter;
  178.     }
  179.    
  180. };
  181.  
  182.  
  183. int main() {
  184.     Datum d;
  185.     d.Unos(20, 1, 2013);
  186.     d.Ispis();
  187.     Ostecenje o1, o2;
  188.     o1.Unos("Guma pukla", 100, 150);
  189.     o2.Unos("Auspuh", 300, 230);
  190.     o1.Ispis();
  191.  
  192.     Nezgoda n1; n1.
  193.         Unos("Mostar", &d);
  194.     n1.Ispis();
  195.     //n1.Dealokacija();
  196.     if (n1.AddOstecenje(&o1))
  197.     {
  198.     cout << "Ostecenje dodano!" << endl;
  199.     }
  200.     if (n1.AddOstecenje(&o2))
  201.     {
  202.     cout << "Ostecenje dodano!" << endl;
  203.     }
  204.     if (n1.AddOstecenje(&o1, "Opet pukla guma!"))
  205.     {
  206.     cout << "Ostecenje dodano!" << endl;
  207.     }
  208.     if (n1.AddOstecenje(&o1))
  209.     {
  210.     cout << "Ostecenje dodano!" << endl;
  211.     }
  212.     n1.Ispis();
  213.     cout << endl << endl;
  214.     int uklonjeno = n1.RemoveOstecenje("Guma");
  215.     cout << "Uklonjeno: " << uklonjeno << endl;
  216.     //if (n1._brojOstecenja>0)
  217.     //{
  218.     //  float razlika = abs(n1._listaOstecenja[0]->_cijenaOriginalnogDijela - n1._listaOstecenja[0]->_cijenaZamjenskogDijela);
  219.     //  //Ostecenje * o5 = rekurzija(*n1._listaOstecenja,n1._brojOstecenja,razlika);
  220.     //  Ostecenje*niz;
  221.     //  niz = new Ostecenje[n1._brojOstecenja];
  222.  
  223.     //  for (int i = 0; i < n1._brojOstecenja; i++)
  224.     //  {
  225.     //      niz[i].Unos(n1._listaOstecenja[i]->_nazivOstecenogDijela, n1._listaOstecenja[i]->_cijenaOriginalnogDijela, n1._listaOstecenja[i]->_cijenaZamjenskogDijela);
  226.     //  }
  227.  
  228.     //  Ostecenje* x = rekurzija(niz, n1._brojOstecenja, razlika);
  229.     //  x->Ispis();
  230.     //}
  231.     //pozvati funkciju rekurzija, uz ispis pronađenog oštećenja //obavezno dealocirati alociranu memoriju.
  232.  
  233.     d.Dealociraj();
  234.     o1.Dealokacija(); o2.Dealokacija();
  235.     n1.Dealokacija();
  236.     _getch();
  237.     return 0;
  238. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement