Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ListaPracownikow.h"
- ListaPracownikow::ListaPracownikow() : m_pPoczatek(nullptr), m_nLiczbaPracownikow(0)
- {
- }
- ListaPracownikow::~ListaPracownikow()
- {
- Pracownik* obecny = m_pPoczatek;
- while (obecny != nullptr)
- {
- Pracownik* nastepny = obecny->m_pNastepny;
- delete obecny;
- obecny = nastepny;
- }
- m_pPoczatek = nullptr;
- m_nLiczbaPracownikow = 0;
- }
- void ListaPracownikow::Dodaj(const Pracownik& p)
- {
- if (m_pPoczatek == nullptr) // czy lista jest pusta
- {
- m_pPoczatek = new Pracownik(p); // jeli tak to nowy element jest pocz¹tkiem listy
- m_nLiczbaPracownikow++;
- return;
- }
- else
- {
- Pracownik* poprzedni = nullptr;
- Pracownik* obecny = m_pPoczatek;
- Pracownik* nastepny = m_pPoczatek->m_pNastepny;
- int numer = 0;
- while (obecny != nullptr)
- {
- int x = p.Porownaj(*obecny);
- if (poprzedni == nullptr && x == -1) // mniejszy ni¿ pocz¹tek
- {
- Pracownik* nowy = new Pracownik(p);
- nowy->m_pNastepny = m_pPoczatek;
- m_pPoczatek = nowy;
- m_nLiczbaPracownikow++;
- }
- else if (numer == m_nLiczbaPracownikow-1 && x == 1) // wiêkszy ni¿ ostatni
- {
- Pracownik* nowy = new Pracownik(p);
- obecny->m_pNastepny = nowy;
- m_nLiczbaPracownikow++;
- }
- else if (nastepny != nullptr) // jeli jest nastepny
- {
- int y = p.Porownaj(*nastepny);
- if (x + y == 0) // jest wiêkszy niz poprzedni ale mniejszy ni¿ nastepny
- {
- Pracownik* nowy = new Pracownik(p);
- nowy->m_pNastepny = nastepny;
- obecny->m_pNastepny = nowy;
- m_nLiczbaPracownikow++;
- }
- }
- poprzedni = obecny;
- obecny = obecny->m_pNastepny;
- if (obecny != nullptr)
- {
- nastepny = obecny->m_pNastepny;
- }
- else
- {
- nastepny = nullptr;
- }
- numer++;
- }
- }
- }
- void ListaPracownikow::Usun(const Pracownik& wzorzec)
- {
- Pracownik* poprzedni = nullptr;
- Pracownik* obecny = m_pPoczatek;
- Pracownik* nastepny = m_pPoczatek->m_pNastepny;
- while(obecny!=nullptr)
- {
- if (wzorzec == *obecny && obecny == m_pPoczatek)
- {
- Pracownik* temp = m_pPoczatek;
- m_pPoczatek = temp->m_pNastepny;
- delete temp;
- m_nLiczbaPracownikow--;
- return;
- }
- if (nastepny == nullptr && wzorzec == *obecny)
- {
- delete obecny;
- poprzedni->m_pNastepny = nullptr;
- m_nLiczbaPracownikow--;
- return;
- }
- if (nastepny != nullptr && wzorzec == *obecny)
- {
- poprzedni->m_pNastepny = nastepny;
- delete obecny;
- m_nLiczbaPracownikow--;
- return;
- }
- poprzedni = obecny;
- obecny = obecny->m_pNastepny;
- if (obecny != nullptr)
- {
- nastepny = obecny->m_pNastepny;
- }
- else
- {
- nastepny = nullptr;
- }
- }
- }
- void ListaPracownikow::WypiszPracownikow() const
- {
- Pracownik* obecny = m_pPoczatek;
- cout << "Lp.\tImie\tNazwisko\tData urodzenia\nId\n";
- for (int i = 1; i <= m_nLiczbaPracownikow; i++)
- {
- cout << i << "\t"<< *obecny << endl;
- obecny = obecny->m_pNastepny;
- }
- }
- const Pracownik* ListaPracownikow::Szukaj(const char* nazwisko, const char* imie) const
- {
- Pracownik* obecny = m_pPoczatek;
- while (obecny != nullptr)
- {
- if (obecny->SprawdzNazwisko(nazwisko) == 0 && obecny->SprawdzImie(imie) == 0)
- {
- return obecny;
- }
- obecny = obecny->m_pNastepny;
- }
- return nullptr;
- }
- void ListaPracownikow::ZapisDoPliku() const
- {
- fstream plik("pracownicy.txt", fstream::out | fstream::trunc);
- Pracownik* obecny = m_pPoczatek;
- while (obecny != nullptr)
- {
- plik << *obecny << '\n';
- obecny = obecny->m_pNastepny;
- }
- plik.close();
- }
- void ListaPracownikow::OdczytZPliku()
- {
- Pracownik* obecny = m_pPoczatek;
- while (obecny != nullptr)
- {
- Pracownik* nastepny = obecny->m_pNastepny;
- delete obecny;
- obecny = nastepny;
- }
- m_pPoczatek = nullptr;
- m_nLiczbaPracownikow = 0;
- fstream plik("pracownicy.txt", fstream::in);
- Pracownik p;
- while (plik >> p)
- {
- this->Dodaj(p);
- }
- plik.close();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement