Advertisement
adnanj

PR2 - W8 - Zadatak

Dec 19th, 2014
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.76 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. char * crtice = "\n===========================================================\n";
  5.  
  6. //U programu implementirati nasljeđivanje između odgovarajućih klasa
  7. //Klasu deklarisati kao apstraktnu
  8. class Osoba
  9. {
  10. protected:
  11.     char* _ime;
  12.     char* _prezime;
  13.     char* _adresa;
  14.     char _telefon[15];
  15. public:
  16.     //Potrebne konstruktor i destruktor funkcije
  17.     Osoba(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---")
  18.     {
  19.         int vel = strlen(ime) + 1;
  20.         _ime = new char[vel];
  21.         strcpy_s(_ime, vel, ime);
  22.  
  23.         vel = strlen(prezime) + 1;
  24.         _prezime = new char[vel];
  25.         strcpy_s(_prezime, vel, prezime);
  26.  
  27.         vel = strlen(adresa) + 1;
  28.         _adresa = new char[vel];
  29.         strcpy_s(_adresa, vel, adresa);
  30.  
  31.         strcpy_s(_telefon, 15, telefon);
  32.     }
  33.  
  34.     Osoba(const Osoba & original)
  35.     {
  36.         int vel = strlen(original._ime) + 1;
  37.         _ime = new char[vel];
  38.         strcpy_s(_ime, vel, original._ime);
  39.  
  40.         vel = strlen(original._prezime) + 1;
  41.         _prezime = new char[vel];
  42.         strcpy_s(_prezime, vel, original._prezime);
  43.  
  44.         vel = strlen(original._adresa) + 1;
  45.         _adresa = new char[vel];
  46.         strcpy_s(_adresa, vel, original._adresa);
  47.  
  48.         strcpy_s(_telefon, 15, original._telefon);
  49.     }
  50.  
  51.     virtual ~Osoba()
  52.     {
  53.         delete[] _ime;
  54.         _ime = NULL;
  55.         delete[] _prezime;
  56.         _prezime = NULL;
  57.         delete[] _adresa;
  58.         _adresa = NULL;
  59.     }
  60.  
  61.     //Kreirati funkciju Info za ispis svih vrijednosti atributa klase
  62.     virtual void Info() = 0
  63.     {
  64.         cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
  65.         cout << "Adresa: " << _adresa << endl;
  66.         cout << "Telefon: " << _telefon << endl;
  67.     }
  68. };
  69.  
  70. class Klijent : public Osoba
  71. {
  72. protected:
  73.     int _id;
  74.     double _mjesecnaPotrosnja;
  75.     char* _email;
  76. public:
  77.     //Potrebne konstruktor i destruktor funkcije
  78.     Klijent(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---", int id = 0, double mjesecnaPotrosnja = 0, char * email = "---")
  79.         : Osoba(ime, prezime, adresa, telefon)
  80.     {
  81.         _id = id;
  82.         _mjesecnaPotrosnja = mjesecnaPotrosnja;
  83.  
  84.         int vel = strlen(email) + 1;
  85.         _email = new char[vel];
  86.         strcpy_s(_email, vel, email);
  87.  
  88.     }
  89.  
  90.     Klijent(const Klijent& original) : Osoba(original)
  91.     {
  92.         _id = original._id;
  93.         _mjesecnaPotrosnja = original._mjesecnaPotrosnja;
  94.  
  95.         int vel = strlen(original._email) + 1;
  96.         _email = new char[vel];
  97.         strcpy_s(_email, vel, original._email);
  98.  
  99.     }
  100.  
  101.     char * getIme() { return _ime; }
  102.     char * getPrezime() { return _prezime; }
  103.  
  104.     ~Klijent()
  105.     {
  106.         delete[] _email;
  107.         _email = NULL;
  108.     }
  109.     //Preklopiti operator > koji će porediti klijenta sa zadatom potrošnjom i
  110.     //vratiti true u slučaju da je klijent imao veću mjesečnu potrošnju.
  111.     //Implementirati kao friend funkciju.
  112.     friend bool operator> (Klijent & obj, double mjesecnaPotrosnja);
  113.  
  114.     //Kreirati funkciju za izmjenu mail adrese.
  115.  
  116.     void promijeniMail(char * noviEmail)
  117.     {
  118.         delete[] _email;
  119.         int vel = strlen(noviEmail) + 1;
  120.         _email = new char[vel];
  121.         strcpy_s(_email, vel, noviEmail);
  122.     }
  123.  
  124.     void Info()
  125.     {
  126.         Osoba::Info();
  127.         cout << "ID: " << _id << endl;
  128.         cout << "Mjesecna potrosnja: " << _mjesecnaPotrosnja << " KM" << endl;
  129.         cout << "Email adresa: " << _email << endl;
  130.     }
  131.  
  132. };
  133.  
  134. bool operator> (Klijent& obj, double mjesecnaPotrosnja)
  135. {
  136.     if(obj._mjesecnaPotrosnja > mjesecnaPotrosnja)
  137.         return true;
  138.     return false;
  139. }
  140.  
  141. class Zaposlenik : public Osoba
  142. {
  143.     char _radnoMjesto[30];
  144.     int _godineStaza;
  145. public:
  146.     //Potrebne konstruktor i destruktor funkcije
  147.     Zaposlenik(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---", char * radnoMjesto = "---", int godineStaza = 0)
  148.         : Osoba(ime, prezime, adresa, telefon)
  149.     {
  150.         strcpy_s(_radnoMjesto, 30, radnoMjesto);
  151.         _godineStaza = godineStaza;
  152.     }
  153.  
  154.     Zaposlenik(const Zaposlenik & original) : Osoba(original)
  155.     {
  156.         strcpy_s(_radnoMjesto, 30, original._radnoMjesto);
  157.         _godineStaza = original._godineStaza;
  158.     }
  159.  
  160.     char * getRadnoMjesto() { return _radnoMjesto; }
  161.  
  162.     void Info()
  163.     {
  164.         Osoba::Info();
  165.         cout << "Radno mjesto: " << _radnoMjesto << endl;
  166.         cout << "Godine staza: " << _godineStaza << endl;
  167.     }
  168.  
  169. };
  170.  
  171. class VIPKlijent : public Klijent
  172. {
  173.     double _popust;
  174.     char* _parkingOznaka;
  175. public:
  176.     //Potrebne konstruktor i destruktor funkcije
  177.     VIPKlijent(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---", int id = -1, double mjesecnaPotrosnja = -1, char * email = "---", double popust = -1, char * parkingOznaka = "---") :
  178.         Klijent(ime, prezime, adresa, telefon, id, mjesecnaPotrosnja, email)
  179.     {
  180.         _popust = popust;
  181.  
  182.         int vel = strlen(parkingOznaka) + 1;
  183.         _parkingOznaka = new char[vel];
  184.         strcpy_s(_parkingOznaka, vel, parkingOznaka);
  185.     }
  186.  
  187.     VIPKlijent(const VIPKlijent& original) : Klijent(original)
  188.     {
  189.         _popust = original._popust;
  190.  
  191.         int vel = strlen(original._parkingOznaka) + 1;
  192.         _parkingOznaka = new char[vel];
  193.         strcpy_s(_parkingOznaka, vel, original._parkingOznaka);
  194.     }
  195.  
  196.     ~VIPKlijent()
  197.     {
  198.         delete[] _parkingOznaka;
  199.         _parkingOznaka = NULL;
  200.     }
  201.  
  202.  
  203.     double getMjesecnaPotrosnja() { return _mjesecnaPotrosnja; }
  204.     //Funkciju koja treba da izmijeni vrijednost mjesečne potrošnje na način da se
  205.     //uračuna popust (prosječna potrošnja treba da se umanji)
  206.     void uracunajPopust()
  207.     {
  208.         _mjesecnaPotrosnja = _mjesecnaPotrosnja - (_mjesecnaPotrosnja * _popust);
  209.     }
  210.  
  211.     //Funkciju za ispis svih vrijednosti atributa klase
  212.  
  213.     void Info()
  214.     {
  215.         Klijent::Info();
  216.         cout << "Popust: " << _popust << endl;
  217.         cout << "Parking oznaka: " << _parkingOznaka <<endl;
  218.     }
  219.  
  220. };
  221.  
  222. //Funkcija treba da pronađe sve one klijente koji su ostvarili mjesečnu potrošnju veće
  223. //od zadate. Ispisati podatke i vratiti ukupan broj pronađenih klijenata.
  224. int pretragaPotrosnjeKlijenata(Osoba* niz[], int max)
  225. {
  226.     int brojac = 0;
  227.     double potrosnja = 0;
  228.     cout << crtice << "\t .:: KLIJENTI - Pretraga po potrosnji ::." << crtice;
  229.     cout << "Unesite potrosnju: ";
  230.     cin >> potrosnja;
  231.     cin.ignore();
  232.     cout << crtice;
  233.     Klijent * pok;
  234.     for(int i = 0; i < max; i++)
  235.     {
  236.         pok = dynamic_cast<Klijent*>(niz[i]);
  237.         if(pok != NULL) {
  238.             if(*pok > potrosnja) {
  239.                 pok->Info();
  240.                 cout << crtice;
  241.                 brojac++;
  242.             }
  243.         }
  244.     }
  245.     return brojac;
  246. }
  247.  
  248. //Pronaći sve VIP klijente, te im zaračunati popust na kupljene artikle i ispisati
  249. //informacije o onima koji su ostvarili potrošnju veću od 50 KM mjesečno.
  250. void pretragaVIPKlijenata(Osoba* niz[], int max)
  251. {
  252.     cout << crtice << "\t .:: Klijenti cija je potrosnja veca od 50 KM ::." << crtice;
  253.     VIPKlijent * pok;
  254.     for(int i = 0; i < max; i++)
  255.     {
  256.         pok = dynamic_cast<VIPKlijent*>(niz[i]);
  257.         if(pok != NULL) {
  258.             pok->uracunajPopust();
  259.             if(pok->getMjesecnaPotrosnja() > 50) {
  260.                 pok->Info();
  261.                 cout << crtice;
  262.             }
  263.         }
  264.     }
  265.  
  266. }
  267.  
  268. //Svim klijentima postaviti mail adresu u formatu: ime.prezime@firma.ba.
  269. void generisiMailAdrese(Osoba* niz[], int max)
  270. {
  271.     Klijent * pok;
  272.     char * noviMail;
  273.     for(int i = 0; i < max; i++)
  274.     {
  275.         pok = dynamic_cast<Klijent *>(niz[i]);
  276.         if(pok != NULL)
  277.         {
  278.             int vel = strlen(pok->getIme()) + strlen(pok->getPrezime()) + strlen("@firma.ba") + 2;
  279.             noviMail = new char[vel];
  280.             strcpy_s(noviMail, vel, pok->getIme());
  281.             strcat(noviMail, ".");
  282.             strcat(noviMail, pok->getPrezime());
  283.             strcat(noviMail, "@firma.ba");
  284.             pok->promijeniMail(noviMail);
  285.             delete[] noviMail;
  286.         }
  287.     }
  288.  
  289. }
  290.  
  291. //Omogućiti pretragu klijenata po imenu ili prezimenu (ispisati informacije
  292. //o svima koji sadrže uneseni tekst u dijelu imena ili prezimena.
  293. void pretragaKlijenataPoImenu(Osoba* niz[], int max){
  294.     char pretraga[100];
  295.     cout << crtice << "\t .:: KLIJENTI - Pretraga po imenu ili prezimenu ::. " << crtice;
  296.     cout << "Unesite termin za pretragu: ";
  297.     cin.getline(pretraga, 100);
  298.     cout << crtice;
  299.     Klijent * pok;
  300.     for(int i = 0; i < max; i++)
  301.     {
  302.         pok = dynamic_cast<Klijent*>(niz[i]);
  303.         if(pok != NULL) {
  304.             if(strstr(pok->getIme(), pretraga) || strstr(pok->getPrezime(), pretraga))  {
  305.                 pok->Info();
  306.                 cout << crtice;
  307.             }
  308.         }
  309.  
  310.     }
  311. }
  312.  
  313. //Omogućiti pretragu zaposlenika na osnovu radnog mjesta koje definiše korisnik.
  314. void pretragaZaposlenika(Osoba* niz[], int max)
  315. {
  316.     char pretraga[100];
  317.     cout << crtice << "\t .:: ZAPOSLENICI - Pretraga po radnom mjestu ::." << crtice;
  318.     cout << "Unesite termin za pretragu: ";
  319.     cin.getline(pretraga, 100);
  320.     cout << crtice;
  321.     Zaposlenik * pok;
  322.     for(int i = 0; i < max; i++)
  323.     {
  324.         pok = dynamic_cast<Zaposlenik*>(niz[i]);
  325.         if(pok != NULL)
  326.         {
  327.             if(strstr(pok->getRadnoMjesto(), pretraga)) {
  328.                 pok->Info();
  329.                 cout << crtice;
  330.             }
  331.  
  332.         }
  333.     }
  334.  
  335. }
  336.  
  337.  
  338. void main()
  339. {
  340.     //Testirati sve dostupne funkcionalnosti uz obaveznu provjeru globalnih funkcija
  341.     const int max = 6;
  342.     Osoba * niz[max];
  343.  
  344.     niz[0] = new Klijent("Almin", "Latovic", "Zalik bb", "062/111-111", 1, 55, "prvimail@test.ba");
  345.     niz[1] = new Klijent("Zoran", "Kuzmic", "Ferhadija bb", "061/222-222", 2, 120,"drugimail@test.ba");
  346.     niz[2] = new VIPKlijent("Igor", "Juric", "Ivana Krndelja 24", "062/333-333", 3, 80, "trecimail@test.ba", 15, "VIP-spot");
  347.     niz[3] = new Zaposlenik("Esmin", "Basic", "Ivana Krndelja bb", "061/444-444", "NSoft", 5);
  348.     niz[4] = new Klijent("Ajdin", "Delic", "Ivana Krndelja bb", "062/555-555",4, 200, "cetvrtimail@test.ba");
  349.     niz[5] = new Zaposlenik("Denis", "Music", "Ivana Krndelja bb", "061/666-666", "FIT", 10);
  350.    
  351.  
  352.     cout << crtice << "Testiranje konstruktora kopije za klasu Klijent" << crtice;
  353.     Klijent * pok = dynamic_cast<Klijent*>(niz[0]);
  354.     if(pok != NULL) {
  355.         Klijent test(*pok);
  356.         test.Info();
  357.         cout << crtice;
  358.     }
  359.     cout << " Nakon generisanja maila: ime.prezime@firma.ba " << crtice;
  360.     generisiMailAdrese(niz, max);
  361.     niz[0]->Info();
  362.  
  363.     int broj = pretragaPotrosnjeKlijenata(niz, max);
  364.     cout << "\n Brojac klijenata: " << broj << endl;
  365.     pretragaKlijenataPoImenu(niz, max);
  366.     pretragaZaposlenika(niz, max);
  367.  
  368.     for(int i = 0; i < max; i++)
  369.     {
  370.         delete niz[i];
  371.     }
  372. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement