Konstruktor - problem z prostym zadaniem.

0

Cześć, mam problem z pewnym zadaniem do szkoły i może komuś uda się mnie nakierować w tym temacie.
Otóż mam zadanie:
Twoja firma opracowuje program kadrowy dla pewnej firmy.
O każdej osobie powinieneś posiadać następujące informacje:
Klasa Osoba
imię
nazwisko
numerEwidencyjny
adresZamieszkania
// Klasa Adres zawiera następujące dane:
nazwaUlicy
miejscowosc
numerDomu
numerMieszkania
Zakładając, że najczęściej spotykanym nazwiskiem jest Kowalski , firma znajduje się w Warszawie i ma mieszkania pracownicze przy ulicy Aleje Jerozolimskie , stwórz odpowiednie konstruktory.

Założyłem, że w takiej sytuacji, mogą się pojawiać takie kombinacje:

Nazwisko---- ----Miasto---- ----Ulica----
- - Aleje Jerozolimskie
- Warszawa -
Kowalski - -
Kowalski Warszawa Aleje Jerozolimskie
Kowalski Warszawa -
- Warszawa -

Chciałbym móc tworzyć obiekty Osoba z danymi imię, nazwisko, numerEwidencyjny, adresZamieszkania( i tutaj nazwaUlicy, miejscowosc, numerDomu, numerMieszkania).
Najpierw zrobiłem wszystko w jednej klasie Osoba i chciałem użyć konstruktorów na wszystkie przypadki. Ale wtedy dowiedziałem się, ze nie mogę konstruktorów, które przyjmują tą samą ilość argumentów o tym samym typie(np. jeden konstruktor nazwisko(string) + ulica(string), a drugi nazwisko(string) + miasto(string).
Zacząłem od nowa, i zaciąłem się na tym, że napisałem dwie osobne klasy Osoba i Adres i nie wiem co powinienem dalej zrobić żeby spełnić swoje założenia.

using System;
using System.Collections.Generic;
using System.Text;

namespace W3_P3
{
    public class Osoba

    {
        string name;
        string surname;
        string registrationNumber;
        Adres adress;
        public string GetData()
        {
            string enteredData = Console.ReadLine();
            return enteredData;
        }

        
        public Osoba(string name, string surname, string registrationNumber, Adres adress)
        {
            this.name = name;
            this.surname = surname;
            this.registrationNumber = registrationNumber;
            this.adress = adress;
            
        }                    
        
        public void printData()
        {
            Console.WriteLine($"Imie: {name}\nNazwisko: {surname}\nNumer ewidencyjny: {registrationNumber}");            
        }
    }
    public class Adres
    {
        public string town;
        public string streetName;
        public string houseNumber;
        public string flatNumber;        

        public Adres(string town, string streetName, string houseNumber, string flatNumber)
        {
            this.town = town;
            this.streetName = streetName;
            this.houseNumber = houseNumber;
            this.flatNumber = flatNumber;            
        }
        public Adres(string town)
        

        

        public void printData()
        {
            Console.WriteLine($"Nazwa miasta: {town}\nNazwa ulicy: {streetName}\nNumer domu: {houseNumber}\nNumer mieszkania: {flatNumber}");
        }
        public string GetData()

        {
            string enteredData = Console.ReadLine();
            return enteredData;
        }

    }
}


0

na marginesie wątku, nie bierz tego nadmiernie do siebie, NIE WIERZĘ w soft biznesowy w tcyh segmentach zbudowany na języku angielskim.
Twój "registration number" to numer kartoteki w kadrach, PESEL, czy jeszcze coś innego? Albo wyraź po angielsku "urlop ojcowski" i "tacieżyńskie"

Konstruktory wymiękają, jak masz wiele podobnych formalnie pól (już to wiesz). Stąd między innym wzorzec Builder.

2

Żadna z tych klas nie powinna zajmować się pobieraniem danych z consoli ani wyswietlaniem ich.
Zamiast pól daj właściwości z get; protected set;

Nie bardzo rozumiem o co chodzi z możliwymi kombinacjami.
Osoba może istnieć bez przypisanego adresu. Więc zrobiłbym konstruktor dla osoby z podstawowymi danymi i metoda na przypisanie jej adresu.

0

@AnyKtokolwiek:
pewnie, rozumiem problem z nazwami zmiennych, ale to akurat może zostać, nie będzie jakiejś kontynuacji tego.
@szydlak:
Chciałbym móc tworzyć obiekty, które wywołując będę mógł od razu przypisać pewne wartości:
czyli np. raz samo Miasto, raz samo Nazwisko, raz Nazwisko i Miasto.

Dzięki za rady, ale niestety nie umiem ich wykorzystać :D

0
jamuzyk napisał(a):

czyli np. raz samo Miasto, raz samo Nazwisko, raz Nazwisko i Miasto.

Po prostu Builder. To działa dokładnie jak opisujesz.
W Javie się "za darmo" Loombokiem generuje.
Jaka najszybsza ścieżka w C#, to nie przychodzi mi do głowy.
https://www.google.com/search[...]-d&q=builder+c%23+pattern
Może coś znajdziesz do automatyzacji, pisanie z palca jest niewdzięczne.

2

Konstruktor z domyślnymi parametrami i uzywanie go z parametrami nazwanymi.
https://docs.microsoft.com/pl-pl/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments

0

@kzkzg: Dzięki. Rozwiązałem w końcu inaczej, ale to wygląda najprościej.

4

Jaki builder, jak mają być konstruktory. Nie mieszajcie. To tak jakby w zadaniu było "zapisać dane do pliku", a Wy byście proponowali S3.

1 użytkowników online, w tym zalogowanych: 0, gości: 1