#include #include #include #include #include using namespace std; //Klasa bazowa OSOBA class Osoba { private: string imieNazwisko; int wiek{}; string email; public: // Setter imię i nazwisko z walidacją void setImieNazwisko(const string& txt) { if (txt.empty()) throw invalid_argument("Niepoprawne imie i nazwisko"); for (char c : txt) if (!(isalpha((unsigned char)c) || c == ' ' || c == '-')) throw invalid_argument("Niepoprawne imie i nazwisko"); imieNazwisko = txt; } // Setter wieku void setWiek(int w) { if (w < 0 || w > 30) throw out_of_range("Wiek poza zakresem"); wiek = w; } // Setter email void setEmail(const string& e) { regex wzor(R"(^\S+@\S+\.\S+$)"); if (!regex_match(e, wzor)) throw invalid_argument("Niepoprawny e-mail"); email = e; } // Metoda wypisująca dane osoby virtual void wypiszDane() const { cout << "Imie i nazwisko: " << imieNazwisko << endl; cout << "Wiek: " << wiek << endl; cout << "Email: " << email << endl; } virtual ~Osoba() = default; }; // Klasa UCZEN class Uczen : public Osoba { private: string nrUcznia; string specjalnosc; public: // Walidacja numeru ucznia void setNrUcznia(const string& nr) { if (nr.size() < 4) throw invalid_argument("Numer ucznia za krotki"); for (char c : nr) if (!isalnum((unsigned char)c)) throw invalid_argument("Numer ucznia tylko litery/cyfry"); nrUcznia = nr; } // Walidacja specjalności void setSpecjalnosc(const string& s) { if (s.empty()) throw invalid_argument("Specjalnosc nie moze byc pusta"); for (char c : s) if (!(isalpha((unsigned char)c) || c == ' ')) throw invalid_argument("Specjalnosc tylko litery i spacje"); specjalnosc = s; } // Nadpisanie wypisywania danych void wypiszDane() const override { Osoba::wypiszDane(); cout << "Numer ucznia: " << nrUcznia << endl; cout << "Specjalnosc: " << specjalnosc << endl; } }; int main() { Uczen s; // Pobieranie danych z klawiatury string imie, mail, nr, spec; int wiek; cout << "Podaj imie i nazwisko: "; getline(cin, imie); s.setImieNazwisko(imie); cout << "Podaj wiek (0-30): "; cin >> wiek; cin.ignore(); s.setWiek(wiek); cout << "Podaj email: "; getline(cin, mail); s.setEmail(mail); cout << "Podaj numer ucznia: "; getline(cin, nr); s.setNrUcznia(nr); cout << "Podaj specjalnosc: "; getline(cin, spec); s.setSpecjalnosc(spec); cout << "\n== Dane ucznia ==\n"; s.wypiszDane(); // wypisze dane return 0; }