Facebook
From Tacky Bison, 6 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 248
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cstring>
  5. #include <conio.h>
  6. #include <cstring>
  7. #include <list>
  8. #include <sstream>
  9. #include <cstdlib>
  10.  
  11. using namespace std;
  12.  
  13.  
  14.  
  15.  
  16. class CProdukt
  17. {
  18.       //friend class CWarzywo; // deklaracja przyja�ni, aby mo�liwy by� dost�p do p� primVat w nowej klasie pochodnej
  19.       protected:              // zaprzyja�nienie zamienione na rozwi�zanie z polami protected
  20.          int mLp;
  21.          string mName;  // nazwa CProduktu
  22.          double mCount;   // liczba CProdukt�w
  23.          string mUnit;   // jednostka miary
  24.          double mPrize;   // cena netto 1 sztuki
  25.          double mVat;     // warto�� podatku VAT
  26.       public:
  27.              CProdukt();                   // konstruktor
  28.              CProdukt(int aLp, string aName, double aCount, string aUnit, double aPrize, double aVat);                   // konstruktor
  29.          void Wypelnij(void);
  30.          //void Pokaz(void);
  31.          virtual void Pokaz(void);
  32.          CProdukt(CProdukt &l);     // konstruktor kopiujacy
  33.          ~CProdukt();                  // destruktor
  34.          int getLp(void);
  35.          void setLp(int);
  36.          virtual CProdukt * Klonuj();
  37.          virtual string Zwroc(void);
  38. };
  39.  
  40. CProdukt::CProdukt(int aLp, string aName, double aCount, string aUnit, double aPrize, double aVat)
  41. {
  42.         mLp=aLp;
  43.         mName=aName;
  44.         mCount=aCount;
  45.         mUnit=aUnit;
  46.         mPrize=aPrize;
  47.         mVat=aVat;
  48. }
  49. CProdukt::CProdukt()
  50. {
  51.         mLp = 0;
  52. }
  53.  
  54. CProdukt::CProdukt(CProdukt &l)
  55. {
  56.         mLp=l.mLp;
  57.         mName=l.mName;
  58.         mCount=l.mCount;
  59.         mUnit=l.mUnit;
  60.         mPrize=l.mPrize;
  61.         mVat=l.mVat;
  62. }
  63.  
  64. CProdukt::~CProdukt()
  65. {
  66.  ;
  67. }
  68.  
  69. void CProdukt::Wypelnij(void)
  70. {
  71.  cout << "Podaj nazwe:\n";
  72.  cin >> mName;
  73.  cout << "Podaj ilosc:\n";
  74.  cin >> mCount;
  75.  cout << "Podaj jednostke miary:\n";
  76.  cin >> mUnit;
  77.  cout << "Podaj cene:\n";
  78.  cin >> mPrize;                        // UWAGA obowi�zuje notacja z kropk� .
  79.  cout << "Podaj stawke VAT:\n";
  80.  cin >> mVat;
  81.  
  82. }
  83. void CProdukt::Pokaz(void)
  84. {
  85.         cout << endl;
  86.         cout << mLp << "\t";
  87.         cout << mName << "\t";
  88.         cout << mCount << "\t";
  89.         cout << mUnit << "\t";
  90.         cout << mPrize << "\t";
  91.         cout << mVat << endl;
  92. }
  93. int CProdukt::getLp(void)
  94. {
  95.  return(mLp);
  96. }
  97. void CProdukt::setLp(int x)
  98. {
  99.  mLp = x;
  100. }
  101.  
  102. CProdukt* CProdukt::Klonuj()
  103. {
  104.       CProdukt *n = new CProdukt(*this);
  105.       return n;
  106. }
  107.  
  108. string CProdukt::Zwroc(void)
  109. {
  110.       string wyjscie;
  111.       stringstream wyjscie_stream;
  112.       wyjscie_stream << endl << mLp << "\t" << mName << "\t" << mCount << "\t" << mUnit << "\t" << mPrize << "\t" << mVat << "\t" << endl;
  113.       wyjscie = wyjscie_stream.str();
  114.       return wyjscie;
  115. }
  116.  
  117.  
  118. class CWarzywo : public CProdukt
  119.     {
  120.     public:
  121.     string mKolor;
  122.     CWarzywo();
  123.     CWarzywo(CWarzywo &l);
  124.     CWarzywo(int aLp, string aName, double aCount, string aUnit, double aPrize, double aVat, string aKolor);
  125.     void Pokaz(void);
  126.     CProdukt* Klonuj();
  127.     string Zwroc(void);
  128.     };
  129. CWarzywo::CWarzywo()
  130. {
  131.        mKolor="nieznany";
  132. }
  133.  
  134. CWarzywo::CWarzywo(CWarzywo &l)
  135. {
  136.         mLp=l.mLp;
  137.         mName=l.mName;
  138.         mCount=l.mCount;
  139.         mUnit=l.mUnit;
  140.         mPrize=l.mPrize;
  141.         mVat=l.mVat;
  142.         mKolor=l.mKolor;
  143. }
  144.  
  145. CWarzywo::CWarzywo(int aLp, string aName, double aCount, string aUnit, double aPrize, double aVat, string aKolor)
  146. {
  147.         mLp=aLp;
  148.         mName=aName;
  149.         mCount=aCount;
  150.         mUnit=aUnit;
  151.         mPrize=aPrize;
  152.         mVat=aVat;
  153.         mKolor=aKolor;
  154. }
  155. void CWarzywo::Pokaz(void)
  156. {
  157.         cout << endl;
  158.         cout << mLp << "\t";
  159.         cout << mName << "\t";
  160.         cout << mCount << "\t";
  161.         cout << mUnit << "\t";
  162.         cout << mPrize << "\t";
  163.         cout << mVat << "\t";
  164.         cout << mKolor << endl;
  165. }
  166.  
  167. string CWarzywo::Zwroc(void)
  168. {
  169.       string wyjscie;
  170.       stringstream wyjscie_stream;
  171.       wyjscie_stream << endl << mLp << "\t" << mName << "\t" << mCount << "\t" << mUnit << "\t" << mPrize << "\t" << mVat << "\t" << mKolor << "\t" << endl;
  172.       wyjscie = wyjscie_stream.str();
  173.       return wyjscie;
  174. }
  175.  
  176. CProdukt* CWarzywo::Klonuj()
  177. {
  178.       CProdukt *n = new CWarzywo(*this);
  179.       return n;
  180. }
  181.  
  182.  
  183. class CWezel
  184. {
  185.       public:
  186.              CWezel *mNastepny; // wskaznik na mNastepny CWezel listy
  187.              int indeks;
  188.              CProdukt *mWskaznikNaCProdukt;       // wskaznik na CProdukt
  189.              CWezel();
  190.              ~CWezel();
  191. };
  192.  
  193. CWezel::CWezel()
  194. {
  195.       mNastepny = NULL;
  196. }
  197.  
  198.  
  199. class CBaza
  200. {
  201.       private:
  202.  
  203.       public:
  204.              CWezel *mPierwszy; // wskaznik na mPierwszy CWezel listy
  205.              CBaza();
  206.              ~CBaza();
  207.              void Pokaz(void);
  208.              void Dodaj(CProdukt &aProdukt); // dodawanie nowego CProduktu na poczatek listy
  209.              void Dodaj_na_koniec(CProdukt &aProdukt); // dodawanie nowego CProduktu na koniec listy
  210.              void Dodaj(int aLiczba);
  211.              void Dodaj_na_koniec(); // dodawanie nowego elementu na koniec listy
  212.              void Wczytaj(char *aName);
  213.              void Zapisz(char *aName);
  214.  
  215.              friend ostream & operator<< (ostream &aWyjscie, const CBaza &aBaza);
  216.              void operator + (CProdukt &p);
  217.              CBaza& operator= (const CBaza& db);
  218. };
  219.  
  220. void CBaza::Zapisz(char *aName)
  221. {
  222.      ofstream out(aName);
  223.      out.write((char *) this, sizeof(CBaza));
  224.      out.close();
  225. }
  226. void CBaza::Wczytaj(char *aName)
  227. {
  228.      ifstream in(aName);
  229.      in.read((char *) this, sizeof(CBaza));
  230.      in.close();
  231. }
  232.  
  233. void CBaza::operator + (CProdukt &p)
  234. {
  235.      Dodaj(p);
  236. }
  237.  
  238. CBaza& CBaza::operator= (const CBaza& f)
  239. {
  240.    if (this == &f) return *this;   // Spokojnie poradzi sobie z pseudo-przypisaniem
  241.  
  242.  
  243.    CWezel *wsk_CWezel;
  244.    CProdukt *wsk_CProdukt;
  245.      wsk_CWezel = f.mPierwszy;
  246.  
  247.      while ( wsk_CWezel != NULL)
  248.      {
  249.           wsk_CProdukt = wsk_CWezel->mWskaznikNaCProdukt;
  250.           this->Dodaj_na_koniec(*wsk_CProdukt);
  251.           wsk_CWezel = wsk_CWezel->mNastepny;
  252.      }
  253.  
  254.  
  255.    return *this;
  256. }
  257.  
  258. CBaza::CBaza()
  259. {
  260.         mPierwszy = NULL;
  261. }
  262. CBaza::~CBaza()
  263. {
  264. }
  265.  
  266. void CBaza::Dodaj(CProdukt &aProdukt)
  267. {
  268.  CWezel *nowy = new CWezel;
  269.   if (mPierwszy == NULL)
  270.              {
  271.              mPierwszy = nowy;
  272.              }
  273.   else
  274.              {
  275.              nowy->mNastepny = mPierwszy;
  276.              mPierwszy = nowy;
  277.              }
  278.   mPierwszy->mWskaznikNaCProdukt = aProdukt.Klonuj();
  279. }
  280.  
  281. void CBaza::Dodaj_na_koniec(CProdukt &aProdukt) //Dodaje na koniec listy
  282. {
  283.  CWezel *nowy = new CWezel;
  284.  nowy->mWskaznikNaCProdukt = aProdukt.Klonuj();
  285.  
  286.  CWezel *wsk_CWezel;
  287.  wsk_CWezel = mPierwszy;
  288.  
  289. if (mPierwszy == NULL)
  290.       {
  291.             mPierwszy = nowy;
  292.       }
  293. else
  294. {
  295.     while ( wsk_CWezel != NULL)
  296.           {
  297.                  if (wsk_CWezel->mNastepny == NULL)
  298.                  {
  299.                  wsk_CWezel->mNastepny = nowy;break;
  300.                  }
  301.           wsk_CWezel = wsk_CWezel->mNastepny;
  302.           }
  303. }
  304.  
  305.  
  306. }
  307.  
  308. void CBaza::Dodaj(int aLiczba)
  309. {
  310.  CWezel *nowy = new CWezel;
  311.  
  312.   if (mPierwszy == NULL)
  313.              {
  314.              mPierwszy = nowy;
  315.              }
  316.   else
  317.              {
  318.              nowy->mNastepny = mPierwszy;
  319.              mPierwszy = nowy;
  320.              }
  321.  
  322.   mPierwszy->indeks = aLiczba;
  323. }
  324.  
  325.  
  326. void CBaza::Pokaz(void)
  327. {
  328.      CWezel *wsk_CWezel;
  329.      wsk_CWezel = mPierwszy;
  330.      //cout<< "POKAZ:\n";
  331.      while ( wsk_CWezel != NULL)
  332.      {
  333.           wsk_CWezel->mWskaznikNaCProdukt->Pokaz();
  334.           wsk_CWezel = wsk_CWezel->mNastepny;
  335.      }
  336. }
  337.  
  338. ostream & operator << (ostream &aWyjscie, const CBaza &aBaza)
  339. {
  340.         string tmp;
  341.  
  342.          CWezel *wsk_CWezel;
  343.      wsk_CWezel = aBaza.mPierwszy;
  344.      //cout<< "POKAZ:\n";
  345.      while ( wsk_CWezel != NULL)
  346.      {
  347.           tmp = tmp + wsk_CWezel->mWskaznikNaCProdukt->Zwroc();
  348.           wsk_CWezel = wsk_CWezel->mNastepny;
  349.      }
  350.        return aWyjscie << tmp;
  351. }
  352.  
  353. int main(void)
  354. {
  355.  
  356.         CBaza bd2;
  357.         CBaza bd1;
  358.         CProdukt *wsk_CProdukt;
  359.         CWarzywo *wsk_CWarzywo;
  360.  
  361.  
  362.         CProdukt p1(2, "CProdukt", 10, "kg", 1.20, 0.07);
  363.         CWarzywo w1(2, "marchew", 100, "kg", 1.50, 0.07, "czerwony");
  364.         CWarzywo w2(2, "burak", 100, "kg", 1.50, 0.07, "ciemno-czerwony");
  365.         wsk_CProdukt = &w1;
  366.         wsk_CWarzywo = &w1;
  367.  
  368.  
  369.  
  370.         bd2.Dodaj(w1);
  371.         bd2.Dodaj(p1);
  372.         bd2 + w2;
  373.  
  374.         cout << "bd2 + w2, POKAZ BD2:\n";
  375.         cout << bd2;
  376.  
  377.  
  378.         bd1 = bd2;
  379.         cout << "bd1=bd2, POKAZ BD1:\n";
  380.         cout << bd1;
  381.  
  382.         //bd2.Zapisz("CBaza");
  383.  
  384.  
  385.         /// zapis do pliku
  386.        bd2.Zapisz("CBaza");
  387.  
  388.  
  389.         // odczyt z pliku
  390.         CBaza bd3;
  391.         bd3.Wczytaj("CBaza");
  392.         cout << "bd3.Wczytaj, POKAZ BD3:\n";
  393.         bd3.Pokaz();
  394.  
  395.  
  396.  
  397.  
  398.        // spr konstruktora kopiuj�cego
  399.        //CProdukt *pp = new CProdukt(p1);
  400.        //CProdukt * pp;
  401.        //pp = w1.Klonuj();
  402.        //pp = &w1;
  403.        //pp->Pokaz();
  404.  
  405.  
  406.  
  407.         //CProdukt *mWskaznikNaCProdukt = new w1;
  408.  
  409. /*
  410.         w1.Pokaz();
  411.         wsk_CProdukt->Pokaz();
  412.         wsk_CWarzywo->Pokaz();
  413.  
  414.         // Dynamiczne przydzielanie pamiecy
  415.         CProdukt *p1 = new CProdukt;
  416.         p1->getLp(6);
  417.         cout << p1->getLp() << endl;
  418.         delete p1;
  419.         CProdukt *p2 = new CProdukt(5, "maslo", 10, "sztuk", 1.00, 0.07);
  420.         p2->Pokaz();
  421.  
  422.         // Deklaracja statyczna
  423.         CProdukt p3(4, "chleb", 10, "sztuk", 2.00, 0.07);
  424.         CProdukt p4;
  425.  
  426.         p3.Pokaz();
  427.         p4.Wypelnij();
  428.         p4.Pokaz();
  429.  
  430.         cout << p4.getLp();
  431.         p4.getLp(5);
  432.         cout << p4.getLp();
  433.  
  434.  
  435.         */
  436.         system("PAUSE");
  437.         return(0);
  438. }