Advertisement
Guest User

Untitled

a guest
Jan 20th, 2019
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. class ExceptieNumarLocuri : public exception {
  8.  
  9. };
  10.  
  11. class Autobus {
  12. protected:
  13. char *model = NULL;
  14. int numarLocuri = 0;
  15. int *locuriOcupate = NULL;
  16. static int NUMAR_MAXIM_LOCURI;
  17.  
  18. public:
  19. Autobus() {
  20. this->model = NULL;
  21. this->numarLocuri = 0;
  22. this->locuriOcupate = NULL;
  23. }
  24.  
  25. Autobus(const char* Model, int Nr) {
  26. this->model = new char[strlen(Model) + 1];
  27. strcpy(this->model, Model);
  28.  
  29. this->numarLocuri = Nr;
  30. this->locuriOcupate = new int[this->numarLocuri];
  31. for (int i = 0; i < this->numarLocuri; i++) {
  32. this->locuriOcupate[i] = 0;
  33. }
  34. }
  35.  
  36. Autobus(const Autobus &bus) {
  37. if (this->model != NULL) {
  38. delete[] this->model;
  39. }
  40. this->model = new char[strlen(bus.model) + 1];
  41. strcpy(this->model, bus.model);
  42.  
  43. this->numarLocuri = bus.numarLocuri;
  44. if (this->locuriOcupate != NULL) {
  45. delete[] this->locuriOcupate;
  46. }
  47. this->locuriOcupate = new int[this->numarLocuri];
  48. for(int i = 0; i < this->numarLocuri; i++) {
  49. this->locuriOcupate[i] = bus.locuriOcupate[i];
  50. }
  51. }
  52.  
  53. void operator=(const Autobus &bus) {
  54. if (this->model != NULL) {
  55. delete[] this->model;
  56. }
  57. this->model = new char[strlen(bus.model) + 1];
  58. strcpy(this->model, bus.model);
  59.  
  60. this->numarLocuri = bus.numarLocuri;
  61. if (this->locuriOcupate != NULL) {
  62. delete[] this->locuriOcupate;
  63. }
  64. this->locuriOcupate = new int[this->numarLocuri];
  65. for (int i = 0; i < this->numarLocuri; i++) {
  66. this->locuriOcupate[i] = bus.locuriOcupate[i];
  67. }
  68. }
  69.  
  70. void setModel(const char* Model) {
  71. if (this->model != NULL) {
  72. delete[] this->model;
  73. }
  74. this->model = new char[strlen(Model) + 1];
  75. strcpy(this->model, Model);
  76. }
  77.  
  78. void updateLoc(int index) {
  79. if (index > 0 && index < this->numarLocuri) {
  80. this->locuriOcupate[index] = 1;
  81. }
  82. else {
  83. throw new ExceptieNumarLocuri;
  84. }
  85. }
  86.  
  87. explicit operator int() {
  88. int counter = 0;
  89. for (int i = 0; i < this->numarLocuri; i++) {
  90. if (this->locuriOcupate[i] == 1) {
  91. counter++;
  92. }
  93. }
  94. return counter;
  95. }
  96.  
  97. friend ostream &operator<<(ostream &out, Autobus &bus) {
  98. out << endl << "The model: " << bus.model;
  99. out << endl << "The numarLocuri: " << bus.numarLocuri;
  100. out << endl << "The locuriOcupate: "<<endl;
  101. for (int i = 0; i < bus.numarLocuri; i++) {
  102. cout << "Locul "<<i << " are indexul " << bus.locuriOcupate[i] << endl;
  103. }
  104. out << endl;
  105.  
  106. return out;
  107. }
  108.  
  109. friend istream& operator>>(istream &in, Autobus &bus) {
  110. cout << endl << "New model: ";
  111.  
  112. if (bus.model != NULL)
  113. {
  114. delete[] bus.model;
  115. }
  116.  
  117. char buffer[100];
  118. in >> buffer;
  119. bus.model = new char[strlen(buffer) + 1];
  120. strcpy(bus.model, buffer);
  121.  
  122. cout << endl << "New nrLocuri: ";
  123. in >> bus.numarLocuri;
  124. if (bus.locuriOcupate != NULL) {
  125. delete[] bus.locuriOcupate;
  126. }
  127. bus.locuriOcupate = new int[bus.numarLocuri];
  128. for (int i = 0; i < bus.numarLocuri; i++) {
  129. bus.locuriOcupate[i] = 0;
  130. }
  131.  
  132. return in;
  133. }
  134.  
  135. friend Autobus operator+(int nr, Autobus bus) {
  136.  
  137. int* newV = new int[bus.numarLocuri + nr];
  138. for (int i = 0; i < bus.numarLocuri; i++) {
  139. newV[i] = bus.locuriOcupate[i];
  140. }
  141. for (int i = bus.numarLocuri; i < bus.numarLocuri + nr; i++) {
  142. newV[i] = 0;
  143. }
  144. delete[] bus.locuriOcupate;
  145. bus.locuriOcupate = newV;
  146. bus.numarLocuri += nr;
  147. return bus;
  148. }
  149.  
  150. bool operator<(Autobus bus) {
  151. if (this->numarLocuri < bus.numarLocuri) {
  152. return true;
  153. }
  154. else {
  155. return false;
  156. }
  157. }
  158.  
  159.  
  160. };
  161.  
  162. class Comercial {
  163.  
  164. public:
  165. virtual double getVenit() = 0;
  166.  
  167. };
  168.  
  169. class LinieUrbana : public Autobus, Comercial {
  170. private:
  171. double pretBilet = 0.0f;
  172. const int numarLinie;
  173. public:
  174. double getVenit() {
  175. double valoare = 0.0f;
  176. int nrLocuriOcupate = (int)*this;
  177. return nrLocuriOcupate * this->pretBilet;
  178. }
  179.  
  180. LinieUrbana() : numarLinie(0), Autobus() {
  181. this->pretBilet = 0.0f;
  182. }
  183.  
  184. LinieUrbana(int Code, const char* Model, int NrLocuri, double Pret) :numarLinie(Code), Autobus(Model,NrLocuri) {
  185. this->pretBilet = Pret;
  186. }
  187.  
  188. friend ostream& operator<<(ostream &out, LinieUrbana &linie) {
  189. out << endl <<"The pret: "<< linie.pretBilet;
  190. out << endl << "The nrLinie: " << linie.numarLinie;
  191. out << (Autobus&)linie;
  192. return out;
  193. }
  194.  
  195. friend istream& operator>>(istream &in, LinieUrbana &linie) {
  196. in >> (Autobus&)linie;
  197. cout << endl << "New pret: ";
  198. in >> linie.pretBilet;
  199. return in;
  200. }
  201.  
  202. friend ofstream& operator<<(ofstream& out, LinieUrbana &linie) {
  203. out.open("LinieUrbana2.txt", ios::out | ios::trunc);
  204. if (out) {
  205. out << linie.model<<endl;
  206. out << linie.numarLinie << endl;
  207. out << linie.pretBilet << endl;
  208. out << linie.numarLocuri << endl;
  209. for (int i = 0; i < linie.numarLocuri; i++) {
  210. out << linie.locuriOcupate[i] << endl;
  211. }
  212. out.close();
  213. }
  214. else {
  215. cout << "Nu merge";
  216. }
  217.  
  218. return out;
  219. }
  220.  
  221. ~LinieUrbana() {
  222.  
  223. }
  224.  
  225. void updateLoc(int a, int b) {
  226. for (int i = a; i < b; i++) {
  227. this->locuriOcupate[i] = 1;
  228. }
  229. }
  230.  
  231. int &operator[](int i) {
  232.  
  233. if (i > 0 && i < this->numarLocuri)
  234. {
  235. return this->locuriOcupate[i];
  236. }
  237.  
  238. }
  239.  
  240. int getNumarLinie() {
  241. return this->numarLinie;
  242. }
  243.  
  244. void citireFisier(const char* Fisier) {
  245. ifstream in;
  246. in.open(Fisier, ios::in);
  247. if (in) {
  248.  
  249. char buffer[100];
  250. in >> buffer;
  251. this->model = new char[strlen(buffer) + 1];
  252. strcpy(this->model, buffer);
  253.  
  254. int nrLinie;
  255. in >> nrLinie;
  256. in >> this->pretBilet;
  257. in >> this->numarLocuri;
  258. if (this->locuriOcupate != NULL) {
  259. delete[] this->locuriOcupate;
  260. }
  261. this->locuriOcupate = new int[this->numarLocuri];
  262. for (int i = 0; i < this->numarLocuri; i++) {
  263. in >> this->locuriOcupate[i];
  264.  
  265. }
  266. }
  267. in.close();
  268.  
  269. }
  270.  
  271. };
  272.  
  273. int Autobus::NUMAR_MAXIM_LOCURI = 54;
  274.  
  275. void main() {
  276. Autobus a1("Mercedes", 28);
  277. Autobus a2 = a1;
  278. Autobus a3;
  279. a3 = a1;
  280.  
  281. a3.setModel("Otokar");
  282. try {
  283. a3.updateLoc(30);
  284. }
  285. catch (ExceptieNumarLocuri * ex) {
  286. cout << "BUUN";
  287. int numar;
  288. cin >> numar;
  289. a3.updateLoc(numar);
  290. }
  291. catch (...) {
  292. cout << "alta";
  293. }
  294. cout << a3;
  295.  
  296. int nrLocuriOcupate = (int)a3;
  297. cout << a1;
  298.  
  299. a1 = 10 + a1;
  300. if (a3 < a1) {
  301. cout << endl << "A3 are mai putine locuri";
  302. }
  303. else {
  304. cout << endl << "A1 are mai putine locuri";
  305. }
  306.  
  307. LinieUrbana linie1(300, "Mercedes", 100, 2.5f);
  308. cout << linie1;
  309.  
  310. linie1.updateLoc(10, 45);
  311. linie1[60] = 1;
  312. cout << "\n Valoarea cursei " << linie1.getNumarLinie() << " este " << linie1.getVenit();
  313.  
  314. LinieUrbana linie2;
  315. cin >> linie2;
  316. cout << " \n Linia urbana citita " << linie2;
  317.  
  318. ofstream fisierLinieUrbana;
  319. fisierLinieUrbana << linie2;
  320.  
  321. LinieUrbana linie3;
  322. linie3.citireFisier("LinieUrbana2.txt");
  323. cout << "\nRestaurat din fisier: " << linie3;
  324.  
  325. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement