Advertisement
Guest User

ZadataksaVJezbi

a guest
Dec 11th, 2015
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.01 KB | None | 0 0
  1. #include<iostream>
  2. #define _CRT_SECURE_NO_WARNINGS
  3. using namespace std;
  4.  
  5. //U programu implementirati nasljeđivanje između odgovarajućih klasa
  6. //Klasu deklarisati kao apstraktnu
  7. class Osoba
  8.  
  9. {
  10. protected:
  11.  
  12. char* _ime;
  13. char* _prezime;
  14. char* _adresa;
  15. char _telefon[15];
  16. public:
  17. //Potrebne konstruktor i destruktor funkcije
  18. Osoba(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---")
  19. {
  20. int vel = strlen(ime) + 1;
  21. _ime = new char[vel];
  22. strcpy_s(_ime, vel, ime);
  23.  
  24. vel = strlen(prezime) + 1;
  25. _prezime = new char[vel];
  26. strcpy_s(_prezime, vel, prezime);
  27.  
  28. vel = strlen(adresa) + 1;
  29. _adresa = new char[vel];
  30. strcpy_s(_adresa, vel, adresa);
  31.  
  32. strcpy_s(_telefon, 15, telefon);
  33. }
  34. Osoba(Osoba & org){
  35.  
  36. _ime = new char[strlen(org._ime) + 1];
  37. strcpy_s(_ime, strlen(org._ime) + 1, org._ime);
  38. _prezime = new char[strlen(org._prezime) + 1];
  39. strcpy_s(_prezime, strlen(org._prezime) + 1, org._prezime);
  40. _adresa = new char[strlen(org._adresa) + 1];
  41. strcpy_s(_adresa, strlen(org._adresa) + 1, org._adresa);
  42. strcpy_s(_telefon, 15, org._telefon);
  43.  
  44. }
  45.  
  46. Osoba & operator = (Osoba & org){
  47.  
  48. if (this == &org)
  49. return *this;
  50. delete[]_ime;
  51. delete[]_prezime;
  52. delete[]_adresa;
  53. _ime = new char[strlen(org._ime) + 1];
  54. strcpy_s(_ime, strlen(org._ime) + 1, org._ime);
  55. _prezime = new char[strlen(org._prezime) + 1];
  56. strcpy_s(_prezime, strlen(org._prezime) + 1, org._prezime);
  57. _adresa = new char[strlen(org._adresa) + 1];
  58. strcpy_s(_adresa, strlen(org._adresa) + 1, org._adresa);
  59. strcpy_s(_telefon, strlen(_telefon), org._telefon);
  60. return *this;
  61. }
  62. virtual ~Osoba()
  63. {
  64. delete[] _ime;
  65. _ime = NULL;
  66. delete[] _prezime;
  67. _prezime = NULL;
  68. delete[] _adresa;
  69. _adresa = NULL;
  70. }
  71.  
  72. //Kreirati funkciju Info za ispis svih vrijednosti atributa klase
  73. virtual void Info()
  74. {
  75. cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
  76. cout << "Adresa: " << _adresa << endl;
  77. cout << "Telefon: " << _telefon << endl;
  78. }
  79. };
  80.  
  81. class Klijent :public Osoba
  82. {
  83. protected:
  84. int _id;
  85. double _mjesecnaPotrosnja;
  86. char* _email;
  87. public:
  88. //Potrebne konstruktor i destruktor funkcije
  89. Klijent(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---", int ID = 0, double primanja = 0, char * mail = "---") :Osoba(ime, prezime, adresa, telefon)
  90. {
  91. _id = ID;
  92. _mjesecnaPotrosnja = primanja;
  93. _email = new char[strlen(mail) + 1];
  94. strcpy_s(_email, strlen(mail) + 1, mail);
  95. }
  96. ~Klijent(){
  97.  
  98. delete[]_email;
  99.  
  100. }
  101. Klijent(Klijent & org) : Osoba(org){
  102.  
  103. _id = org._id;
  104. _mjesecnaPotrosnja = org._mjesecnaPotrosnja;
  105. _email = new char[strlen(org._email) + 1];
  106. strcpy_s(_email, strlen(org._email) + 1, org._email);
  107. }
  108. Klijent& operator = (Klijent & org){
  109.  
  110. if (this == &org)
  111. return *this;
  112. Osoba::operator=(org);
  113. _id = org._id;
  114. _mjesecnaPotrosnja = org._mjesecnaPotrosnja;
  115. _email = new char[strlen(org._email) + 1];
  116. strcpy_s(_email, strlen(org._email) + 1, org._email);
  117. return *this;
  118.  
  119.  
  120. }
  121. //Preklopiti operator > koji će porediti klijenta sa zadatom potrošnjom i
  122. //vratiti true u slučaju da je klijent imao veću mjesečnu potrošnju.
  123. //Implementirati kao friend funkciju.
  124. friend bool operator > (Klijent & obj, double vrijednost){
  125.  
  126.  
  127. return obj._mjesecnaPotrosnja>vrijednost;
  128.  
  129. }
  130. char*getmail(){
  131.  
  132. return _email;
  133. }
  134. char * getIme(){
  135.  
  136. return _ime;
  137. }
  138. char * getprezIme(){
  139.  
  140. return _prezime;
  141. }
  142. void ZamjeniMAil(char* tekst){
  143.  
  144. if (_email != nullptr)
  145. delete[]_email;
  146. _email = new char[strlen(tekst) + 1];
  147. strcpy_s(_email, strlen(tekst) + 1, tekst);
  148.  
  149. }
  150. //Kreirati funkciju za izmjenu mail adrese.
  151.  
  152. void Info(){
  153. cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
  154. cout << "Adresa: " << _adresa << endl;
  155. cout << "Telefon: " << _telefon << endl;
  156. cout << "id: " << _id << endl;
  157. cout << "Mjesecna potrosnja: " << _mjesecnaPotrosnja << endl;
  158. cout << "email: " << _email << endl;
  159.  
  160.  
  161. }
  162. };
  163.  
  164. class Zaposlenik :public Osoba
  165. {
  166. char _radnoMjesto[30];
  167. int _godineStaza;
  168. public:
  169.  
  170. Zaposlenik(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---", char*mjesto = "---", int god = 0)
  171. :Osoba(ime, prezime, adresa, telefon){
  172. strcpy_s(_radnoMjesto, 30, mjesto);
  173. _godineStaza = god;
  174.  
  175. }
  176.  
  177.  
  178. char * getRadnoMjesto(){
  179. return _radnoMjesto;
  180. }
  181. void Info(){
  182. cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
  183. cout << "Adresa: " << _adresa << endl;
  184. cout << "Telefon: " << _telefon << endl;
  185. cout << "radno mjesto: " << _radnoMjesto << endl;
  186. cout << "_godineStaza: " << _godineStaza << endl;
  187.  
  188. }
  189. Zaposlenik(Zaposlenik & obj) :Osoba(obj){
  190.  
  191. strcpy_s(_radnoMjesto, 30, obj._radnoMjesto);
  192. _godineStaza = obj._godineStaza;
  193. }
  194. Zaposlenik & operator= (Zaposlenik & obj){
  195.  
  196. Osoba::operator=(obj);
  197.  
  198. strcpy_s(_radnoMjesto, 30, obj._radnoMjesto);
  199. _godineStaza = obj._godineStaza;
  200.  
  201.  
  202. }
  203. //Potrebne konstruktor i destruktor funkcije
  204. };
  205.  
  206. class VIPKlijent :public Klijent
  207. {
  208. double _popust;
  209. char* _parkingOznaka;
  210. public:
  211. VIPKlijent(char* ime = "---", char* prezime = "---", char* adresa = "---", char* telefon = "---", int ID = 0, double primanja = 0, char * mail = "---", double popust = 0, char *ozn = "_--")
  212. :Klijent(ime, prezime, adresa, telefon, ID, primanja, mail){
  213.  
  214. _popust = popust;
  215. _parkingOznaka = new char[strlen(ozn) + 1];
  216. strcpy_s(_parkingOznaka, strlen(ozn) + 1, ozn);
  217. }
  218. //Potrebne konstruktor i destruktor funkcije
  219.  
  220. ~VIPKlijent(){
  221.  
  222. delete[]_parkingOznaka;
  223. }
  224.  
  225. VIPKlijent(VIPKlijent & obj) :Klijent(obj){
  226.  
  227. _popust = obj._popust;
  228. _parkingOznaka = new char[strlen(obj._parkingOznaka) + 1];
  229. strcpy_s(_parkingOznaka, strlen(obj._parkingOznaka), obj._parkingOznaka);
  230. }
  231. int getMjesecna(){
  232.  
  233. return _mjesecnaPotrosnja;
  234. }
  235. VIPKlijent & operator =(VIPKlijent & obj){
  236. if (this == &obj)
  237. return *this;
  238. Klijent::operator=(obj);
  239. delete[]_parkingOznaka;
  240. _popust = obj._popust;
  241. _parkingOznaka = new char[strlen(obj._parkingOznaka) + 1];
  242. strcpy_s(_parkingOznaka, strlen(obj._parkingOznaka), obj._parkingOznaka);
  243. }
  244.  
  245. //Funkciju koja treba da izmijeni vrijednost mjesečne potrošnje na način da se
  246. //uračuna popust (prosječna potrošnja treba da se umanji)
  247. void PromjeniPotrosnju(){
  248. _mjesecnaPotrosnja -= _popust;
  249. }
  250. void Info(){
  251.  
  252. cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
  253. cout << "Adresa: " << _adresa << endl;
  254. cout << "Telefon: " << _telefon << endl;
  255. cout << "id: " << _id << endl;
  256. cout << "Mjesecna potrosnja: " << _mjesecnaPotrosnja << endl;
  257. cout << "email: " << _email << endl;
  258. cout << "parking mjesto: " << _parkingOznaka << endl;
  259. cout << "popust: " << _popust << endl;
  260.  
  261. }
  262. //Funkciju za ispis svih vrijednosti atributa klase
  263.  
  264. };
  265.  
  266. //Funkcija treba da pronađe sve one klijente koji su ostvarili mjesečnu potrošnju veće
  267. //od zadate. Ispisati podatke i vratiti ukupan broj pronađenih klijenata.
  268. int pretragaPotrosnjeKlijenata(Osoba* niz[], int max, double potrosnja){
  269.  
  270. int brojac = 0;
  271. for (int i = 0; i < max; i++)
  272. {
  273. Klijent * pok = dynamic_cast<Klijent*>(niz[i]);
  274. if (pok != nullptr){
  275.  
  276. if ((*pok)>potrosnja)
  277. {
  278.  
  279. brojac++;
  280. pok->Info();
  281.  
  282. }
  283.  
  284.  
  285. }
  286. }
  287.  
  288.  
  289.  
  290. return brojac;
  291.  
  292. }
  293. //Pronaći sve VIP klijente, te im zaračunati popust na kupljene artikle i ispisati
  294. //informacije o onima koji su ostvarili potrošnju veću od 50 KM mjesečno.
  295. void pretragaVIPKlijenata(Osoba* niz[], int max){
  296.  
  297.  
  298. for (int i = 0; i < max; i++)
  299. {
  300. VIPKlijent * pok = dynamic_cast<VIPKlijent*>(niz[i]);
  301. if (pok != nullptr){
  302.  
  303. pok->PromjeniPotrosnju();
  304. if (pok->getMjesecna()>50)
  305. {
  306. pok->Info();
  307.  
  308. }
  309. }
  310. }
  311.  
  312.  
  313.  
  314. }
  315.  
  316. //Svim klijentima postaviti mail adresu u formatu: ime.prezime@firma.ba.
  317. void generisiMailAdrese(Osoba* niz[], int max){
  318.  
  319.  
  320. for (int i = 0; i < max; i++)
  321. {
  322. Klijent * pok = dynamic_cast<Klijent*>(niz[i]);
  323. if (pok != nullptr){
  324. int size = strlen(pok->getIme()) + strlen(".")+strlen(pok->getprezIme()) + strlen("@firma.ba") + 1;
  325. char*temp = new char[size];
  326. strcpy_s(temp,size, pok->getIme());
  327. strcat_s(temp, size, ".");
  328.  
  329. strcat_s(temp, size, pok->getprezIme());
  330. strcat_s(temp, size, "@firma.ba");
  331.  
  332. pok->ZamjeniMAil(temp);
  333. cout << "novi mail: " << pok->getmail();
  334. }
  335.  
  336.  
  337.  
  338. }
  339.  
  340.  
  341.  
  342.  
  343. }
  344.  
  345. //Omogućiti pretragu klijenata po imenu ili prezimenu (ispisati informacije
  346. //o svima koji sadrže uneseni tekst u dijelu imena ili prezimena.
  347. void pretragaKlijenataPoImenu(Osoba* niz[], int max){
  348.  
  349. for (int i = 0; i < max; i++)
  350. {
  351. Klijent * pok = dynamic_cast<Klijent*>(niz[i]);
  352. if (pok != nullptr){
  353.  
  354. char tekst[10];
  355. cout << "unesi tekst: " << endl;
  356. cin >> tekst;
  357. if (((strstr(pok->getIme(), tekst)) != nullptr) || ((strstr(pok->getprezIme(), tekst)) != nullptr))
  358. pok->Info();
  359. }
  360.  
  361.  
  362.  
  363. }
  364.  
  365.  
  366. }
  367.  
  368. //Omogućiti pretragu zaposlenika na osnovu radnog mjesta koje definiše korisnik.
  369. void pretragaZaposlenika(Osoba* niz[], int max){
  370.  
  371.  
  372. for (int i = 0; i < max; i++)
  373. {
  374. Zaposlenik * pok = dynamic_cast<Zaposlenik*>(niz[i]);
  375. if (pok != nullptr){
  376.  
  377. char tekst[10];
  378. cout << "unesi radno mjesto";
  379. cin >> tekst;
  380. if (strcmp(pok->getRadnoMjesto(), tekst) == 0)
  381. pok->Info();
  382. }
  383.  
  384.  
  385. }
  386. }
  387.  
  388. void main()
  389. {
  390. //Testirati sve dostupne funkcionalnosti uz obaveznu provjeru globalnih funkcija
  391. Osoba *niz[5];
  392. int izbor;
  393. for (int i = 0; i<5; i++){
  394.  
  395. cout << "1. - Klijent, 2. - Zaposlenik, 3. - VIPKlijent" << endl;
  396. cin >> izbor;
  397. if (izbor == 1)
  398. niz[i] = new Klijent("Haris", "Hercegovac", "Vitez", "061804853", i, 100.00, "hasim@mail.com");
  399.  
  400. if (izbor == 2)
  401. niz[i] = new Zaposlenik("Nihad", "tahunic", "vitez", "061804853", "programer", 10);
  402.  
  403. if (izbor == 3)
  404. niz[i] = new VIPKlijent("Marija", "Herceg", "Mostar", "06214242", i, 40.00, "mar@mail.com", 30.00, "P");
  405.  
  406. }
  407.  
  408. for (int i = 0; i<5; i++){
  409.  
  410. niz[i]->Info();
  411.  
  412.  
  413. }
  414. cout << "nakon poziva funkcije: \n\n\n\n\n";
  415. generisiMailAdrese(niz, 5);
  416.  
  417.  
  418.  
  419. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement