Advertisement
Guest User

Untitled

a guest
Dec 10th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.76 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. class data
  8. {
  9.     friend ostream& operator<<(ostream& wyjscie, const data& d);
  10.  
  11. private:
  12.     int dzien;
  13.     int miesiac;
  14.     int rok;
  15.  
  16. public:
  17.     data(int d = 0, int m = 0, int r = 0)
  18.         : dzien(d)
  19.         , miesiac(m)
  20.         , rok(r){};
  21.  
  22.     void drukuj()
  23.     {
  24.         cout << dzien << miesiac << rok;
  25.     }
  26.  
  27.     void ustaw(int d, int m, int r)
  28.     {
  29.         dzien = d;
  30.         miesiac = m;
  31.         rok = r;
  32.     }
  33. };
  34.  
  35. ostream& operator<<(ostream& wyjscie, const data& d)
  36. {
  37.     return wyjscie << d.dzien << "." << d.miesiac << "." << d.rok;
  38. }
  39.  
  40. class nip
  41. {
  42. private:
  43.     int nip_field[4] = { 0, 0, 0, 0 };
  44.  
  45. public:
  46.     friend ostream& operator<<(ostream& wyjscie, const nip& n);
  47.  
  48.     nip(int nip_int)
  49.     {
  50.         nip_field[0] = nip_int / 10000000;
  51.         nip_field[1] = nip_int % 10000000 / 10000;
  52.         nip_field[2] = nip_int % 10000 / 100;
  53.         nip_field[3] = nip_int % 100;
  54.     }
  55.  
  56.     nip(char nip_char[])
  57.     {
  58.         nip_field[0] = 100 * nip_char[0] + 10 * nip_char[1] + nip_char[2];
  59.         nip_field[1] = 100 * nip_char[4] + 10 * nip_char[5] + nip_char[6];
  60.         nip_field[2] = 10 * nip_char[8] + nip_char[9];
  61.         nip_field[3] = 10 * nip_char[11] + nip_char[12];
  62.     }
  63.  
  64.     void drukuj()
  65.     {
  66.         for (int i = 0; i < 4; i++)
  67.         {
  68.             cout << nip_field[i];
  69.             if (i != 3)
  70.                 cout << " - ";
  71.         }
  72.         cout << endl;
  73.     }
  74. };
  75.  
  76. ostream& operator<<(ostream& wyjscie, const nip& n)
  77. {
  78.     return wyjscie << n.nip_field[0] << "-" << n.nip_field[1] << "-" << n.nip_field[2] << "-"
  79.                    << n.nip_field[3];
  80. }
  81.  
  82. class osoba
  83. {
  84.  
  85. protected:
  86.     char nazwisko[20];
  87.     int wiek;
  88.     int status = 0;
  89.  
  90. private:
  91.     static int licznik;
  92.  
  93. public:
  94.     osoba(char name[] = (char*)"Kowalski", int age = 0, int stat = 0)
  95.         : wiek(age)
  96.         , status(stat)
  97.     {
  98.         strcpy(nazwisko, name);
  99.         licznik++;
  100.     };
  101.  
  102.     void dopisz(char name[], int age) // dokleja nazwisko i wiek
  103.     {
  104.         if (strlen(nazwisko) + strlen(name) > 20)
  105.         {
  106.             cout << "Nazwisko po zmianie zbyt dlugie" << endl;
  107.         }
  108.         else
  109.         {
  110.             strcat(nazwisko, name);
  111.             wiek += age;
  112.         }
  113.     }
  114.  
  115.     int skasuj() // zeruje obiekt
  116.     {
  117.         strcpy(nazwisko, "\0");
  118.         wiek = 0;
  119.         status = 0;
  120.         return 0;
  121.     }
  122.  
  123.     virtual int drukuj()
  124.     {
  125.         cout << "Nazwisko: " << nazwisko << endl
  126.              << "Wiek: " << wiek << endl
  127.              << "Status: " << status << endl;
  128.         return 0;
  129.     }
  130.  
  131.     int drukuj(char filename[])
  132.     {
  133.         fstream plik;
  134.         plik.open(filename, ios::out);
  135.         if (plik.good() != true)
  136.         {
  137.             cout << "Blad odczytu pliku" << endl;
  138.             return -1;
  139.         }
  140.  
  141.         plik << "Nazwisko: " << nazwisko << endl
  142.              << "Wiek: " << wiek << endl
  143.              << "Status: " << status << endl;
  144.  
  145.         plik.close();
  146.         return 0;
  147.     }
  148.  
  149.     int zmnien(char name[], int age)
  150.     {
  151.         strcpy(nazwisko, name);
  152.         wiek = age;
  153.         return 0;
  154.     }
  155.  
  156.     int zmnien(char name[])
  157.     {
  158.         strcpy(nazwisko, name);
  159.         return 0;
  160.     }
  161.  
  162.     int zmnien(int age)
  163.     {
  164.         wiek = age;
  165.         return 0;
  166.     }
  167.  
  168.     void ile()
  169.     {
  170.         cout << licznik << endl;
  171.     }
  172. };
  173.  
  174. int osoba::licznik = 0;
  175.  
  176. class pracownik : public osoba
  177. {
  178. private:
  179.     char stanowisko[20];
  180.     float pensja;
  181.     data data_zatrudnienia;
  182.  
  183. public:
  184.     pracownik(data d_zatr = 0, char stan[] = (char*)"Nikt", float salary = 0)
  185.         : pensja(salary)
  186.         , data_zatrudnienia(d_zatr)
  187.     {
  188.         strcpy(stanowisko, stan);
  189.     };
  190.  
  191.     virtual int drukuj()
  192.     {
  193.         osoba::drukuj();
  194.         cout << "Stanowisko: " << stanowisko << endl
  195.              << "Pensja: " << pensja << endl
  196.              << "Data zatrudnienia: " << data_zatrudnienia << endl;
  197.         return 0;
  198.     }
  199.  
  200.     void podwyzka(float kwota)
  201.     {
  202.         pensja += kwota;
  203.     }
  204.  
  205.     void podwyzka(int procent)
  206.     {
  207.         pensja *= (procent / 100 + 1);
  208.     }
  209.  
  210.     void przeniesienie(char nowe_stanowisko[])
  211.     {
  212.         strcpy(stanowisko, nowe_stanowisko);
  213.     }
  214.  
  215.     void zmien(char name[], int age, char stan[], int salary)
  216.     {
  217.         strcpy(nazwisko, name);
  218.         wiek = age;
  219.         strcpy(stanowisko, stan);
  220.         pensja = salary;
  221.     }
  222. };
  223.  
  224. class klient : public osoba
  225. {
  226. private:
  227.     nip nr_nip;
  228.     float rabat;
  229.     float ostatnia_platnosc;
  230.     float suma_zamowien;
  231.     void nalicz_rabat()
  232.     {
  233.         // rabat jest rowny sumie zamowien podzielonej przez 50000, max 20% przy 10k zl
  234.         if (suma_zamowien >= 10000)
  235.             rabat = 0.2;
  236.         else
  237.             rabat = suma_zamowien / 50000;
  238.     }
  239.  
  240. public:
  241.     klient(float r = 0, float o_plat = 0, float s_zam = 0, nip nr_n = 0)
  242.         : nr_nip(nr_n)
  243.         , rabat(r)
  244.         , ostatnia_platnosc(o_plat)
  245.         , suma_zamowien(s_zam){};
  246.  
  247.     void dodaj_platonsc(float kwota)
  248.     {
  249.         ostatnia_platnosc = kwota * rabat;
  250.         suma_zamowien += ostatnia_platnosc;
  251.         nalicz_rabat();
  252.     }
  253.  
  254.     virtual int drukuj()
  255.     {
  256.         osoba::drukuj();
  257.         cout << "Nr nip: " << nr_nip << endl
  258.              << "Rabat: " << rabat << endl
  259.              << "Ostatnia platonsc: " << ostatnia_platnosc << endl
  260.              << "Suma zamowien: " << suma_zamowien << endl;
  261.         return 0;
  262.     }
  263.  
  264.     void zmien(char name[], int age, const nip nr_nip)
  265.     {
  266.         strcpy(nazwisko, name);
  267.         wiek = age;
  268.         klient::nr_nip = nr_nip;
  269.     }
  270. };
  271.  
  272. class dokument
  273. {
  274. protected:
  275.     int sygnatura;
  276.     data data_wystawienia;
  277.  
  278.     virtual void virtual_function() = 0;
  279.  
  280. public:
  281.     dokument(int syg = 0, data d_wys = 0)
  282.         : sygnatura(syg)
  283.         , data_wystawienia(d_wys){};
  284. };
  285.  
  286. class faktura : public dokument
  287. {
  288. private:
  289.     float cena_netto;
  290.     int vat;
  291.     float cena_brutto;
  292.     pracownik wystawca;
  293.     klient odbiorca;
  294.  
  295. public:
  296.     faktura(pracownik p, klient k, float c_netto = 0, int v = 0)
  297.         : cena_netto(c_netto)
  298.         , vat(v)
  299.         , wystawca(p)
  300.         , odbiorca(k){};
  301.  
  302.     void dodaj(pracownik wyst, klient odb, float c_netto, int vat)
  303.     {
  304.         wystawca = wyst;
  305.         odbiorca = odb;
  306.         cena_netto = c_netto;
  307.         faktura::vat = vat;
  308.         oblicz_brutto();
  309.     }
  310.  
  311.     virtual int drukuj()
  312.     {
  313.         cout << "Sygnatura: " << sygnatura << endl
  314.              << "Data wystawienia: " << data_wystawienia << endl
  315.              << "Cena netto: " << cena_netto << " zl" << endl
  316.              << "Stawka vat: " << vat << "%" << endl
  317.              << "Cena brutto: " << cena_brutto << " zl" << endl
  318.              << "Wystawca:" << endl;
  319.         wystawca.drukuj();
  320.         cout << "Odbiorca:" << endl;
  321.         odbiorca.drukuj();
  322.         return 0;
  323.     }
  324.  
  325.     void oblicz_brutto()
  326.     {
  327.         cena_brutto = cena_netto * vat / 100;
  328.     }
  329. };
  330.  
  331. void drukuj_wszystko(osoba& tmp)
  332. {
  333.     tmp.drukuj();
  334. }
  335.  
  336. int main()
  337. {
  338.     cout << "przykladowy pracownik z wart domyslnymi" << endl;
  339.  
  340.     pracownik grarzynka;
  341.     grarzynka.drukuj();
  342.  
  343.     cout << endl << "przykladowy klient z wart domyslnymi" << endl;
  344.  
  345.     klient janusz;
  346.     janusz.drukuj();
  347.  
  348.     cout << endl << "ilosc utworzonych obiektow" << endl;
  349.  
  350.     janusz.ile();
  351.  
  352.     cout << endl << "ten sam klient wydrukowany jako osoba" << endl << endl;
  353.  
  354.     osoba* ktos;
  355.  
  356.     ktos = &janusz;
  357.     ktos->drukuj();
  358.  
  359.     cout << endl << "ilosc utworzonych obiektow" << endl;
  360.  
  361.     janusz.ile();
  362.  
  363.     cout << endl << "drukuj wszystko" << endl;
  364.  
  365.     drukuj_wszystko(grarzynka);
  366.  
  367.     return 0;
  368. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement