Advertisement
196040

OOP zadaci za vezbanje 1 Akcii

May 19th, 2020
379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.69 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>//За потребите на еден приватен банкар кој тргува со акции, потребно е да се направи
  3. using namespace std; //модул за менаџирање со клиентски портфолија.
  4. class StockRecord { //За таа цел, треба да се креира класа StockRecord.
  5. private: //Класата треба да содржи:
  6. char ID[12]; //ID, кој означува која е акцијата која се тргува (низа од 12 знаци)
  7. char kompanija[50]; //Име на компанијата која ја издала акцијата (низа од 50 знаци)
  8. double cena; //Цена според која се купени акциите (реален број)
  9. double momentalna; //Моментална цена на акцијата (реален број)
  10. int kupeni; //Број на акции кои се купени (цел број)
  11. public: //За класата да се дефинираат потребните конструктори и
  12. StockRecord() {
  13.     strcpy(this->ID, "");
  14.     strcpy(this->kompanija, "");
  15.     this-> cena = 0.0;
  16.     this-> momentalna = 0.0;
  17.     this-> kupeni = 0;
  18. }
  19. StockRecord(char * ID,char * kompanija, double cena, int kupeni) {
  20. strcpy(this->ID, ID);
  21. strcpy(this->kompanija, kompanija);
  22. this-> cena = cena;
  23. //this-> momentalna = momentalna;
  24. this-> kupeni = kupeni;
  25. }
  26. StockRecord(const StockRecord &sr) {
  27.     strcpy(this->ID, sr.ID);
  28. strcpy(this->kompanija, sr.kompanija);
  29. this-> cena = sr.cena;
  30. //this-> momentalna = sr.momentalna;
  31. this-> kupeni = sr.kupeni;
  32. }
  33. void setNewPrice(double c) { //*set* метода за моменталната цена со потпис void setNewPrice(double c) (10 поени).
  34. this->momentalna = c;
  35. }
  36. double value() { //Исто така, да се имплементираат методи double value()
  37. return 1.0 * kupeni * momentalna; //Вредност = број на акции * моментална цена
  38. }//Првата треба да ја пресметува вредноста на акциите,
  39. double profit() { //и double profit().
  40. return 1.0 * kupeni * (momentalna - cena); //Профит = број на акции * (моментална цена - цена по која се купени)
  41. }  //а втората треба да го пресметува моменталниот профит од акциите.
  42. friend ostream &operator<<(ostream &o, StockRecord &s) { //Дополнително, да се преоптовари операторот <<
  43. o<<s.kompanija<<" "<<s.kupeni<<" "<<s.cena<<" "<<s.momentalna<<" "<<s.profit()<<endl;
  44. return o; //за печатење на објектот во следниот формат (5 поени):
  45. }//*Компанија БројНаАкции КуповнаЦена МоменталнаЦена Профит*
  46. };
  47. class Client { //Да се креира класа Client
  48. private: //која содржи:
  49. char imeprezime[60]; //Име и презиме на клиентот (низа од 60 знаци)
  50. int smetkaid; //ID на сметка (цел број)
  51. StockRecord * niza; //Низа од компании кои ги поседува клиентот (динамичка низа од објекти од класата StockRecord)
  52. int broj; //Број на објекти во низата (цел број)
  53. public: //За класата Client да се дефинираат потребните конструктори,
  54. Client() {
  55. strcpy(this->imeprezime, "");
  56. this->smetkaid = 0;
  57. this-> niza = new StockRecord[0];
  58. this->broj = 0;
  59. }
  60. Client(char * imeprezime, int smetkaid) {
  61.     strcpy(this->imeprezime, imeprezime);
  62.     this->smetkaid=smetkaid;
  63.     this->broj = 0;
  64.   //  for(int i=0; i<broj;i++)
  65.    // this->niza[i] = niza[i];
  66. }
  67. Client(const Client &cc) {
  68.     strcpy(this->imeprezime, cc.imeprezime);
  69.     this->smetkaid=cc.smetkaid;
  70.   //  this->broj = cc.broj;
  71.    // for(int i=0; i<broj;i++)
  72.    // this->niza[i] = cc.niza[i];
  73. }
  74. ~Client() { //деструктор
  75. delete [] niza;
  76. }
  77. double totalValue() {//и метода double totalValue() која ќе ја пресметува моменталната вредност на акциите
  78.  double total = 0.0;//кои ги поседува клиентот. Таа се пресметува како збир од вредноста на сите акции од
  79. for(int i=0; i<broj;i++)//секоја компанија од кои е составено клиентското портфолио (15 поени).
  80. total = total + niza[i].value();
  81.     return total;
  82. } //Дополнително, за класата да се преоптоварат операторите:
  83. Client &operator+=(const StockRecord &sr) { //+= за купување на нова компанија во портфолиото (
  84.    StockRecord * tmp = new StockRecord [broj+1];// додавање на нов објект од класата StockRecord
  85.    for(int i=0; i<broj; i++) //во низата со компании) (10 поени)
  86.     tmp[i] = niza[i];
  87.     tmp[broj++] = sr;
  88.     niza = tmp;
  89.     return *this;
  90. }
  91. friend ostream &operator<<(ostream &o, Client &c) { //<< за печатење на информации за портфолиото на клиентот
  92. o<<c.smetkaid<<" "<<c.totalValue()<<endl; //така што во првиот ред ќе бидат прикажани ID на сметката и моменталната вредност на
  93.  for(int i=0; i<c.broj; i++) //портфолиото одделени со празно место,
  94.  o<<c.niza[i]; //а во секој нареден ред ќе бидат прикажани компаниите од кои е составено портфолиото,
  95.   return o; //секоја во посебен ред (5 поени)
  96. }
  97. };
  98. // ne menuvaj vo main-ot
  99. int main(){
  100.     int test;
  101.     cin >> test;
  102.     if(test == 1){
  103.         double price;
  104.         cout << "=====TEST NA KLASATA StockRecord=====" << endl;
  105.         StockRecord sr("1", "Microsoft", 60.0, 100);
  106.         cout << "Konstruktor OK" << endl;
  107.         cin >> price;
  108.         sr.setNewPrice(price);
  109.         cout << "SET metoda OK" << endl;
  110.     }
  111.     else if(test == 2){
  112.         cout << "=====TEST NA METODITE I OPERATOR << OD KLASATA StockRecord=====" << endl;
  113.         char id[12], company[50];
  114.         double price, newPrice;
  115.         int n, shares;
  116.         cin >> n;
  117.         for(int i = 0; i < n; ++i){
  118.             cin >> id;
  119.             cin >> company;
  120.             cin >> price;
  121.             cin >> newPrice;
  122.             cin >> shares;
  123.             StockRecord sr(id, company, price, shares);
  124.             sr.setNewPrice(newPrice);
  125.             cout << sr.value() << endl;
  126.             cout << sr;
  127.         }
  128.     }
  129.     else if(test == 3){
  130.         cout << "=====TEST NA KLASATA Client=====" << endl;
  131.         char companyID[12], companyName[50], clientName[50];
  132.         int clientID, n, shares;
  133.         double oldPrice, newPrice;
  134.         bool flag = true;
  135.         cin >> clientName;
  136.         cin >> clientID;
  137.         cin >> n;
  138.         Client c(clientName, clientID);
  139.         cout << "Konstruktor OK" << endl;
  140.         for(int i = 0; i < n; ++i){
  141.             cin >> companyID;
  142.             cin >> companyName;
  143.             cin >> oldPrice;
  144.             cin >> newPrice;
  145.             cin >> shares;
  146.             StockRecord sr(companyID, companyName, oldPrice, shares);
  147.             sr.setNewPrice(newPrice);
  148.             c += sr;
  149.             if(flag){
  150.                 cout << "Operator += OK" << endl;
  151.                 flag = false;
  152.             }
  153.         }
  154.         cout << c;
  155.         cout << "Operator << OK" << endl;
  156.     }
  157.     return 0;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement