Odwołanie z pola string adres klasy Osoba do klasy Adres

0

Szukałam i nie znalazłam
Jak odwołuje się z pola string adres klasy Osoba do klasy Adres?
Klasa Osoba

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Osoba
    {
        private int numerEwidencyjny;
        private string nazwisko;
        private string imie;
        private string adres;
        

        public Osoba(
                       int numerEwidencyjny, 
                       string nazwisko, 
                       string imie,
                       string adres
                     )
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;
            this.adres = adres;
        }

        public Osoba(int numerEwidencyjny, string imie, string adres) :
        this(numerEwidencyjny, "Kowalski", imie, adres) { }

        public Osoba(ref Osoba osoba)
        {
            numerEwidencyjny = osoba.numerEwidencyjny;
            nazwisko = osoba.nazwisko;
            imie = osoba.imie;
        }

        public string ZwrocInformacjeOsobowe()
        {
            return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3}", 
            nazwisko, imie, numerEwidencyjny, adres);
        }

        public void ZmienDaneOsobowe()
        {
            Console.Write("Podaj nazwisko: ");
            nazwisko = Console.ReadLine();

            Console.Write("Podaj imię: ");
            imie = Console.ReadLine();
            
            do
            {
                Console.Write("Podaj numer ewidencyjny: ");
            }

            while (!int.TryParse(Console.ReadLine(), out numerEwidencyjny));
        }

        public Osoba Klonuj()
        {
            return (Osoba)this.MemberwiseClone(); 
         }

        
    }

    

 }

Klasa Adres

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Adres
    {
        private string kod;
        private string miejscowosc;
        private string nazwaUlicy;
        private int numerDomu;
        private int numerMieszkania;

        public Adres(
                       string kod,
                       string miejscowosc,
                       string nazwaUlicy,
                       int numerDomu,
                       int numerMieszkania
                     )
        {
            this.kod = kod;
            this.miejscowosc = miejscowosc;
            this.nazwaUlicy = nazwaUlicy;
            this.numerDomu = numerDomu;
            this.numerMieszkania = numerMieszkania;
        }

        public Adres(int numerDomu) :
        this("02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0)
        { }

        public Adres(ref Adres adres)
        {
            kod = adres.kod;
            miejscowosc = adres.miejscowosc;
            nazwaUlicy = adres.nazwaUlicy;
            numerDomu = adres.numerDomu;
            numerMieszkania = adres.numerMieszkania;
        }

        public string ZwrocKod()
        {
            return kod;
        }

        public string ZwrocMiejscowosc()
        {
            return miejscowosc;
        }

        public string ZwrocNazweUlicy()
        {
            return nazwaUlicy;
        }

        public int ZwrocNumerDomu()
        {
            return numerDomu;
        }

        public int ZwrocNumerMieszkania()
        {
            return numerMieszkania;
        }

        public string ZwrocInformacjeOsobowe()
        {
            return string.Format(" {0} {1} {2}",
            ZwrocKod(), ZwrocMiejscowosc(), 
            ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania());
        }

        public void ZmienAdres()
        {
            Console.Write("Podaj kod: ");
            kod = Console.ReadLine();

            Console.Write("Podaj nazwę miejscowści: ");
            miejscowosc = Console.ReadLine();

            Console.Write("Podaj nazwę ulicy ");
            nazwaUlicy = Console.ReadLine();

            do
            {
                Console.Write("Podaj numer domu: ");

            }

            while (!int.TryParse(Console.ReadLine(), out numerDomu));

            Console.Write("Czy jest numer mieszkania <t/n>: ");
            char c = Console.ReadKey().KeyChar;
            if (c == 't')
            {
                Console.WriteLine();

                do
                {
                    Console.Write("Podaj numer meszkania: ");
                }

                while (!int.TryParse(Console.ReadLine(), out numerMieszkania));
            }

            else
            {
                numerMieszkania = 0;
            }

        }

    }


}

Klasa Program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    class Program
    {
        static void Main(string[] args)
        {
            Osoba os1 = new Osoba(5, "Ola", 43);
            Console.WriteLine(" Oryginał {0}", os1.ZwrocInformacjeOsobowe());
            Console.WriteLine("\n***Zmieniamy klon:***\n");
            Osoba klon1 = os1.Klonuj();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            klon1.ZmienDaneOsobowe();
            klon1.ZmienAdres();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());

            Osoba os3 = new Osoba(ref os1);
            Console.WriteLine(" Oryginał {0}", os3.ZwrocInformacjeOsobowe());
            Console.WriteLine("\n***Zmieniamy klon:***\n");
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            klon1.ZmienDaneOsobowe();
            klon1.ZmienAdres();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            Console.ReadKey();
        }

    }

}


2

Za każdym razem kiedy programista robi polskie nazwy zmiennych, metod czy klas umiera jeden malutki niewinny kotek...

private string adres skoro zrobiłeś sobie klasę pod adres to czego tutaj masz to jako String? Powinno być bardziej private Address address - czyli referencja na obiekt klasy address.

public void ZmienAdres() tego nie powinno być w tej klasie. Powinieneś zrobić jakieś gettery i settery na to pole i potem poprzez klasę serwisową to zmieniać.

public string ZwrocInformacjeOsobowe() tego typu rzeczy robi się w metodzie toString() - w sensie ładnie wyświetli Ci co tam siedzi. Tylko musisz ją przesłonić, bo inaczej dostaniesz adres z pamięci.

0

@.andy: Możesz poprawić mi kod , wytłumaczyć zadanie jak powinno być to zrobione? Już tydzień się z tym męcze.
No to ja już zgłupiałam. Mam do zrobienia zadanie, które nie rozumiem treści. Zrozumiałam tylko tyle, że mam utworzyć klase osoba i Adres.
Mam takie zadanie z kodem. Kod muszę zmienić tak aby wykonać zadanie.
Pkt.1 Twoja firma opracowuje program kadrowy dla pewnej firmy.
Twoim zadaniem jest stworzenie i przetestowanie klasy Osoba. O każdej osobie
powinieneś posiadać następujące informacje:
 imię i 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.
Dodaj też możliwość kopiowania płytkiego i kopiowania głębokiego do klasy Osoba.
(tu nic nie rób. Będzie przypominajka na następnym wykładzie. Po prostu pozostaw ten kod
niezmienny)
Poniżej kod źródłowy zrealizowanego programu. Przeanalizuj sposób definiowania konstruktorów
Pkt.2 - Z klasy Osoba wyróżnij klasę Adres

  • dla utworzonej klasy adres zdefiniuj swoje konstruktory.
  • zastosuj kilka różnych konstruktorów
    W każdym przypadku działania programu (Pkt1 oraz Pkt.2) efekt powinien być identyczny.
    Możesz poprawić mi kod , wytłumaczyć zadanie jak powinno być to zrobione?
    Nie możesz zastosować get i set.
0

@Marta Długa:

Możesz poprawić mi kod

No nie bardzo bo ja nie znam C#, niby to gorsza Java ale jednak nie chcę czegoś napisać błędnie ;)

wytłumaczyć zadanie jak powinno być to zrobione

To już mogę zrobić.

Twoim zadaniem jest stworzenie i przetestowanie klasy Osoba. O każdej osobie
powinieneś posiadać następujące informacje:
 imię i nazwisko
 numerEwidencyjny
 adresZamieszkania. Klasa Adres zawiera następujące dane:
 nazwaUlicy, miejscowosc
 numerDomu
 numerMieszkania

Czyli na tym etapie zrób takie proste klasy i jako pola daj te nazwiska, imienia i dorób do tego settery i gettery. W C# trzeba dać przy każdym takim polu { get; set; } i już masz.

To samo robisz dla klasy Adres. Pamiętaj, że adres zamieszkania to po prostu referencja na klasę Adres.

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.

Tutaj nie do końca rozumiem, ale chodzi o wywołanie konstruktora klasy osoba z takimi parametrami?

Dodaj też możliwość kopiowania płytkiego i kopiowania głębokiego do klasy Osoba.

Poczytaj czym się różni kopiowanie płytkie od głębokiego. Z tego co widziałem to już coś tam próbowałaś.

Co do punktu drugiego, to jest to samo praktycznie co punkt poprzedni.

Zacznij od tego, że wrzucasz tutaj gołe obie klasy z setterami, getterami oraz konstruktorami.

2

No dobra, czyli mamy problemy na poziomie składni. Te wszystkie metody zaczynające się od Zwroc są bez sensu, bo do tego służą właściwości (a konkretnie gettery). Zamiast używania String.Format krócej jest użyć po prostu interpolacji stringów. Przykład poniżej:

public class Adres
 {
    public string NazwaUlicy { get; }
    public string Miejscowosc { get; }
     
    public Adres(string nazwaUlicy, string miejscowosc)
    {
            this.Miejscowosc = miejscowosc;
            this.NazwaUlicy = nazwaUlicy;
   }

  public override string ToString() => $"Miejscowość: {this.Miejscowosc} Nazwa ulicy: {this.NazwaUlicy}";
}

Co więcej:

  • wywal konstruktor public Adres(ref Adres adres).
  • ani numer domu ani mieszkania nie mogą być intami, podobnie jak numer ewidencyjny osoby.
0

@.andy:
Nie mogę używać get i set tak jak jest napisane w zadaniu.

Czyli na tym etapie zrób takie proste klasy i jako pola daj te nazwiska, imienia i dorób do tego settery i gettery. W C# trzeba dać przy każdym takim polu { get; set; } i już masz.

Tak jak jest napisane w zadaniu z koipiwanie mam nie robić.
Dzięki

0
somekind napisał(a):

No dobra, czyli mamy problemy na poziomie składni. Te wszystkie metody zaczynające się od Zwroc są bez sensu, bo do tego służą właściwości (a konkretnie gettery). Zamiast używania String.Format krócej jest użyć po prostu interpolacji stringów. Przykład poniżej:

public class Adres
 {
    public string NazwaUlicy { get; }
    public string Miejscowosc { get; }
     
    public Adres(string nazwaUlicy, string miejscowosc)
    {
            this.Miejscowosc = miejscowosc;
            this.NazwaUlicy = nazwaUlicy;
   }

  public override string ToString() => $"Miejscowość: {this.Miejscowosc} Nazwa ulicy: {this.NazwaUlicy}";
}

Co więcej:

  • wywal konstruktor public Adres(ref Adres adres).
  • ani numer domu ani mieszkania nie mogą być intami, podobnie jak numer ewidencyjny osoby.

Nie mogę używać get i set tak jak to pisze w zadaniu. Dostałam kod, który muszę zmienić tak aby wykonać zadanie, W klasa adres muszą być dane kod pocztowy, miejscowość, ulica, numer domu, numer mieszkania.

0

@Marta Długa: wrzuć kod (ten oryginalny), który musisz przerobić.

Btw, temu kto go napisał w taki sposób (polskie nazwy zmiennych itp) daj z mocnego liścia jak go zobaczysz i krzyknij mu w twarz - jak Ci nie wstyd!

0

Kod do przerobienia
klasa Osoba

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace KadryStart 
{ 
    class Osoba 
    { 
            private string nazwisko; 
            private string imie; 
            private int numerEwidencyjny; 
            private string miejscowosc; 
            private string kod; 
            private string nazwaUlicy; 
            private int numerDomu; 
            private int numerMieszkania; 
 
            public Osoba(int numerEwidencyjny, string imie, string nazwisko, int numerDomu, int numerMieszkania, 
                    string nazwaUlicy, string kod, string miejscowosc) 
            { 
                this.numerEwidencyjny = numerEwidencyjny; 
                this.imie = imie; 
                this.nazwisko = nazwisko; 
 
                this.miejscowosc = miejscowosc; 
                this.kod = kod; 
                this.nazwaUlicy = nazwaUlicy; 
                this.numerDomu = numerDomu;
                this.numerMieszkania = numerMieszkania; 
            }

public Osoba(int numerEwidencyjny, string imie, int numerDomu) : 
this(numerEwidencyjny, imie, "Kowalski", numerDomu, 0, "Aleje Jerozolimskie", "02-
222", "Warszawa") { } 

public Osoba(ref Osoba osoba) 
            { 
                numerEwidencyjny = osoba.numerEwidencyjny; imie = osoba.imie; nazwisko 
= osoba.nazwisko; miejscowosc = osoba.miejscowosc; 
                kod = osoba.kod; nazwaUlicy = osoba.nazwaUlicy; numerDomu = 
osoba.numerDomu; numerMieszkania = osoba.numerMieszkania; 
            } 

public string ZwrocInformacjeOsobowe() 
            { 
                return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3} {4} {5}", 
                imie, nazwisko, numerEwidencyjny, ZwrocMiejscowosc(), 
                ZwrocKod(), ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania()); 
            }

            public string ZwrocMiejscowosc() { return miejscowosc; } 
 
            public string ZwrocNazweUlicy() { return nazwaUlicy; } 
 
            public string ZwrocKod() { return kod; } 
 
            public int ZwrocNumerDomu() { return numerDomu; } 
 
            public int ZwrocNumerMieszkania() { return numerMieszkania; 
} 

            public void ZmienDaneOsobowe() 
            { 
                Console.Write("Podaj imię: "); imie = Console.ReadLine(); 
                Console.Write("Podaj nazwisko: "); nazwisko = Console.ReadLine(); 
                do 
                { 
                    Console.Write("Podaj numer ewidencyjny: "); 
                } 
                while (!int.TryParse(Console.ReadLine(), out numerEwidencyjny)); 
            } 
 public void ZmienAdres() 
            { 
                Console.Write("Podaj nazwę miejscowści: "); miejscowosc = 
Console.ReadLine(); 
                Console.Write("Podaj nazwę ulicy "); nazwaUlicy = Console.ReadLine(); 
                Console.Write("Podaj kod: "); kod = Console.ReadLine(); 
                do 
                { 
                    Console.Write("Podaj numer domu: "); 
 
                } 
                while (!int.TryParse(Console.ReadLine(), out numerDomu)); 
 
 
                Console.Write("Czy jest numer mieszkania <t/n>: "); 
                char c = Console.ReadKey().KeyChar; 
                if (c == 't') 
                { 
                    Console.WriteLine(); 
                    do 
                    { 
                        Console.Write("Podaj numer meszkania: "); 
                    } 
                    while (!int.TryParse(Console.ReadLine(), out numerMieszkania)); 
                } 
                else 
                { 
                    numerMieszkania = 0; 
                } 
            }

  public Osoba Klonuj() 
            { 
                return (Osoba)this.MemberwiseClone(); // metoda MemberwiseClone z 
biblioteki .NET, dla każdego  
            } 
        } 
}

klasa program

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace KadryStart 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
       
            Osoba os1 = new Osoba(5, "Ola", 43);      
            Console.WriteLine(" Oryginał {0}", os1.ZwrocInformacjeOsobowe()); 
            Console.WriteLine("\n***Zmieniamy klon:***\n"); 
            Osoba klon1 = os1.Klonuj(); 
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe()); 
            klon1.ZmienDaneOsobowe(); 
            klon1.ZmienAdres(); 
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe()); 
 
            Osoba os3 = new Osoba(ref os1);                      
            Console.WriteLine(" Oryginał {0}", os3.ZwrocInformacjeOsobowe()); 
            Console.WriteLine("\n***Zmieniamy klon:***\n"); 
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe()); 
            klon1.ZmienDaneOsobowe(); 
            klon1.ZmienAdres(); 
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe()); 
            Console.ReadKey(); 
        } 
    } 
}

Po wykonaniu zadania ma być taki sam efekt jak na zdjęciu
screenshot-20211114113904.png

0

Boshe to masakra (chodzi o kod...) no ale może coś podpowiem ;)

       private string miejscowosc; 
            private string kod; 
            private string nazwaUlicy; 
            private int numerDomu; 
            private int numerMieszkania; 

To musisz wydzielić jako osobną klasę i wrzucić do klasy Osoba coś ala: Adres adres.

dla utworzonej klasy adres zdefiniuj swoje konstruktory.
zastosuj kilka różnych konstruktorów

Czyli robisz to bez setterów i getterów {set;get} na polach. Musisz (moim zdaniem) zrobić dwa konstruktory: parametrowy i bez parametrowy.

           public string ZwrocMiejscowosc() { return miejscowosc; } 
            public string ZwrocNazweUlicy() { return nazwaUlicy; } 
            public string ZwrocKod() { return kod; } 
            public int ZwrocNumerDomu() { return numerDomu; } 
            public int ZwrocNumerMieszkania() { return numerMieszkania; 

Skoro przeniosłaś adres do osobnej klasy, to musisz to przerobić. Skoro nie możesz zastosować get i set, to może ustaw te pola jako publiczne w tej klasie adres? :D Ewentualnie przez refleksję? https://stackoverflow.com/questions/95910/find-a-private-field-with-reflection

Ogólnie to wiem jaki chyba był zamysł Pani dr, jednak sposób realizacji jest....tragiczny.

0

Zrobiłam coś takiego ale błędy mam i nie wiem jak to naprawić. Proszę wskazówki jak to poprawić.
klasa Odoba

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Osoba
    {
        private int numerEwidencyjny;
        private string nazwisko;
        private string imie;
        Adres adres;

        public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;

        }

        public Osoba(int numerEwidencyjny, string imie, Adres adres) :
        this(numerEwidencyjny, "Kowalski", imie)
        { }

        public Osoba(ref Osoba osoba)
        {
            numerEwidencyjny = osoba.numerEwidencyjny;
            nazwisko = osoba.nazwisko;
            imie = osoba.imie;
            Adres adres;
        }

        public string ZwrocKod()
        {
            return kod;
        }

        public string ZwrocMiejscowosc()
        {
            return miejscowosc;
        }

        public string ZwrocNazweUlicy()
        {
            return nazwaUlicy;
        }
       
        public int ZwrocNumerDomu()
        {
            return numerDomu;
        }

        public int ZwrocNumerMieszkania()
        {
            return numerMieszkania;
        }

        public string ZwrocInformacjeOsobowe()
        {
            return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3} {4} {5}",
            nazwisko, imie, numerEwidencyjny, adres, ZwrocKod(), ZwrocMiejscowosc(),
          ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania());
        }

        public void ZmienDaneOsobowe()
        {
            Console.Write("Podaj imię: "); imie = Console.ReadLine();
            Console.Write("Podaj nazwisko: "); nazwisko = Console.ReadLine();
            do
            {
                Console.Write("Podaj numer ewidencyjny: ");
            }
            while (!int.TryParse(Console.ReadLine(), out numerEwidencyjny));
        }

        public Osoba Klonuj()
        {
            return (Osoba)this.MemberwiseClone(); 
            }
    }


}

klasa Adres

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Adres
    {
        private string kod;
        private string miejscowosc;
        private string nazwaUlicy;
        private int numerDomu;
        private int numerMieszkania;

        public Adres(string kod, string miejscowosc, string nazwaUlicy, int numerDomu, int numerMieszkania)
        {
            this.kod = kod;
            this.miejscowosc = miejscowosc;
            this.nazwaUlicy = nazwaUlicy;
            this.numerDomu = numerDomu;
            this.numerMieszkania = numerMieszkania;
        }

        public Adres(int numerDomu) :
        this("02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0)
        { }

        public Adres(ref Adres adres)
        {
            kod = adres.kod;
            miejscowosc = adres.miejscowosc;
            nazwaUlicy = adres.nazwaUlicy;
            numerDomu = adres.numerDomu;
            numerMieszkania = adres.numerMieszkania;
        }

        public void ZmienAdres()
        {
            Console.Write("Podaj nazwę miejscowści: ");
            miejscowosc = Console.ReadLine();

            Console.Write("Podaj nazwę ulicy ");
            nazwaUlicy = Console.ReadLine();

            Console.Write("Podaj kod: ");
            kod = Console.ReadLine();

            do
            {
                Console.Write("Podaj numer domu: ");

            }

            while (!int.TryParse(Console.ReadLine(), out numerDomu));

            Console.Write("Czy jest numer mieszkania <t/n>: ");
            char c = Console.ReadKey().KeyChar;
            if (c == 't')
            {
                Console.WriteLine();

                do
                {
                    Console.Write("Podaj numer meszkania: ");
                }

                while (!int.TryParse(Console.ReadLine(), out numerMieszkania));

            }

            else
            {
                numerMieszkania = 0;
            }
        }

    }


}

1

W kodzie masz jeden podstawowy błąd odwołujesz się do zmiennych zawartych w adresie bez jego udziału

         public string ZwrocKod()
        {
            return adres.kod;
        }

Coś w tym stylu powinno być jednak by to działało kod musi być publiczny lub w środku możemy odwołać się do funkcji zwracającej kod znajdującej się w klasie adress.

Ps. Ogólnie jestem przerażony ,że taki poziom może być na 5 semestrze studiów, przecież to podstawy podstaw ,które powinny być szybko odbębnione na pierwszym semestrze, a to ,że nauczyciel daje taki kod to już w ogóle patologia.

0
Botek napisał(a):

Ps. Ogólnie jestem przerażony ,że taki poziom może być na 5 semestrze studiów, przecież to podstawy podstaw ,które powinny być szybko odbębnione na pierwszym semestrze, a to ,że nauczyciel daje taki kod to już w ogóle patologia.

Tego wykładowce mam od I semestru. Niestety nie umie uczyć.
Nie mieliśmy porządnych podstaw tylko tak z grubsza
Poza tym c# nie interesuje mnie bo ja chce zostać front endem. Muszę zaliczyć przedmiot. Uczę się podstaw JavaScript tzn przerobiłam kurs javascript, znam zagadnienia z javascrpit, ale jak przychodzi do napisania programu to nie wiem, które zagadnienia zastosować w kodzie. Niestety nie wiem jak sobie z tym poradzić.

0

@Botek: poprawiłam ale jeszcze mam gdzieś błędy i nie wiem jak je poprawić. Możesz podpowiedzieć?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Osoba
    {
        private int numerEwidencyjny;
        private string nazwisko;
        private string imie;
        Adres adres;

        public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;

        }

        public Osoba(int numerEwidencyjny, string imie, Adres adres) :
        this(numerEwidencyjny, "Kowalski", imie)
        { }

        public Osoba(ref Osoba osoba)
        {
            numerEwidencyjny = osoba.numerEwidencyjny;
            nazwisko = osoba.nazwisko;
            imie = osoba.imie;
            Adres adres = osoba.adres;
        }

        public string ZwrocKod()
        {
            return adres.kod;
        }

        public string ZwrocMiejscowosc()
        {
            return adres.miejscowosc;
        }

        public string ZwrocNazweUlicy()
        {
            return adres.nazwaUlicy;
        }
       
        public int ZwrocNumerDomu()
        {
            return adres.numerDomu;
        }

        public int ZwrocNumerMieszkania()
        {
            return adres.numerMieszkania;
        }

        public string ZwrocInformacjeOsobowe()
        {
            return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3} {4} {5}",
            nazwisko, imie, numerEwidencyjny, adres, ZwrocKod(), ZwrocMiejscowosc(),
          ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania());
        }

        public void ZmienDaneOsobowe()
        {
            Console.Write("Podaj imię: "); imie = Console.ReadLine();
            Console.Write("Podaj nazwisko: "); nazwisko = Console.ReadLine();
            do
            {
                Console.Write("Podaj numer ewidencyjny: ");
            }
            while (!int.TryParse(Console.ReadLine(), out numerEwidencyjny));
        }

        public Osoba Klonuj()
        {
            return (Osoba)this.MemberwiseClone(); 
            }
    }


}

Nie wiem czy poniższy kod jest dobrze napisany zwłaszcza ten Adres adres.

 public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;

        }

        public Osoba(int numerEwidencyjny, string imie, Adres adres) :
        this(numerEwidencyjny, "Kowalski", imie)
        { }

 public Osoba(ref Osoba osoba)
        {
            numerEwidencyjny = osoba.numerEwidencyjny;
            nazwisko = osoba.nazwisko;
            imie = osoba.imie;
            Adres adres = osoba.adres;
        }
0

Problem jest taki ,że próbujesz odwołać się do konstruktora w ,którym jest adres bez podawania go.

public Osoba(int numerEwidencyjny, string imie, Adres adres) :
        this(numerEwidencyjny, "Kowalski", imie, adres)
        { }
0

@Botek: Poprawiłam. Mam błąd w klasa Program. Nie wiem w czym leży problem. Nie wiem czy dobrze mam klasa Osoba.
klasa Osoba

  public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;
            this.adres = adres;
        }

        public Osoba(int numerEwidencyjny, string imie, Adres adres) :
        this(numerEwidencyjny, "Kowalski", imie, adres)
        { }

        public Osoba(ref Osoba osoba)
        {
            numerEwidencyjny = osoba.numerEwidencyjny;
            nazwisko = osoba.nazwisko;
            imie = osoba.imie;
            Adres adres = osoba.adres;
        }

Cały kod
Klasa Osoba

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Osoba
    {
        private int numerEwidencyjny;
        private string nazwisko;
        private string imie;
        Adres adres;

        public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;
            this.adres = adres;
        }

        public Osoba(int numerEwidencyjny, string imie, Adres adres) :
        this(numerEwidencyjny, "Kowalski", imie, adres)
        { }

        public Osoba(ref Osoba osoba)
        {
            numerEwidencyjny = osoba.numerEwidencyjny;
            nazwisko = osoba.nazwisko;
            imie = osoba.imie;
            Adres adres = osoba.adres;
        }

        public string ZwrocKod()
        {
            return adres.kod;
        }

        public string ZwrocMiejscowosc()
        {
            return adres.miejscowosc;
        }

        public string ZwrocNazweUlicy()
        {
            return adres.nazwaUlicy;
        }
       
        public int ZwrocNumerDomu()
        {
            return adres.numerDomu;
        }

        public int ZwrocNumerMieszkania()
        {
            return adres.numerMieszkania;
        }

        public string ZwrocInformacjeOsobowe()
        {
            return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3} {4} {5}",
            nazwisko, imie, numerEwidencyjny, adres, ZwrocKod(), ZwrocMiejscowosc(),
          ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania());
        }

        public void ZmienDaneOsobowe()
        {
            Console.Write("Podaj imię: "); imie = Console.ReadLine();
            Console.Write("Podaj nazwisko: "); nazwisko = Console.ReadLine();
            do
            {
                Console.Write("Podaj numer ewidencyjny: ");
            }
            while (!int.TryParse(Console.ReadLine(), out numerEwidencyjny));
        }

        public Osoba Klonuj()
        {
            return (Osoba)this.MemberwiseClone(); 
         }

        public void ZmienAdres()
        {
            Console.Write("Podaj kod: ");
            adres.kod = Console.ReadLine();

            Console.Write("Podaj nazwę miejscowści: ");
            adres.miejscowosc = Console.ReadLine();

            Console.Write("Podaj nazwę ulicy ");
            adres.nazwaUlicy = Console.ReadLine();

            

            do
            {
                Console.Write("Podaj numer domu: ");

            }

            while (!int.TryParse(Console.ReadLine(), out adres.numerDomu));

            Console.Write("Czy jest numer mieszkania <t/n>: ");
            char c = Console.ReadKey().KeyChar;
            if (c == 't')
            {
                Console.WriteLine();

                do
                {
                    Console.Write("Podaj numer meszkania: ");
                }

                while (!int.TryParse(Console.ReadLine(), out adres.numerMieszkania));

            }

            else
            {
                adres.numerMieszkania = 0;
            }
        }

    }


}

Klasa Adres

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Adres
    {
        public string kod;
        public string miejscowosc;
        public string nazwaUlicy;
        public int numerDomu;
        public int numerMieszkania;

        public Adres(string kod, string miejscowosc, string nazwaUlicy, int numerDomu, int numerMieszkania)
        {
            this.kod = kod;
            this.miejscowosc = miejscowosc;
            this.nazwaUlicy = nazwaUlicy;
            this.numerDomu = numerDomu;
            this.numerMieszkania = numerMieszkania;
        }

        public Adres(int numerDomu) :
        this("02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0)
        { }

        public Adres(ref Adres adres)
        {
            kod = adres.kod;
            miejscowosc = adres.miejscowosc;
            nazwaUlicy = adres.nazwaUlicy;
            numerDomu = adres.numerDomu;
            numerMieszkania = adres.numerMieszkania;
        }

    }


}

Klasa Program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Program
    {
        static void Main(string[] args)
        {
            Osoba os1 = new Osoba(5, "Ola", 43);
            Console.WriteLine(" Oryginał {0}", os1.ZwrocInformacjeOsobowe());
            Console.WriteLine("\n***Zmieniamy klon:***\n");
            Osoba klon1 = os1.Klonuj();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            klon1.ZmienDaneOsobowe();
            klon1.ZmienAdres();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());

            Osoba os3 = new Osoba(ref os1);
            Console.WriteLine(" Oryginał {0}", os3.ZwrocInformacjeOsobowe());
            Console.WriteLine("\n***Zmieniamy klon:***\n");
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            klon1.ZmienDaneOsobowe();
            klon1.ZmienAdres();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            Console.ReadKey();
        }

    }


}

0

@Marcin Marcin:
Poprawiłam. Mam błąd w klasa Program. Nie wiem w czym leży problem. Nie wiem czy dobrze mam klasa Osoba.
klasa Osoba

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Osoba
    {
        private int numerEwidencyjny;
        private string nazwisko;
        private string imie;
        Adres adres;

        public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;
            this.adres = adres;
        }

        public Osoba(int numerEwidencyjny, string imie, Adres adres) :
        this(numerEwidencyjny, "Kowalski", imie, adres)
        { }

        public Osoba(ref Osoba osoba)
        {
            numerEwidencyjny = osoba.numerEwidencyjny;
            nazwisko = osoba.nazwisko;
            imie = osoba.imie;
            Adres adres = osoba.adres;
        }

        public string ZwrocKod()
        {
            return adres.kod;
        }

        public string ZwrocMiejscowosc()
        {
            return adres.miejscowosc;
        }

        public string ZwrocNazweUlicy()
        {
            return adres.nazwaUlicy;
        }

        public int ZwrocNumerDomu()
        {
            return adres.numerDomu;
        }

        public int ZwrocNumerMieszkania()
        {
            return adres.numerMieszkania;
        }

        public string ZwrocInformacjeOsobowe()
        {
            return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3} {4} {5}",
            nazwisko, imie, numerEwidencyjny, adres, ZwrocKod(), ZwrocMiejscowosc(),
          ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania());
        }

        public void ZmienDaneOsobowe()
        {
            Console.Write("Podaj imię: "); imie = Console.ReadLine();
            Console.Write("Podaj nazwisko: "); nazwisko = Console.ReadLine();
            do
            {
                Console.Write("Podaj numer ewidencyjny: ");
            }
            while (!int.TryParse(Console.ReadLine(), out numerEwidencyjny));
        }

        public Osoba Klonuj()
        {
            return (Osoba)this.MemberwiseClone(); 
         }

        public void ZmienAdres()
        {
            Console.Write("Podaj kod: ");
            adres.kod = Console.ReadLine();

            Console.Write("Podaj nazwę miejscowści: ");
            adres.miejscowosc = Console.ReadLine();

            Console.Write("Podaj nazwę ulicy ");
            adres.nazwaUlicy = Console.ReadLine();

            do
            {
                Console.Write("Podaj numer domu: ");

            }

            while (!int.TryParse(Console.ReadLine(), out adres.numerDomu));

            Console.Write("Czy jest numer mieszkania <t/n>: ");
            char c = Console.ReadKey().KeyChar;
            if (c == 't')
            {
                Console.WriteLine();

                do
                {
                    Console.Write("Podaj numer meszkania: ");
                }

                while (!int.TryParse(Console.ReadLine(), out adres.numerMieszkania));

            }

            else
            {
                adres.numerMieszkania = 0;
            }
        }

    }

}

Klasa Adres

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Adres
    {
        public string kod;
        public string miejscowosc;
        public string nazwaUlicy;
        public int numerDomu;
        public int numerMieszkania;

        public Adres(string kod, string miejscowosc, string nazwaUlicy, int numerDomu, int numerMieszkania)
        {
            this.kod = kod;
            this.miejscowosc = miejscowosc;
            this.nazwaUlicy = nazwaUlicy;
            this.numerDomu = numerDomu;
            this.numerMieszkania = numerMieszkania;
        }

        public Adres(int numerDomu) :
        this("02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0)
        { }

        public Adres(ref Adres adres)
        {
            kod = adres.kod;
            miejscowosc = adres.miejscowosc;
            nazwaUlicy = adres.nazwaUlicy;
            numerDomu = adres.numerDomu;
            numerMieszkania = adres.numerMieszkania;
        }

    }

}

Klasa Program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Program
    {
        static void Main(string[] args)
        {
            Osoba os1 = new Osoba(5, "Ola", 43);
            Console.WriteLine(" Oryginał {0}", os1.ZwrocInformacjeOsobowe());
            Console.WriteLine("\n***Zmieniamy klon:***\n");
            Osoba klon1 = os1.Klonuj();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            klon1.ZmienDaneOsobowe();
            klon1.ZmienAdres();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());

            Osoba os3 = new Osoba(ref os1);
            Console.WriteLine(" Oryginał {0}", os3.ZwrocInformacjeOsobowe());
            Console.WriteLine("\n***Zmieniamy klon:***\n");
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            klon1.ZmienDaneOsobowe();
            klon1.ZmienAdres();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            Console.ReadKey();
        }

    }

}

To 43 w klasie Program to numer domu.

0

Wskazówki w komentarzach

Zobacz na konstruktor Osoba(ref Osoba osoba).

   public Osoba(ref Osoba osoba)
        {
            numerEwidencyjny = osoba.numerEwidencyjny;
            nazwisko = osoba.nazwisko;
            imie = osoba.imie;
            //Adres adres = osoba.adres; Tworzyłaś tu nową zmienną lokalną. Zobacz:
            adres = osoba.adres;
        }
```
Klasa Program
```csharp
//Osoba os1 = new Osoba(5, "Ola", 43);  Nie ma takiego konstruktora. Spróbuj:
Osoba os1 = new Osoba(5, "Ola", new Adres(43));    
```
0

Klasa Program

//Osoba os1 = new Osoba(5, "Ola", 43);  Nie ma takiego konstruktora. Spróbuj:
Osoba os1 = new Osoba(5, "Ola", new Adres(43));    

Czy to 5 i 43 chyba powinno być pobierane z klasy Osoba

 public string ZwrocInformacjeOsobowe()
        {
            return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3} {4} {5}",
            nazwisko, imie, numerEwidencyjny, ZwrocKod(), ZwrocMiejscowosc(),
          ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania());
        }

public Osoba Klonuj()
        {
            return (Osoba)this.MemberwiseClone();
        }

Jak się mylę to poprawcie mnie.
Bo w skrypcie z zadania, który dał wykładowca w klasie Program też było

Osoba os1 = new Osoba(5, "Ola", 43);  

Tylko że to co jest u mnie w klasie Adres to u wykładowcy było to w klasie Osoba i skrypt działał.

0

@dyzio412: Kod z zadania do przerobienia.
Klasa Osoba

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace KadryStart 
{ 
    class Osoba 
    { 
            private string nazwisko; 
            private string imie; 
            private int numerEwidencyjny; 
            private string miejscowosc; 
            private string kod; 
            private string nazwaUlicy; 
            private int numerDomu; 
            private int numerMieszkania; 

            public Osoba(int numerEwidencyjny, string imie, string nazwisko, int numerDomu, int numerMieszkania, 
                    string nazwaUlicy, string kod, string miejscowosc) 
            { 
                this.numerEwidencyjny = numerEwidencyjny; 
                this.imie = imie; 
                this.nazwisko = nazwisko; 

                this.miejscowosc = miejscowosc; 
                this.kod = kod; 
                this.nazwaUlicy = nazwaUlicy; 
                this.numerDomu = numerDomu;
                this.numerMieszkania = numerMieszkania; 
            }

public Osoba(int numerEwidencyjny, string imie, int numerDomu) : 
this(numerEwidencyjny, imie, "Kowalski", numerDomu, 0, "Aleje Jerozolimskie", "02-
222", "Warszawa") { } 

public Osoba(ref Osoba osoba) 
            { 
                numerEwidencyjny = osoba.numerEwidencyjny; imie = osoba.imie; nazwisko 
= osoba.nazwisko; miejscowosc = osoba.miejscowosc; 
                kod = osoba.kod; nazwaUlicy = osoba.nazwaUlicy; numerDomu = 
osoba.numerDomu; numerMieszkania = osoba.numerMieszkania; 
            } 

public string ZwrocInformacjeOsobowe() 
            { 
                return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3} {4} {5}", 
                imie, nazwisko, numerEwidencyjny, ZwrocMiejscowosc(), 
                ZwrocKod(), ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania()); 
            }

            public string ZwrocMiejscowosc() { return miejscowosc; } 

            public string ZwrocNazweUlicy() { return nazwaUlicy; } 

            public string ZwrocKod() { return kod; } 

            public int ZwrocNumerDomu() { return numerDomu; } 

            public int ZwrocNumerMieszkania() { return numerMieszkania; 
} 

            public void ZmienDaneOsobowe() 
            { 
                Console.Write("Podaj imię: "); imie = Console.ReadLine(); 
                Console.Write("Podaj nazwisko: "); nazwisko = Console.ReadLine(); 
                do 
                { 
                    Console.Write("Podaj numer ewidencyjny: "); 
                } 
                while (!int.TryParse(Console.ReadLine(), out numerEwidencyjny)); 
            } 
 public void ZmienAdres() 
            { 
                Console.Write("Podaj nazwę miejscowści: "); miejscowosc = 
Console.ReadLine(); 
                Console.Write("Podaj nazwę ulicy "); nazwaUlicy = Console.ReadLine(); 
                Console.Write("Podaj kod: "); kod = Console.ReadLine(); 
                do 
                { 
                    Console.Write("Podaj numer domu: "); 

                } 
                while (!int.TryParse(Console.ReadLine(), out numerDomu)); 

                Console.Write("Czy jest numer mieszkania <t/n>: "); 
                char c = Console.ReadKey().KeyChar; 
                if (c == 't') 
                { 
                    Console.WriteLine(); 
                    do 
                    { 
                        Console.Write("Podaj numer meszkania: "); 
                    } 
                    while (!int.TryParse(Console.ReadLine(), out numerMieszkania)); 
                } 
                else 
                { 
                    numerMieszkania = 0; 
                } 
            }

  public Osoba Klonuj() 
            { 
                return (Osoba)this.MemberwiseClone(); 
            } 
        } 
}

Klasa Program ten sam co ja mam - tam nic nie zmieniałam.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Program
    {
        static void Main(string[] args)
        {
            Osoba os1 = new Osoba(5, "Ola", 43);
            Console.WriteLine(" Oryginał {0}", os1.ZwrocInformacjeOsobowe());
            Console.WriteLine("\n***Zmieniamy klon:***\n");
            Osoba klon1 = os1.Klonuj();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            klon1.ZmienDaneOsobowe();
            klon1.ZmienAdres();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());

            Osoba os3 = new Osoba(ref os1);
            Console.WriteLine(" Oryginał {0}", os3.ZwrocInformacjeOsobowe());
            Console.WriteLine("\n***Zmieniamy klon:***\n");
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            klon1.ZmienDaneOsobowe();
            klon1.ZmienAdres();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            Console.ReadKey();
        }

    }

}
0

Tego wcześniej nie wiedziałem, że klasa Program ma zostać bez zmian. Oczywiście można to było zrobić zmieniając konstruktor w klasie Osoba.
Rozumiem, że teraz jest ok?

public Osoba(int numerEwidencyjny, string imie, int numerDomu) : 
this(numerEwidencyjny, imie, "Kowalski", numerDomu, 0, "Aleje Jerozolimskie", "02-
222", "Warszawa") { } 

//Tutaj powinno być w tej samej linii jak poniżej (mogło się dodać przy kopiowaniu)

public Osoba(int numerEwidencyjny, string imie, int numerDomu) :
        this(numerEwidencyjny, imie, "Kowalski", numerDomu, 0, "Aleje Jerozolimskie", "02-222", "Warszawa") { } 

//Zmieniłaś też namespace z
//namespace Kadry na
//namespace KadryStart 
0

@dyzio412:
Czyli ja mam w
klasie Osoba

public Osoba(int numerEwidencyjny, string imie, Adres adres) :
        this(numerEwidencyjny, "Kowalski", imie, adres)
        { }

klasie adres

 public Adres(int numerDomu) :
        this("02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0)
        { }

klasa Program ten sam

Z klasy Adres wyrzuciłam
klasie adres

 public Adres(int numerDomu) :
        this("02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0)
        { }

i wrzuciłam to do klasy Osoba, ale wyskakuje błąd.
public Osoba(int numerEwidencyjny, string imie, int numerDomu) :
this(numerEwidencyjny, "Kowalski", imie, "02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0)
{ }

0

@dyzio412:Mój cały kod
Klasa Osoba

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Osoba
    {
        private int numerEwidencyjny;
        private string nazwisko;
        private string imie;
        Adres adres;

        public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;
            this.adres = adres;
        }

        public Osoba(int numerEwidencyjny, string imie, int numerDomu) :
        this(numerEwidencyjny, "Kowalski", imie, "02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0)
        { }

        public Osoba(ref Osoba osoba)
        {
            numerEwidencyjny = osoba.numerEwidencyjny;
            nazwisko = osoba.nazwisko;
            imie = osoba.imie;
            adres = osoba.adres;
        }

        public string ZwrocKod()
        {
            return adres.kod;
        }

        public string ZwrocMiejscowosc()
        {
            return adres.miejscowosc;
        }

        public string ZwrocNazweUlicy()
        {
            return adres.nazwaUlicy;
        }
       
        public int ZwrocNumerDomu()
        {
            return adres.numerDomu;
        }

        public int ZwrocNumerMieszkania()
        {
            return adres.numerMieszkania;
        }

        public string ZwrocInformacjeOsobowe()
        {
            return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3} {4} {5}",
            nazwisko, imie, numerEwidencyjny, ZwrocKod(), ZwrocMiejscowosc(),
          ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania());
        }

        public void ZmienDaneOsobowe()
        {
            Console.Write("Podaj imię: "); imie = Console.ReadLine();
            Console.Write("Podaj nazwisko: "); nazwisko = Console.ReadLine();
            do
            {
                Console.Write("Podaj numer ewidencyjny: ");
            }
            while (!int.TryParse(Console.ReadLine(), out numerEwidencyjny));
        }

        public void ZmienAdres()
        {
            Console.Write("Podaj kod: ");
            adres.kod = Console.ReadLine();

            Console.Write("Podaj nazwę miejscowści: ");
            adres.miejscowosc = Console.ReadLine();

            Console.Write("Podaj nazwę ulicy ");
            adres.nazwaUlicy = Console.ReadLine();



            do
            {
                Console.Write("Podaj numer domu: ");

            }

            while (!int.TryParse(Console.ReadLine(), out adres.numerDomu));

            Console.Write("Czy jest numer mieszkania <t/n>: ");
            char c = Console.ReadKey().KeyChar;
            if (c == 't')
            {
                Console.WriteLine();

                do
                {
                    Console.Write("Podaj numer meszkania: ");
                }

                while (!int.TryParse(Console.ReadLine(), out adres.numerMieszkania));

            }

            else
            {
                adres.numerMieszkania = 0;
            }

        }

        public Osoba Klonuj()
        {
            return (Osoba)this.MemberwiseClone();
        }

    }


}

Klasa Adres

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Adres
    {
        public string kod;
        public string miejscowosc;
        public string nazwaUlicy;
        public int numerDomu;
        public int numerMieszkania;

        public Adres(string kod, string miejscowosc, string nazwaUlicy, int numerDomu, int numerMieszkania)
        {
            this.kod = kod;
            this.miejscowosc = miejscowosc;
            this.nazwaUlicy = nazwaUlicy;
            this.numerDomu = numerDomu;
            this.numerMieszkania = numerMieszkania;
        }

        public Adres(ref Adres adres)
        {
            kod = adres.kod;
            miejscowosc = adres.miejscowosc;
            nazwaUlicy = adres.nazwaUlicy;
            numerDomu = adres.numerDomu;
            numerMieszkania = adres.numerMieszkania;
        }

    }


}

Klasa Program niezmieniony

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Program
    {
        static void Main(string[] args)
        {
            Osoba os1 = new Osoba(5, "Ola", 43);
            Console.WriteLine(" Oryginał {0}", os1.ZwrocInformacjeOsobowe());
            Console.WriteLine("\n***Zmieniamy klon:***\n");
            Osoba klon1 = os1.Klonuj();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            klon1.ZmienDaneOsobowe();
            klon1.ZmienAdres();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());

            Osoba os3 = new Osoba(ref os1);
            Console.WriteLine(" Oryginał {0}", os3.ZwrocInformacjeOsobowe());
            Console.WriteLine("\n***Zmieniamy klon:***\n");
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            klon1.ZmienDaneOsobowe();
            klon1.ZmienAdres();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            Console.ReadKey();
        }

    }


}

0

Zmieniłam i mam w całości w klasie Osoba. Niestety nadal mam 1 błąd z którym sobie nie radzę.
Błagam o pomoc. Już drugi tydzień się męczę i sama nie poradzę sobie.

public Osoba(int numerEwidencyjny, string imie, int numerDomu) :
        this(numerEwidencyjny, imie, "Kowalski", numerDomu, 0, "Aleje Jerozolimskie", "02-222", "Warszawa") { 

Klasa Osoba

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Osoba
    {
        private int numerEwidencyjny;
        private string nazwisko;
        private string imie;
        Adres adres;

        public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;
            this.adres = adres;
        }

        public Osoba(int numerEwidencyjny, string imie, int numerDomu) :
        this(numerEwidencyjny, "Kowalski", imie, "02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0) { }

        public Osoba(ref Osoba osoba)
        {
            numerEwidencyjny = osoba.numerEwidencyjny;
            nazwisko = osoba.nazwisko;
            imie = osoba.imie;
            adres = osoba.adres;
        }

        public string ZwrocKod()
        {
            return adres.kod;
        }

        public string ZwrocMiejscowosc()
        {
            return adres.miejscowosc;
        }

        public string ZwrocNazweUlicy()
        {
            return adres.nazwaUlicy;
        }
       
        public int ZwrocNumerDomu()
        {
            return adres.numerDomu;
        }

        public int ZwrocNumerMieszkania()
        {
            return adres.numerMieszkania;
        }

        public string ZwrocInformacjeOsobowe()
        {
            return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3} {4} {5}",
            nazwisko, imie, numerEwidencyjny, ZwrocKod(), ZwrocMiejscowosc(),
          ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania());
        }

        public void ZmienDaneOsobowe()
        {
            Console.Write("Podaj imię: "); imie = Console.ReadLine();
            Console.Write("Podaj nazwisko: "); nazwisko = Console.ReadLine();
            do
            {
                Console.Write("Podaj numer ewidencyjny: ");
            }
            while (!int.TryParse(Console.ReadLine(), out numerEwidencyjny));
        }

        public void ZmienAdres()
        {
            Console.Write("Podaj kod: ");
            adres.kod = Console.ReadLine();

            Console.Write("Podaj nazwę miejscowści: ");
            adres.miejscowosc = Console.ReadLine();

            Console.Write("Podaj nazwę ulicy ");
            adres.nazwaUlicy = Console.ReadLine();



            do
            {
                Console.Write("Podaj numer domu: ");

            }

            while (!int.TryParse(Console.ReadLine(), out adres.numerDomu));

            Console.Write("Czy jest numer mieszkania <t/n>: ");
            char c = Console.ReadKey().KeyChar;
            if (c == 't')
            {
                Console.WriteLine();

                do
                {
                    Console.Write("Podaj numer meszkania: ");
                }

                while (!int.TryParse(Console.ReadLine(), out adres.numerMieszkania));

            }

            else
            {
                adres.numerMieszkania = 0;
            }

        }

        public Osoba Klonuj()
        {
            return (Osoba)this.MemberwiseClone();
        }

    }


}

Klasa Adres

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Adres
    {
        public string kod;
        public string miejscowosc;
        public string nazwaUlicy;
        public int numerDomu;
        public int numerMieszkania;

        public Adres(string kod, string miejscowosc, string nazwaUlicy, int numerDomu, int numerMieszkania)
        {
            this.kod = kod;
            this.miejscowosc = miejscowosc;
            this.nazwaUlicy = nazwaUlicy;
            this.numerDomu = numerDomu;
            this.numerMieszkania = numerMieszkania;
        }

        public Adres(ref Adres adres)
        {
            kod = adres.kod;
            miejscowosc = adres.miejscowosc;
            nazwaUlicy = adres.nazwaUlicy;
            numerDomu = adres.numerDomu;
            numerMieszkania = adres.numerMieszkania;
        }

    }


}

0

Błagam pomóżcie nie mam zielonego pojęcia jak to zrobić.
Zmieniłam coś ale nadal błędy są.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kadry
{
    public class Osoba
    {
        private int numerEwidencyjny;
        private string nazwisko;
        private string imie;
        Adres adres;

        public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;
            this(adres)
        }

        
        public Osoba(int numerEwidencyjny, string imie,  Adres adres, int numerDomu) :       
        this(numerEwidencyjny, "Kowalski", imie, "02-222", "Warszawa", "Aleje Jerozolimskie",  numerDomu, 0)
        this.adres = Adres;
        { }

        public Osoba(ref Osoba osoba)
        {
            numerEwidencyjny = osoba.numerEwidencyjny;
            nazwisko = osoba.nazwisko;
            imie = osoba.imie;
            adres = osoba.adres;
        }

        public string ZwrocKod()
        {
            return adres.kod;
        }

        public string ZwrocMiejscowosc()
        {
            return adres.miejscowosc;
        }

        public string ZwrocNazweUlicy()
        {
            return adres.nazwaUlicy;
        }
       
        public int ZwrocNumerDomu()
        {
            return adres.numerDomu;
        }

        public int ZwrocNumerMieszkania()
        {
            return adres.numerMieszkania;
        }

        public string ZwrocInformacjeOsobowe()
        {
            return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3} {4} {5}",
            nazwisko, imie, numerEwidencyjny, ZwrocKod(), ZwrocMiejscowosc(),
          ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania());
        }

        public void ZmienDaneOsobowe()
        {
            Console.Write("Podaj imię: "); imie = Console.ReadLine();
            Console.Write("Podaj nazwisko: "); nazwisko = Console.ReadLine();
            do
            {
                Console.Write("Podaj numer ewidencyjny: ");
            }
            while (!int.TryParse(Console.ReadLine(), out numerEwidencyjny));
        }

        public void ZmienAdres()
        {
            Console.Write("Podaj kod: ");
            adres.kod = Console.ReadLine();

            Console.Write("Podaj nazwę miejscowści: ");
            adres.miejscowosc = Console.ReadLine();

            Console.Write("Podaj nazwę ulicy ");
            adres.nazwaUlicy = Console.ReadLine();



            do
            {
                Console.Write("Podaj numer domu: ");

            }

            while (!int.TryParse(Console.ReadLine(), out adres.numerDomu));

            Console.Write("Czy jest numer mieszkania <t/n>: ");
            char c = Console.ReadKey().KeyChar;
            if (c == 't')
            {
                Console.WriteLine();

                do
                {
                    Console.Write("Podaj numer meszkania: ");
                }

                while (!int.TryParse(Console.ReadLine(), out adres.numerMieszkania));

            }

            else
            {
                adres.numerMieszkania = 0;
            }

        }

        public Osoba Klonuj()
        {
            return (Osoba)this.MemberwiseClone();
        }

    }


}

0

Linijka 21: this(adres) - co to jest? Tego typu odwołanie to tylko w konstruktorze, po :,
Linijka 26: this.adres = Adres; - to musi być wewnątrz jakichś klamerek pewnie, ale Adres to typ, więc nie zadziała.

W ogóle musisz tworzyć ten konstruktor uruchamiający inny konstruktor? Nie wystarczy coś takiego - jeden ustawia wszystko, a drugi tylko numer, imie i numer domu bo resztę bierze standardową?

        public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;
            this.adres = adres;
        }

        public Osoba(int numerEwidencyjny, string imie, int numerDomu)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.imie = imie;
            this.nazwisko = "Kowalski";
            this.adres = new Adres("02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0);
        }
1

Już sobie poradziłam


using System;

namespace Kadry
{
public class Osoba
{
private int numerEwidencyjny;
private string nazwisko;
private string imie;
Adres adres;

public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
{
	this.numerEwidencyjny = numerEwidencyjny;
	this.nazwisko = nazwisko;
	this.imie = imie;
	this.adres = adres;
}

public Osoba(int numerEwidencyjny, string imie, int numerDomu) : this(numerEwidencyjny, "Kowalski", imie, new Adres("02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0)) { }


    public Osoba(ref Osoba osoba)
    {
        numerEwidencyjny = osoba.numerEwidencyjny;
        nazwisko = osoba.nazwisko;
        imie = osoba.imie;
        adres = osoba.adres;
    }

    public string ZwrocKod()
    {
        return adres.kod;
    }

    public string ZwrocMiejscowosc()
    {
        return adres.miejscowosc;
    }

    public string ZwrocNazweUlicy()
    {
        return adres.nazwaUlicy;
    }
   
    public int ZwrocNumerDomu()
    {
        return adres.numerDomu;
    }

    public int ZwrocNumerMieszkania()
    {
        return adres.numerMieszkania;
    }

    public string ZwrocInformacjeOsobowe()
    {
        return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3} {4} {5}",
        nazwisko, imie, numerEwidencyjny, ZwrocKod(), ZwrocMiejscowosc(),
      ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania());
    }

    public void ZmienDaneOsobowe() 
        { 
        do 
            { 
                Console.Write("Podaj numer ewidencyjny: "); 
            } 
            while (!int.TryParse(Console.ReadLine(), out numerEwidencyjny));     
		    Console.Write("Podaj nazwisko: "); nazwisko = Console.ReadLine(); 
		    Console.Write("Podaj imię: "); imie = Console.ReadLine();                 
        }

    public void ZmienAdres() 
        { 
            Console.Write("Podaj kod: "); 
		    adres.kod = Console.ReadLine();
		
		    Console.Write("Podaj nazwę miejscowści: "); 
		    adres.miejscowosc = Console.ReadLine(); 
		
            Console.Write("Podaj nazwę ulicy "); 
		    adres.nazwaUlicy = Console.ReadLine(); 
             
            do 
            { 
                Console.Write("Podaj numer domu: "); 

            } 
		
            while (!int.TryParse(Console.ReadLine(), out adres.numerDomu)); 


            Console.Write("Czy jest numer mieszkania <t/n>: "); 
            char c = Console.ReadKey().KeyChar; 
            if (c == 't') 
            { 
                Console.WriteLine(); 
                do 
                { 
                    Console.Write("Podaj numer meszkania: "); 
                } 
				
                while (!int.TryParse(Console.ReadLine(), out adres.numerMieszkania)); 
            } 
            else 
            { 
                adres.numerMieszkania = 0; 
            } 
        } 

    public Osoba Klonuj()
    {
        return (Osoba)this.MemberwiseClone();
    }

}

}

namespace Kadry
{
public class Adres
{
public string kod;
public string miejscowosc;
public string nazwaUlicy;
public int numerDomu;
public int numerMieszkania;

    public Adres(string kod, string miejscowosc, string nazwaUlicy, int numerDomu, int numerMieszkania)
    {
        this.kod = kod;
        this.miejscowosc = miejscowosc;
        this.nazwaUlicy = nazwaUlicy;
        this.numerDomu = numerDomu;
        this.numerMieszkania = numerMieszkania;
    }

    public Adres(ref Adres adres)
    {
        kod = adres.kod;
        miejscowosc = adres.miejscowosc;
        nazwaUlicy = adres.nazwaUlicy;
        numerDomu = adres.numerDomu;
        numerMieszkania = adres.numerMieszkania;
    }

}

}

namespace Kadry
{
public class Program
{
static void Main(string[] args)
{
Osoba os1 = new Osoba(5, "Ola", 43);
Console.WriteLine(" Oryginał {0}", os1.ZwrocInformacjeOsobowe());
Console.WriteLine("\nZmieniamy klon:\n");
Osoba klon1 = os1.Klonuj();
Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
klon1.ZmienDaneOsobowe();
klon1.ZmienAdres();
Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());

        Osoba os3 = new Osoba(ref os1);
        Console.WriteLine(" Oryginał {0}", os3.ZwrocInformacjeOsobowe());
        Console.WriteLine("\n***Zmieniamy klon:***\n");
        Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
        klon1.ZmienDaneOsobowe();
        klon1.ZmienAdres();
    }

}

}

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