rijads

workshop 9.1

Dec 24th, 2013
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.75 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. //U programu implementirati nasljeđivanje između odgovarajućih klasa
  4. class Osoba
  5. {
  6. protected:
  7.     char* _ime;
  8.     char* _prezime;
  9.     char* _adresa;
  10.     char _telefon[15];
  11. public:
  12.     //Potrebne konstruktor i destruktor funkcije
  13.     Osoba(char* ime=" ", char* prezime=" ", char* adresa=" ", char* telefon=" ")
  14.     {
  15.         cout<<"\ninfo::Konstruktor Osoba\n";
  16.         int vel = strlen(ime) + 1;
  17.         _ime = new char[vel];
  18.         strcpy_s(_ime, vel, ime);
  19.  
  20.         vel = strlen(prezime) + 1;
  21.         _prezime = new char[vel];
  22.         strcpy_s(_prezime, vel, prezime);
  23.  
  24.         vel = strlen(adresa) + 1;
  25.         _adresa = new char[vel];
  26.         strcpy_s(_adresa, vel, adresa);
  27.  
  28.         strcpy_s(_telefon, 15, telefon);
  29.     }
  30.  
  31.     char* GetIme() { return _ime; }
  32.     char* GetPrezime() { return _prezime; }
  33.  
  34.  
  35.     virtual ~Osoba()
  36.     {
  37.         cout<<"\ninfo::Destruktor Osoba\n";
  38.         delete[] _ime;
  39.         _ime = NULL;
  40.         delete[] _prezime;
  41.         _prezime = NULL;
  42.         delete[] _adresa;
  43.         _adresa = NULL;
  44.     }
  45.     //Klasu deklarisati kao apstraktnu
  46.     //Kreirati funkciju Info za ispis svih vrijednosti atributa klase
  47.     virtual void Info()=0;
  48.     virtual double getmjesecna(){
  49.         return 0;
  50.     }
  51.     virtual bool izmjena_mp (){
  52.     return false;
  53.     }
  54.     virtual void izmjena_mail(char* m){}
  55. };
  56.  
  57. class Klijent:public Osoba
  58. {
  59. protected:
  60.     int _id;
  61.     double _mjesecnaPotrosnja;
  62.     char* _email;
  63. public:
  64.     //Potrebne konstruktor i destruktor funkcije
  65.     Klijent(char* ime=" ", char* prezime=" ", char* adresa=" ", char* telefon=" ", int id=0, double mp=0, char* email="[email protected]"):Osoba(ime,prezime,adresa,telefon){
  66.         cout<<"\ninfo::Konstruktor Klijent\n";
  67.         _id=id;
  68.         _mjesecnaPotrosnja=mp;
  69.         _email=new char [strlen(email)+1];
  70.         strcpy_s(_email,strlen(email)+1, email);
  71.     }
  72.     ~Klijent(){
  73.         cout<<"\ninfo::Destruktor Klijent\n";
  74.         delete []_email;
  75.         _email=NULL;
  76.     }
  77.     //Preklopiti operator > koji će porediti klijenta sa zadatom potrošnjom i
  78.     //vratiti true u slučaju da je klijent imao veću mjesečnu potrošnju.
  79.     //Implementirati kao friend funkciju
  80.    
  81.     friend bool operator>(Osoba &l, double zadato){
  82.         if(l.getmjesecna()>zadato)
  83.             return true;
  84.         else
  85.             return false;
  86.     }
  87.     //Kreirati funkciju za izmjenu mail adrese
  88.     void izmjena_mail(char* m){
  89.         delete []_email;
  90.         _email=new char[strlen(m)+1];
  91.         strcpy_s(_email, strlen(m)+1,m);
  92.     }
  93.     double getmjesecna(){
  94.         return _mjesecnaPotrosnja;
  95.     }
  96.     void setmjesecna(double mj){
  97.         _mjesecnaPotrosnja=mj;
  98.     }
  99.     void Info()
  100.     {
  101.         cout<<endl<<"====================================="<<endl;
  102.         cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
  103.         cout << "Adresa: " << _adresa<<endl;
  104.         cout << "Telefon: " << _telefon<<endl;
  105.         cout << "ID: "<<_id<<endl;
  106.         cout << "Mjesecna potrosnja: "<<_mjesecnaPotrosnja<<endl;
  107.         cout << "Email: "<<_email<< endl;
  108.         cout<<endl<<"====================================="<<endl;
  109.     }
  110. };
  111.  
  112. class Zaposlenik:public Osoba
  113. {
  114.     char _radnoMjesto[30];
  115.     int _godineStaza;
  116. public:
  117.     //Potrebne konstruktor i destruktor funkcije
  118.     Zaposlenik(char* ime, char* prezime, char* adresa, char* telefon, char *rm, int gs):Osoba(ime,prezime,adresa,telefon){
  119.     cout<<"\ninfo::Konstruktor Zaposlenik\n";
  120.     strcpy_s(_radnoMjesto,30,rm);
  121.     _godineStaza=gs;
  122.     }
  123.     void Info()
  124.     {
  125.         cout<<endl<<"====================================="<<endl;
  126.         cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
  127.         cout << "Adresa: " << _adresa<<endl;
  128.         cout << "Telefon: " << _telefon<<endl;
  129.         cout << "Radno mjesto: "<<_radnoMjesto<<endl;
  130.         cout << "Godine staza: "<<_godineStaza<<endl;
  131.         cout<<endl<<"====================================="<<endl;
  132.     }
  133.     //nije potrebno praviti destruktor za ovu podklasu
  134. };
  135.  
  136. class VIPKlijent:public Klijent
  137. {
  138.     double _popust;
  139.     char* _parkingOznaka;
  140. public:
  141.     //Potrebne konstruktor i destruktor funkcije
  142.     VIPKlijent(char* ime, char* prezime, char* adresa, char* telefon,int id, double mp,char*email, double p, char* po):Klijent(ime,prezime,adresa,telefon,id, mp, email){
  143.         cout<<"\ninfo::Konstruktor VIPKlijent\n";
  144.         _popust=p;
  145.         _parkingOznaka=new char [strlen(po)+1];
  146.         strcpy_s(_parkingOznaka,strlen(po)+1, po);
  147.     }
  148.     ~VIPKlijent(){
  149.         cout<<"\ninfo::Destruktor VIPKlijent\n";
  150.         delete[]_parkingOznaka;
  151.     }
  152.     //Funkciju koja treba da izmijeni vrijednost mjesečne potrošnje na način da se
  153.     //uračuna popust (prosječna potrošnja treba da se umanji)
  154.     bool izmjena_mp (){
  155.         double temp=getmjesecna()-getmjesecna()*(_popust/100);
  156.         setmjesecna(temp);
  157.         return true;
  158.     }
  159.     //Funkciju za ispis svih vrijednosti atributa klase
  160.     void Info()
  161.     {
  162.         cout<<endl<<"====================================="<<endl;
  163.         cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
  164.         cout << "Adresa: " << _adresa<<endl;
  165.         cout << "Telefon: " << _telefon<<endl;
  166.         cout << "ID: "<<_id<<endl;
  167.         cout << "Mjesecna potrosnja: "<<_mjesecnaPotrosnja<<endl;
  168.         cout << "Email: "<<_email<< endl;
  169.         cout << "Popust: "<<_popust<<"%"<<endl;
  170.         cout << "Parking oznaka: "<<_parkingOznaka<<endl;
  171.         cout<<endl<<"====================================="<<endl;
  172.     }
  173. };
  174.  
  175. //Funkcija treba da pronađe sve one klijente koji su ostvarili mjesečnu potrošnju veće
  176. //od zadate. Ispisati podatke i vratiti ukupan broj pronađenih klijenata
  177.  
  178. double z=100;//Globalna varijabla jer zadata funkcija pretragaPotrosnje ne prima parametar za usporedbu
  179. int pretragaPotrosnje(Osoba* niz[], int max){
  180.     int brojac=0;
  181.     for (int i=0;i<max;i++){
  182.         if(niz[i]->getmjesecna()>z){
  183.             niz[i]->Info();
  184.             brojac++;
  185.         }
  186.     }
  187.     return brojac;
  188. }
  189.  
  190. //Pronaći sve VIP klijente, te im zaračunati popust na kupljene artikle i ispisati
  191. //informacije o onima koji su ostvarili potrošnju preko 50 KM mjesečno
  192. void pretragaVIPKlijenata(Osoba* niz[], int max){
  193.     for (int i=0;i<max;i++){
  194.         if(niz[i]->izmjena_mp())
  195.             cout;
  196.         if(niz[i]->getmjesecna()>50)
  197.             niz[i]->Info();
  198.     }
  199. }
  200. //Svim klijentima postaviti mail adresu u formatu: [email protected]
  201. //Ime i prezime zamijeniti sa stvarnim vrijednostima.
  202. void generisiMailAdrese(Osoba* niz[], int max){
  203.     for (int i=0;i<max;i++){
  204.         char *email;
  205.         email=new char[strlen(niz[i]->GetIme())+strlen(niz[i]->GetPrezime())+11];
  206.         strcpy(email,niz[i]->GetIme());
  207.         strcat(email,".");
  208.         strcat(email,niz[i]->GetPrezime());
  209.         strcat(email,"@firma.ba\0");
  210.         cout<<"test:"<<email;
  211.         (*niz[i]).izmjena_mail(email);
  212.     }
  213.     cout<<"\nNove adrese uspjesno generisane";
  214. }
  215.  
  216.  
  217. //Omogućiti pretragu klijenata po imenu ili prezimenu (ispisati informacije
  218. //o svima koji sadrže uneseni tekst u dijelu imena ili prezimena
  219. char* ab="test";//Koristim globalnu jer u postavljenoj funkciji pretragaPoImenu nema parametra za pretrazivanje
  220. void pretragaPoImenu(Osoba* niz[], int max){
  221.     for (int i=0;i<max;i++){
  222.         if ((strcmp(ab,niz[i]->GetIme())==0)||(strcmp(ab,niz[i]->GetPrezime())==0))
  223.             niz[i]->Info();
  224.     }
  225. }
  226.  
  227. void main()
  228. {
  229.     Zaposlenik zap("Mike","Smith","Avalone st.","800-666-626","Desk 03",3);
  230.     VIPKlijent vip("Roxanne","Copperfield","Downtown st.","800-333-313",1,150,"[email protected]",15,"PO-175");
  231.     VIPKlijent vip2("Smooth","test","Downtown st. 3","800-555-313",2,90,"[email protected]",5,"PO-174");
  232.     cout<<"Testiranje svih klasa i njenih konstruktora:\n";
  233.     zap.Info();
  234.     vip.Info();
  235.     vip2.Info();
  236.     Osoba *pok[3];
  237.     pok[0]=new Zaposlenik(zap);
  238.     pok[1]=new VIPKlijent(vip);
  239.     pok[2]=new VIPKlijent(vip2);
  240.     cout<<endl<<"Testiranje globalnih funkcija"<<endl<<endl;
  241.     cout<<"Klijenti koji su ostvarili vecu potrosnju od: "<<z<<" su:";
  242.     cout<<"i ima ih: "<<pretragaPotrosnje(pok,3);
  243.     cout<<endl<<endl<<"Ispis VIP klijenata nakon izracunatog popusta, koji su potrosili preko 50:"<<endl;
  244.     pretragaVIPKlijenata(pok,3);
  245.     cout<<endl<<endl<<"Svi klijenti koji sadrze "<<ab<<" u imenu ili prezimenu: "<<endl;
  246.     pretragaPoImenu(pok,3);
  247.     cout<<endl<<endl<<"Postavljanje mail adresa u formatu [email protected]"<<endl;
  248.     //generisiMailAdrese(pok,3);
  249.     vip.Info();
  250.     vip2.Info();
  251. }
Advertisement
Add Comment
Please, Sign In to add comment