#include "ListaPracownikow.h" #include "Pracownik.h" #include "Napis.h" #include using namespace std; ListaPracownikow::ListaPracownikow() { m_nLiczbaPracownikow = 0; m_pPoczatek = nullptr; } ListaPracownikow::~ListaPracownikow() { } void ListaPracownikow::Dodaj(const Pracownik & p) { auto sz = Szukaj(p.Nazwisko(), p.Imie()); if (sz != nullptr) { return; } Pracownik *cp = new Pracownik(p); if (m_pPoczatek == nullptr) { cp->m_pNastepny = nullptr; m_pPoczatek = cp; m_nLiczbaPracownikow = 1; return; } Pracownik *old = nullptr; Pracownik *s = m_pPoczatek; while (s != nullptr) { auto cmpp = cp->Porownaj(*s); if (cmpp < 0) { if (old != nullptr) { old->m_pNastepny = cp; cp->m_pNastepny = s; } m_nLiczbaPracownikow++; return; } old = s; s = s->m_pNastepny; } s = old; s->m_pNastepny = cp; cp->m_pNastepny = nullptr; m_nLiczbaPracownikow++; } void ListaPracownikow::Usun(const Pracownik& wzorzec) { Pracownik *obecny = m_pPoczatek; Pracownik *poprzedni = nullptr; if (m_nLiczbaPracownikow == 0) { cout << "Nie ma pracownikow" << endl; } else { for (int i = 0; i <= m_nLiczbaPracownikow; i++) { if (obecny->Porownaj(wzorzec) == 0) { if (obecny == m_pPoczatek) { m_pPoczatek = obecny->m_pNastepny; m_nLiczbaPracownikow--; delete obecny; return; } else { poprzedni->m_pNastepny = obecny->m_pNastepny; m_nLiczbaPracownikow--; delete obecny; return; } } else { poprzedni = obecny; obecny = obecny->m_pNastepny; } } cout << "Nie ma podanego pracownika" << endl; } } void ListaPracownikow::WypiszPracownikow() const { Pracownik *obecny = m_pPoczatek; int i = 1; /*if (m_nLiczbaPracownikow==0) { cout << "Brak pracownikow na liscie"<Wypisz(); obecny = obecny->m_pNastepny; } } */ while (obecny->m_pNastepny != nullptr) { cout << "Pracownik " << i << ": " << endl; obecny->Wypisz(); i++; obecny = obecny->m_pNastepny; } } const Pracownik*ListaPracownikow::Szukaj(const char* nazwisko, const char* imie) const { Pracownik *obecny = m_pPoczatek; if (m_nLiczbaPracownikow == 0) { cout << "Brak pracownikow na liscie" << endl; return nullptr; } else { for (int i = 1; i <= m_nLiczbaPracownikow; i++) { if (obecny->SprawdzImie(imie) == 0 && obecny->SprawdzNazwisko(nazwisko) == 0) { cout << "Znaleziono pracownika" << endl; return obecny; } else { obecny = obecny->m_pNastepny; } } return nullptr; } }