Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- #include <fstream>
- using namespace std;
- class data
- {
- friend ostream& operator<<(ostream& wyjscie, const data& d);
- private:
- int dzien;
- int miesiac;
- int rok;
- public:
- data(int d = 0, int m = 0, int r = 0)
- : dzien(d)
- , miesiac(m)
- , rok(r){};
- void drukuj()
- {
- cout << dzien << miesiac << rok;
- }
- void ustaw(int d, int m, int r)
- {
- dzien = d;
- miesiac = m;
- rok = r;
- }
- };
- ostream& operator<<(ostream& wyjscie, const data& d)
- {
- return wyjscie << d.dzien << "." << d.miesiac << "." << d.rok;
- }
- class nip
- {
- private:
- int nip_field[4] = { 0, 0, 0, 0 };
- public:
- friend ostream& operator<<(ostream& wyjscie, const nip& n);
- nip(int nip_int)
- {
- nip_field[0] = nip_int / 10000000;
- nip_field[1] = nip_int % 10000000 / 10000;
- nip_field[2] = nip_int % 10000 / 100;
- nip_field[3] = nip_int % 100;
- }
- nip(char nip_char[])
- {
- nip_field[0] = 100 * nip_char[0] + 10 * nip_char[1] + nip_char[2];
- nip_field[1] = 100 * nip_char[4] + 10 * nip_char[5] + nip_char[6];
- nip_field[2] = 10 * nip_char[8] + nip_char[9];
- nip_field[3] = 10 * nip_char[11] + nip_char[12];
- }
- void drukuj()
- {
- for (int i = 0; i < 4; i++)
- {
- cout << nip_field[i];
- if (i != 3)
- cout << " - ";
- }
- cout << endl;
- }
- };
- ostream& operator<<(ostream& wyjscie, const nip& n)
- {
- return wyjscie << n.nip_field[0] << "-" << n.nip_field[1] << "-" << n.nip_field[2] << "-"
- << n.nip_field[3];
- }
- class osoba
- {
- protected:
- char nazwisko[20];
- int wiek;
- int status = 0;
- private:
- static int licznik;
- public:
- osoba(char name[] = (char*)"Kowalski", int age = 0, int stat = 0)
- : wiek(age)
- , status(stat)
- {
- strcpy(nazwisko, name);
- licznik++;
- };
- void dopisz(char name[], int age) // dokleja nazwisko i wiek
- {
- if (strlen(nazwisko) + strlen(name) > 20)
- {
- cout << "Nazwisko po zmianie zbyt dlugie" << endl;
- }
- else
- {
- strcat(nazwisko, name);
- wiek += age;
- }
- }
- int skasuj() // zeruje obiekt
- {
- strcpy(nazwisko, "\0");
- wiek = 0;
- status = 0;
- return 0;
- }
- virtual int drukuj()
- {
- cout << "Nazwisko: " << nazwisko << endl
- << "Wiek: " << wiek << endl
- << "Status: " << status << endl;
- return 0;
- }
- int drukuj(char filename[])
- {
- fstream plik;
- plik.open(filename, ios::out);
- if (plik.good() != true)
- {
- cout << "Blad odczytu pliku" << endl;
- return -1;
- }
- plik << "Nazwisko: " << nazwisko << endl
- << "Wiek: " << wiek << endl
- << "Status: " << status << endl;
- plik.close();
- return 0;
- }
- int zmnien(char name[], int age)
- {
- strcpy(nazwisko, name);
- wiek = age;
- return 0;
- }
- int zmnien(char name[])
- {
- strcpy(nazwisko, name);
- return 0;
- }
- int zmnien(int age)
- {
- wiek = age;
- return 0;
- }
- void ile()
- {
- cout << licznik << endl;
- }
- };
- int osoba::licznik = 0;
- class pracownik : public osoba
- {
- private:
- char stanowisko[20];
- float pensja;
- data data_zatrudnienia;
- public:
- pracownik(data d_zatr = 0, char stan[] = (char*)"Nikt", float salary = 0)
- : pensja(salary)
- , data_zatrudnienia(d_zatr)
- {
- strcpy(stanowisko, stan);
- };
- virtual int drukuj()
- {
- osoba::drukuj();
- cout << "Stanowisko: " << stanowisko << endl
- << "Pensja: " << pensja << endl
- << "Data zatrudnienia: " << data_zatrudnienia << endl;
- return 0;
- }
- void podwyzka(float kwota)
- {
- pensja += kwota;
- }
- void podwyzka(int procent)
- {
- pensja *= (procent / 100 + 1);
- }
- void przeniesienie(char nowe_stanowisko[])
- {
- strcpy(stanowisko, nowe_stanowisko);
- }
- void zmien(char name[], int age, char stan[], int salary)
- {
- strcpy(nazwisko, name);
- wiek = age;
- strcpy(stanowisko, stan);
- pensja = salary;
- }
- };
- class klient : public osoba
- {
- private:
- nip nr_nip;
- float rabat;
- float ostatnia_platnosc;
- float suma_zamowien;
- void nalicz_rabat()
- {
- // rabat jest rowny sumie zamowien podzielonej przez 50000, max 20% przy 10k zl
- if (suma_zamowien >= 10000)
- rabat = 0.2;
- else
- rabat = suma_zamowien / 50000;
- }
- public:
- klient(float r = 0, float o_plat = 0, float s_zam = 0, nip nr_n = 0)
- : nr_nip(nr_n)
- , rabat(r)
- , ostatnia_platnosc(o_plat)
- , suma_zamowien(s_zam){};
- void dodaj_platonsc(float kwota)
- {
- ostatnia_platnosc = kwota * rabat;
- suma_zamowien += ostatnia_platnosc;
- nalicz_rabat();
- }
- virtual int drukuj()
- {
- osoba::drukuj();
- cout << "Nr nip: " << nr_nip << endl
- << "Rabat: " << rabat << endl
- << "Ostatnia platonsc: " << ostatnia_platnosc << endl
- << "Suma zamowien: " << suma_zamowien << endl;
- return 0;
- }
- void zmien(char name[], int age, const nip nr_nip)
- {
- strcpy(nazwisko, name);
- wiek = age;
- klient::nr_nip = nr_nip;
- }
- };
- class dokument
- {
- protected:
- int sygnatura;
- data data_wystawienia;
- virtual void virtual_function() = 0;
- public:
- dokument(int syg = 0, data d_wys = 0)
- : sygnatura(syg)
- , data_wystawienia(d_wys){};
- };
- class faktura : public dokument
- {
- private:
- float cena_netto;
- int vat;
- float cena_brutto;
- pracownik wystawca;
- klient odbiorca;
- public:
- faktura(pracownik p, klient k, float c_netto = 0, int v = 0)
- : cena_netto(c_netto)
- , vat(v)
- , wystawca(p)
- , odbiorca(k){};
- void dodaj(pracownik wyst, klient odb, float c_netto, int vat)
- {
- wystawca = wyst;
- odbiorca = odb;
- cena_netto = c_netto;
- faktura::vat = vat;
- oblicz_brutto();
- }
- virtual int drukuj()
- {
- cout << "Sygnatura: " << sygnatura << endl
- << "Data wystawienia: " << data_wystawienia << endl
- << "Cena netto: " << cena_netto << " zl" << endl
- << "Stawka vat: " << vat << "%" << endl
- << "Cena brutto: " << cena_brutto << " zl" << endl
- << "Wystawca:" << endl;
- wystawca.drukuj();
- cout << "Odbiorca:" << endl;
- odbiorca.drukuj();
- return 0;
- }
- void oblicz_brutto()
- {
- cena_brutto = cena_netto * vat / 100;
- }
- };
- void drukuj_wszystko(osoba& tmp)
- {
- tmp.drukuj();
- }
- int main()
- {
- cout << "przykladowy pracownik z wart domyslnymi" << endl;
- pracownik grarzynka;
- grarzynka.drukuj();
- cout << endl << "przykladowy klient z wart domyslnymi" << endl;
- klient janusz;
- janusz.drukuj();
- cout << endl << "ilosc utworzonych obiektow" << endl;
- janusz.ile();
- cout << endl << "ten sam klient wydrukowany jako osoba" << endl << endl;
- osoba* ktos;
- ktos = &janusz;
- ktos->drukuj();
- cout << endl << "ilosc utworzonych obiektow" << endl;
- janusz.ile();
- cout << endl << "drukuj wszystko" << endl;
- drukuj_wszystko(grarzynka);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement