/// <summary> /// Podstawowy konstruktor do lotu pojedynczego /// </summary> public Lot(string ID, Trasa _Droga, DateTime DataWylotu, Boolean _CZyMawracac, Samolot MaszynaObslugujaca, TypSamolotu RodzajSamolotu) { Pojazd = RodzajSamolotu; Maszyna = MaszynaObslugujaca; LNIDRezerwacjiBiletow = new List <string>(); ListaRezerwacji = new List <RezerwcjaBilet>(); SetID(ID); Droga = _Droga; DataGodzinaWylotu = DataWylotu; //ostatnia liczna to sekundy- nieistotna wartość w programie Pojazd = null; // to też pomaga stwierdzić czy istnieje samolot który jest zapisany do trasy CzasLotu = new TimeSpan(0, 0, 0); //dzięki temu wiemy że na początku nie ma konkretnego samolotu który obsługuje ta trase CzyMaWracac = _CZyMawracac; Maszyna.Cykliczny = false; Maszyna.CzyDostepny = false; CzasLotu = PlanLotu.ILeleciWjednaStrone(RodzajSamolotu, _Droga); DataLadowania = this.DataLądowaniaDateTime(); if (CzyMaWracac == true && Maszyna.CoObsluguje != null) { Maszyna.Coobsluguje2 = this; } else { Maszyna.CoObsluguje = this; } }
/// <summary> /// konstruktor kopiujący, który odwraca kierunek poróży /// </summary> /// <param name="Droga"></param> public Trasa(Trasa Droga) { this.Lotnisko1 = Droga.Lotnisko2; this.Lotnisko2 = Droga.Lotnisko1; Odleglosc = Droga.Odleglosc; this.IDTrasy = Lotnisko1.GetIDLotniska() + "-" + Lotnisko2.GetIDLotniska(); }
/// <summary> /// Funkcja dodająca do listy dwa obiekty Tras: Lotnisko1-Lotnisko2 oraz Lotnisko2-Lotnisko1 /// </summary> /// <param name="Lotnisko1"></param> /// <param name=""></param> public void DodajTrase(Lotnisko Lotnisko1, Lotnisko Lotnisko2, int odleglosc)// można przetestować { Trasa tmp1 = new Trasa(Lotnisko1, Lotnisko2, odleglosc); Trasa tmp2 = new Trasa(tmp1); ListaTras.Add(tmp1); ListaTras.Add(tmp2); }
/// <summary> /// Metoda statyczna , Po to żeby sprawdzać czy wybrany samolot i trasa będą dobre- metode stayczną da się wywoływać jak nie istnieje obiekt /// </summary> /// <param name="TypPojazdu"></param> /// <param name="Droga"></param> public static Boolean CzyDoleci(TypSamolotu TypPojazdu, Trasa Droga) { if (TypPojazdu.GetZasieg() >= Droga.GetOdleglosc()) { return(true); } else { return(false); } }
public PlanLotu(DateTime PierwszyLot, TimeSpan _CoIleLata, Trasa Kierunek, TypSamolotu _RodzajSamolotu, TimeSpan NajakiPrzedzialCzasuTworzyc, Samolot _Pojazd) { NaJakiPrzedzialczasu = NajakiPrzedzialCzasuTworzyc; Polaczenie = Kierunek; CZasBazowy = PierwszyLot; CoIleLata = _CoIleLata; RodzajSamolotu = _RodzajSamolotu; PierwszyLot = PierwszyLot.Subtract(CoIleLata);// te odjęcie czasu wiąże się z sposobem dodawania nowych lotów Pojazd = _Pojazd; Pojazd.Cykliczny = true; }
/// <summary> /// Usunięcie trzasy wiąże się z usunięciem trasy odwróconej!!! /// </summary> /// <param name="Wskazana"></param> public void PrzyciskUsunTrase(Trasa Wskazana)////////////////////////////////////////////// Nie wiem czy zadzaiła!!!!!!! { if (Wskazana != null) { foreach (Lot Obiekt in ListaLotow) { if (Obiekt.Droga == Wskazana || Obiekt.Droga == new Trasa(Wskazana))// to można uprościc prawdopodobnie do tylko wskazania , bo trase w drugą stronę samoloty robią sobie same { throw new Wyjatek("Istnieją loty które mają tą trasę , lub trasę odwróconą"); } } ListaTras.Remove(Wskazana); ListaTras.Remove(new Trasa(Wskazana));// gdyby to nie działało to można usunąć tylko jedną trasę , Każdy samolot otrzymuje w konstruktorze nowy obiekt odwróconej trasy } else { throw new Wyjatek("Wybierz obiekt z listy"); } }
/// <summary> /// Funkcja wywala /// </summary> public void PrzyciskDodajLot(Trasa Droga, DateTime DataWylotu, Boolean CzyMawracac, TypSamolotu _WybranytypSamolotu, Samolot WybranaMaszyna) { if (Droga != null && DataWylotu != null && _WybranytypSamolotu != null && WybranaMaszyna != null) { if (_WybranytypSamolotu.GetZasieg() >= Droga.Odleglosc) { Lot tmp = new Lot(PrzydzielanieID(ListaLotow, LNIDLotow), Droga, DataWylotu, CzyMawracac, WybranaMaszyna, _WybranytypSamolotu); if (CzyMawracac == true) { Lot tmp2 = new Lot(PrzydzielanieID(ListaLotow, LNIDLotow), Droga, DataWylotu.Add(tmp.CzasLotu.Add(new TimeSpan(3, 0, 0))), CzyMawracac, WybranaMaszyna, _WybranytypSamolotu); DodawanieDoListy(ListaLotow, tmp2); } DodawanieDoListy(ListaLotow, tmp); } else { throw new Wyjatek("Samolot nie doleci do celu, zmień jego rodzaj!"); } } else { throw new Wyjatek("Wypełnij wszystkie pola!"); } }
/// <summary> /// Funkcja do dodawanie PlanuLotu, zwraca 3 wyjątki: albo nie wszystkie pola pełne , albo że zdąży wrócić przed nsateonym lotem, że nie /// dolec ponieważ typ samolotu ma za mały sasięg , lub też że nie zdąży wrócić przed następnym lotem /// </summary> public void PrzyciskDodajPlanLotu(DateTime _PierwszyLot, TimeSpan _CoIlelata, Trasa Kierunek, TypSamolotu _RodzajSamolotu, TimeSpan NaJakiPrzedzialCzasu, Samolot _PojazdPermamentny) { if (_PierwszyLot != null && _CoIlelata != null && Kierunek != null && _RodzajSamolotu != null && NaJakiPrzedzialCzasu != null && _PojazdPermamentny != null) { if (PlanLotu.CzyDoleci(_RodzajSamolotu, Kierunek) == true) { if (PlanLotu.CzyzdarzyWrocic(_RodzajSamolotu, Kierunek, _CoIlelata) == true) { ListaPlanowLotu.Add(new PlanLotu(_PierwszyLot, _CoIlelata, Kierunek, _RodzajSamolotu, NaJakiPrzedzialCzasu, _PojazdPermamentny)); } else { throw new Wyjatek("Samolot nie zdąży wrócić do Lotniska bazoewgo"); } } else { throw new Wyjatek("Samolot ma za mały zasięg"); } } else { throw new Wyjatek("Wypełnij wszystkie pola!"); } }
/// <summary> /// Konstruktor dla lotów cyklicznych /// </summary> public Lot(string ID, Trasa Droga, DateTime Datawylotu, TypSamolotu TypPrzypisanyDoPlanu, Samolot Maszyna, PlanLotu JakiPlan) : this(ID, Droga, Datawylotu, true, Maszyna, TypPrzypisanyDoPlanu) { Maszyna.Cykliczny = true; Maszyna.CoObsluguje = null; Maszyna.PlanLotuPrzypisany = JakiPlan; }
/// <summary> /// Zwraca true jeżeli samolot zdąrzy rócić przed nastepnym lotem, wywala wyjatek jeżeli nie ma wystarczająco dużo pul wypełnionych /// więc wystarczy ładnie obsłurzyć /// </summary> public static Boolean CzyzdarzyWrocic(TypSamolotu TypSamolotuKtorychcemyDodac, Trasa TrasaCochemydodac, TimeSpan CoIleMaLatac)// ta funkcja jest do poprawy musi być statyczna { if (TypSamolotuKtorychcemyDodac != null && TrasaCochemydodac != null && CoIleMaLatac != null) { TimeSpan CalkowityCzas = PlanLotu.ILeleciWjednaStrone(TypSamolotuKtorychcemyDodac, TrasaCochemydodac); CalkowityCzas = CalkowityCzas.Add(CalkowityCzas); CalkowityCzas = CalkowityCzas.Add(new TimeSpan(3, 0, 0)); if (CalkowityCzas.CompareTo(CoIleMaLatac) >= 0) { return(false); } else { return(true); } } else { throw new Wyjatek("Dodaj wymagane pola!!"); } }
/// <summary> /// Funkcja liczy ile samolot leci w jedną stronę /// </summary> /// <returns></returns> public static TimeSpan ILeleciWjednaStrone(TypSamolotu TypSamolotuKtorychcemydodac, Trasa TrasaCochcemydodac) { TimeSpan CzasLotu; double czas = TrasaCochcemydodac.GetOdleglosc() / TypSamolotuKtorychcemydodac.GetPredkosc();// czas wychodzi w godz z minutamie po przecinku czas = Math.Round(czas, 2); double min = (czas % 1) * 60; // minuty w formiacie 0,xx więc trzeba pomnożyć razy 60 CzasLotu = new TimeSpan((int)czas, (int)min, 0); // zero na końcu- to sekundy nieistotne w programie return(CzasLotu); }