Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- char crt[] = { "--------------------------------------------\n" };
- class Osoba{
- protected:
- char* _ime;
- char* _prezime;
- char* _adresa;
- char _telefon[15];
- public:
- 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 & obj){
- int vel = strlen(obj._ime) + 1;
- _ime = new char[vel];
- strcpy_s(_ime, vel, obj._ime);
- vel = strlen(obj._prezime) + 1;
- _prezime = new char[vel];
- strcpy_s(_prezime, vel, obj._prezime);
- vel = strlen(obj._adresa) + 1;
- _adresa = new char[vel];
- strcpy_s(_adresa, vel, obj._adresa);
- strcpy_s(_telefon, 15, obj._telefon);
- }
- virtual ~Osoba()
- {
- delete[] _ime;
- _ime = NULL;
- delete[] _prezime;
- _prezime = NULL;
- delete[] _adresa;
- _adresa = NULL;
- }
- // virtualna funkcija, sada je klasa osoba abstract
- virtual void info() = 0;
- char * getIme()const {
- return _ime;
- }
- char * getPrezime()const{
- return _prezime;
- }
- };
- //////////////////////////////////////////////////////////////////////////////////////////
- class Klijent:public Osoba{
- protected:
- int _id;
- double _mjesecnaPotrosnja;
- char* _email;
- public:
- Klijent(char* ime, char* prezime, char* adresa, char* telefon, int id, double mjesecnaPotrosnja, 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(Klijent & obj) :Osoba(obj){
- _id = obj._id;
- _mjesecnaPotrosnja = obj._mjesecnaPotrosnja;
- int vel = strlen(obj._email) + 1;
- _email = new char[vel];
- strcpy_s(_email, vel, obj._email);
- }
- virtual ~Klijent(){
- delete[]_email;
- _email = nullptr;
- };
- ////////////////////////////////////////////////////////////////////////////////////
- // preklopljeni operatori
- ////////////////////////////////////////////////////////////////////////////////////
- friend ostream & operator << (ostream & cout, Klijent & obj);
- friend bool operator > (const Klijent & a, const Klijent & b);
- ////////////////////////////////////////////////////////////////////////////////////
- void izmjeniMail(char * email){
- delete[] _email;
- int vel = strlen(email) + 1;
- _email = new char[vel];
- strcpy_s(_email, vel, email);
- }
- virtual void info(){
- cout << crt << "\tKLIJENT" << endl << crt;
- 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 << "e-mail: " << _email << endl;
- }
- bool uporediPotrosnju(double potrosnja){
- if (this->_mjesecnaPotrosnja > potrosnja)
- return true;
- return false;
- }
- };
- bool operator > (const Klijent & a, const Klijent & b){
- //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.
- if (&a == &b) return false;
- if (a._mjesecnaPotrosnja > b._mjesecnaPotrosnja) return true;
- return false;
- }
- ostream & operator << (ostream & cout, Klijent & obj){
- // ne koristim ovaj operator imam info funkcije
- cout << "Ime i prezime: " << obj._ime << " " << obj._prezime << endl;
- cout << "Adresa: " << obj._adresa << endl;
- cout << "Telefon: " << obj._telefon << endl;
- cout << "ID: " << obj._id << endl;
- cout << "Mjesecna potrosnja: " << obj._mjesecnaPotrosnja << endl;
- cout << "e-mail: " << obj._email << endl;
- return cout;
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- class Zaposlenik: public Osoba {
- char _radnoMjesto[30];
- int _godineStaza;
- public:
- Zaposlenik(char* ime, char* prezime, char* adresa, char* telefon, char *radnoMjesto, int godineStaza) :Osoba(ime, prezime, adresa, telefon){
- strcpy_s(_radnoMjesto, 30, radnoMjesto);
- _godineStaza = godineStaza;
- }
- ~Zaposlenik(){
- // ne treba nam destruktor
- }
- void info(){
- cout << crt << "\tZAPOSLENIK" << endl << crt;
- cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
- cout << "Adresa: " << _adresa << endl;
- cout << "Telefon: " << _telefon << endl;
- cout << "Radno mjesto: " << _radnoMjesto << endl;
- cout << "Godine staza: " << _godineStaza << endl;
- }
- char * getRadnoMjesto(){
- return _radnoMjesto;
- }
- };
- //////////////////////////////////////////////////////////////////////////////////////////
- class VIPKlijent : public Klijent {
- double _popust;
- char* _parkingOznaka;
- public:
- VIPKlijent(char* ime, char* prezime, char* adresa, char* telefon, int id, double mjesecnaPotrosnja, char * email,double popust, 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(VIPKlijent & obj):Klijent(obj){
- _popust = obj._popust;
- int vel = strlen(obj._parkingOznaka) + 1;
- _parkingOznaka = new char[vel];
- strcpy_s(_parkingOznaka, vel, obj._parkingOznaka);
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- void izmjeniMjesecnu(){
- //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)
- _mjesecnaPotrosnja -= _popust;
- }
- void info(){
- cout << crt << "\tVIP KLIJENT" << endl << crt;
- 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 << "e-mail: " << _email << endl;
- cout << "Popust: " << _popust << endl;
- cout << "Parking oznaka: " << _parkingOznaka << endl;
- }
- };
- //////////////////////////////////////////////////////////////////////////////////////////
- int pretragaPotrosnjeKlijenata(Osoba* niz[], int max){
- //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 sumKlijenata = 0;
- double iznos = 0;
- cout << "Unesite iznos mjesecne potrosnje za koji zelite izvrstiti pretragu: " << endl;
- cin >> iznos;
- Klijent * pok = NULL;
- for (int i = 0; i < max; i++){
- pok = (dynamic_cast<Klijent*>(niz[i])); // castira pokazivac niz[i] na klijenta
- if (pok != NULL){ // ako je element Klijent
- if (pok->uporediPotrosnju(iznos)){ // upoređuje potrosnju i potrosnju koju je korisnik unio
- sumKlijenata++; // dodaje 1
- pok->info(); // ispisuje podatke
- }
- }
- }
- return sumKlijenata;
- }
- void pretragaVIPKlijenata(Osoba* niz[], int max){
- //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.
- VIPKlijent * pok = NULL;
- for (int i = 0; i < max; i++){
- pok = dynamic_cast<VIPKlijent*>(niz[i]);
- if (pok != NULL){
- pok->izmjeniMjesecnu(); // uracunavamo popust
- if (pok->uporediPotrosnju(50)){ // poredimo potrosnju, funkcija vraca true ako je vece od argumenta(50)
- pok->info(); // ispis
- }
- }
- }
- }
- void generisiMailAdrese(Osoba* niz[], int max){
- //Svim klijentima postaviti mail adresu u formatu: ime.prezime@firma.ba
- Klijent * pok = NULL;
- for (int i = 0; i < max; i++){
- pok = dynamic_cast<Klijent *> (niz[i]);
- if (pok != NULL){
- char * ime = pok->getIme();
- char * prezime = pok->getPrezime();
- // mjerimo i alociramo
- int vel = strlen(ime) + strlen(prezime) + 1 + 10; // null terminirajući + .@firma.ba
- char * temp = new char[vel];
- strncpy_s(temp,vel, ime, strlen(ime)); // kopira ime
- strncat_s(temp, vel, ".", 1); // dodaje .
- strncat_s(temp, vel, prezime, strlen(prezime)); // dodaje prezime
- strncat_s(temp, vel, "@firma.ba", 10); // dodaje @firma.ba
- //strncat_s(temp, vel, '\0', 1); // dodaje null terminating
- pok->izmjeniMail(temp);
- }
- }
- }
- void pretragaKlijenataPoImenu(Osoba* niz[], int max){
- //Omogućiti pretragu klijenata po imenu ili prezimenu (ispisati informacije
- //o svima koji sadrže uneseni tekst u dijelu imena ili prezimena.
- bool pronadjen = false;
- char * tempIme = new char[250];
- char * tempPrezime = new char[250];
- cout <<crt<< "Unesite ime klijenta: ";
- cin >> tempIme;
- cout << "Unesite prezime klijenta: ";
- cin >> tempPrezime;
- Klijent * pok = NULL;
- for (int i = 0; i < max; i++){
- pok = dynamic_cast <Klijent *> (niz[i]);
- if (pok != NULL){
- if (strstr(niz[i]->getIme(), tempIme) != NULL || strstr(niz[i]->getIme(), tempPrezime) != NULL){
- pok->info();
- pronadjen = true;
- }
- }
- }
- cout << crt;
- if (!pronadjen) cout << "Trazeni radnik nije pronadjen!!!" << endl <<crt;
- delete[] tempIme;
- delete[] tempPrezime;
- }
- void pretragaZaposlenika(Osoba* niz[], int max){
- //Omogućiti pretragu zaposlenika na osnovu radnog mjesta koje definiše korisnik.
- bool pronadjen = false;
- char * tempMjesto = new char[30];
- cout <<crt<< "Unesite radno mjesto: ";
- cin >> tempMjesto;
- Zaposlenik * pok = NULL;
- for (int i = 0; i < max; i++){
- pok = dynamic_cast<Zaposlenik *>(niz[i]);
- if (pok != NULL){
- if (strcmp(tempMjesto, pok->getRadnoMjesto()) == 0){
- pok->info();
- pronadjen = true;
- }
- }
- }
- cout << crt;
- if (!pronadjen) cout << "Trazeno radno mjesto nije pronadjeno!!!" << endl << crt;
- delete[]tempMjesto;
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- int main(){
- Osoba * niz[5];
- niz[0] = new Klijent("Nedim", "Fejzic", "Gorazde", "062-195-xxx", 1, 195, "nema");
- niz[1] = new Klijent("Faja", "Sadrvan", "Gorazde", "062-666-999", 2, 14, "faja@mejl.ba");
- niz[2] = new VIPKlijent("Tigar", "IzKladnja", "Kladanj", "jesiLUD",3, 69, "tigar_iz_kladnja@pusenje.ba", 12, "F");
- niz[3] = new Zaposlenik("Esma", "TheCleaningLady", "Bajci", "799-921", "Cistacica", 32);
- niz[4] = new Zaposlenik("Rasim", "Mevkov", "Vinarici", "nezz", "Segrt", 1);
- for (int i = 0; i < 5; i++){
- niz[i]->info();
- }
- //test funkcija
- /*pretragaVIPKlijenata(niz, 5);
- pretragaKlijenataPoImenu(niz, 5);
- pretragaZaposlenika(niz, 5);*/
- // testiranje mail adresa
- /*generisiMailAdrese(niz, 5);
- cout << "\n\n\n" << crt << "EMAIL ADRESE POSLIJE PROMJENE" << endl;
- for (int i = 0; i < 5; i++){
- niz[i]->info();
- }*/
- system("pause >null");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement