Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- char * crtice = "\n===========================================================\n";
- //U programu implementirati nasljeđivanje između odgovarajućih klasa
- //Klasu deklarisati kao apstraktnu
- class Osoba
- {
- protected:
- char* _ime;
- char* _prezime;
- char* _adresa;
- char _telefon[15];
- public:
- //Potrebne konstruktor i destruktor funkcije
- Osoba(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---")
- {
- int vel = strlen(ime) + 1;
- _ime = new char[vel];
- strcpy_s(_ime, vel, ime);
- vel = strlen(prezime) + 1;
- _prezime = new char[vel];
- strcpy_s(_prezime, vel, prezime);
- vel = strlen(adresa) + 1;
- _adresa = new char[vel];
- strcpy_s(_adresa, vel, adresa);
- strcpy_s(_telefon, 15, telefon);
- }
- Osoba(const Osoba & original)
- {
- int vel = strlen(original._ime) + 1;
- _ime = new char[vel];
- strcpy_s(_ime, vel, original._ime);
- vel = strlen(original._prezime) + 1;
- _prezime = new char[vel];
- strcpy_s(_prezime, vel, original._prezime);
- vel = strlen(original._adresa) + 1;
- _adresa = new char[vel];
- strcpy_s(_adresa, vel, original._adresa);
- strcpy_s(_telefon, 15, original._telefon);
- }
- virtual ~Osoba()
- {
- delete[] _ime;
- _ime = NULL;
- delete[] _prezime;
- _prezime = NULL;
- delete[] _adresa;
- _adresa = NULL;
- }
- //Kreirati funkciju Info za ispis svih vrijednosti atributa klase
- virtual void Info() = 0
- {
- cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
- cout << "Adresa: " << _adresa << endl;
- cout << "Telefon: " << _telefon << endl;
- }
- };
- class Klijent : public Osoba
- {
- protected:
- int _id;
- double _mjesecnaPotrosnja;
- char* _email;
- public:
- //Potrebne konstruktor i destruktor funkcije
- Klijent(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---", int id = 0, double mjesecnaPotrosnja = 0, char * email = "---")
- : Osoba(ime, prezime, adresa, telefon)
- {
- _id = id;
- _mjesecnaPotrosnja = mjesecnaPotrosnja;
- int vel = strlen(email) + 1;
- _email = new char[vel];
- strcpy_s(_email, vel, email);
- }
- Klijent(const Klijent& original) : Osoba(original)
- {
- _id = original._id;
- _mjesecnaPotrosnja = original._mjesecnaPotrosnja;
- int vel = strlen(original._email) + 1;
- _email = new char[vel];
- strcpy_s(_email, vel, original._email);
- }
- char * getIme() { return _ime; }
- char * getPrezime() { return _prezime; }
- ~Klijent()
- {
- delete[] _email;
- _email = NULL;
- }
- //Preklopiti operator > koji će porediti klijenta sa zadatom potrošnjom i
- //vratiti true u slučaju da je klijent imao veću mjesečnu potrošnju.
- //Implementirati kao friend funkciju.
- friend bool operator> (Klijent & obj, double mjesecnaPotrosnja);
- //Kreirati funkciju za izmjenu mail adrese.
- void promijeniMail(char * noviEmail)
- {
- delete[] _email;
- int vel = strlen(noviEmail) + 1;
- _email = new char[vel];
- strcpy_s(_email, vel, noviEmail);
- }
- void Info()
- {
- Osoba::Info();
- cout << "ID: " << _id << endl;
- cout << "Mjesecna potrosnja: " << _mjesecnaPotrosnja << " KM" << endl;
- cout << "Email adresa: " << _email << endl;
- }
- };
- bool operator> (Klijent& obj, double mjesecnaPotrosnja)
- {
- if(obj._mjesecnaPotrosnja > mjesecnaPotrosnja)
- return true;
- return false;
- }
- class Zaposlenik : public Osoba
- {
- char _radnoMjesto[30];
- int _godineStaza;
- public:
- //Potrebne konstruktor i destruktor funkcije
- Zaposlenik(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---", char * radnoMjesto = "---", int godineStaza = 0)
- : Osoba(ime, prezime, adresa, telefon)
- {
- strcpy_s(_radnoMjesto, 30, radnoMjesto);
- _godineStaza = godineStaza;
- }
- Zaposlenik(const Zaposlenik & original) : Osoba(original)
- {
- strcpy_s(_radnoMjesto, 30, original._radnoMjesto);
- _godineStaza = original._godineStaza;
- }
- char * getRadnoMjesto() { return _radnoMjesto; }
- void Info()
- {
- Osoba::Info();
- cout << "Radno mjesto: " << _radnoMjesto << endl;
- cout << "Godine staza: " << _godineStaza << endl;
- }
- };
- class VIPKlijent : public Klijent
- {
- double _popust;
- char* _parkingOznaka;
- public:
- //Potrebne konstruktor i destruktor funkcije
- VIPKlijent(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---", int id = -1, double mjesecnaPotrosnja = -1, char * email = "---", double popust = -1, char * parkingOznaka = "---") :
- Klijent(ime, prezime, adresa, telefon, id, mjesecnaPotrosnja, email)
- {
- _popust = popust;
- int vel = strlen(parkingOznaka) + 1;
- _parkingOznaka = new char[vel];
- strcpy_s(_parkingOznaka, vel, parkingOznaka);
- }
- VIPKlijent(const VIPKlijent& original) : Klijent(original)
- {
- _popust = original._popust;
- int vel = strlen(original._parkingOznaka) + 1;
- _parkingOznaka = new char[vel];
- strcpy_s(_parkingOznaka, vel, original._parkingOznaka);
- }
- ~VIPKlijent()
- {
- delete[] _parkingOznaka;
- _parkingOznaka = NULL;
- }
- double getMjesecnaPotrosnja() { return _mjesecnaPotrosnja; }
- //Funkciju koja treba da izmijeni vrijednost mjesečne potrošnje na način da se
- //uračuna popust (prosječna potrošnja treba da se umanji)
- void uracunajPopust()
- {
- _mjesecnaPotrosnja = _mjesecnaPotrosnja - (_mjesecnaPotrosnja * _popust);
- }
- //Funkciju za ispis svih vrijednosti atributa klase
- void Info()
- {
- Klijent::Info();
- cout << "Popust: " << _popust << endl;
- cout << "Parking oznaka: " << _parkingOznaka <<endl;
- }
- };
- //Funkcija treba da pronađe sve one klijente koji su ostvarili mjesečnu potrošnju veće
- //od zadate. Ispisati podatke i vratiti ukupan broj pronađenih klijenata.
- int pretragaPotrosnjeKlijenata(Osoba* niz[], int max)
- {
- int brojac = 0;
- double potrosnja = 0;
- cout << crtice << "\t .:: KLIJENTI - Pretraga po potrosnji ::." << crtice;
- cout << "Unesite potrosnju: ";
- cin >> potrosnja;
- cin.ignore();
- cout << crtice;
- Klijent * pok;
- for(int i = 0; i < max; i++)
- {
- pok = dynamic_cast<Klijent*>(niz[i]);
- if(pok != NULL) {
- if(*pok > potrosnja) {
- pok->Info();
- cout << crtice;
- brojac++;
- }
- }
- }
- return brojac;
- }
- //Pronaći sve VIP klijente, te im zaračunati popust na kupljene artikle i ispisati
- //informacije o onima koji su ostvarili potrošnju veću od 50 KM mjesečno.
- void pretragaVIPKlijenata(Osoba* niz[], int max)
- {
- cout << crtice << "\t .:: Klijenti cija je potrosnja veca od 50 KM ::." << crtice;
- VIPKlijent * pok;
- for(int i = 0; i < max; i++)
- {
- pok = dynamic_cast<VIPKlijent*>(niz[i]);
- if(pok != NULL) {
- pok->uracunajPopust();
- if(pok->getMjesecnaPotrosnja() > 50) {
- pok->Info();
- cout << crtice;
- }
- }
- }
- }
- //Svim klijentima postaviti mail adresu u formatu: ime.prezime@firma.ba.
- void generisiMailAdrese(Osoba* niz[], int max)
- {
- Klijent * pok;
- char * noviMail;
- for(int i = 0; i < max; i++)
- {
- pok = dynamic_cast<Klijent *>(niz[i]);
- if(pok != NULL)
- {
- int vel = strlen(pok->getIme()) + strlen(pok->getPrezime()) + strlen("@firma.ba") + 2;
- noviMail = new char[vel];
- strcpy_s(noviMail, vel, pok->getIme());
- strcat(noviMail, ".");
- strcat(noviMail, pok->getPrezime());
- strcat(noviMail, "@firma.ba");
- pok->promijeniMail(noviMail);
- delete[] noviMail;
- }
- }
- }
- //Omogućiti pretragu klijenata po imenu ili prezimenu (ispisati informacije
- //o svima koji sadrže uneseni tekst u dijelu imena ili prezimena.
- void pretragaKlijenataPoImenu(Osoba* niz[], int max){
- char pretraga[100];
- cout << crtice << "\t .:: KLIJENTI - Pretraga po imenu ili prezimenu ::. " << crtice;
- cout << "Unesite termin za pretragu: ";
- cin.getline(pretraga, 100);
- cout << crtice;
- Klijent * pok;
- for(int i = 0; i < max; i++)
- {
- pok = dynamic_cast<Klijent*>(niz[i]);
- if(pok != NULL) {
- if(strstr(pok->getIme(), pretraga) || strstr(pok->getPrezime(), pretraga)) {
- pok->Info();
- cout << crtice;
- }
- }
- }
- }
- //Omogućiti pretragu zaposlenika na osnovu radnog mjesta koje definiše korisnik.
- void pretragaZaposlenika(Osoba* niz[], int max)
- {
- char pretraga[100];
- cout << crtice << "\t .:: ZAPOSLENICI - Pretraga po radnom mjestu ::." << crtice;
- cout << "Unesite termin za pretragu: ";
- cin.getline(pretraga, 100);
- cout << crtice;
- Zaposlenik * pok;
- for(int i = 0; i < max; i++)
- {
- pok = dynamic_cast<Zaposlenik*>(niz[i]);
- if(pok != NULL)
- {
- if(strstr(pok->getRadnoMjesto(), pretraga)) {
- pok->Info();
- cout << crtice;
- }
- }
- }
- }
- void main()
- {
- //Testirati sve dostupne funkcionalnosti uz obaveznu provjeru globalnih funkcija
- const int max = 6;
- Osoba * niz[max];
- niz[0] = new Klijent("Almin", "Latovic", "Zalik bb", "062/111-111", 1, 55, "prvimail@test.ba");
- niz[1] = new Klijent("Zoran", "Kuzmic", "Ferhadija bb", "061/222-222", 2, 120,"drugimail@test.ba");
- niz[2] = new VIPKlijent("Igor", "Juric", "Ivana Krndelja 24", "062/333-333", 3, 80, "trecimail@test.ba", 15, "VIP-spot");
- niz[3] = new Zaposlenik("Esmin", "Basic", "Ivana Krndelja bb", "061/444-444", "NSoft", 5);
- niz[4] = new Klijent("Ajdin", "Delic", "Ivana Krndelja bb", "062/555-555",4, 200, "cetvrtimail@test.ba");
- niz[5] = new Zaposlenik("Denis", "Music", "Ivana Krndelja bb", "061/666-666", "FIT", 10);
- cout << crtice << "Testiranje konstruktora kopije za klasu Klijent" << crtice;
- Klijent * pok = dynamic_cast<Klijent*>(niz[0]);
- if(pok != NULL) {
- Klijent test(*pok);
- test.Info();
- cout << crtice;
- }
- cout << " Nakon generisanja maila: ime.prezime@firma.ba " << crtice;
- generisiMailAdrese(niz, max);
- niz[0]->Info();
- int broj = pretragaPotrosnjeKlijenata(niz, max);
- cout << "\n Brojac klijenata: " << broj << endl;
- pretragaKlijenataPoImenu(niz, max);
- pretragaZaposlenika(niz, max);
- for(int i = 0; i < max; i++)
- {
- delete niz[i];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement