Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.86 KB | None | 0 0
  1. #include "ListaPracownikow.h"
  2.  
  3.  
  4. ListaPracownikow::ListaPracownikow() : m_pPoczatek(nullptr), m_nLiczbaPracownikow(0)
  5. {
  6. }
  7.  
  8. ListaPracownikow::~ListaPracownikow()
  9. {
  10.     Pracownik* obecny = m_pPoczatek;
  11.     while (obecny != nullptr)
  12.     {
  13.         Pracownik* nastepny = obecny->m_pNastepny;
  14.         delete obecny;
  15.         obecny = nastepny;
  16.     }
  17.     m_pPoczatek = nullptr;
  18.     m_nLiczbaPracownikow = 0;
  19. }
  20.  
  21.  
  22. void ListaPracownikow::Dodaj(const Pracownik& p)
  23. {
  24.     if (m_pPoczatek == nullptr) // czy lista jest pusta
  25.     {
  26.         m_pPoczatek = new Pracownik(p); // jeœli tak to nowy element jest pocz¹tkiem listy
  27.         m_nLiczbaPracownikow++;
  28.         return;
  29.     }
  30.     else
  31.     {
  32.         Pracownik* poprzedni = nullptr;
  33.         Pracownik* obecny = m_pPoczatek;
  34.         Pracownik* nastepny = m_pPoczatek->m_pNastepny;
  35.         int numer = 0;
  36.         while (obecny != nullptr)
  37.         {
  38.             int x = p.Porownaj(*obecny);
  39.             if (poprzedni == nullptr && x == -1) // mniejszy ni¿ pocz¹tek
  40.             {
  41.                 Pracownik* nowy = new Pracownik(p);
  42.                 nowy->m_pNastepny = m_pPoczatek;
  43.                 m_pPoczatek = nowy;
  44.                 m_nLiczbaPracownikow++;
  45.             }
  46.             else if (numer == m_nLiczbaPracownikow-1 && x == 1) // wiêkszy ni¿ ostatni
  47.             {
  48.                 Pracownik* nowy = new Pracownik(p);
  49.                 obecny->m_pNastepny = nowy;
  50.                 m_nLiczbaPracownikow++;
  51.             }
  52.             else if (nastepny != nullptr) // jeœli jest nastepny
  53.             {
  54.                 int y = p.Porownaj(*nastepny);
  55.                 if (x + y == 0) // jest wiêkszy niz poprzedni ale mniejszy ni¿ nastepny
  56.                 {
  57.                     Pracownik* nowy = new Pracownik(p);
  58.                     nowy->m_pNastepny = nastepny;
  59.                     obecny->m_pNastepny = nowy;
  60.                     m_nLiczbaPracownikow++;
  61.                 }
  62.             }
  63.             poprzedni = obecny;
  64.             obecny = obecny->m_pNastepny;
  65.             if (obecny != nullptr)
  66.             {
  67.                 nastepny = obecny->m_pNastepny;
  68.             }
  69.             else
  70.             {
  71.                 nastepny = nullptr;
  72.             }
  73.             numer++;
  74.         }
  75.     }
  76. }
  77. void ListaPracownikow::Usun(const Pracownik& wzorzec)
  78. {
  79.     Pracownik* poprzedni = nullptr;
  80.     Pracownik* obecny = m_pPoczatek;
  81.     Pracownik* nastepny = m_pPoczatek->m_pNastepny;
  82.    
  83.     while(obecny!=nullptr)
  84.     {
  85.         if (wzorzec == *obecny && obecny == m_pPoczatek)
  86.         {
  87.             Pracownik* temp = m_pPoczatek;
  88.             m_pPoczatek = temp->m_pNastepny;
  89.             delete temp;
  90.             m_nLiczbaPracownikow--;
  91.             return;
  92.         }
  93.         if (nastepny == nullptr && wzorzec == *obecny)
  94.         {
  95.             delete obecny;
  96.             poprzedni->m_pNastepny = nullptr;
  97.             m_nLiczbaPracownikow--;
  98.             return;
  99.         }
  100.         if (nastepny != nullptr && wzorzec == *obecny)
  101.         {
  102.             poprzedni->m_pNastepny = nastepny;
  103.             delete obecny;
  104.             m_nLiczbaPracownikow--;
  105.             return;
  106.         }
  107.         poprzedni = obecny;
  108.         obecny = obecny->m_pNastepny;
  109.         if (obecny != nullptr)
  110.         {
  111.             nastepny = obecny->m_pNastepny;
  112.         }
  113.         else
  114.         {
  115.             nastepny = nullptr;
  116.         }
  117.  
  118.     }
  119. }
  120.  
  121. void ListaPracownikow::WypiszPracownikow() const
  122. {
  123.     Pracownik* obecny = m_pPoczatek;
  124.     cout << "Lp.\tImie\tNazwisko\tData urodzenia\nId\n";
  125.     for (int i = 1; i <= m_nLiczbaPracownikow; i++)
  126.     {
  127.         cout << i << "\t"<< *obecny << endl;
  128.         obecny = obecny->m_pNastepny;
  129.     }
  130. }
  131.  
  132. const Pracownik* ListaPracownikow::Szukaj(const char* nazwisko, const char* imie) const
  133. {
  134.     Pracownik* obecny = m_pPoczatek;
  135.     while (obecny != nullptr)
  136.     {
  137.         if (obecny->SprawdzNazwisko(nazwisko) == 0 && obecny->SprawdzImie(imie) == 0)
  138.         {
  139.             return obecny;
  140.         }
  141.         obecny = obecny->m_pNastepny;
  142.     }
  143.     return nullptr;
  144. }
  145.  
  146. void ListaPracownikow::ZapisDoPliku() const
  147. {
  148.     fstream plik("pracownicy.txt", fstream::out | fstream::trunc);
  149.     Pracownik* obecny = m_pPoczatek;
  150.     while (obecny != nullptr)
  151.     {
  152.         plik << *obecny << '\n';
  153.         obecny = obecny->m_pNastepny;
  154.     }
  155.     plik.close();
  156. }
  157.  
  158. void ListaPracownikow::OdczytZPliku()
  159. {
  160.     Pracownik* obecny = m_pPoczatek;
  161.     while (obecny != nullptr)
  162.     {
  163.         Pracownik* nastepny = obecny->m_pNastepny;
  164.         delete obecny;
  165.         obecny = nastepny;
  166.     }
  167.     m_pPoczatek = nullptr;
  168.     m_nLiczbaPracownikow = 0;
  169.  
  170.     fstream plik("pracownicy.txt", fstream::in);
  171.     Pracownik p;
  172.     while (plik >> p)
  173.     {
  174.         this->Dodaj(p);
  175.     }
  176.     plik.close();
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement