Advertisement
Guest User

LABKI 6 CPP POZDROO LECIMU W HUJ

a guest
Jan 26th, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.65 KB | None | 0 0
  1. #include "Data.h"
  2.  
  3. Data::Data(int d, int m, int r)
  4. {
  5.     this->Ustaw(d, m, r);
  6. }
  7. Data::~Data(void)
  8. {
  9. }
  10. void Data::Ustaw(int d, int m, int r)
  11. {
  12.     this->m_nDzien = d;
  13.     this->m_nMiesiac = m;
  14.     this->m_nRok = r;
  15.     Koryguj();
  16. }
  17.  
  18. int Data::Dzien() const
  19. {
  20.     return this->m_nDzien;
  21. }
  22. int Data::Miesiac() const
  23. {
  24.     return this->m_nMiesiac;
  25. }
  26. int Data::Rok() const
  27. {
  28.     return this->m_nRok;
  29. }
  30.  
  31. void Data::Wypisz() const
  32. {
  33.     std::cout << this->m_nDzien << "-" << this->m_nMiesiac << "-" << this->m_nRok << std::endl;
  34. }
  35.  
  36. void Data::Wpisz()
  37. {
  38.     int d, m, r;
  39.     std::cout << "Podaj dzien: ";
  40.     std::cin >> d;
  41.  
  42.     std::cout << "Podaj miesiac: ";
  43.     std::cin >> m;
  44.  
  45.     std::cout << "Podaj rok: ";
  46.     std::cin >> r;
  47.  
  48.     Ustaw(d, m, r);
  49. }
  50.  
  51. void Data::Koryguj()
  52. {
  53.     if(this->m_nMiesiac == 1 || this->m_nMiesiac == 3 || this->m_nMiesiac == 5 || this->m_nMiesiac == 7 || this->m_nMiesiac == 8 || this->m_nMiesiac == 10 || this->m_nMiesiac == 12)
  54.     {
  55.         if (this->m_nDzien > 31) this->m_nDzien = 31;
  56.     }
  57.     else
  58.     {
  59.         if (this->m_nDzien > 30) this->m_nDzien = 30;
  60.     }
  61.  
  62.         if (this->m_nMiesiac == 2)
  63.         {
  64.             if (this->m_nRok % 4 ==0)
  65.             {
  66.                 if (this->m_nDzien > 29) this->m_nDzien = 29;
  67.             }
  68.             else if (this->m_nDzien > 28) this->m_nDzien = 28;
  69.         }
  70. }
  71.  
  72.  
  73. int Data::Porownaj(const Data & wzor) const
  74. {
  75.     if (wzor.m_nDzien == this->m_nDzien && wzor.m_nMiesiac == this->m_nMiesiac && wzor.m_nRok == this->m_nRok) return 0;
  76.     if(wzor.m_nRok > this->m_nRok) return 1;
  77.     if (wzor.m_nRok == this->m_nRok && wzor.m_nMiesiac > this->m_nMiesiac) return 1;
  78.     if (wzor.m_nRok == this->m_nRok && wzor.m_nMiesiac == this->m_nMiesiac && wzor.m_nDzien > this->m_nDzien) return 1;
  79.     return -1;
  80. }
  81. ostream& operator<<(ostream &wy, const Data &d) {
  82.     return wy << d.m_nDzien << '-' << d.m_nMiesiac << '-' << d.m_nRok << '\n';
  83.  
  84. }
  85. istream& operator >> (istream &we, Data & d) {
  86.     char c;
  87.  
  88.     if (&we == &cin) we >> d.m_nDzien >> d.m_nMiesiac >> d.m_nRok;
  89.     else we >> d.m_nDzien >> c >> d.m_nMiesiac >> c >> d.m_nRok;
  90.  
  91.     d.Koryguj();
  92.  
  93.     return we;
  94.  
  95. }
  96.  
  97.  
  98.  
  99. #include "Napis.h"
  100.  
  101. Napis::Napis(const char* nap)
  102. {
  103.     this->m_nDl = strlen(nap);
  104.     this->m_pszNapis = new char[this->m_nDl];
  105.     strcpy(this->m_pszNapis, nap);
  106. }
  107.  
  108. Napis::~Napis()
  109. {
  110.     //this->m_nDl = -1;
  111.     //delete[] m_pszNapis;
  112. }
  113.  
  114. const char* Napis::Zwroc() const
  115. {
  116.     return this->m_pszNapis;
  117. }
  118.  
  119. void Napis::Ustaw(const char* nowy_napis)
  120. {
  121.     this->m_nDl = strlen(nowy_napis);
  122.     this->m_pszNapis = new char[this->m_nDl];
  123.     strcpy(this->m_pszNapis, nowy_napis);
  124. }
  125.  
  126. void Napis::Wypisz() const
  127. {
  128.     std::cout<<this->m_pszNapis << '\t';;
  129. }
  130.  
  131. void Napis::Wpisz()
  132. {
  133.     std::cin >> this->m_pszNapis;
  134. }
  135.  
  136. int Napis::SprawdzNapis(const char* por_napis) const
  137. {
  138.     if (strcmp(por_napis, this->m_pszNapis) == 0) return 0;
  139.     if (strcmp(por_napis, this->m_pszNapis)>0) return 1;
  140.     return -1;
  141. }
  142. Napis::Napis(const Napis &wzor) {
  143.     this->m_nDl = wzor.m_nDl;
  144.     this->m_pszNapis = new char[this->m_nDl];
  145.     strcpy(this->m_pszNapis, wzor.m_pszNapis);
  146.  
  147. }
  148. Napis& Napis::operator=(const Napis &wzor) {
  149.     //delete[] this->m_pszNapis;
  150.     this->m_nDl = wzor.m_nDl;
  151.     this->m_pszNapis = new char[this->m_nDl];
  152.     strcpy(this->m_pszNapis, wzor.m_pszNapis);
  153.     return *this;
  154. }
  155. bool Napis::operator==(const Napis &wzor) const
  156. {
  157.     return strcmp(this->m_pszNapis, wzor.m_pszNapis) == 0;
  158. }
  159. ostream & operator<<(ostream & wy, const Napis &p) {
  160.     return wy << p.m_pszNapis;
  161. }
  162. istream & operator >> (istream &we, Napis & p)
  163. {
  164.     char z[256];
  165.     we.width(256);
  166.     we >> z;
  167.     p.Ustaw(z);
  168.     return we;
  169.  
  170. }
  171.  
  172.  
  173. #include "Pracownik.h"
  174.  
  175. Pracownik::Pracownik(const char* im , const char * naz, int dzien, int miesiac, int rok) : m_nIDZatrudnienia(*(int*)this)
  176. {
  177.     this->Imie(im);
  178.     this->Nazwisko(naz);
  179.     this->DataUrodzenia(dzien, miesiac, rok);
  180. }
  181.  
  182. const char* Pracownik::Imie() const
  183. {
  184.     return this->m_Imie.Zwroc();
  185. }
  186.  
  187. const char* Pracownik::Nazwisko() const
  188. {
  189.     return this->m_Nazwisko.Zwroc();
  190. }
  191.  
  192. void Pracownik::Imie(const char* nowe_imie)
  193. {
  194.     this->m_Imie.Ustaw(nowe_imie);
  195. }
  196.  
  197. void Pracownik::Nazwisko(const char* nowe_nazwisko)
  198. {
  199.     this->m_Nazwisko.Ustaw(nowe_nazwisko);
  200. }
  201.  
  202. void Pracownik::DataUrodzenia(int nowy_dzien, int nowy_miesiac, int nowy_rok)
  203. {
  204.     this->m_DataUrodzenia.Ustaw(nowy_dzien, nowy_miesiac, nowy_rok);
  205. }
  206.  
  207. void Pracownik::Wypisz() const
  208. {
  209.     m_Imie.Wypisz();
  210.     m_Nazwisko.Wypisz();
  211.     m_DataUrodzenia.Wypisz();
  212. }
  213.  
  214. void Pracownik::Wpisz()
  215. {
  216.     std::cout <<"Podaj imie: ";
  217.     this->m_Imie.Wpisz();
  218.     std::cout << "Podaj nazwisko: ";
  219.     this->m_Nazwisko.Wpisz();
  220.     this->m_DataUrodzenia.Wpisz();
  221. }
  222.  
  223. int Pracownik::SprawdzImie(const char* por_imie) const
  224. {
  225.     return this->m_Imie.SprawdzNapis(por_imie);
  226. }
  227.  
  228. int Pracownik::SprawdzNazwisko(const char* por_nazwisko) const
  229. {
  230.     return this->m_Nazwisko.SprawdzNapis(por_nazwisko);
  231. }
  232.  
  233. int Pracownik::Porownaj(const Pracownik& wzorzec) const
  234. {
  235.     if (this->SprawdzNazwisko(wzorzec.Nazwisko()) < 0)
  236.         return -1;
  237.     if (this->SprawdzNazwisko(wzorzec.Nazwisko()) > 0)
  238.         return 1;
  239.     if (this->SprawdzNazwisko(wzorzec.Nazwisko()) == 0)
  240.     {
  241.         if (this->SprawdzImie(wzorzec.Imie()) < 0)
  242.             return -1;
  243.         if (this->SprawdzImie(wzorzec.Imie()) > 0)
  244.             return 1;
  245.         if (this->SprawdzImie(wzorzec.Imie()) == 0)
  246.         {
  247.             if (this->m_DataUrodzenia.Porownaj(wzorzec.m_DataUrodzenia) < 0)
  248.                 return -1;
  249.             if (this->m_DataUrodzenia.Porownaj(wzorzec.m_DataUrodzenia) > 0)
  250.                 return 1;
  251.             if (this->m_DataUrodzenia.Porownaj(wzorzec.m_DataUrodzenia) == 0)
  252.             return 0;
  253.         }
  254.     }
  255.     return 0;
  256. }
  257. Pracownik::Pracownik(const Pracownik &wzor) : m_nIDZatrudnienia(*(int*)&wzor) {
  258.     this->m_Imie = wzor.m_Imie;
  259.     this->m_Nazwisko = wzor.m_Nazwisko;
  260.     this->m_DataUrodzenia = wzor.m_DataUrodzenia;
  261. }
  262. Pracownik& Pracownik::operator=(const Pracownik &wzor) {
  263.     if (this == &wzor) return *this;
  264.  
  265.     this->~Pracownik();
  266.     new (this) Pracownik(wzor);
  267.  
  268.     return *this;
  269.  
  270. }
  271. bool Pracownik::operator==(const Pracownik & wzor) const {
  272.     return this->Porownaj(wzor) == 0;
  273.  
  274. }
  275. ostream & operator<<(ostream & wy, const Pracownik &p) {
  276.     return wy << p.m_Imie << " " << p.m_Nazwisko << " " << p.m_DataUrodzenia;
  277.  
  278. }
  279. istream & operator>>(istream & we, Pracownik &p) {
  280.     return we >> p.m_Imie >> p.m_Nazwisko >> p.m_DataUrodzenia;
  281.  
  282. }
  283.  
  284. #include "TablicaPracownikow.h"
  285.  
  286. using namespace std;
  287. TablicaPracownikow::TablicaPracownikow(void)
  288. {
  289.     m_nLiczbaPracownikow = 0;
  290. }
  291.  
  292.  
  293.  
  294. void TablicaPracownikow::Dodaj(const Pracownik & p)
  295. {
  296.     Pracownik pr = p;
  297.  
  298.     for (int i = 0; i < m_nLiczbaPracownikow; i++)
  299.     {
  300.         if (m_pTablica[i].Porownaj(pr) == 0)
  301.         {
  302.             cout << "Istnieje juz taki pracownik!" << endl;
  303.             return;
  304.         }
  305.     }
  306.     Pracownik tmp1, tmp2;
  307.     if (m_nLiczbaPracownikow < 19)
  308.     {
  309.         m_nLiczbaPracownikow++;
  310.  
  311.         for (int i = 0; i < m_nLiczbaPracownikow - 1; i++)
  312.         {
  313.             if (m_pTablica[i].Porownaj(pr) < 0)
  314.             {
  315.                 tmp1 = m_pTablica[i];
  316.                 m_pTablica[i] = pr;
  317.  
  318.                 for (int j = i + 1; j < m_nLiczbaPracownikow; j++)
  319.                 {
  320.                     tmp2 = m_pTablica[j];
  321.                     m_pTablica[j] = tmp1;
  322.                     tmp1 = tmp2;
  323.                 }
  324.                 cout << "Dodano!" << endl;
  325.                 return;
  326.             }
  327.         }
  328.         m_pTablica[m_nLiczbaPracownikow - 1] = pr;
  329.         cout << "Dodano!" << endl;
  330.     }
  331.     else
  332.     {
  333.         cout << "Przekroczony rozmiar tablicy" << endl;
  334.     }
  335. }
  336.  
  337. void TablicaPracownikow::Usun(const Pracownik & wzorzec)
  338. {
  339.     int usunieto = 0;
  340.     for (int i = 0; i < m_nLiczbaPracownikow; i++)
  341.     {
  342.         if (m_pTablica[i].Porownaj(wzorzec) == 0)
  343.         {
  344.             m_nLiczbaPracownikow--;
  345.             for (int j = i; j < m_nLiczbaPracownikow; j++)
  346.             {
  347.                 m_pTablica[j] = m_pTablica[j + 1];
  348.             }
  349.             usunieto = 1;
  350.             cout << "Pracownik usunięty" << endl;
  351.         }
  352.     }
  353.     if (usunieto!=1)
  354.         cout << "Nie ma takiego pracownika!" << endl;
  355.     usunieto = 0;
  356. }
  357.  
  358. void TablicaPracownikow::WypiszPracownikow() const
  359. {
  360.     if (m_nLiczbaPracownikow <= 0) cout << "Brak pracowników do wyświetlenia" << endl;
  361.     else
  362.         for (int i = 0; i < m_nLiczbaPracownikow; i++)
  363.         {
  364.             m_pTablica[i].Wypisz();
  365.         }
  366. }
  367.  
  368. const Pracownik* TablicaPracownikow::Szukaj(const char* nazwisko, const char* imie) const
  369. {
  370.     for (int i = 0; i < m_nLiczbaPracownikow; i++)
  371.     {
  372.         if (m_pTablica[i].SprawdzImie(imie) == 0)
  373.         {
  374.             if (m_pTablica[i].SprawdzNazwisko(nazwisko) == 0)
  375.             {
  376.                 return &m_pTablica[i];
  377.             }
  378.         }
  379.     }
  380.     return NULL;
  381. }
  382. ostream& operator<< (ostream& wy, const TablicaPracownikow& t) {
  383.     for (int i = 0; i < t.m_nLiczbaPracownikow; i++) wy << t.m_pTablica[i];
  384.  
  385.     return wy;
  386. }
  387. istream& operator>> (istream& we, TablicaPracownikow& a) {
  388.     Pracownik p;
  389.  
  390.     while (we.peek() != -1) {
  391.         we >> p;
  392.         a.Dodaj(p);
  393.         we.ignore();
  394.     }
  395.  
  396.     return we;
  397. }
  398.  
  399.  
  400.  
  401.  
  402. #include "Pracownik.h"
  403. #include "Napis.h"
  404. #include "Data.h"
  405. #include"TablicaPracownikow.h"
  406. #include <conio.h>
  407. #include <fstream>
  408.  
  409. using namespace std;
  410. int main()
  411. {
  412.     TablicaPracownikow tablica;
  413.     Pracownik* p = new Pracownik();
  414.     int dec = -1;
  415.  
  416.     while (dec != 0)
  417.     {
  418.         system("cls");
  419.         cout << "________________________________" << endl;
  420.         cout << "|0 - wyjscie                   |" << endl;
  421.         cout << "|1 - wypisz pracownikow        |" << endl;
  422.         cout << "|2 - dodaj pracownika          |" << endl;
  423.         cout << "|3 - usun pracownika           |" << endl;
  424.         cout << "|4 - znajdz pracownika         |" << endl;
  425.         cout << "|5 - dodaj do pliku            |" << endl;
  426.         cout << "|6 - pobierz z pliku           |" << endl;
  427.         cout << "|______________________________|" << endl;
  428.         cin >> dec;
  429.         system("cls");
  430.         switch (dec)
  431.         {
  432.         case 0: {
  433.             exit(0);
  434.                 }
  435.         case 1: {
  436.             cout << "LISTA PRACOWNIKOW" << endl;
  437.             tablica.WypiszPracownikow();
  438.             break;
  439.                 }
  440.         case 2:
  441.             {
  442.             cout << "DODAWANIE PRACOWNIKA" << endl;
  443.             p->Wpisz();
  444.             tablica.Dodaj(*p);
  445.             break;
  446.             }
  447.         case 3:
  448.         {
  449.             cout << "USUWANIE PRACOWNIKA" << endl;
  450.             cout << "Podaj pracownika do usuniecia" << endl;
  451.             p->Wpisz();
  452.             tablica.Usun(*p);
  453.             break;
  454.         }
  455.         case 4: {
  456.             cout << "SZUKANIE PRACOWNIKA" << endl;
  457.             Napis imie;
  458.             Napis nazwisko;
  459.             cout << "Imię i nazwisko:";
  460.             imie.Wpisz();
  461.             nazwisko.Wpisz();
  462.  
  463.             if (tablica.Szukaj(nazwisko.Zwroc(), imie.Zwroc()) == NULL)
  464.                 cout << "Nie znaleziono takiego pracownika!" << endl;
  465.             else
  466.             {
  467.                 cout << "Znaleziony pracownik:" << endl;
  468.                 tablica.Szukaj(nazwisko.Zwroc(), imie.Zwroc())->Wypisz();
  469.             }
  470.             break;
  471.                 }
  472.         case 5: {
  473.             char filename[64];
  474.             cout << "Nazwa Pliku:";
  475.             cin >> filename;
  476.  
  477.             ofstream file(filename);
  478.             file << tablica;
  479.             file.close();
  480.  
  481.             cout << "Dodano do pliku" << filename << '\n';
  482.             break;
  483.                 }
  484.         case 6: {
  485.             char filename[32];
  486.             cout << "Podaj nazwe pliku: ";
  487.             cin >> filename;
  488.  
  489.             ifstream file(filename);
  490.             if (!file.good()) {
  491.                 cout << "Bład lub plik nie istnieje";
  492.                 break;
  493.             }
  494.             file >> tablica;
  495.             cout << "Pobrano pracowników " << filename << '\n';
  496.             file.close();
  497.                 }
  498.         }
  499.         getch();
  500.     }
  501.  
  502.     return 0;
  503. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement