예제 #1
0
        public static Przystanek OdczytajPlik(string nazwaPliku, ZarzadTransportu zt)
        {
            Przystanek rezultat = null;

            using (var sr = File.OpenText(nazwaPliku))
            {
                var nazwa = sr.ReadLine();
                var stale = sr.ReadLine().Split('|');
                var zapelnieniaPasazerow = sr.ReadLine().Split('|');
                var zapelnieniaAutobusow = sr.ReadLine().Split('|');

                rezultat = new Przystanek(nazwa, zt, Convert.ToDouble(stale[3]), Convert.ToInt32(stale[0]), Convert.ToInt32(stale[1]), Convert.ToInt32(stale[2]), stale[4]);
                foreach (var val in zapelnieniaPasazerow)
                {
                    var elems = val.Split(':');
                    rezultat.DodajProgKolorZapelnieniaPasazerow(Convert.ToInt32(elems[0]), Color.FromArgb(Convert.ToInt32(elems[1])));
                }

                foreach (var val in zapelnieniaAutobusow)
                {
                    var elems = val.Split(':');
                    rezultat.DodajProgKolorZapelnieniaAutobusow(Convert.ToInt32(elems[0]), Color.FromArgb(Convert.ToInt32(elems[1])));
                }
            }

            return(rezultat);
        }
예제 #2
0
        public virtual List <Pasazer> StworzListeWsiadajacychPasazerow(Przystanek.Przystanek obecnyPrzystanek, Linia liniaAutobusu, TimeSpan obecnyCzas)
        {
            var listaWsiadajacych = new List <Pasazer>();
            var pasazerowie       = obecnyPrzystanek.ZwrocPasazerowOczekujacychNaLinie(liniaAutobusu, obecnyCzas).ToList();

            foreach (var pasazer in pasazerowie)
            {
                if ((obecniPasazerowie.Count + listaWsiadajacych.Count) < maksymalnaPojemnosc)
                {
                    listaWsiadajacych.Add(pasazer);
                }
                else
                {
                    break;
                }
            }

            foreach (var pasazer in listaWsiadajacych)
            {
                obecnyPrzystanek.UsunPasazera(pasazer);
                pasazer.Wsiadz(this, obecnyCzas);
            }

            return(listaWsiadajacych);
        }
 public Pasazer(int czasWsiadania, int czasWysiadania, Przystanek.Przystanek przystanekPoczatkowy,
                Przystanek.Przystanek przystanekKoncowy)
     : this(czasWsiadania, czasWysiadania)
 {
     this.przystanekPoczatkowy = przystanekPoczatkowy;
     obecnyPrzystanek          = przystanekPoczatkowy;
     this.przystanekKoncowy    = przystanekKoncowy;
 }
 public WpisLinii(Przystanek.Przystanek przystanek, TimeSpan czasPrzyjaduDoPrzystanku, string sciezkaPlikuTrasy) : this(przystanek, czasPrzyjaduDoPrzystanku)
 {
     if (sciezkaPlikuTrasy != "")
     {
         trasa = Trasa.OdczytajPlik(sciezkaPlikuTrasy);
         przystanek.DodajTrase(trasa);
         this.sciezkaPlikuTrasy = sciezkaPlikuTrasy;
     }
 }
예제 #5
0
 public Przejazd(ZarzadTransportu zt, Firma.Firma firma, Linia linia, TimeSpan czasRozpoczeciaPrzejazdu) : this()
 {
     autobus    = null;
     this.zt    = zt;
     this.firma = firma;
     this.czasRozpoczeciaPrzejazdu = czasRozpoczeciaPrzejazdu;
     this.linia       = linia;
     obecnyPrzystanek = linia.ZwrocPrzystanekIndeks(0);
 }
예제 #6
0
 public Przejazd(Autobus autobus, ZarzadTransportu zt, Firma.Firma firma, TimeSpan czasRozpoczeciaPrzejazdu) : this()
 {
     this.autobus     = autobus;
     this.zt          = zt;
     this.firma       = firma;
     linia            = autobus.liniaAutobusu;
     obecnyPrzystanek = autobus.liniaAutobusu.ZwrocPrzystanekIndeks(0);
     this.czasRozpoczeciaPrzejazdu = czasRozpoczeciaPrzejazdu;
 }
예제 #7
0
 public virtual int ZwrocIndeksPrzystanku(Przystanek.Przystanek przystanek)
 {
     for (int i = 0; i < trasaLinii.Count; i++)
     {
         if (trasaLinii[i].przystanek == przystanek)
         {
             return(i);
         }
     }
     return(-1);
 }
예제 #8
0
        public Przystanek.Przystanek ZwrocNastepnyPrzystanek(Przystanek.Przystanek przystanek)
        {
            var rezultat = ZnajdzIndexPrzystanku(przystanek);

            if (rezultat == -1 || rezultat >= trasaLinii.Count - 1)
            {
                return(null);
            }

            return(trasaLinii[rezultat + 1].przystanek);
        }
예제 #9
0
        public virtual Trasa ZwrocTraseDo(Przystanek przystanek)
        {
            foreach (var trasa in trasy)
            {
                if (trasa.PrzystanekPrawy == przystanek)
                {
                    return(trasa);
                }
            }

            throw new ArgumentException($"Przystanek {nazwaPrzystanku} nie posiada trasy do przystanku {przystanek.NazwaPrzystanku}!");
        }
예제 #10
0
        protected virtual bool CzyPrzystanekkNalezyDoLinii(Przystanek.Przystanek p)
        {
            foreach (var w in trasaLinii)
            {
                if (w.przystanek == p)
                {
                    return(true);
                }
            }

            return(false);
        }
예제 #11
0
        public virtual Trasa ZnajdzTraseDoNastepnegoPrzystanku(Przystanek nastepnyPrzystanek)
        {
            foreach (var trasa in trasy)
            {
                if (trasa.PrzystanekPrawy == nastepnyPrzystanek)
                {
                    return(trasa);
                }
            }

            return(null);
        }
예제 #12
0
        public TimeSpan SpodziewanyCzasPrzejazduDoPrzystanku(Przystanek.Przystanek przystanek)
        {
            var rezultat = TimeSpan.Zero;

            foreach (var wpis in trasaLinii)
            {
                rezultat += wpis.czasPrzyjaduDoPrzystanku;
                if (wpis.przystanek == przystanek)
                {
                    return(rezultat);
                }
            }

            throw new ArgumentException($"Przystanek {przystanek.NazwaPrzystanku} nie występuje na trasie linii {idLinii}.");
        }
예제 #13
0
        public virtual int ZnajdzIndexPrzystanku(Przystanek.Przystanek przystanek)
        {
            var rezultat = 0;

            foreach (var wpis in trasaLinii)
            {
                if (przystanek == wpis.przystanek)
                {
                    return(rezultat);
                }

                rezultat++;
            }

            return(-1);
        }
예제 #14
0
        public virtual int PobierzPasazerow(Przystanek.Przystanek obecnyPrzystanek, Linia liniaAutobusu, IEnumerable <Pasazer> listaWsiadajacych)
        {
            var listaKolejekPasazerow = StworzListeKolejek();

            PodzielPasazerowNaKolejki(listaWsiadajacych, listaKolejekPasazerow);

            foreach (var lista in listaKolejekPasazerow)
            {
                foreach (var pasazer in lista)
                {
                    obecniPasazerowie.Add(pasazer);
                }
            }

            return(ObliczCzasWsiadaniaPasazerow(listaKolejekPasazerow));
        }
예제 #15
0
        public Trasa(string nazwaTrasy, Przystanek.Przystanek przystanekLewy, Przystanek.Przystanek przystanekPrawy, int sTrasy,
                     double vMaxTrasy, IEnumerable <Point> punktyTrasy = null) : this()
        {
            this.nazwaTrasy      = nazwaTrasy;
            this.przystanekLewy  = przystanekLewy;
            this.przystanekPrawy = przystanekPrawy;
            this.sTrasy          = sTrasy;
            this.vMaxTrasy       = vMaxTrasy;

            if (punktyTrasy != null)
            {
                foreach (var p in punktyTrasy)
                {
                    this.punktyTrasy.Add(p);
                }
            }
        }
예제 #16
0
        private void WykonajPrzejazd()
        {
            obecnyPrzystanek.UsunAutobus(autobus);
            obecnyPrzystanek.DodajAutobusDoZatoki();
            var trasa = obecnyPrzystanek.ZnajdzTraseDoNastepnegoPrzystanku(
                autobus.liniaAutobusu.ZwrocNastepnyPrzystanek(obecnyPrzystanek));

            var czasAkcji            = new TimeSpan(0, 0, autobus.PrzejedzTrase(trasa));
            var czasRozpoczeciaAkcji = CzasRozpoczeciaAkcji(czasPrzejazdu);

            czasPrzejazdu += czasAkcji;

            Logger.ZalogujPrzejechanieTrasy(uid, czasRozpoczeciaAkcji, autobus, trasa,
                                            czasRozpoczeciaPrzejazdu + czasPrzejazdu);
            autobus.czasNastepnejAkcji = czasRozpoczeciaPrzejazdu + czasPrzejazdu;

            nastepnaAkcja    = Akcja.WypuszczniePasazerow;
            obecnyPrzystanek = trasa.PrzystanekPrawy;
        }
예제 #17
0
        public virtual IEnumerable <Przystanek.Przystanek> ZwrocPozostalePrzystanki(Przystanek.Przystanek przystanek)
        {
            var rezultat      = new List <Przystanek.Przystanek>();
            var czyZnaleziony = false;

            foreach (var wpis in trasaLinii)
            {
                if (czyZnaleziony)
                {
                    rezultat.Add(wpis.przystanek);
                }
                if (wpis.przystanek == przystanek)
                {
                    czyZnaleziony = true;
                }
            }

            return(rezultat);
        }
예제 #18
0
        public virtual int WysadzPasazerow(Przystanek.Przystanek obecnyPrzystanek, IEnumerable <Pasazer> listaWysiadajacych)
        {
            var listaKolejkaPasazerow = StworzListeKolejek();

            PodzielPasazerowNaKolejki(listaWysiadajacych, listaKolejkaPasazerow);

            foreach (var lista in listaKolejkaPasazerow)
            {
                foreach (var pasazer in lista)
                {
                    if (pasazer.PrzystanekKoncowy != obecnyPrzystanek)
                    {
                        obecnyPrzystanek.DodajPasazera(pasazer);
                    }
                }
            }

            return(ObliczCzasWysiadaniaPasazerow(listaKolejkaPasazerow));
        }
예제 #19
0
        public virtual List <Pasazer> StworzListeWysiadajacychPasazerow(Przystanek.Przystanek obecnyPrzystanek)
        {
            var listaWysiadajacych = new List <Pasazer>();

            foreach (var pasazer in obecniPasazerowie)
            {
                if (pasazer.OczekiwanyPrzystanek == obecnyPrzystanek || pasazer.OczekiwanyPrzystanek == null)
                {
                    listaWysiadajacych.Add(pasazer);
                    pasazer.Wysiadz(obecnyPrzystanek);
                }
            }

            foreach (var pasazer in listaWysiadajacych)
            {
                obecniPasazerowie.Remove(pasazer);
            }

            return(listaWysiadajacych);
        }
예제 #20
0
        public virtual TimeSpan CzasPrzejazduPoMiedzyPrzystankami(Przystanek.Przystanek pStartowy, Przystanek.Przystanek pKoncowy)
        {
            if (!CzyPrzystanekkNalezyDoLinii(pStartowy) || !CzyPrzystanekkNalezyDoLinii(pKoncowy))
            {
                throw new ArgumentException($"Przystanek {pStartowy.NazwaPrzystanku} lub " +
                                            $"{pKoncowy.NazwaPrzystanku} nie należy do linii {idLinii}.");
            }

            if (ZwrocIndeksPrzystanku(pStartowy) > ZwrocIndeksPrzystanku(pKoncowy))
            {
                throw new ArgumentException(
                          $"Przystanek {pKoncowy.NazwaPrzystanku} występuje przed {pStartowy.NazwaPrzystanku}.");
            }

            var rezultat = TimeSpan.Zero;

            for (var i = ZwrocIndeksPrzystanku(pStartowy); i <= ZwrocIndeksPrzystanku(pKoncowy); i++)
            {
                rezultat += trasaLinii[i].czasPrzyjaduDoPrzystanku;
            }

            return(rezultat);
        }
예제 #21
0
        public void WykonajNastepnaAkcje()
        {
            if (obecnyPrzystanek == null)
            {
                obecnyPrzystanek = linia.PierwszyPrzystanek;
            }

            //obecnyPrzystanek.WykonajPrzyplywy(czasRozpoczeciaPrzejazdu + czasPrzejazdu);
            zt.WykonajPrzyplywy(czasRozpoczeciaPrzejazdu + czasPrzejazdu);
            SprawdzCzyPrzejazdPosiadaZasoby();

            if (trasaZakonczona)
            {
                return;
            }

            switch (nastepnaAkcja)
            {
            case Akcja.PobieraniePasazerow:
                WykonajPobieraniaPasazerow();
                break;

            case Akcja.Przejazd:
                WykonajPrzejazd();
                break;

            case Akcja.WypuszczniePasazerow:
                WykonajWypuszczaniePasazerow();
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            linia.DodajWpisStatusuLinii(czasRozpoczeciaPrzejazdu + czasPrzejazdu, firma.DlugoscNajkrotszegoAutobusu, obecnyPrzystanek);
        }
예제 #22
0
 public virtual void WypuscWszystkichPasazerow(Przystanek.Przystanek p)
 {
     WysadzPasazerow(p, obecniPasazerowie);
 }
 public abstract void Wysiadz(Przystanek.Przystanek przystanek);
예제 #24
0
 public PrzyplywPasazerow(TimeSpan czasPrzyplywu, Przystanek przystanek) : this()
 {
     this.czasPrzyplywu = czasPrzyplywu;
     this.przystanek    = przystanek;
 }
 public WpisLinii(WpisLinii wl)
 {
     przystanek = wl.przystanek;
     czasPrzyjaduDoPrzystanku = new TimeSpan(wl.czasPrzyjaduDoPrzystanku.Ticks);
 }
예제 #26
0
 public void DodajWpisStatusuLinii(bool czyPrzejazdUwarunkowany, Przystanek.Przystanek przystanek, TimeSpan czas, double minDlugoscZatoki)
 {
     wpisyStatusuLinii.Add(new WpisStatusuLinii(czyPrzejazdUwarunkowany, czas, SpodziewanyCzasPrzejazduDoPrzystanku(przystanek), minDlugoscZatoki, przystanek));
 }
 public WpisLinii(Przystanek.Przystanek przystanek, TimeSpan czasPrzyjaduDoPrzystanku)
 {
     this.przystanek = przystanek;
     this.czasPrzyjaduDoPrzystanku = czasPrzyjaduDoPrzystanku;
 }
예제 #28
0
        public void DodajWpisStatusuLinii(TimeSpan czas, double dlugoscNajkrotszegoAutobusu, Przystanek.Przystanek przystanek)
        {
            var czyIstniejePasujacyAutobus = MinWolnaDlugoscZatoki > dlugoscNajkrotszegoAutobusu;
            PowodBrakuUwarunkowania powod  = PowodBrakuUwarunkowania.Brak;

            if (CzyPrzejazdUwarunkowany && !czyIstniejePasujacyAutobus)
            {
                powod = PowodBrakuUwarunkowania.DlugoscAutobusu;
            }
            else if (!CzyPrzejazdUwarunkowany)
            {
                powod = PowodBrakuUwarunkowania.LiczbaPasazerow;
            }

            DodajWpisDoListyStatusow(new WpisStatusuLinii(CzyPrzejazdUwarunkowany && czyIstniejePasujacyAutobus, czas, czas - SpodziewanyCzasPrzejazduDoPrzystanku(przystanek), MinWolnaDlugoscZatoki, przystanek, powod));
        }
예제 #29
0
 public virtual bool JestPrzystankiemKoncowym(Przystanek.Przystanek przystanek)
 {
     return(przystanek == trasaLinii[trasaLinii.Count - 1].przystanek);
 }
예제 #30
0
 public virtual bool CzyPrzystanekPozostalDoOdwiedzenia(Przystanek.Przystanek przystanekObecny,
                                                        Przystanek.Przystanek przystanekDocelowy)
 {
     return(ZwrocIndeksPrzystanku(przystanekObecny) < ZnajdzIndexPrzystanku(przystanekDocelowy));
 }