Advertisement
josiftepe

Untitled

Apr 1st, 2021
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.49 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. class Zichara {
  4. private:
  5. char *mesto; // dinamicki alocirano pole od znaci
  6. int cena;
  7. public:
  8. Zichara() {}
  9. Zichara(char *m, int c) {
  10. mesto = new char[strlen(m)];
  11. strcpy(mesto, m);
  12. cena = c;
  13. }
  14. Zichara(const Zichara &tmp) {
  15. mesto = new char[strlen(tmp.mesto)];
  16. strcpy(mesto, tmp.mesto);
  17. cena = tmp.cena;
  18. }
  19. Zichara& operator = (const Zichara &tmp) {
  20. if(this != &tmp) {
  21. mesto = new char[strlen(tmp.mesto)];
  22. strcpy(mesto, tmp.mesto);
  23. cena = tmp.cena;
  24. }
  25. return *this;
  26. }
  27. ~Zichara() {}
  28. int get_cena() {
  29. return cena;
  30. }
  31. };
  32. class PlaninarskiDom {
  33. private:
  34. char ime[16];
  35. int cena[2];
  36. char klasa;
  37. bool ima_zichara;
  38. Zichara *z;
  39. public:
  40. PlaninarskiDom() {}
  41. PlaninarskiDom(char *i, int *c, char k) {
  42. strcpy(ime, i);
  43. cena[0] = c[0];
  44. cena[1] = c[1];
  45. klasa = k;
  46. }
  47. PlaninarskiDom(const PlaninarskiDom &tmp) {
  48. strcpy(ime, tmp.ime);
  49. cena[0] = tmp.cena[0];
  50. cena[1] = tmp.cena[1];
  51. klasa = tmp.klasa;
  52. ima_zichara = tmp.ima_zichara;
  53. *z = *tmp.z;
  54. }
  55. PlaninarskiDom& operator = (const PlaninarskiDom &tmp) {
  56. if(this != &tmp) {
  57. strcpy(ime, tmp.ime);
  58. cena[0] = tmp.cena[0];
  59. cena[1] = tmp.cena[1];
  60. klasa = tmp.klasa;
  61. ima_zichara = tmp.ima_zichara;
  62. *z = *tmp.z;
  63. }
  64. return *this;
  65. }
  66. ~PlaninarskiDom() {}
  67. PlaninarskiDom& operator -- () {
  68. if(klasa != 'F')
  69. klasa++;
  70. return *this;
  71. }
  72. bool operator <= (char c) {
  73. if(klasa <= c) {
  74. return true;
  75. }
  76. return false;
  77.  
  78. }
  79. void presmetajDnevenPrestoj(int den, int mesec, int &c) {
  80. if(den < 1 or den > 31 or mesec < 1 or mesec > 12) {
  81. cout << "Nevaliden datum" << endl;
  82. }
  83. else {
  84. int vkupna_cena = 0;
  85. if(mesec >= 4 and mesec <= 8) {
  86. vkupna_cena = cena[0];
  87. }
  88. else if(mesec == 9 and den == 1) {
  89. vkupna_cena = cena[0];
  90. }
  91. else {
  92. vkupna_cena = cena[1];
  93. }
  94. if(ima_zichara == true) {
  95. vkupna_cena += z->get_cena();
  96. }
  97. c = vkupna_cena;
  98. }
  99. }
  100. void setZichara(Zichara tmp) {
  101. z = &tmp;
  102. }
  103. friend ostream& operator << (ostream &stream,PlaninarskiDom tmp);
  104.  
  105. };
  106. ostream& operator << (ostream &stream,PlaninarskiDom tmp) {
  107. stream << tmp.ime << " " << "klasa " << tmp.klasa;
  108. if(tmp.ima_zichara == true) {
  109. stream << " so zichara" ;
  110. }
  111. stream << endl;
  112. return stream;
  113. }
  114. int main(){
  115.  
  116. PlaninarskiDom p; //креирање на нов објект од класата планинарски дом
  117.  
  118. //во следниот дел се вчитуваат информации за планинарскиот дом
  119. char imePlaninarskiDom[15],mestoZichara[30],klasa;
  120. int ceni[12];
  121. int dnevnakartaZichara;
  122. bool daliZichara;
  123. cin>>imePlaninarskiDom;
  124. for (int i=0;i<2;i++) cin>>ceni[i];
  125. cin>>klasa;
  126. cin>>daliZichara;
  127.  
  128. //во следниот дел се внесуваат информации и за жичарата ако постои
  129. if (daliZichara) {
  130. cin>>mestoZichara>>dnevnakartaZichara;
  131. PlaninarskiDom pom(imePlaninarskiDom,ceni,klasa);
  132. Zichara r(mestoZichara,dnevnakartaZichara);
  133. pom.setZichara(r);
  134. p=pom;
  135. }
  136. else{
  137. PlaninarskiDom *pok=new PlaninarskiDom(imePlaninarskiDom,ceni,klasa);
  138. p=*pok;
  139. }
  140.  
  141. //се намалува класата на планинарскиот дом за 2
  142. --p;
  143. --p;
  144.  
  145. int cena;
  146. int den,mesec;
  147. cin>>den>>mesec;
  148. try{
  149. p.presmetajDnevenPrestoj(den,mesec,cena); //тука се користи функцијата presmetajDnevenPrestoj
  150. cout<<"Informacii za PlaninarskiDomot:"<<endl;
  151. cout<<p;
  152. if (p<='D')
  153. cout<<"Planinarskiot dom za koj se vneseni informaciite ima klasa poniska ili ista so D\n";
  154.  
  155. cout<<"Cenata za "<<den<<"."<<mesec<<" e "<<cena; //се печати цената за дадениот ден и месец
  156. }
  157. catch (int){
  158. cout<<"Mesecot ili denot e greshno vnesen!";
  159. }
  160. }
  161.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement