Advertisement
unnn

v8 pers_calc

Jan 23rd, 2017
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.66 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <map>
  4. using namespace std;
  5.  
  6. class Calc {
  7. private:
  8.     float pret;
  9. public:
  10.     int idCalc;
  11.     char marca[30];
  12.  
  13.     //  ctor default
  14.     Calc() {
  15.         idCalc = 1000;
  16.         strcpy(marca, "Noname");
  17.         pret = 2000;
  18.     }
  19.  
  20.     //  ctor cu param
  21.     Calc(int idCale, char* marca, float pret) {
  22.         this->idCalc = idCale;
  23.         strcpy(this->marca, marca);
  24.         this->pret = pret;
  25.     }
  26.  
  27.     //  ctor de copiere
  28.     Calc(const Calc& c) {
  29.         this->idCalc = c.idCalc;
  30.         strcpy(this->marca, c.marca);
  31.         this->pret = c.pret;
  32.     }
  33.  
  34.     // dtor
  35.     ~Calc() {
  36.    
  37.     }
  38.  
  39.     //  pretul este privat in cerinta, deci avem nevoie de getter
  40.     float getPret() {
  41.         return pret;
  42.     }
  43.  
  44.     //  supraincarcare op egal
  45.     Calc& operator=(const Calc& c) {
  46.         this->idCalc = c.idCalc;
  47.         strcpy(this->marca, c.marca);
  48.         this->pret = c.pret;
  49.     }
  50.  
  51.     //  headere functii friend de suprainc op de flux
  52.     friend ostream& operator << (ostream& os, Calc& c);
  53.     friend ofstream& operator << (ofstream& os, Calc& c);
  54.     friend ifstream& operator >> (ifstream& is, Calc& c);
  55.  
  56.     //  random shit; o supraincarcare a lui + ca sa faca inmultire;
  57.     friend float operator+(Calc& a, Calc& b) {
  58.         float rezultat = a.getPret() * b.getPret(); //  aici e toata treaba; ia elementele astea si le inmulteste in loc sa faca adunare;
  59.             // lejer
  60.         return rezultat;
  61.     }
  62. };
  63.  
  64. //  supraincarcare <<
  65. ostream& operator<<(ostream& os, Calc& c) {
  66.     os << "ID Calculator: " << c.idCalc << endl
  67.         << "Marca: " << c.marca << endl
  68.         << "Pret: " << c.pret << endl;
  69.  
  70.     return os;
  71. }
  72. //  supraincarcare op << fisiere
  73. ofstream& operator << (ofstream& os, Calc& c) {
  74.     os << c.idCalc << endl
  75.         << c.marca << endl
  76.         << c.pret << endl;
  77.    
  78.     return os;
  79. }
  80.  
  81. //  supraincarcare op >> fisiere
  82. ifstream& operator >> (ifstream& is, Calc& c) {
  83.     is >> c.idCalc >> c.marca >> c.pret;
  84.     return is;
  85. }
  86.  
  87. class Pers {
  88. public:
  89.     int idPers;
  90.     char nume[30];
  91.     Calc* pCalc;
  92.     int idCalc;
  93.  
  94.     // ctor default
  95.     Pers() {
  96.         idPers = 100;
  97.         strcpy(nume, "Anonim");
  98.         pCalc = NULL;
  99.         idCalc = 0;
  100.     }
  101.  
  102.     // ctor cu param
  103.     Pers(int idPers, char* nume) {
  104.         this->idPers = idPers;
  105.         strcpy(this->nume, nume);
  106.         pCalc = NULL;
  107.         idCalc = 0;
  108.     }
  109.  
  110.     //  dtor
  111.     ~Pers() {
  112.  
  113.     }
  114.  
  115.     //  supraincarcare << pt asocierea unui calculator unei persoane ( ex. p1 << c1)
  116.     void operator << (Calc& c) {
  117.         this->pCalc = (Calc*)&c;
  118.         this->idCalc = c.idCalc;
  119.     }
  120.  
  121.     //  headere functii friend de supraincarcare op de flux
  122.     friend ostream& operator << (ostream& os, Pers& p);
  123.     friend ofstream& operator << (ofstream& os, Pers& p);
  124.     friend ifstream& operator >> (ifstream& is, Pers& p);
  125.  
  126.     //  supraincarcare > pt if(p1 > c2)
  127.     bool operator > (Calc& c) {
  128.         if (this->pCalc->getPret() > c.getPret())
  129.             return true;
  130.         else
  131.             return false;
  132.     }
  133.  
  134.     //  supraincarcare > pt acea comparatie if(p1 > p2)
  135.     bool operator > (Pers& p) {
  136.         if (this->pCalc->getPret() > p.pCalc->getPret())
  137.             return true;
  138.         else
  139.             return false;
  140.     }
  141. };
  142.  
  143. //  supraincarcare flux <<
  144. ostream& operator << (ostream& os, Pers& p) {
  145.     os << "ID Persoana: " << p.idPers << endl
  146.         << "Nume: " << p.nume << endl
  147.         << "Calculator" << endl
  148.         << *p.pCalc << endl;
  149.    
  150.     return os;
  151. }
  152.  
  153. // supraincarcare flux << pt fisiere
  154. ofstream& operator << (ofstream& os, Pers& p) {
  155.     os << p.idPers << endl
  156.         << p.nume << endl
  157.         << p.idCalc << endl;
  158.     return os;
  159. }
  160.  
  161. //  supraincarcare flux >> pt fisiere
  162. ifstream& operator >> (ifstream& is, Pers& p) {
  163.     is >> p.idPers >> p.nume >> p.idCalc;
  164.     return is;
  165. }
  166.  
  167. void main() {
  168.     // instantiere obiecte
  169.     Pers p1(123, "Popescu"), p2, p3, p4;
  170.     Calc c1(1001, "Fujitsu", 3200), c2(1002, "Acer", 3500), c3, c4;
  171.  
  172.     //  calculatoru` 1 este asociat persoanei 1; analog pt 2
  173.     p1 << c1; p2 << c2;
  174.  
  175.     //  afisare informatii calculator 1
  176.     cout << c1;
  177.  
  178.     //  afisare informatii persoana 1 si 2
  179.     cout << p1 << p2;
  180.  
  181.     //  instantiere calculator pt. persoana 4 (sa zicem ca si-a cumparat un calculator nou)
  182.     p4.pCalc = new Calc(1004, "Dell", 2500);
  183.  
  184.     //  verificare preturi calculatoare persoana - calculator (e putin ambigua treaba asta; cum era in cerinta, asa am facut)
  185.     if (p1 > c2) cout << p1.nume << " are un calculator mai scump decat " << c2.marca << endl;
  186.     else cout << p1.nume << " are un calculator mai iefitn decat " << c2.marca << endl;
  187.  
  188.     //  verificare preturi calculatoare pt persoane (asta e mai normal :))) )
  189.     if (p1 > p2) cout << p1.nume << " are un calculator mai scump decat " << p2.nume << endl;
  190.     else cout << p1.nume << " are un calculator mai ieftin decat " << p2.nume << endl;
  191.  
  192.     // instantiere fisiere iesire
  193.     ofstream calcOut("calc.txt", ios::app | ios::out);
  194.     ofstream persOut("pers.txt", ios::app | ios::out);
  195.    
  196.     //  se salveaza datele calculatoarelor in fisierul de iesire insantiat anterior
  197.     calcOut << c1; calcOut << c2;
  198.  
  199.     //  salvare date persoane in fisierul instantiat anterior
  200.     persOut << p1; persOut << p2;
  201.  
  202.  
  203.     //  instantiere fisiere intrare
  204.     ifstream calcInp("calc.txt", ios::in);
  205.     ifstream persInp("pers.txt", ios::in);
  206.  
  207.     //  se preiau din fisier datele pt c3, c4
  208.     calcInp >> c3; calcInp >> c4;
  209.  
  210.     //  afisare date c3, c4
  211.     cout << c3 << c4;
  212.  
  213.     //  instantiere map
  214.     map<int, Calc> reteaCalc;
  215.  
  216.     //  inserare date in map
  217.     reteaCalc.insert(pair<int, Calc>(c3.idCalc, c3));
  218.     reteaCalc.insert(make_pair(c4.idCalc, c4));
  219.  
  220.     //  citire persoane din fisier
  221.     persInp >> p3;
  222.     persInp >> p4;
  223.  
  224.     //  instantiere iterator
  225.     map<int, Calc>::iterator it;
  226.  
  227.     //  iterator ia valoarea pe care o gaseste dupa id-ul cautat
  228.     it = reteaCalc.find(p3.idCalc);
  229.  
  230.     //  calculatorul persoanei 3 este a 2-a valoare stocata in iterator
  231.     p3.pCalc = &(it->second);
  232.  
  233.     //  afisare data persoana 3
  234.     cout << p3;
  235.  
  236.     //  test supraincarcare + ca sa faca inmultire;
  237.     float rezultat = c1 + c2;
  238.     cout << rezultat << endl;
  239. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement