borisdexter

Cela 1va ispitna zadaca

Jan 26th, 2020
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.19 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. #include<iostream>
  5. using namespace std;
  6.  
  7. class MaxCapacity{
  8. private:
  9. char error[25];
  10. public:
  11. MaxCapacity(){}
  12. MaxCapacity(char error[]){
  13. strcpy(this->error,error);
  14. }
  15. void print(){
  16. cout<<error<<endl;
  17. }
  18. };
  19.  
  20. class SameBookException{
  21. private:
  22. char error[25];
  23. public:
  24. SameBookException(){}
  25. SameBookException(char error[]){
  26. strcpy(this->error,error);
  27. }
  28. void print(){
  29. cout<<error<<endl;
  30. }
  31. };
  32. class Kniga{
  33. private:
  34. char *ime;
  35. int kod;
  36. static float evro;
  37. float cena;
  38. int godina;
  39. char *avtor;
  40. public:
  41. Kniga(){
  42. // delete []avtor;
  43. // delete []ime;
  44. this->ime=new char[0];
  45. this->avtor=new char[0];
  46. }
  47. // constructor so 5 promenlivi
  48. Kniga(char *ime,int kod,float cena,int godina,char *avtor){
  49. // delete []ime
  50. this->ime=new char[strlen(ime)+1];
  51. strcpy(this->ime,ime);
  52. this->kod=kod;
  53. this->cena=cena;
  54. this->godina=godina;
  55. this->avtor=new char[strlen(avtor)+1];
  56. strcpy(this->avtor,avtor);
  57. }
  58. // constructor so 3 promenlivi
  59. Kniga(char *ime,int kod,float cena){
  60. // delete []ime
  61. this->ime=new char[strlen(ime)+1];
  62. strcpy(this->ime,ime);
  63. this->kod=kod;
  64. this->cena=cena;
  65. }
  66. // copy constructor
  67. Kniga(const Kniga &novaKniga){
  68. this->ime=new char[strlen(novaKniga.ime)+1];
  69. strcpy(this->ime,novaKniga.ime);
  70. this->kod=novaKniga.kod;
  71. this->cena=novaKniga.cena;
  72. this->godina=novaKniga.godina;
  73. this->avtor=new char[strlen(novaKniga.avtor)+1];
  74. strcpy(this->avtor,novaKniga.avtor);
  75. }
  76.  
  77.  
  78. Kniga &operator=(Kniga &novaKniga){
  79. // proverka dali se isti objektite pred da kopirame (proverka spored adresa)
  80. if(this != &novaKniga){
  81. this->ime=new char[strlen(novaKniga.ime)+1];
  82. strcpy(this->ime,novaKniga.ime);
  83. this->kod=novaKniga.kod;
  84. this->cena=novaKniga.cena;
  85. this->godina=novaKniga.godina;
  86. this->avtor=new char[strlen(novaKniga.avtor)+1];
  87. strcpy(this->avtor,novaKniga.avtor);
  88. }
  89. return *this;
  90. }
  91.  
  92. // operator << (za printanje)
  93. friend ostream &operator<<(ostream &output, Kniga &objekt){
  94. output<<"Kniga: "<<objekt.ime<<" "<<objekt.kod<<" "<<objekt.cena<<" "<<objekt.godina<<" "<<objekt.avtor<<endl;
  95. return output;
  96. }
  97.  
  98. // operator >> (za input)
  99. friend istream &operator>>(istream &input, Kniga &objekt){
  100. input>>objekt.ime;
  101. input>>objekt.kod;
  102. input>>objekt.cena;
  103. input>>objekt.godina;
  104. input>>objekt.avtor;
  105. return input;
  106. }
  107.  
  108. bool operator<(Kniga &drugaKniga){
  109. if(this->godina<drugaKniga.godina){
  110. return true;
  111. }else{
  112. return false;
  113. }
  114. //return this->godina<drugaKniga.godina;
  115. }
  116.  
  117. bool operator==(Kniga &drugaKniga){
  118. return this->kod==drugaKniga.kod;
  119. }
  120.  
  121. void setGodina(int godina){
  122. this->godina=godina;
  123. }
  124.  
  125. char* getAvtor(){
  126. return avtor;
  127. }
  128.  
  129. void setAvtor(char *niza){
  130. avtor=new char[strlen(niza)+1];
  131. strcpy(avtor,niza);
  132. }
  133.  
  134. int getGodina(){
  135. return godina;
  136. }
  137.  
  138. float cenaVoEvra(){
  139. return cena/Kniga::evro;
  140. }
  141.  
  142. void print(){
  143. cout<<"Kniga: "<<ime<<" "<<kod<<" "<<cena<<" "<<godina<<" "<<avtor<<endl;
  144. }
  145.  
  146. static void setEvro(float novKurs){
  147. evro=novKurs;
  148. }
  149.  
  150. float getCena(){
  151. return cena;
  152. }
  153.  
  154. ~Kniga(){
  155. delete []ime;
  156. delete []avtor;
  157. }
  158. };
  159. float Kniga::evro=61.5;
  160.  
  161. class Biblioteka{
  162. private:
  163. char ime[25];
  164. int kapacitet;
  165. Kniga *knigi;
  166. int brojKnigi;
  167. public:
  168. Biblioteka(){
  169. knigi=new Kniga[0];
  170. brojKnigi=0;
  171. }
  172.  
  173. Biblioteka(char ime[],int kapacitet){
  174. knigi=new Kniga[0];
  175. brojKnigi=0;
  176. strcpy(this->ime,ime);
  177. this->kapacitet=kapacitet;
  178. }
  179.  
  180.  
  181. Biblioteka &operator+=(Kniga &novaKniga){
  182. if(brojKnigi==kapacitet){
  183. throw MaxCapacity("Kapcitetot e tolku");
  184. }
  185. // testing exception
  186. for(int i=0;i<brojKnigi;i++){
  187. if(knigi[i]==novaKniga){
  188. throw SameBookException("Knigata veke ja imame");
  189. }
  190. }
  191.  
  192. Kniga *tempNiza = new Kniga[brojKnigi];
  193. for(int i=0;i<brojKnigi;i++){
  194. // operator =
  195. tempNiza[i]=knigi[i];
  196. }
  197.  
  198. knigi=new Kniga[brojKnigi+1];
  199.  
  200. for(int i=0;i<brojKnigi;i++){
  201. knigi[i]=tempNiza[i];
  202. }
  203.  
  204. knigi[brojKnigi]=novaKniga;
  205. brojKnigi++;
  206. delete []tempNiza;
  207.  
  208. return *this;
  209. }
  210.  
  211. void printKnigi(){
  212. for(int i=0;i<brojKnigi;i++){
  213. cout<<knigi[i];
  214. }
  215. }
  216.  
  217. Biblioteka &operator-=(Kniga &novaKniga){
  218. int flag=0;
  219. for(int i=0;i<brojKnigi;i++){
  220. if(knigi[i]==novaKniga){
  221. flag=1;
  222. break;
  223. }
  224. }
  225. // znaeme deka go imame objektot vo nizata
  226. if(flag==1){
  227. int brojac=0;
  228. Kniga *tempNiza = new Kniga[brojKnigi];
  229. for(int i=0;i<brojKnigi;i++){
  230. if(knigi[i]==novaKniga){
  231. // go skokame toj shto e ist
  232. }else{
  233. tempNiza[brojac]=knigi[i];
  234. brojac++;
  235. }
  236. }
  237. brojKnigi--;
  238. knigi=new Kniga[brojKnigi];
  239. for(int i=0;i<brojKnigi;i++){
  240. knigi[i]=tempNiza[i];
  241. }
  242. delete []tempNiza;
  243. }
  244. return *this;
  245. }
  246.  
  247. void print(){
  248. cout<<ime<<" "<<kapacitet<<endl;
  249. }
  250.  
  251.  
  252. int kolkuKnigiOdAvtor(char *nekojAvtor){
  253. int kolkuKnigi=0;
  254. for(int i=0;i<brojKnigi;i++){
  255. if(strcmp(knigi[i].getAvtor(),nekojAvtor)==0){
  256. kolkuKnigi++;
  257. }
  258. }
  259. return kolkuKnigi;
  260. }
  261.  
  262. void postariKnigi(int nekojaGodina){
  263. int kolkuKnigi=0;
  264. cout<<"Knigi postari od "<<nekojaGodina<<" se:"<<endl;
  265. for(int i=0;i<brojKnigi;i++){
  266. if(knigi[i].getGodina()<nekojaGodina){
  267. cout<<knigi[i];
  268. kolkuKnigi++;
  269. }
  270. }
  271. }
  272.  
  273. float vkupnaCenaVoEvra(){
  274. float suma=0;
  275. for(int i=0;i<brojKnigi;i++){
  276. suma+=knigi[i].cenaVoEvra();
  277. }
  278. return suma;
  279. }
  280.  
  281. void daliSiteKnigiPosle(int nekojaGodina){
  282. int flag=1;
  283. for(int i=0;i<brojKnigi;i++){
  284. if(knigi[i].getGodina()<=nekojaGodina){
  285. flag=0;
  286. break;
  287. }
  288. }
  289. if(flag){
  290. cout<<"Site knigi se postari od "<<nekojaGodina<<endl;
  291. }else{
  292. cout<<"Site knigi NE se postari od "<<nekojaGodina<<endl;
  293. }
  294. }
  295.  
  296. float prosecnaCenaNaKniga(){
  297. int brojac=0;
  298. float suma=0;
  299. for(int i=0;i<brojKnigi;i++){
  300. suma+=knigi[i].getCena();
  301. brojac++;
  302. }
  303. return suma/brojac;
  304. }
  305.  
  306. ~Biblioteka(){
  307. delete []knigi;
  308. }
  309. };
  310.  
  311. int main(){
  312. cout<<"Testing parameter constructor"<<endl;
  313. Kniga lotr("The lord of the rings", 111222, 1000, 1955, "R.R. Tolkien");
  314. lotr.print();
  315. Kniga hp("Harry Potter", 222333, 1500);
  316. hp.setGodina(1991);
  317. hp.setAvtor("J.K. Rowling");
  318. hp.print();
  319. cout<<"Testing copy constructor"<<endl;
  320. Kniga hp2(hp);
  321. hp2.print();
  322. cout<<"Testing operator="<<endl;
  323. Kniga hp3;
  324. hp3=hp;
  325. cout<<"Testing operator <<"<<endl;
  326. cout<<hp3;
  327. cout<<"Testing operator >>"<<endl;
  328. Kniga got("GoT",333444,1750,1993,"R.R.Martin");
  329. //cin>>got;
  330. cout<<got;
  331. cout<<"Testing operator <"<<endl;
  332. if(hp<got){
  333. cout<<"HP<GOT"<<endl;
  334. }else{
  335. cout<<"HP>GOT"<<endl;
  336. }
  337. cout<<"Testing operator =="<<endl;
  338. if(hp==got){
  339. cout<<"HP==GOT"<<endl;
  340. }else{
  341. cout<<"HP!=GOT"<<endl;
  342. }
  343. cout<<"Testing static"<<endl;
  344. cout<<hp.cenaVoEvra()<<endl;
  345. Kniga::setEvro(61.7);
  346. cout<<hp.cenaVoEvra()<<endl;
  347.  
  348. Biblioteka bm("Brakja Miladinovci", 3);
  349. cout<<"Testirame += operator"<<endl;
  350. try{
  351. bm+=hp;
  352. bm+=got;
  353. bm+=lotr;
  354. bm+=hp;
  355. }catch(SameBookException &objekt){
  356. objekt.print();
  357. }catch(MaxCapacity &objekt){
  358. objekt.print();
  359. }
  360.  
  361. bm.printKnigi();
  362. cout<<"Testirame -= operator"<<endl;
  363. bm-=hp;
  364. bm.printKnigi();
  365.  
  366. bm.postariKnigi(1991);
  367. cout<<"Knigi od avtorot R.R.Martin ima: "<<bm.kolkuKnigiOdAvtor("R.R.Martin")<<endl;
  368. cout<<"Cena na site knigi vo evra e "<<bm.vkupnaCenaVoEvra()<<endl;
  369. bm.daliSiteKnigiPosle(1950);
  370. cout<<"Prosecna cena na kniga e "<<bm.prosecnaCenaNaKniga()<<endl;
  371. return 0;
  372. }
Advertisement
Add Comment
Please, Sign In to add comment