rijads

Workshop9

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