mirror of
https://github.com/szymon-jozef/ZUT-notatki.git
synced 2026-09-07 20:20:39 +02:00
prawie gotowe xdd
This commit is contained in:
BIN
uczelnia/2_semestr/programowanie/laby/lab10/out/zad10
Executable file
BIN
uczelnia/2_semestr/programowanie/laby/lab10/out/zad10
Executable file
Binary file not shown.
@@ -0,0 +1,123 @@
|
|||||||
|
#include <cstddef>
|
||||||
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
|
#include <ostream>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Adres {
|
||||||
|
std::string ulica;
|
||||||
|
int nr_mieszkania;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Adres(std::string ulica, int nr_mieszkania)
|
||||||
|
: ulica(ulica), nr_mieszkania(nr_mieszkania) {}
|
||||||
|
|
||||||
|
friend std::ostream &operator<<(std::ostream &os, const Adres &adres) {
|
||||||
|
os << adres.ulica << " mieszkania " << adres.nr_mieszkania;
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
friend std::ostream &operator<<(std::ostream &os, Adres &adres) {
|
||||||
|
os << adres.ulica << " mieszkania " << adres.nr_mieszkania;
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class Pracownik {
|
||||||
|
protected:
|
||||||
|
std::string imie;
|
||||||
|
float pensja;
|
||||||
|
std::unique_ptr<Adres> adres;
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual float obliczWyplate() = 0;
|
||||||
|
Pracownik(std::string imie, float pensja, std::unique_ptr<Adres> adres)
|
||||||
|
: imie(imie), pensja(pensja), adres(std::move(adres)) {}
|
||||||
|
virtual ~Pracownik() = default;
|
||||||
|
friend std::ostream &operator<<(std::ostream &os, Pracownik &p) {
|
||||||
|
os << p.imie << " zarabia " << p.obliczWyplate() << " i mieszka na "
|
||||||
|
<< *(p.adres);
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class PracownikEtatowy : public Pracownik {
|
||||||
|
|
||||||
|
public:
|
||||||
|
PracownikEtatowy(std::string imie, float pensja, std::unique_ptr<Adres> adres)
|
||||||
|
: Pracownik(imie, pensja, std::move(adres)) {}
|
||||||
|
|
||||||
|
float obliczWyplate() override { return pensja; }
|
||||||
|
};
|
||||||
|
|
||||||
|
class Zleceniobiorca : public Pracownik {
|
||||||
|
float godziny;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Zleceniobiorca(std::string imie, float pensja, std::unique_ptr<Adres> adres,
|
||||||
|
float godziny)
|
||||||
|
: Pracownik(imie, pensja, std::move(adres)), godziny(godziny) {}
|
||||||
|
float obliczWyplate() override { return pensja * godziny; }
|
||||||
|
};
|
||||||
|
|
||||||
|
class Dzial {
|
||||||
|
std::vector<std::shared_ptr<Pracownik>> pracownicy;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Dzial() {};
|
||||||
|
|
||||||
|
void dodajPracownika(std::shared_ptr<Pracownik> pracownik) {
|
||||||
|
pracownicy.push_back(pracownik);
|
||||||
|
}
|
||||||
|
|
||||||
|
float sumaWyplat() const {
|
||||||
|
float sum = 0;
|
||||||
|
for (auto &pracownik : pracownicy) {
|
||||||
|
sum += pracownik->obliczWyplate();
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wypiszPracownikow() const {
|
||||||
|
std::cout << "=== Wszyscy pracownicy ===\n";
|
||||||
|
for (const auto &pracownik : pracownicy) {
|
||||||
|
std::cout << *pracownik << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class Kierownik : public PracownikEtatowy {
|
||||||
|
std::vector<std::shared_ptr<Pracownik>> podwladni;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Kierownik(std::string imie, float pensja, std::unique_ptr<Adres> adres)
|
||||||
|
: PracownikEtatowy(imie, pensja, std::move(adres)) {}
|
||||||
|
|
||||||
|
float obliczWyplate() override { return pensja; }
|
||||||
|
|
||||||
|
float sumaWyplatZespolu() {
|
||||||
|
float sum = 0;
|
||||||
|
for (auto &pracownik : podwladni) {
|
||||||
|
sum += pracownik->obliczWyplate();
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dodajPracownika(std::shared_ptr<Pracownik> p) { podwladni.push_back(p); }
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
Kierownik kierownik = Kierownik(
|
||||||
|
"Stasiek", 238943, std::make_unique<Adres>("Wojska polskiego", 23));
|
||||||
|
|
||||||
|
kierownik.dodajPracownika(std::make_shared<PracownikEtatowy>(
|
||||||
|
"Bożena", 2500, std::make_unique<Adres>("Żołnierska", 18)));
|
||||||
|
|
||||||
|
kierownik.dodajPracownika(std::make_shared<Zleceniobiorca>(
|
||||||
|
"Adam", 6700, std::make_unique<Adres>("Wiejska", 1), 30));
|
||||||
|
|
||||||
|
std::cout << "Pracownicy sumarycznie zarabiają: "
|
||||||
|
<< kierownik.sumaWyplatZespolu();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
@@ -23,12 +23,12 @@ class Pracownik {
|
|||||||
protected:
|
protected:
|
||||||
std::string imie;
|
std::string imie;
|
||||||
float pensja;
|
float pensja;
|
||||||
Adres *adres;
|
std::unique_ptr<Adres> adres;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual float obliczWyplate() = 0;
|
virtual float obliczWyplate() = 0;
|
||||||
Pracownik(std::string imie, float pensja, Adres *adres)
|
Pracownik(std::string imie, float pensja, std::unique_ptr<Adres> adres)
|
||||||
: imie(imie), pensja(pensja), adres(adres) {}
|
: imie(imie), pensja(pensja), adres(std::move(adres)) {}
|
||||||
virtual ~Pracownik() = default;
|
virtual ~Pracownik() = default;
|
||||||
friend std::ostream &operator<<(std::ostream &os, Pracownik &p) {
|
friend std::ostream &operator<<(std::ostream &os, Pracownik &p) {
|
||||||
os << p.imie << " zarabia " << p.obliczWyplate() << " i mieszka na "
|
os << p.imie << " zarabia " << p.obliczWyplate() << " i mieszka na "
|
||||||
@@ -40,8 +40,8 @@ public:
|
|||||||
class PracownikEtatowy : public Pracownik {
|
class PracownikEtatowy : public Pracownik {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PracownikEtatowy(std::string imie, float pensja, Adres *adres)
|
PracownikEtatowy(std::string imie, float pensja, std::unique_ptr<Adres> adres)
|
||||||
: Pracownik(imie, pensja, adres) {}
|
: Pracownik(imie, pensja, std::move(adres)) {}
|
||||||
|
|
||||||
float obliczWyplate() override { return pensja; }
|
float obliczWyplate() override { return pensja; }
|
||||||
};
|
};
|
||||||
@@ -50,8 +50,9 @@ class Zleceniobiorca : public Pracownik {
|
|||||||
float godziny;
|
float godziny;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Zleceniobiorca(std::string imie, float pensja, Adres *adres, float godziny)
|
Zleceniobiorca(std::string imie, float pensja, std::unique_ptr<Adres> adres,
|
||||||
: Pracownik(imie, pensja, adres), godziny(godziny) {}
|
float godziny)
|
||||||
|
: Pracownik(imie, pensja, std::move(adres)), godziny(godziny) {}
|
||||||
float obliczWyplate() override { return pensja * godziny; }
|
float obliczWyplate() override { return pensja * godziny; }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -73,7 +74,7 @@ public:
|
|||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wypiszPracownikow() {
|
void wypiszPracownikow() const {
|
||||||
std::cout << "=== Wszyscy pracownicy ===\n";
|
std::cout << "=== Wszyscy pracownicy ===\n";
|
||||||
for (const auto &pracownik : pracownicy) {
|
for (const auto &pracownik : pracownicy) {
|
||||||
std::cout << *pracownik << std::endl;
|
std::cout << *pracownik << std::endl;
|
||||||
@@ -84,10 +85,10 @@ public:
|
|||||||
int main() {
|
int main() {
|
||||||
Dzial dzial = Dzial();
|
Dzial dzial = Dzial();
|
||||||
dzial.dodajPracownika(std::make_unique<PracownikEtatowy>(
|
dzial.dodajPracownika(std::make_unique<PracownikEtatowy>(
|
||||||
"Bożena", 2500, new Adres("Żołnierska", 18)));
|
"Bożena", 2500, std::make_unique<Adres>("Żołnierska", 18)));
|
||||||
|
|
||||||
dzial.dodajPracownika(std::make_unique<Zleceniobiorca>(
|
dzial.dodajPracownika(std::make_unique<Zleceniobiorca>(
|
||||||
"Adam", 6700, new Adres("Wiejska", 1), 30));
|
"Adam", 6700, std::make_unique<Adres>("Wiejska", 1), 30));
|
||||||
|
|
||||||
dzial.wypiszPracownikow();
|
dzial.wypiszPracownikow();
|
||||||
std::cout << "Pracownicy sumarycznie zarabiają: " << dzial.sumaWyplat();
|
std::cout << "Pracownicy sumarycznie zarabiają: " << dzial.sumaWyplat();
|
||||||
|
|||||||
Reference in New Issue
Block a user