Karte(crash ??)

Download Raw Clone


  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<string>
  5. using namespace std;
  6. class I_Osoba {
  7. public:
  8. I_Osoba(const char *name="empty",int blk=18):
  9. ime_prezime{nullptr},broj_licneKarte{blk}{
  10. int size = strlen(name) + 1;
  11. ime_prezime = new char[size];
  12. strcpy(ime_prezime, name);
  13. }
  14. virtual ~I_Osoba() {
  15. delete[] ime_prezime; ime_prezime = nullptr;
  16. }
  17. virtual void set() = 0;
  18. virtual char *get_imePrezime()const = 0;
  19. virtual int get_blk()const = 0;
  20. protected:
  21. char *ime_prezime;
  22. int broj_licneKarte;
  23. };
  24. class Predstave {
  25. public:
  26. Predstave(int am=3,string names="empty",string dates="01.01.2019",int prices=0,int choice=-1):
  27. amount{ am }, imena{ nullptr }, datumi{ nullptr }, cijene{ nullptr }, izbor{ choice }{
  28. imena = new string[amount];
  29. datumi = new string[amount];
  30. cijene = new int[amount];
  31. imena[0] = "Sjecas li se Doli Bel"; datumi[0] = "23.03.2019"; cijene[0] = 5;
  32. imena[1] = "Pink Moon"; datumi[1] = "26.06.2019"; cijene[1] = 7;
  33. imena[2] = "Karolina Nojber"; datumi[2] = "09.11.2019"; cijene[2] = 10;
  34. }
  35. Predstave(const Predstave &src):
  36. amount{ src.amount }, imena{ nullptr }, datumi{ nullptr }, cijene{ nullptr }, izbor{ src.izbor }{
  37. imena = new string[src.amount];
  38. copy(src.imena, src.imena + src.amount, imena);
  39. datumi = new string[src.amount];
  40. copy(src.datumi, src.datumi + src.amount, datumi);
  41. cijene = new int[src.amount];
  42. for (int i = 0; i < src.amount; i++) {
  43. cijene[i] = src.cijene[i];
  44. }
  45. }
  46. ~Predstave() {
  47. delete[]imena; imena = nullptr;
  48. delete[]datumi; datumi = nullptr;
  49. delete[]cijene; cijene = nullptr;
  50. }
  51. int get_amount()const { return amount; }
  52. string get_imena(const int &i)const {return imena[i];}
  53. string get_datumi(const int &i)const { return datumi[i]; }
  54. int get_cijene(const int &i)const { return cijene[i];}
  55. int get_izbor()const { return izbor - 1; }
  56. void print_izbor()const {
  57. cout << " PREDSTAVE\n";
  58. cout << "-----------------------------------\n";
  59. for (int i = 0; i < get_amount(); i++) {
  60. cout << i + 1 << ". " << get_imena(i) << " , " << get_datumi(i) << endl;
  61. cout << " CIJENA: " << get_cijene(i) << " KM" << endl;
  62. }
  63. cout << "-----------------------------------\n";
  64. cout << "Unesite redni broj predstave: "; cin >> izbor; cin.clear(); cin.ignore(10000, '\n');
  65. }
  66. Predstave&operator=(const Predstave &dstr);
  67. protected:
  68. int amount;
  69. string *imena;
  70. string *datumi;
  71. int *cijene;
  72. mutable int izbor;
  73. };
  74. Predstave&Predstave::operator=(const Predstave &dstr) {
  75. if (this == &dstr) {
  76. return *this;
  77. }
  78. amount = dstr.amount;
  79. imena = new string[amount];
  80. copy(dstr.imena, dstr.imena + dstr.amount, imena);
  81. datumi = new string[amount];
  82. copy(dstr.datumi, dstr.datumi + dstr.amount, datumi);
  83. cijene = new int[amount];
  84. for (int i = 0; i < amount; i++) {
  85. cijene[i] = dstr.cijene[i];
  86. }
  87. izbor = dstr.izbor;
  88. return *this;
  89. }
  90. class Karta{
  91. public:
  92. Karta(int am = 3, string names = "empty", string dates = "01.01.2019", int prices = 0, int choice = -1,string name="empty",string date="01.01.2019",int price=0):
  93. predstave{am,names,dates,prices,choice},ime{name},datum{date},cijena{price}{}
  94. Karta(const Karta &src):
  95. predstave{ src.predstave }, ime{ src.ime }, datum{ src.datum }, cijena{ src.cijena }{}
  96. ~Karta(){}
  97. void set_Karta() {
  98. predstave.print_izbor();
  99. ime = predstave.get_imena(predstave.get_izbor());
  100. datum = predstave.get_datumi(predstave.get_izbor());
  101. cijena = predstave.get_cijene(predstave.get_izbor());
  102. }
  103. string karta_getIme()const { return ime; }
  104. string karta_getDatum()const { return datum; }
  105. int karta_getCijena()const { return cijena; }
  106. Karta&operator=(const Karta &dstr);
  107. protected:
  108. Predstave predstave;
  109. string ime;
  110. string datum;
  111. int cijena;
  112. };
  113. Karta&Karta::operator=(const Karta &dstr) {
  114. if (this == &dstr) {
  115. return *this;
  116. }
  117. predstave = dstr.predstave;
  118. ime = dstr.ime;
  119. datum = dstr.datum;
  120. cijena = dstr.cijena;
  121. return *this;
  122. }
  123. class Gledalac : public I_Osoba {
  124. public:
  125. Gledalac(const char *name_osobe = "empty", int blk = 18, int am = 3, string names = "empty", string dates = "01.01.2019", int prices = 0, int choice = -1, string name = "empty", string date = "01.01.2019", int price = 0):
  126. I_Osoba{name_osobe,blk},karta{am,names,dates,prices,choice,name,date,price}{}
  127. Gledalac(const Gledalac &src):
  128. I_Osoba(src),karta{src.karta}{}
  129. ~Gledalac(){}
  130. char *get_imePrezime()const override {return ime_prezime;}
  131. int get_blk()const { return broj_licneKarte; }
  132. void set() {
  133. cout << "Unesite svoje ime i prezime: "; cin.getline(ime_prezime, 50);
  134. cout << "Unesite broj licne karte: "; cin >> broj_licneKarte; cin.clear(); cin.ignore(10000, '\n');
  135. karta.set_Karta();
  136. }
  137. Karta karta;
  138. };
  139. class Pozoriste {
  140. public:
  141. Pozoriste():
  142. gledalac{}, mjesta{ nullptr } {
  143. mjesta = new string[40];
  144. for (int i = 0; i < 40; i++) {
  145. mjesta[i] = "Slobodno";
  146. }
  147. }
  148. Pozoriste(const Pozoriste &src):
  149. gledalac{ src.gledalac }, mjesta{ nullptr }{
  150. mjesta = new string[40];
  151. copy(src.mjesta, src.mjesta + 40, mjesta);
  152. }
  153. ~Pozoriste() {
  154. delete[]mjesta; mjesta = nullptr;
  155. }
  156. void set_Karta() {
  157. gledalac.set();
  158. int br = 0;
  159. for (int i = 0; i < 40; i++) {
  160. br++;
  161. cout << i + 1 << " . " << mjesta[i] << " ";
  162. if (br == 8) {
  163. cout << endl;
  164. br = 0;
  165. }
  166. }
  167. cout << "Unesite broj mjesta za rezervaciju: "; cin >> broj_mjesta;
  168. for (int i = 0; i < 40; i++) {
  169. if (i == broj_mjesta) {
  170. mjesta[i] = gledalac.get_imePrezime();
  171. }
  172. }
  173. }
  174. int get_brojMjesta()const { return broj_mjesta; }
  175. void print_Karta()const {
  176. cout << "-------------------------\n";
  177. cout << gledalac.get_imePrezime() << endl;
  178. cout << "Broj licne karte: " << gledalac.get_blk() << endl;
  179. cout << "-----------------------------------------\n";
  180. cout <<"Ime predstave: "<< gledalac.karta.karta_getIme() << endl;
  181. cout << "Datum: " << gledalac.karta.karta_getDatum() << endl;
  182. cout << "Broj mjesta: " << get_brojMjesta() << endl;
  183. cout << "-----------------------------------------\n";
  184. cout << "Cijena predstave: " << gledalac.karta.karta_getCijena() << "KM" << endl;
  185. cout << "-------------------------\n";
  186. }
  187. protected:
  188. Gledalac gledalac;
  189. int broj_mjesta;
  190. string *mjesta;
  191. };
  192. int main() {
  193. Pozoriste p;
  194. p.set_Karta();
  195. p.print_Karta();
  196. system("pause");
  197. return 0;
  198. }

Raw paste data: