SHARE
TWEET

Untitled

a guest May 19th, 2019 84 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <stack>
  6. #include <deque>
  7. #include <cstring>
  8. #include <iomanip>
  9. #include <memory>
  10.  
  11. using namespace std;
  12.  
  13. //Ne Bank nego Account
  14. class Bank {
  15.     int ID;
  16.     string password;
  17.     string name, surname, number; // zasto ne Person accountHolder; ?
  18.     double deposit;
  19. public:
  20.     Bank(int ID, string name, string surname, string password, string number, double deposit);
  21.  
  22.     Bank &RaiseAmount(int dep);
  23.  
  24.     Bank &PutMoneyToAccount(int dep);
  25.  
  26.     double getDeposit() const { return deposit; }
  27.  
  28.     string getName() const { return name; }
  29.  
  30.     string setPassword(string pass) { password = pass; }
  31.  
  32.     string getNumber() const { return number; }
  33.  
  34.     string getSurname() const { return surname; }
  35.  
  36.     string getPassword() const { return password; }
  37.  
  38.     int getID() const { return ID; }
  39.  
  40.     void PrintAccountInformation();
  41. };
  42.  
  43. class Date {
  44.     int d, m, y;
  45. public:
  46.     Date(int d, int m, int y);
  47.  
  48.     int getDay() const { return d; }
  49.  
  50.     int getMonth() const { return m; }
  51.  
  52.     int getYear() const { return y; }
  53.  
  54.     void PrintDate() const {
  55.         cout << d << "/" << m << "/" << y << endl;
  56.     };
  57. };
  58.  
  59. //Zasto ovo ne bi bila Osoba(Person), jer je vlasnik osoba :D
  60. class Owner {
  61.     string name, surname;
  62.     Date d;
  63. public:
  64.     Owner(string name, string surname, int d, int m, int y) : name(name), surname(surname), d(d, m, y) {};
  65.  
  66.     string getName() const { return name; }
  67.  
  68.     string getSurname() const { return surname; }
  69.  
  70.     void PrintOwnerInformation() const;
  71. };
  72.  
  73. class Vehicle {
  74.     int ID;
  75.     //Ovdje bi trebalo biti Person owner. Nikad ne imenuj varijablu samo s jednim slovom
  76.     Owner o;
  77.     string color, regNumber;
  78.     double price;
  79. public:
  80.     Vehicle(int ID, string name, string surname, int d, int m, int y, string color, string regNumber, double price)
  81.             : ID(ID), o(name, surname, d, m, y), color(color), regNumber(regNumber), price(price) {};
  82.  
  83.     //getPrice() ?
  84.     double getBuyPrice() const { return price; }
  85.  
  86.     virtual double getDailyRentPrice() const = 0;
  87.  
  88.     double getBuyingPrice() const { return price; }
  89.  
  90.     int getID() const { return ID; }
  91.  
  92.     string getColor() const { return color; }
  93.  
  94.     string getRegNumber() const { return regNumber; }
  95.  
  96.     virtual Vehicle *GetCopy() const = 0;
  97.  
  98.     virtual void PrintAbout() const;
  99. };
  100.  
  101. class Car : public Vehicle {
  102.     string carType;
  103.     int numberOfDoors;
  104. public:
  105.     Car(int ID, string carType, string name, string surname, int d, int m, int y, string color, string regNumber,
  106.         double price, int numberOfDoors) : Vehicle(ID, name, surname, d, m, y, color, regNumber, price),
  107.                                            numberOfDoors(numberOfDoors), carType(carType) {};
  108.  
  109.     int getNumbeOfDoors() const { return numberOfDoors; }
  110.  
  111.     double getDailyRentPrice() const override { return (getBuyPrice() / 100 + numberOfDoors * 50); }
  112.  
  113.     Vehicle *GetCopy() const override { return new Car(*this); }
  114.  
  115.     void PrintAbout() const override;
  116. };
  117.  
  118. class Truck : public Vehicle {
  119.     int trailerLength; // HAHAHA NE ZNAM KAKO SE NA ENG KAZEE // dobro si :D
  120. public:
  121.     Truck(int ID, string name, string surname, int d, int m, int y, string color, string regNumber, double price,
  122.           int trailerLength) : Vehicle(ID, name, surname, d, m, y, color, regNumber, price),
  123.                                trailerLength(trailerLength) {};
  124.  
  125.     int getTrailerLength() const { return trailerLength; }
  126.  
  127.     double getDailyRentPrice() const override { return (getBuyPrice() / 300 + trailerLength * 10); }
  128.  
  129.     Vehicle *GetCopy() const override { return new Truck(*this); }
  130.  
  131.     void PrintAbout() const override;
  132. };
  133.  
  134. class Bike : public Vehicle {
  135.     string bikeType;
  136.     int speedsNumber;
  137. public:
  138.     Bike(int ID, string bikeType, string name, string surname, int d, int m, int y, string color, string regNumber,
  139.          double price, int numberOfDoors) : Vehicle(ID, name, surname, d, m, y, color, regNumber, price),
  140.                                             bikeType(bikeType), speedsNumber(speedsNumber) {};
  141.  
  142.     int getSpeedsNumber() const { return speedsNumber; }
  143.  
  144.     double getDailyRentPrice() const override { return getBuyPrice() / 10; }
  145.  
  146.     Vehicle *GetCopy() const override { return new Bike(*this); }
  147.  
  148.     void PrintAbout() const override;
  149. };
  150.  
  151. // metode pocinju malim slovom uvijek
  152. class VehicleStore {
  153.     vector<shared_ptr<Vehicle> > availableVehicles;
  154.     vector<shared_ptr<Vehicle> > rentedVehicles;
  155.     vector<shared_ptr<Bank> > accounts;
  156. public:
  157.     VehicleStore() : availableVehicles(0), rentedVehicles(0) {};
  158.  
  159.     VehicleStore(const VehicleStore &v);
  160.  
  161.     VehicleStore &operator=(const VehicleStore &v);
  162.  
  163.     VehicleStore &CreateAcount();
  164.  
  165.     VehicleStore &ChangePassword();
  166.  
  167.     //getBalance
  168.     VehicleStore &SeeBalance();
  169.  
  170.     //addVehicleToStore
  171.     VehicleStore &AddVehicleOnStore();
  172.  
  173.     VehicleStore &AddMoneyToAccount();
  174.  
  175.     //addVehicle() zna se da se dodaje u Store
  176.     VehicleStore &AddVehicleOnStore(const Vehicle &v);
  177.  
  178.     VehicleStore &AddVehicleOnStore(Vehicle *v);
  179.  
  180.     VehicleStore &RentVehicle();
  181.  
  182.     //returnVehicle()?
  183.     VehicleStore &GetVehicleBack();
  184.  
  185.     VehicleStore &findID();
  186.  
  187.     bool IsAccountValid(int id, string password);
  188.  
  189.     friend bool ValidPassword(string pass);
  190.  
  191.     void AccessAccountInformation();
  192.  
  193.     void PrintAvailableVehicles() const;
  194.  
  195.     void PrintVehiclesFromLowestPrice();
  196.  
  197.     void PrintVehiclesFromHighestPrice();
  198.  
  199.     void PrintRentedVehicles() const;
  200. };
  201.  
  202. void Bank::PrintAccountInformation() {
  203.     cout << "ID: " << ID << endl;
  204.     cout << "Ime: " << name << endl;
  205.     cout << "Prezime: " << surname << endl;
  206.     cout << "Broj: " << number << endl;
  207.     cout << "Password: " << password << endl;
  208.     cout << "Stanje na racunu: " << deposit << endl;
  209. }
  210.  
  211. bool ValidPassword(string pass) {
  212.     bool upperCase(false), lowerCase(false), number(false);
  213.     bool Size(false);
  214.     for (int i = 0; i < pass.size(); i++) {
  215.         if (pass[i] >= 'A' && pass[i] <= 'Z')
  216.             upperCase = true;
  217.         if (pass[i] >= 'a' && pass[i] <= 'z')
  218.             lowerCase = true;
  219.         if (pass[i] >= 0 || pass[i] <= 9)
  220.             number = true;
  221.     }
  222.     if (pass.size() >= 3 && pass.size() <= 25)
  223.         Size = true;
  224.     if (upperCase && lowerCase && number && Size) // mogao si umjesto if-a samo return upperCase && lowerCase && number && Size;
  225.         return true;
  226.     return false;
  227. }
  228.  
  229. // i umjesto da ova metoda trazi unos password-a za racuna bolje da joj se password proslijedi kao parametar
  230. // Metoda treba da ima samo jednu odgovornost(jednu stvar koju treba uraditi) - da pronadje id accounta i to je to.
  231. // To se u programiranju zove Single responsibility principle/ Princip jedne odgovornosti. Guglaj malo
  232. VehicleStore &VehicleStore::findID() {
  233.     if (accounts.size() <= 0) { // if (accounts.empty()) { ... } bolje
  234.         cout << "Nema kreiranih racuna!" << endl;
  235.         return *this;
  236.     }
  237.     string password;
  238.     int accID;
  239.     cout << "Unesite password racuna: ";
  240.     cin >> password;
  241.     for (int i = 0; i < accounts.size(); i++) {
  242.         if (password == accounts[i]->getPassword()) {
  243.             cout << "ID vaseg racuna: " << accounts[i]->getID();
  244.             return *this;
  245.         }
  246.     }
  247.     cout << "Account nije pronadjen!" << endl;
  248.     return *this;
  249. }
  250.  
  251. VehicleStore &VehicleStore::ChangePassword() {
  252.     string oldPassword, newPassword;
  253.     int accID;
  254.     bool findedPass(false);
  255.     cout << "Unesite vas stari password: ";
  256.     cin >> oldPassword;
  257.     for (int i = 0; i < accounts.size(); i++) {
  258.         if (oldPassword == accounts[i]->getPassword()) {
  259.             findedPass = true;
  260.             accID = accounts[i]->getID();
  261.         }
  262.     }
  263.     if (!findedPass) {
  264.         cout << "Password nije pronadjen!" << endl;
  265.         return *this;
  266.     }
  267.     cout << "Unesite vas novi password: ";
  268.     cin >> newPassword;
  269.     if (ValidPassword(newPassword))
  270.         accounts[accID]->setPassword(newPassword);
  271.     else
  272.         cout << "Nepravilan password!";
  273.     return *this;
  274. }
  275.  
  276. //Isti komentar kao i za accountId
  277. void VehicleStore::AccessAccountInformation() {
  278.     string numb;
  279.     int accID;
  280.     bool finded(false);
  281.     if (accounts.size() == 0) {
  282.         cout << "Nema kreiranih racuna!" << endl;
  283.         return;
  284.     }
  285.     cout << "Unesite broj povezan sa racunom: ";
  286.     cin >> numb;
  287.     for (int i = 0; i < accounts.size(); i++) {
  288.         if (numb == accounts[i]->getNumber()) {
  289.             finded = true;
  290.             accID = accounts[i]->getID();
  291.         }
  292.     }
  293.     if (!finded) {
  294.         cout << "Racun nije pronadjen!" << endl;
  295.         return;
  296.     }
  297.     accounts[accID]->PrintAccountInformation();
  298.     return;
  299. }
  300.  
  301. VehicleStore &VehicleStore::operator=(const VehicleStore &v) {
  302.     availableVehicles.resize(v.availableVehicles.size());
  303.     rentedVehicles.resize(v.rentedVehicles.size());
  304.     for (int i = 0; i < availableVehicles.size(); i++)
  305.         availableVehicles[i] = shared_ptr<Vehicle>(v.availableVehicles[i]->GetCopy());
  306.     for (int i = 0; i < rentedVehicles.size(); i++)
  307.         rentedVehicles[i] = shared_ptr<Vehicle>(v.rentedVehicles[i]->GetCopy());
  308. }
  309.  
  310. bool VehicleStore::IsAccountValid(int id, string password) {
  311.     if (id > accounts.size() - 1 || accounts.size() == 0) // accounts.empty()
  312.         return false;
  313.  
  314.     // ponovo return id == accounts[id]->getID() && password == accounts[id]->getPassword();
  315.     // Kad god imas u if-u izraz na osnovu kojeg return-as true/false a izraz se evaluira evaluira u true/false, odma mozes taj izraz return-at
  316.     if (id == accounts[id]->getID() && password == accounts[id]->getPassword())
  317.         return true;
  318.     return false;
  319. }
  320.  
  321. VehicleStore::VehicleStore(const VehicleStore &v) : availableVehicles(v.availableVehicles),
  322.                                                     rentedVehicles(v.rentedVehicles) {
  323.     for (int i = 0; i < availableVehicles.size(); i++)
  324.         availableVehicles[i] = shared_ptr<Vehicle>(v.availableVehicles[i]->GetCopy());
  325.     for (int i = 0; i < rentedVehicles.size(); i++)
  326.         rentedVehicles[i] = shared_ptr<Vehicle>(v.rentedVehicles[i]->GetCopy());
  327. }
  328.  
  329. Date::Date(int d, int m, int y) {
  330.     int days[12]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  331.     if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
  332.         days[1]++;
  333.     if (y < 1 || d < 1 || m < 1 || m > 12 || d > days[m - 1])
  334.         throw ::domain_error("Neispravan datum!");
  335.     Date::d = d;
  336.     Date::m = m;
  337.     Date::y = y;
  338. }
  339.  
  340. void Owner::PrintOwnerInformation() const {
  341.     cout << "Ime: " << name << endl;
  342.     cout << "Prezime: " << surname << endl;
  343.     cout << "Datum rodjenja: ";
  344.     d.PrintDate();
  345.     cout << endl;
  346. }
  347.  
  348. void Car::PrintAbout() const {
  349.     cout << "Vrsta vozila: AUTO" << endl;
  350.     cout << "Tip vozila: " << carType << endl;
  351.     cout << "Broj vrata: " << numberOfDoors << endl;
  352.     Vehicle::PrintAbout();
  353. }
  354.  
  355. void Truck::PrintAbout() const {
  356.     cout << "Tip vozila: Kamion" << endl;
  357.     Vehicle::PrintAbout();
  358.     cout << "Duzina prikolice: " << trailerLength << endl;
  359. }
  360.  
  361. VehicleStore &VehicleStore::CreateAcount() {
  362.     string name, surname;
  363.     double deposit;
  364.     string password, number;
  365.     int valid = 0, counter = 2;
  366.     system("cls");
  367.     cout << "Password mora sadrzavati 3-25 znakova, veliko malo slovo te broj!" << endl;
  368.     while (valid == 0) {
  369.         cout << "Ostalo vam je jos " << counter + 1 << " pokusaja!" << endl;
  370.         cout << "Molimo vas, popunite sljedece podatke!\n";
  371.         cout << "Ime: ";
  372.         cin >> name;
  373.         cout << "Prezime: ";
  374.         cin >> surname;
  375.         cout << "Vas password: ";
  376.         cin >> password;
  377.         if (ValidPassword(password))
  378.             valid = 1;
  379.         else
  380.             cout << "Nepravilan password!" << endl;
  381.         if (counter == 0)
  382.             return *this;
  383.         counter--;
  384.     }
  385.     cout << "Unesite broj preko kojeg pristupate sifri(ako je zaboravite): ";
  386.     cin >> number;
  387.     cout << "Iznos koji uplacujete pri stvaranju racuna: ";
  388.     cin >> deposit;
  389.     accounts.push_back(make_shared<Bank>(accounts.size(), name, surname, password, number, deposit));
  390.     cout << "Uspjesno ste kreirali racun!\n";
  391.     cout << "ID racuna: " << accounts.size() - 1 << endl;
  392. }
  393.  
  394. Bank::Bank(int ID, string name, string surname, string password, string number, double deposit) {
  395.     if (deposit < 0)
  396.         throw range_error("Neispravan iznos!");
  397.     if (!ValidPassword(password))
  398.         throw range_error("Nepravilan password!");
  399.     this->deposit = deposit;
  400.     this->password = password;
  401.     this->number = number;
  402.     this->ID = ID;
  403.     this->name = name;
  404.     this->surname = surname;
  405. }
  406.  
  407. Bank &Bank::RaiseAmount(int amount) {
  408.     if (amount < 0 || amount > deposit)
  409.         throw range_error("Nemate dovoljno sredstava!");
  410.     deposit -= amount;
  411. }
  412.  
  413. Bank &Bank::PutMoneyToAccount(int amount) {
  414.     if (amount < 0)
  415.         throw range_error("Nepravilan iznos!");
  416.     deposit += amount;
  417. }
  418.  
  419. void Bike::PrintAbout() const {
  420.     cout << "Tip vozila: Biciklo" << endl;
  421.     cout << "Broj brzina: " << speedsNumber << endl;
  422.     cout << "Marka bicikla: " << bikeType << endl;
  423.     Vehicle::PrintAbout();
  424. }
  425.  
  426. void Vehicle::PrintAbout() const {
  427.     o.PrintOwnerInformation();
  428.     cout << "Boja vozila: " << getColor() << endl;
  429.     cout << "Registracijski broj: " << getRegNumber() << endl;
  430.     cout << "Cijena vozila: " << getBuyPrice() << endl;
  431. }
  432.  
  433. // Prevelika funkcija. Razbiti na vise manjih dijelova
  434. VehicleStore &VehicleStore::AddVehicleOnStore() {
  435.     string name, surname, color, regNumber, password;
  436.     int day, month, year, ID, valid = 0, answer, counter = 2;
  437.     double price;
  438.     char vehicle;
  439.     while (valid == 0) {
  440.         cout << "Dobrodosli u meni za dodavanje vozila!" << endl;
  441.         cout << "Unesite ID racuna: ";
  442.         cin >> ID;
  443.         cout << "Unesite password racuna: ";
  444.         cin >> password;
  445.         if (IsAccountValid(ID, password))
  446.             valid = 1;
  447.         else {
  448.             cout << "Racun nije validan!" << endl;
  449.             cout << "Ostalo vam je jos " << counter << " poukusaja!" << endl;
  450.         }
  451.         if (counter == 0)
  452.             return *this;
  453.         counter--;
  454.     }
  455.     cout
  456.             << "Cijene za postavljanje na forum \n1-Auto (10 KM)\n2-Kamion (20 KM) \n3-Biciklo(3.5 KM)\nNastaviti: (1-Da, 0-Ne)"
  457.             << endl;
  458.     do {
  459.         cout << "Izbor: ";
  460.         cin >> answer;
  461.     } while (answer != 0 && answer != 1);
  462.     if (answer == 0)
  463.         return *this;
  464.     cout << "Tip vaseg vozila (A-Auto, K-Kamion, B-Biciklo): ";
  465.     cin >> vehicle;
  466.     cout << "Unesite vas datum rodjenja: ";
  467.     cin >> day >> month >> year;
  468.     cout << "Registracijski broj vozila: ";
  469.     cin >> regNumber;
  470.     cout << "Boja: ";
  471.     cin >> color;
  472.     cout << "Cijena vozila koju trazite: ";
  473.     cin >> price;
  474.     switch (vehicle) {
  475.         case 'A': {
  476.             try {
  477.                 cin.ignore(1000, '\n');
  478.                 cin.clear();
  479.                 string carType;
  480.                 cout << "Unesite tip vozila: ";
  481.                 cin >> carType;
  482.                 int numberDoors;
  483.                 cout << "Molimo vas, unesite jos broj vrata za auto: ";
  484.                 cin >> numberDoors;
  485.                 availableVehicles.push_back(make_shared<Car>(availableVehicles.size(), carType, accounts[ID]->getName(),
  486.                                                              accounts[ID]->getSurname(), day, month, year, color,
  487.                                                              regNumber, price, numberDoors));
  488.                 accounts[ID]->RaiseAmount(10);
  489.             }
  490.             catch (range_error except) {
  491.                 cout << except.what();
  492.             }
  493.         }
  494.             break;
  495.         case 'K':
  496.             try {
  497.                 int trailerLength;
  498.                 cout << "Molimo vas, unesite duzinu prikolice za kamion: ";
  499.                 cin >> trailerLength;
  500.                 availableVehicles.push_back(
  501.                         make_shared<Truck>(availableVehicles.size(), name, surname, day, month, year, color, regNumber,
  502.                                            price, trailerLength));
  503.                 accounts[ID]->RaiseAmount(50);
  504.             }
  505.             catch (range_error except) {
  506.                 cout << except.what();
  507.             }
  508.             break;
  509.         case 'B':
  510.             try {
  511.                 int speedsNumber;
  512.                 string bikeType;
  513.                 cout << "Unesite marku(tip) bicikla: ";
  514.                 cin >> bikeType;
  515.                 cout << "Molimo vas, unesite broj brzina bicikla: ";
  516.                 cin >> speedsNumber;
  517.                 availableVehicles.push_back(
  518.                         make_shared<Bike>(availableVehicles.size(), bikeType, name, surname, day, month, year, color,
  519.                                           regNumber, price, speedsNumber));
  520.                 accounts[ID]->RaiseAmount(3.5);
  521.             }
  522.             catch (range_error except) {
  523.                 cout << except.what();
  524.             }
  525.             break;
  526.     }
  527.     cout << "Uspjesno ste dodali vozilo na forum, ID vozila: " << availableVehicles.size() - 1 << endl;
  528.     return *this;
  529. }
  530.  
  531. VehicleStore &VehicleStore::RentVehicle() {
  532.     int vehicleID, accountID, price, days;
  533.     string pass;
  534.     vector<shared_ptr<Vehicle> > temp;
  535.     if (availableVehicles.size() == 0) {
  536.         cout << "Nema dostupnih vozila!" << endl;
  537.         return *this;
  538.     }
  539.     cout << "Unesite ID vozila koje zelite rentati: ";
  540.     cin >> vehicleID;
  541.     cout << "Unesite ID accounta sa kojim cete platiti: ";
  542.     cin >> accountID;
  543.     cout << "Unesite password accounta: ";
  544.     cin >> pass;
  545.     if (!IsAccountValid(accountID, pass)) {
  546.         cout << "Racun nije pronadjen!";
  547.         return *this;
  548.     }
  549.     if (vehicleID > availableVehicles.size() || vehicleID < 0)
  550.         throw range_error("Nepostojeci ID!");
  551.     cout << "Broj dana na koji zelite iznajmiti vozilo: ";
  552.     cin >> days;
  553.     price = days * availableVehicles[vehicleID]->getDailyRentPrice();
  554.     cout << "To ce vas kostati " << price << endl;
  555.     try {
  556.         accounts[accountID]->RaiseAmount(price);
  557.         rentedVehicles.push_back(shared_ptr<Vehicle>(availableVehicles[vehicleID]->GetCopy()));
  558.         availableVehicles[vehicleID] = nullptr;
  559.     }
  560.     catch (range_error except) {
  561.         cout << except.what();
  562.         return *this;
  563.     }
  564.     cout << "Uspjesno ste rentali vozilo rednog broja: " << vehicleID << endl;
  565.     for (int i = 0; i < availableVehicles.size(); i++) {
  566.         if (availableVehicles[i] != nullptr)
  567.             temp.push_back(shared_ptr<Vehicle>(availableVehicles[i]->GetCopy()));
  568.     }
  569.     availableVehicles = temp;
  570.     return *this;
  571. }
  572.  
  573. void VehicleStore::PrintAvailableVehicles() const {
  574.     if (availableVehicles.size() == 0) {
  575.         cout << "Nema dostupnih vozila!" << endl;
  576.         return;
  577.     }
  578.     for (int i = 0; i < availableVehicles.size(); i++) {
  579.         cout << "ID: " << i << endl;
  580.         availableVehicles[i]->PrintAbout();
  581.     }
  582. }
  583.  
  584. VehicleStore &VehicleStore::GetVehicleBack() {
  585.     int ID;
  586.     if (rentedVehicles.size() == 0) {
  587.         cout << "Nema rentanih vozila!" << endl;
  588.         return *this;
  589.     }
  590.     cout << "Unesite ID vozila koje vracate: ";
  591.     cin >> ID;
  592.     if (ID > rentedVehicles.size()) {
  593.         cout << "Nepostojece vozilo!" << endl;
  594.         return *this;
  595.     }
  596.     availableVehicles.insert(availableVehicles.begin() + ID, shared_ptr<Vehicle>(
  597.             rentedVehicles[ID]->GetCopy())); // DA NE BI PROMJENIO ID POSLIJE IZNAJMLJIVANJA //
  598.     rentedVehicles[ID] = nullptr;
  599.     vector<shared_ptr<Vehicle> > temp;
  600.     for (int i = 0; i < rentedVehicles.size(); i++)
  601.         if (rentedVehicles[i] != nullptr)
  602.             temp.push_back(shared_ptr<Vehicle>(rentedVehicles[i]->GetCopy()));
  603.     rentedVehicles = temp;
  604.     return *this;
  605. }
  606.  
  607. void VehicleStore::PrintRentedVehicles() const {
  608.     system("cls");
  609.     if (rentedVehicles.size() == 0) {
  610.         cout << "Nema rentanih vozila!" << endl;
  611.         return;
  612.     }
  613.     for (int i = 0; i < rentedVehicles.size(); i++) {
  614.         cout << "ID: " << i << endl;
  615.         rentedVehicles[i]->PrintAbout();
  616.     }
  617. }
  618.  
  619. VehicleStore &VehicleStore::AddVehicleOnStore(const Vehicle &c) {
  620.     availableVehicles.push_back(shared_ptr<Vehicle>(c.GetCopy()));
  621.     return *this;
  622. }
  623.  
  624. VehicleStore &VehicleStore::AddVehicleOnStore(Vehicle *v) {
  625.     availableVehicles.push_back(shared_ptr<Vehicle>(v->GetCopy()));
  626.     return *this;
  627. }
  628.  
  629. VehicleStore &VehicleStore::AddMoneyToAccount() {
  630.     int ID;
  631.     double deposit;
  632.     string pass;
  633.     cout << "Unesite ID racuna: ";
  634.     cin >> ID;
  635.     cout << "Unesite password racuna: ";
  636.     cin >> pass;
  637.     if (!IsAccountValid(ID, pass)) {
  638.         cout << "Racun nije validan!" << endl;
  639.         return *this;
  640.     }
  641.     cout << "Koliko novca zelite uplatiti: ";
  642.     cin >> deposit;
  643.     if (deposit < 0) {
  644.         cout << "Nepravilan iznos!" << endl;
  645.         return *this;
  646.     }
  647.     accounts[ID]->PutMoneyToAccount(deposit);
  648.     return *this;
  649. }
  650.  
  651. void VehicleStore::PrintVehiclesFromLowestPrice() {
  652.     sort(availableVehicles.begin(), availableVehicles.end(),
  653.          [](shared_ptr<Vehicle> &v1, shared_ptr<Vehicle> &v2) { return v1->getBuyPrice() < v2->getBuyPrice(); });
  654.     PrintAvailableVehicles();
  655. }
  656.  
  657. void VehicleStore::PrintVehiclesFromHighestPrice() {
  658.     sort(availableVehicles.begin(), availableVehicles.end(),
  659.          [](shared_ptr<Vehicle> &v1, shared_ptr<Vehicle> &v2) { return v1->getBuyPrice() > v2->getBuyPrice(); });
  660.     PrintAvailableVehicles();
  661. }
  662.  
  663. VehicleStore &VehicleStore::SeeBalance() {
  664.     int id;
  665.     string pass;
  666.     cout << "ID racuna: ";
  667.     cin >> id;
  668.     cout << "Password: ";
  669.     cin >> pass;
  670.     if (!IsAccountValid(id, pass)) {
  671.         cout << "Racun nije pronadjen!" << endl;
  672.         return *this;
  673.     }
  674.     cout << "Stanje: " << accounts[id]->getDeposit() << endl;
  675. }
  676.  
  677. void WelcomeMessage() {
  678.     system("cls");
  679.     cout << "Dobrodosli u meni!" << endl;
  680.     cout
  681.             << "1-Kreiraj Racun\n2-Postavke Racuna\n3-Postavi vozilo na market\n4-Rentaj vozilo\n5-Vrati vozilo\n6-Pretrage"
  682.             << endl;
  683.     cout << "Vas izbor: ";
  684. }
  685.  
  686. void AccSettings() {
  687.     system("cls");
  688.     cout << "Dobrodosli u postavke racuna!" << endl;
  689.     cout
  690.             << "1-Promjeni sifru\n2-Pronadji ID racuna\n3-Pristupi informacijama racuna\n4-Uplati na racun\n5-Stanje racuna"
  691.             << endl;
  692.     cout << "Vas izbor: ";
  693. }
  694.  
  695. void Searches() {
  696.     system("cls");
  697.     cout
  698.             << "1-Prikazi vozila po ID\n2-Prikazi od najmanje cijene\n3-Prikazi od najvece cijene\n4-Prikazi rentana vozila"
  699.             << endl;
  700.     cout << "Vas izbor: ";
  701. }
  702.  
  703. int main() {
  704.     VehicleStore amazon;
  705.     Car a(0, "Audi A3", "Belmin", "Havic", 10, 11, 1999, "Crna", "131-223", 10000, 4);
  706.     Car c(0, "Skoda", "Adnan", "Hasic", 10, 8, 1997, "Crna", "1381-423", 25000, 2);
  707.     Truck t(0, "Neki", "Nekic", 05, 03, 2001, "Zlatna", "13-225-33", 650000, 150);
  708.     Bike b(0, "Amstrong", "Has", "Hasic", 07, 05, 1999, "Zelena", "131-3359", 3000, 21);
  709.     amazon.AddVehicleOnStore(a);
  710.     amazon.AddVehicleOnStore(&c);
  711.     amazon.AddVehicleOnStore(t);
  712.     amazon.AddVehicleOnStore(b);
  713.     int choice, secondChoice, accountSettings, searches;
  714.     do {
  715.         WelcomeMessage();
  716.         cin >> choice;
  717.         switch (choice) {
  718.             case 1:
  719.                 amazon.CreateAcount();
  720.                 system("pause");
  721.                 system("cls");
  722.                 do {
  723.                     cout << "Da li zelite novu opciju ili izaci(1-Nova, 0-Izaci): ";
  724.                     cin >> secondChoice;
  725.                 } while (secondChoice != 1 && secondChoice != 0);
  726.                 break;
  727.             case 2:
  728.                 AccSettings();
  729.                 cin >> accountSettings;
  730.                 if (accountSettings == 1)
  731.                     amazon.ChangePassword();
  732.                 else if (accountSettings == 2)
  733.                     amazon.findID();
  734.                 else if (accountSettings == 3)
  735.                     amazon.AccessAccountInformation();
  736.                 else if (accountSettings == 4)
  737.                     amazon.AddMoneyToAccount();
  738.                 else if (accountSettings == 5)
  739.                     amazon.SeeBalance();
  740.                 system("pause");
  741.                 system("cls");
  742.                 do {
  743.                     cout << "Da li zelite novu opciju ili izaci(1-Nova, 0-Izaci): ";
  744.                     cin >> secondChoice;
  745.                 } while (secondChoice != 1 && secondChoice != 0);
  746.                 break;
  747.             case 3:
  748.                 amazon.AddVehicleOnStore();
  749.                 system("pause");
  750.                 system("cls");
  751.                 do {
  752.                     cout << "Da li zelite novu opciju ili izaci(1-Nova, 0-Izaci): ";
  753.                     cin >> secondChoice;
  754.                 } while (secondChoice != 1 && secondChoice != 0);
  755.                 break;
  756.             case 4:
  757.                 try {
  758.                     amazon.RentVehicle();
  759.                 }
  760.                 catch (range_error except) {
  761.                     cout << except.what();
  762.                 }
  763.                 system("pause");
  764.                 system("cls");
  765.                 do {
  766.                     cout << "Da li zelite novu opciju ili izaci(1-Nova, 0-Izaci): ";
  767.                     cin >> secondChoice;
  768.                 } while (secondChoice != 1 && secondChoice != 0);
  769.                 break;
  770.             case 5:
  771.                 amazon.GetVehicleBack();
  772.                 system("pause");
  773.                 system("cls");
  774.                 do {
  775.                     cout << "Da li zelite novu opciju ili izaci(1-Nova, 0-Izaci): ";
  776.                     cin >> secondChoice;
  777.                 } while (secondChoice != 1 && secondChoice != 0);
  778.                 break;
  779.             case 6:
  780.                 Searches();
  781.                 cin >> searches;
  782.                 if (searches == 1)
  783.                     amazon.PrintAvailableVehicles();
  784.                 else if (searches == 2)
  785.                     amazon.PrintVehiclesFromLowestPrice();
  786.                 else if (searches == 3)
  787.                     amazon.PrintVehiclesFromHighestPrice();
  788.                 else if (searches == 4)
  789.                     amazon.PrintRentedVehicles();
  790.                 system("pause");
  791.                 system("cls");
  792.                 do {
  793.                     cout << "Da li zelite novu opciju ili izaci(1-Nova, 0-Izaci): ";
  794.                     cin >> secondChoice;
  795.                 } while (secondChoice != 1 && secondChoice != 0);
  796.                 break;
  797.         }
  798.     } while (secondChoice == 1);
  799.     cout << "Hvala na koristenju!";
  800.  
  801.     return 0;
  802. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top