Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
4.8 kB
2
Indexable
Never
using System;
using System.Linq;

class AddPacient
{
    enum Blad
    {
        Imie,
        Nazwisko,
        NumerTelefonu,
        PESEL
    }

    static Blad? SprawdzImie(string imie)
    {
        //sprawdzenie długości imienia
        if (imie.Length < 2 || imie.Length > 13)
            return Blad.Imie;

        //sprawdzenie czy pierwsza litera jest wielka
        if (!char.IsUpper(imie[0]))
            return Blad.Imie;

        //sprawdzenie czy wszystkie pozostałe litery są małe
        if (imie.Skip(1).Any(c => char.IsUpper(c)))
            return Blad.Imie;

        //sprawdzenie czy imię nie zawiera cyfr
        if (imie.Any(char.IsDigit))
            return Blad.Imie;

        return null;
    }

    static Blad? SprawdzNazwisko(string nazwisko)
    {
        //sprawdzenie długości nazwiska
        if (nazwisko.Length < 2 || nazwisko.Length > 20)
            return Blad.Nazwisko;

        //podział nazwiska na człony (jeśli występuje)
        string[] czlonyNazwiska = nazwisko.Split('-');

        //sprawdzenie każdego członu nazwiska
        foreach (string czlon in czlonyNazwiska)
        {
            //sprawdzenie czy pierwsza litera jest wielka
            if (!char.IsUpper(czlon[0]))
                return Blad.Nazwisko;

            //sprawdzenie czy wszystkie pozostałe litery są małe
            if (czlon.Skip(1).Any(c => char.IsUpper(c)))
                return Blad.Nazwisko;

            //sprawdzenie czy człon nazwiska nie zawiera cyfr
            if (czlon.Any(char.IsDigit))
                return Blad.Nazwisko;
        }

        return null;
    }
    static Blad? SprawdzNumerTelefonu(string numer)
    {
        //sprawdzenie długości numeru i czy zawiera on tylko cyfry
        if (!numer.All(char.IsDigit) && !numer.StartsWith("+"))
            return Blad.NumerTelefonu;

        //sprawdzenie, czy numer zaczyna się od "+"
        if (numer.StartsWith("+"))
        {
            //dla numeru zaczynającego się od "+", sprawdzenie długości
            if (numer.Length < 11 || numer.Length > 13)
                return Blad.NumerTelefonu;
        }
        else
        {
            //dla numeru bez "+", sprawdzenie czy ma dokładnie 9 cyfr
            if (numer.Length != 9)
                return Blad.NumerTelefonu;
        }
        return null;
    }

    static Blad? SprawdzPesel(string pesel)
    {
        //sprawdzenie, czy PESEL ma dokładnie 11 znaków i czy wszystkie znaki są cyframi
        if (pesel.Length != 11)
        {
            return Blad.PESEL;
        }
        for (int i = 0; i < pesel.Length; i++)
        {
            if (!char.IsDigit(pesel[i]))
            {
                return Blad.PESEL;
            }
        }
        int[] wagi = { 1, 3, 7, 9, 1, 3, 7, 9, 1, 3 };
        int suma = 0;

        //przemnóż każdą cyfrę przez odpowiednią wagę i dodaj wynik do sumy
        for (int i = 0; i < 10; i++)
        {
            suma += (pesel[i] - '0') * wagi[i];
        }
        //weź tylko ostatnią cyfrę sumy
        int ostatniaCyfraSuma = suma % 10;
        //cyfra kontrolna to 10 minus ostatnia cyfra sumy, jeśli wynik to 10, cyfra kontrolna to 0
        int cyfraKontrolna = (10 - ostatniaCyfraSuma) % 10;

        //sprawdzenie, czy cyfra kontrolna jest równa ostatniej cyfrze numeru PESEL
        if (cyfraKontrolna == (pesel[10] - '0'))
            return null;
        else
            return Blad.PESEL;
    }

static bool DodajPacjenta(string imie, string nazwisko, string numerTelefonu, string pesel, out Blad? error)
    {
        error = null;

        //sprawdzenie imienia
        if ((error = SprawdzImie(imie)) != null) return false;

        //sprawdzenie nazwiska
        if ((error = SprawdzNazwisko(nazwisko)) != null) return false;

        //sprawdzenie numeru telefonu
        if ((error = SprawdzNumerTelefonu(numerTelefonu)) != null) return false;

        //sprawdzenie PESEL
        if ((error = SprawdzPesel(pesel)) != null) return false;

        //jeśli nie ma błędów, zwróć true
        return true;
    }

    class Program
    {
        static void Main(string[] args)
        {
                Blad? error;
                bool success = AddPacient.DodajPacjenta("Jan", "Kowalski", "123456789", "01231567890", out error);
                if (success)
                {
                    Console.WriteLine(success);

                }
                else
                {
                    Console.WriteLine($"Nie udało się dodać pacjenta. Błąd w: {error}");
                }
                Console.ReadKey();
        }
    }
}
Leave a Comment