Hey ;)
Mam problem z pewnym programem, który polega na prostej obsłudze zoo. Na dole zamieszczam opis słowny i grafikę struktury programu, którą dostaliśmy od profesora.
Problem pojawia się przy czerwonym znaku zapytania, mianowicie Opiekunowie mają być przypisywani do Klatek,
np jedna klatka może mieć 2 opiekunów, ale nie musi. No to zdecydowałem stworzyć listę w Klatce, bo przez kompozycję, jeśli usunę z poziomu Zoo Klatkę, to usuną się też przypisani do niej opiekunowie. No i fajnie, ale chcąc dodać Opiekuna do Klatki, muszę mieć ich listę z Zoo, do którego nie wiem jak mam się z poziomu Opiekuna czy Klatki odnieść (mógłbym do metody PrzydzielKlatke wysyłać zoo i nr, ale tak dostaliśmy na zajęciach - tylko z nr).
Proszę o pomoc bo kombinuję i nic nie mogę ciekawego wymyślić :/
Ogólnie jestem otwarty na wszelkie uwagi, bo od niedawna uczymy się C#, i na razie jakiś super rozwiązań nie znamy jeszcze ;) a sam język mi się podoba :)
Pozdrawiam Dawid
class Zoo
{
List<Klatka> klatki = new List<Klatka>();
List<Opiekun> opiekun = new List<Opiekun>();
public void InfoKlatki()
{
foreach (var item in klatki)
{
item.WypiszInfo();
}
}
public bool DodajKlatke(uint nr, uint pojemnosc)
{
if (klatki.Exists(x => x.Nr == nr))
return false;
else
{
klatki.Add(new Klatka(nr, pojemnosc));
return true;
}
}
public Klatka ZnajdzKlatke(uint nrklatki)
{
foreach (var item in klatki)
{
if (item.Nr == nrklatki)
return item;
}
return null;
}
public void DodajZwierze(uint nrKlatki, Zwierze z)
{
if(ZnajdzKlatke(nrKlatki) != null)
ZnajdzKlatke(nrKlatki).DodajZwierze(z);
else
Console.WriteLine("nie ma klatki " + nrKlatki + "\n");
}
}
class Klatka
{
public uint Nr { get; }
private uint pojemnosc = 0;
private bool nieUpierdolona = true;
List<Zwierze> zwierze = new List<Zwierze>();
List<Opiekun> opiekuni = new List<Opiekun>();
public Klatka(){ Nr = 0; }
public Klatka(uint nr, uint pojemnosc)
{
this.Nr = nr;
this.pojemnosc = pojemnosc;
}
public Klatka(uint nr, uint pojemnosc, bool nieUpierdolona)
{
this.Nr = nr;
this.pojemnosc = pojemnosc;
this.nieUpierdolona = nieUpierdolona;
}
public void WypiszInfo()
{
Console.WriteLine("numer: " + Nr + "\npojemnosc: " + pojemnosc + "\nczy trzysta" + nieUpierdolona + "\n\n");
foreach (var item in zwierze)
{
item.WypiszInfo();
}
Console.WriteLine("\n");
}
public void DodajZwierze(Zwierze z)
{
if(zwierze.Count >= pojemnosc)
Console.WriteLine("Przeciazenie klatki\n");
else
zwierze.Add(z);
}
public void ZabijZwierze(Zwierze z)
{
zwierze.Remove(z);
Console.WriteLine("0we pole");
zwierze[0].WypiszInfo();
}
}
class Opiekun
{
string imie = "Brak";
string nazwisko = "Brak";
public Opiekun()
{
}
public Opiekun(string imie, string nazwisko)
{
this.imie = imie;
this.nazwisko = nazwisko;
}
}
Opis problemu: W pewnym ogrodzie zoologicznym znajdują się trzy rodzaje zwierząt: ssaki, ptaki i gady. O każdym ze zwierząt gromadzone są informacje na temat gatunku, rodzaju pożywienia oraz pochodzenia zwierzęcia. Każdy z trzech rodzajów zwierząt posiada też pewne unikatowe cechy i/lub umiejętności. Ptaki potrafią latać, a informacja o maksymalnej długości lotu ptaka bez odpoczynku wyznaczana jest na podstawie iloczynu rozpiętości skrzydeł ptaka i jego wytrzymałość. Niektóre gady mogą być jadowite. W zoo gromadzone są także informacje na temat naturalnego środowiska życia ssaków. Wszystkie zwierzęta trzymane są w klatkach, które mają pewną określoną pojemność. Klatka może wymagać posprzątania. Każda klatka jest identyfikowana za pomocą unikatowego numeru. W zoo zatrudnieni są również opiekunowie, którzy odpowiadają m.in. za sprzątanie klatek. Każdy z nich może być przydzielony do opieki nad kilkoma klatkami. Dyrekcja zoo potrzebuje na bieżąco sprawdzać informacje na temat wszystkich klatek wraz ze szczegółowymi informacjami na temat znajdujących się w nich zwierząt oraz na temat opiekunów pracujących w zoo. Dyrekcja może podjąć decyzję o budowie nowej klatki, powiększeniu klatki, zatrudnieniu nowego pracownika oraz umieszczeniu w klatce nowego zwierzęcia.
Ogólnie Dyrekcje zawarliśmy w Zoo