Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #define _CRT_SECURE_NO_WARNINGS
- using namespace std;
- //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(Osoba & org){
- _ime = new char[strlen(org._ime) + 1];
- strcpy_s(_ime, strlen(org._ime) + 1, org._ime);
- _prezime = new char[strlen(org._prezime) + 1];
- strcpy_s(_prezime, strlen(org._prezime) + 1, org._prezime);
- _adresa = new char[strlen(org._adresa) + 1];
- strcpy_s(_adresa, strlen(org._adresa) + 1, org._adresa);
- strcpy_s(_telefon, 15, org._telefon);
- }
- Osoba & operator = (Osoba & org){
- if (this == &org)
- return *this;
- delete[]_ime;
- delete[]_prezime;
- delete[]_adresa;
- _ime = new char[strlen(org._ime) + 1];
- strcpy_s(_ime, strlen(org._ime) + 1, org._ime);
- _prezime = new char[strlen(org._prezime) + 1];
- strcpy_s(_prezime, strlen(org._prezime) + 1, org._prezime);
- _adresa = new char[strlen(org._adresa) + 1];
- strcpy_s(_adresa, strlen(org._adresa) + 1, org._adresa);
- strcpy_s(_telefon, strlen(_telefon), org._telefon);
- return *this;
- }
- 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()
- {
- 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 primanja = 0, char * mail = "---") :Osoba(ime, prezime, adresa, telefon)
- {
- _id = ID;
- _mjesecnaPotrosnja = primanja;
- _email = new char[strlen(mail) + 1];
- strcpy_s(_email, strlen(mail) + 1, mail);
- }
- ~Klijent(){
- delete[]_email;
- }
- Klijent(Klijent & org) : Osoba(org){
- _id = org._id;
- _mjesecnaPotrosnja = org._mjesecnaPotrosnja;
- _email = new char[strlen(org._email) + 1];
- strcpy_s(_email, strlen(org._email) + 1, org._email);
- }
- Klijent& operator = (Klijent & org){
- if (this == &org)
- return *this;
- Osoba::operator=(org);
- _id = org._id;
- _mjesecnaPotrosnja = org._mjesecnaPotrosnja;
- _email = new char[strlen(org._email) + 1];
- strcpy_s(_email, strlen(org._email) + 1, org._email);
- return *this;
- }
- //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 vrijednost){
- return obj._mjesecnaPotrosnja>vrijednost;
- }
- char*getmail(){
- return _email;
- }
- char * getIme(){
- return _ime;
- }
- char * getprezIme(){
- return _prezime;
- }
- void ZamjeniMAil(char* tekst){
- if (_email != nullptr)
- delete[]_email;
- _email = new char[strlen(tekst) + 1];
- strcpy_s(_email, strlen(tekst) + 1, tekst);
- }
- //Kreirati funkciju za izmjenu mail adrese.
- void Info(){
- cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
- cout << "Adresa: " << _adresa << endl;
- cout << "Telefon: " << _telefon << endl;
- cout << "id: " << _id << endl;
- cout << "Mjesecna potrosnja: " << _mjesecnaPotrosnja << endl;
- cout << "email: " << _email << endl;
- }
- };
- class Zaposlenik :public Osoba
- {
- char _radnoMjesto[30];
- int _godineStaza;
- public:
- Zaposlenik(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---", char*mjesto = "---", int god = 0)
- :Osoba(ime, prezime, adresa, telefon){
- strcpy_s(_radnoMjesto, 30, mjesto);
- _godineStaza = god;
- }
- char * getRadnoMjesto(){
- return _radnoMjesto;
- }
- void Info(){
- cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
- cout << "Adresa: " << _adresa << endl;
- cout << "Telefon: " << _telefon << endl;
- cout << "radno mjesto: " << _radnoMjesto << endl;
- cout << "_godineStaza: " << _godineStaza << endl;
- }
- Zaposlenik(Zaposlenik & obj) :Osoba(obj){
- strcpy_s(_radnoMjesto, 30, obj._radnoMjesto);
- _godineStaza = obj._godineStaza;
- }
- Zaposlenik & operator= (Zaposlenik & obj){
- Osoba::operator=(obj);
- strcpy_s(_radnoMjesto, 30, obj._radnoMjesto);
- _godineStaza = obj._godineStaza;
- }
- //Potrebne konstruktor i destruktor funkcije
- };
- class VIPKlijent :public Klijent
- {
- double _popust;
- char* _parkingOznaka;
- public:
- VIPKlijent(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---", int ID = 0, double primanja = 0, char * mail = "---", double popust = 0, char *ozn = "_--")
- :Klijent(ime, prezime, adresa, telefon, ID, primanja, mail){
- _popust = popust;
- _parkingOznaka = new char[strlen(ozn) + 1];
- strcpy_s(_parkingOznaka, strlen(ozn) + 1, ozn);
- }
- //Potrebne konstruktor i destruktor funkcije
- ~VIPKlijent(){
- delete[]_parkingOznaka;
- }
- VIPKlijent(VIPKlijent & obj) :Klijent(obj){
- _popust = obj._popust;
- _parkingOznaka = new char[strlen(obj._parkingOznaka) + 1];
- strcpy_s(_parkingOznaka, strlen(obj._parkingOznaka), obj._parkingOznaka);
- }
- int getMjesecna(){
- return _mjesecnaPotrosnja;
- }
- VIPKlijent & operator =(VIPKlijent & obj){
- if (this == &obj)
- return *this;
- Klijent::operator=(obj);
- delete[]_parkingOznaka;
- _popust = obj._popust;
- _parkingOznaka = new char[strlen(obj._parkingOznaka) + 1];
- strcpy_s(_parkingOznaka, strlen(obj._parkingOznaka), obj._parkingOznaka);
- }
- //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 PromjeniPotrosnju(){
- _mjesecnaPotrosnja -= _popust;
- }
- void Info(){
- cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
- cout << "Adresa: " << _adresa << endl;
- cout << "Telefon: " << _telefon << endl;
- cout << "id: " << _id << endl;
- cout << "Mjesecna potrosnja: " << _mjesecnaPotrosnja << endl;
- cout << "email: " << _email << endl;
- cout << "parking mjesto: " << _parkingOznaka << endl;
- cout << "popust: " << _popust << endl;
- }
- //Funkciju za ispis svih vrijednosti atributa klase
- };
- //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, double potrosnja){
- int brojac = 0;
- for (int i = 0; i < max; i++)
- {
- Klijent * pok = dynamic_cast<Klijent*>(niz[i]);
- if (pok != nullptr){
- if ((*pok)>potrosnja)
- {
- brojac++;
- pok->Info();
- }
- }
- }
- 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){
- for (int i = 0; i < max; i++)
- {
- VIPKlijent * pok = dynamic_cast<VIPKlijent*>(niz[i]);
- if (pok != nullptr){
- pok->PromjeniPotrosnju();
- if (pok->getMjesecna()>50)
- {
- pok->Info();
- }
- }
- }
- }
- //Svim klijentima postaviti mail adresu u formatu: ime.prezime@firma.ba.
- void generisiMailAdrese(Osoba* niz[], int max){
- for (int i = 0; i < max; i++)
- {
- Klijent * pok = dynamic_cast<Klijent*>(niz[i]);
- if (pok != nullptr){
- int size = strlen(pok->getIme()) + strlen(".")+strlen(pok->getprezIme()) + strlen("@firma.ba") + 1;
- char*temp = new char[size];
- strcpy_s(temp,size, pok->getIme());
- strcat_s(temp, size, ".");
- strcat_s(temp, size, pok->getprezIme());
- strcat_s(temp, size, "@firma.ba");
- pok->ZamjeniMAil(temp);
- cout << "novi mail: " << pok->getmail();
- }
- }
- }
- //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){
- for (int i = 0; i < max; i++)
- {
- Klijent * pok = dynamic_cast<Klijent*>(niz[i]);
- if (pok != nullptr){
- char tekst[10];
- cout << "unesi tekst: " << endl;
- cin >> tekst;
- if (((strstr(pok->getIme(), tekst)) != nullptr) || ((strstr(pok->getprezIme(), tekst)) != nullptr))
- pok->Info();
- }
- }
- }
- //Omogućiti pretragu zaposlenika na osnovu radnog mjesta koje definiše korisnik.
- void pretragaZaposlenika(Osoba* niz[], int max){
- for (int i = 0; i < max; i++)
- {
- Zaposlenik * pok = dynamic_cast<Zaposlenik*>(niz[i]);
- if (pok != nullptr){
- char tekst[10];
- cout << "unesi radno mjesto";
- cin >> tekst;
- if (strcmp(pok->getRadnoMjesto(), tekst) == 0)
- pok->Info();
- }
- }
- }
- void main()
- {
- //Testirati sve dostupne funkcionalnosti uz obaveznu provjeru globalnih funkcija
- Osoba *niz[5];
- int izbor;
- for (int i = 0; i<5; i++){
- cout << "1. - Klijent, 2. - Zaposlenik, 3. - VIPKlijent" << endl;
- cin >> izbor;
- if (izbor == 1)
- niz[i] = new Klijent("Haris", "Hercegovac", "Vitez", "061804853", i, 100.00, "hasim@mail.com");
- if (izbor == 2)
- niz[i] = new Zaposlenik("Nihad", "tahunic", "vitez", "061804853", "programer", 10);
- if (izbor == 3)
- niz[i] = new VIPKlijent("Marija", "Herceg", "Mostar", "06214242", i, 40.00, "mar@mail.com", 30.00, "P");
- }
- for (int i = 0; i<5; i++){
- niz[i]->Info();
- }
- cout << "nakon poziva funkcije: \n\n\n\n\n";
- generisiMailAdrese(niz, 5);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement