Beispiel #1
0
 public void OnMegrendelesElkeszult(LancoltLista <ZoldTerulet> T)
 {
     if (MegrendelesElkeszult != null)
     {
         MegrendelesElkeszult(T);
     }
 }
Beispiel #2
0
        static void Main(string[] args)
        {
            int MEGRENDELOK_SZAMA = 10;
            int GYEPELEMEK_SZAMA  = 10000;

            Console.WriteLine("\n***START***");

            List <Megrendelo> megrendeloLista = MegrendeloGenerator(MEGRENDELOK_SZAMA);

            megrendeloLista.Sort(); // minél több megrendelő kiszolgálása érdekében sorbarendezés növekvő sorrendben

            LancoltLista <IGyepElem> gyepElemek;

            feluletek = FeluleteketLancoltListabaTesz(megrendeloLista);

            try
            {
                gyepElemek = GyepRaktar(GYEPELEMEK_SZAMA);
                Lefedo kivitelezes           = new Lefedo(megrendeloLista, gyepElemek, feluletek);
                MegrendelesErtesito ertesito = new MegrendelesErtesito();
                kivitelezes.MegrendelesElkeszult += ertesito.OnMegrendelesElkeszult;
                kivitelezes.MegrendelesekElkeszitese();

                Console.WriteLine("A kiszolgált megrendelők száma: " + kivitelezes.KiszolgaltMegrendelokSzama);
            }
            catch (GyepElemTulNagyKivetel gy)
            {
                Console.WriteLine("A bekerült gyeptégla területe ({0}) nagyobb, mint a legkisebb zöldterületé ({1})!", gy.GyepElem.Terulet, gy.ZoldTerulet.Terulet);
            }

            Console.WriteLine("\n***STOP***\n");

            Console.ReadLine();
        }
Beispiel #3
0
        public void ListaElemeketAtrak(LancoltLista <IGyepElem> Honnan, LancoltLista <IGyepElem> Hova)
        {
            IGyepElem aktGyepElem;

            while (!Honnan.UresLista())
            {
                aktGyepElem = Honnan.GetAktElem(1);
                Hova.BeszurCsokkenoSorrendben(aktGyepElem.Terulet, aktGyepElem);
                Honnan.Torles(aktGyepElem);
            }
        }
Beispiel #4
0
        public void OnMegrendelesElkeszult(LancoltLista <ZoldTerulet> T)
        {
            int i = 1;

            Console.WriteLine("\nMegrendelés elkészült, telkek: \n");
            while (T.GetAktElem(i) != null)
            {
                Console.WriteLine(T.GetAktElem(i).ToString());
                Console.WriteLine();
                i++;
            }
        }
Beispiel #5
0
        public static LancoltLista <ZoldTerulet> FeluleteketLancoltListabaTesz(List <Megrendelo> mLista)
        {
            LancoltLista <ZoldTerulet> feluletek = new LancoltLista <ZoldTerulet>();

            foreach (Megrendelo m in mLista)
            {
                for (int i = 0; i < m.FeluletekSzama; i++)
                {
                    feluletek.BeszurCsokkenoSorrendben(m.Feluletek[i].Terulet, m.Feluletek[i]);
                }
            }

            return(feluletek);
        }
Beispiel #6
0
        public static LancoltLista <IGyepElem> GyepRaktar(int gyepekSzama)
        {
            LancoltLista <IGyepElem> gyepRaktar = new LancoltLista <IGyepElem>();
            IGyepElem   gyepElem;
            int         random;
            ZoldTerulet legkisebbTerulet = feluletek.GetUtolsoElem();

            for (int i = 0; i < gyepekSzama; i++)
            {
                random = R.Next(0, 4);
                if (random == 0)
                {
                    gyepElem = new KertiGyep(R.Next(1, 10), R.Next(1, 10));
                }
                else if (random == 1)
                {
                    gyepElem = new MediterranGyep(R.Next(1, 10), R.Next(1, 10));
                }
                else if (random == 2)
                {
                    gyepElem = new ParkGyep(R.Next(1, 10), R.Next(1, 10));
                }
                else
                {
                    gyepElem = new SportGyep(R.Next(1, 10), R.Next(1, 10));
                }

                if (gyepElem.Terulet > legkisebbTerulet.Terulet)
                {
                    // A rendszer váltson ki kivételt, ha olyan méretű gyeptégla kerül be, amely meghaladja a legkisebb zöldterület méretét.
                    throw new GyepElemTulNagyKivetel(gyepElem, legkisebbTerulet);
                }
                gyepRaktar.BeszurCsokkenoSorrendben(gyepElem.Terulet, gyepElem);
            }

            return(gyepRaktar);
        }
Beispiel #7
0
        // egy adott megrendelőt szolgál ki; ha az összes telkét sikerült lefedni, igazzal tér vissza
        public bool AktMegrendeloKiszolgalasa(Megrendelo M)
        {
            int         i = 0;
            int         j = 1;
            ZoldTerulet z;

            ElkeszultTeruletek = new LancoltLista <ZoldTerulet>();
            LancoltLista <IGyepElem> kivettGyepElemek = new LancoltLista <IGyepElem>();

            while (i < M.FeluletekSzama)
            {
                z = Teruletek.GetAktElem(j);
                // a korábban sorbarendezett Megrendelők ID-i alapján keresi ki a felületek láncolt listájából a lefedendő felületet
                if (z.MegrendeloID == M.ID && AktTeruletLefedo(z, kivettGyepElemek))
                {
                    Teruletek.Torles(z);
                    ElkeszultTeruletek.BeszurCsokkenoSorrendben(z.Terulet, z);
                    i++;
                }
                else
                {
                    if (z.MegrendeloID == M.ID)
                    {
                        return(false);
                    }
                    j++;
                }
            }
            if (i >= M.FeluletekSzama)
            {
                OnMegrendelesElkeszult(ElkeszultTeruletek);
                return(true);
            }
            ListaElemeketAtrak(kivettGyepElemek, Elemek);
            return(false);
        }
Beispiel #8
0
        // egy telket fed le, mohó szeretne lenni
        public bool AktTeruletLefedo(ZoldTerulet Z, LancoltLista <IGyepElem> kivettGyepElemek)
        {
            int       t = 1;
            double    osszLefedettTerulet = 0;
            double    lefedettsegMerteke  = 0;
            int       futasokSzama        = 0;
            IGyepElem aktGyepElem;

            LancoltLista <IGyepElem> AktTeruletElemei = new LancoltLista <IGyepElem>();
            bool tulszamolt = false;

            while (osszLefedettTerulet < Z.Terulet && !Elemek.UresLista() && lefedettsegMerteke < Z.LefedettsegMin && !tulszamolt)
            {
                aktGyepElem = Elemek.GetAktElem(t);

                tulszamolt = (aktGyepElem == null);

                if (aktGyepElem != null && (osszLefedettTerulet + aktGyepElem.Terulet) < Z.Terulet)
                {
                    if (Z is MaganKert && (aktGyepElem is KertiGyep || aktGyepElem is SportGyep))
                    {
                        osszLefedettTerulet += aktGyepElem.Terulet;
                        AktTeruletElemei.BeszurCsokkenoSorrendben(aktGyepElem.Terulet, aktGyepElem);
                        Elemek.Torles(aktGyepElem);
                    }
                    else if (Z is KozPark && (aktGyepElem is ParkGyep || aktGyepElem is SportGyep))
                    {
                        osszLefedettTerulet += aktGyepElem.Terulet;
                        AktTeruletElemei.BeszurCsokkenoSorrendben(aktGyepElem.Terulet, aktGyepElem);
                        Elemek.Torles(aktGyepElem);
                    }
                    else if (Z is FutballStadion && aktGyepElem is SportGyep)
                    {
                        osszLefedettTerulet += aktGyepElem.Terulet;
                        AktTeruletElemei.BeszurCsokkenoSorrendben(aktGyepElem.Terulet, aktGyepElem);
                        Elemek.Torles(aktGyepElem);
                    }
                    else
                    {
                        t++;
                    }
                }
                else
                {
                    t++;
                }
                futasokSzama++;

                lefedettsegMerteke = 100 * osszLefedettTerulet / Z.Terulet;
            }

            if (lefedettsegMerteke >= Z.LefedettsegMin)
            {
                // ha sikerült lefedni a területet - megrendelő nem kerül kiszolgálásra, ha nem sikerül minden területét lefedni
                ListaElemeketAtrak(AktTeruletElemei, kivettGyepElemek);
                return(true);
            }
            // ha nem sikerült lefedni a területet
            ListaElemeketAtrak(AktTeruletElemei, Elemek);
            return(false);
        }
Beispiel #9
0
 public Lefedo(List <Megrendelo> megrendelok, LancoltLista <IGyepElem> elemek, LancoltLista <ZoldTerulet> teruletek)
 {
     this.Megrendelok = megrendelok;
     this.Elemek      = elemek;
     this.Teruletek   = teruletek;
 }