예제 #1
0
        private void ocenZlecenie(Wiadomosc w)
        {
            //TODO: DLUGOSC OCENY ZLECENIA ZALEZNA OD POZIOMU TRUDNOSCI


            double jakoscUslugi = umiejetnosci / w.poziomTrudnosci;

            if (jakoscUslugi > 1)
            {
                jakoscUslugi = 1.00;
            }

            double cena = cenaBazowa + ((cenaBazowa / 10) * w.poziomTrudnosci) + umiejetnosci;

            jakoscUslugi = Math.Round(jakoscUslugi, 2);
            cena         = Math.Round(cena, 2);

            // Wiadomosc nW = new Wiadomosc(this.idMechanika, w.idNadawca, w.poziomTrudnosci, cena, jakoscUslugi, w.priorytetNaprawczy);
            Wiadomosc nW = new Wiadomosc();

            nW.idNadawca          = this.idMechanika;
            nW.idOdbiorcy         = w.idNadawca;
            nW.poziomTrudnosci    = w.poziomTrudnosci;
            nW.cena               = cena;
            nW.jakoscNaprawy      = jakoscUslugi;
            nW.priorytetNaprawczy = w.priorytetNaprawczy;
            nW.zlecenie           = Zdarzenie.ofertaNaprawy;

            broker.dodajZlecenie(nW);
        }
예제 #2
0
        public void ofertaNaprawy(Wiadomosc w)
        {
            Console.WriteLine("\nMechanik " + w.idNadawca + " przedstawia swoją ofertę \n Cena: " + w.cena + " zł " +
                              " \n Jakość naprawy: " +
                              w.jakoscNaprawy + "\n Dla klienta:" + w.idOdbiorcy + "\n");

            Oferty of = new Oferty();

            of.idKlient           = w.idOdbiorcy;
            of.idMechanik         = w.idNadawca;
            of.cena               = w.cena;
            of.jakoscNaprawy      = w.jakoscNaprawy;
            of.priorytetNaprawczy = w.priorytetNaprawczy;
            of.poziomTrudnosci    = w.poziomTrudnosci;


            if (!dziennikOfert.ContainsKey(w.idOdbiorcy))
            {
                List <Oferty> o = new List <Oferty>();
                dziennikOfert.Add(w.idOdbiorcy, o);
            }


            dziennikOfert[w.idOdbiorcy].Add(of);


            if (dziennikOfert[w.idOdbiorcy].Count == listaMechanikow.Count)
            {
                szacujOferty(dziennikOfert[w.idOdbiorcy]);
                dziennikOfert[w.idOdbiorcy].Clear();
            }
        }
예제 #3
0
        public void napraw(Wiadomosc w)
        {
            Console.WriteLine("Klient " + w.idNadawca + " zleca naprawę, mechanikowi: " +
                              w.idOdbiorcy + "\n Jakość naprawy: " + w.jakoscNaprawy + "\n Cena: " + w.cena + " zł " +
                              "\n Poziom trudności: " + w.poziomTrudnosci + "\n Priorytety: " + w.priorytetNaprawczy +
                              "\n");

            for (int i = 0; i < listaMechanikow.Count; i++)
            {
                if (listaMechanikow[i].idMechanika == w.idOdbiorcy)
                {
                    // Wiadomosc nW = new Wiadomosc(w.idNadawca, w.idOdbiorcy, w.poziomTrudnosci, w.cena, w.jakoscNaprawy, w.priorytetNaprawczy);

                    Wiadomosc nW = new Wiadomosc();

                    nW.idNadawca          = w.idNadawca;
                    nW.idOdbiorcy         = w.idOdbiorcy;
                    nW.poziomTrudnosci    = w.poziomTrudnosci;
                    nW.cena               = w.cena;
                    nW.jakoscNaprawy      = w.jakoscNaprawy;
                    nW.priorytetNaprawczy = w.priorytetNaprawczy;
                    nW.zlecenie           = Zdarzenie.napraw;

                    listaMechanikow[i].dodajZlecenie(nW);
                    break;
                }
            }
        }
예제 #4
0
        private void szukajMechanika()
        {
            while (true)
            {
                if (!szukam)
                {
                    // Thread.Sleep(5000);
                    continue;
                }

                Wiadomosc w = new Wiadomosc();
                w.idNadawca          = IdKlient;
                w.poziomTrudnosci    = rand.Next(10, 100);
                w.priorytetNaprawczy = rand.Next(1, 4);
                w.zlecenie           = Zdarzenie.szukaj;
                broker.dodajZlecenie(w);

                Wiadomosc wk = new Wiadomosc();
                wk.zlecenie = Zdarzenie.oczekuj;
                dodajWiadomosc(wk);

                Thread.Sleep(rand.Next(10000, 20000));


                // Wiadomosc w = new Wiadomosc(this.IdKlient, rand.Next(10, 101), rand.Next(1, 4));
            }
        }
예제 #5
0
 public void ukonczono(Wiadomosc w)
 {
     for (int i = 0; i < listaKlientow.Count; i++)
     {
         if (listaKlientow[i].IdKlient == w.idOdbiorcy)
         {
             Wiadomosc nW = new Wiadomosc();
             nW.zlecenie = Zdarzenie.ukonczonoZlecenie;
             listaKlientow[i].dodajWiadomosc(nW);
             break;
         }
     }
 }
예제 #6
0
        private void naprawAuto(Wiadomosc w)
        {
            // Wiadomosc nW = new Wiadomosc(this.IdKlient, w.idNadawca, w.poziomTrudnosci, w.cena, w.jakoscNaprawy, w.priorytetNaprawczy);

            Wiadomosc nW = new Wiadomosc();

            nW.idNadawca          = this.IdKlient;
            nW.idOdbiorcy         = w.idNadawca;
            nW.poziomTrudnosci    = w.poziomTrudnosci;
            nW.cena               = w.cena;
            nW.jakoscNaprawy      = w.jakoscNaprawy;
            nW.priorytetNaprawczy = w.priorytetNaprawczy;
            nW.zlecenie           = Zdarzenie.napraw;

            broker.dodajZlecenie(nW);
        }
예제 #7
0
        public void szukaj(Wiadomosc w)
        {
            string priorytetNaprawczy = "";

            //1- Jakosc
            //2 - cena
            //3 - wysrodkowane
            if (w.priorytetNaprawczy.Equals(1))
            {
                priorytetNaprawczy = "JAKOŚĆ";
            }
            else if (w.priorytetNaprawczy.Equals(2))
            {
                priorytetNaprawczy = "CENA";
            }
            else if (w.priorytetNaprawczy.Equals(3))
            {
                priorytetNaprawczy = "BALANS";
            }

            Console.WriteLine("Klient " + w.idNadawca + " zleca naprawę, trudność zadania: " +
                              w.poziomTrudnosci + "\n Priorytet: " + priorytetNaprawczy + "\n");

            for (int i = 0; i < listaMechanikow.Count; i++)
            {
                // Wiadomosc nW = new Wiadomosc(w.idNadawca, w.poziomTrudnosci, w.priorytetNaprawczy);

                Wiadomosc nW = new Wiadomosc();

                nW.idNadawca          = w.idNadawca;
                nW.poziomTrudnosci    = w.poziomTrudnosci;
                nW.priorytetNaprawczy = w.priorytetNaprawczy;
                nW.zlecenie           = Zdarzenie.ofertaNaprawy;

                listaMechanikow[i].dodajZlecenie(nW);
            }
        }
예제 #8
0
        private void napraw(Wiadomosc w)
        {
            double exp            = 0d;
            double premiaDoPensji = 0d;

            if (w.cena > 2000 && w.poziomTrudnosci > 50)
            {
                exp            = ((w.poziomTrudnosci * w.jakoscNaprawy) / (w.cena / 40));
                premiaDoPensji = w.cena * 0.006;
            }
            else if (w.cena > 1000 && w.poziomTrudnosci > 20)
            {
                exp            = ((w.poziomTrudnosci * w.jakoscNaprawy) / (w.cena / 15));
                premiaDoPensji = w.cena * 0.01;
            }
            else if (w.cena <= 1000 && w.poziomTrudnosci < 35)
            {
                exp            = ((w.poziomTrudnosci * w.jakoscNaprawy) / (w.cena / 10));
                premiaDoPensji = w.cena * 0.015;
            }
            else
            {
                exp            = ((w.poziomTrudnosci * w.jakoscNaprawy) / (w.cena / 8));
                premiaDoPensji = w.cena * 0.02;
            }


            // exp = Math.Round(exp, 2);
            // premiaDoPensji = Math.Round(premiaDoPensji, 2);
            if (this.umiejetnosci >= 100)
            {
                this.umiejetnosci = 100;
                this.cenaBazowa  += premiaDoPensji;
            }
            else
            {
                this.umiejetnosci += exp;
                this.cenaBazowa   += (premiaDoPensji);
            }

            exp            = Math.Round(exp, 2);
            premiaDoPensji = Math.Round(premiaDoPensji, 2);

            int czas = (int)this.umiejetnosci * w.poziomTrudnosci * rand.Next(4, 8);

            Thread.Sleep(czas);

            Console.WriteLine("\nMechanik " + this.nazwa + " id " + this.idMechanika + " naprawia auto dla klienta " +
                              w.idNadawca + "\n Zyskuje " + exp + " doświadczenia oraz premię do pensji: " +
                              premiaDoPensji + " zł \n czas pracy: " + czas +
                              " ms\n" +
                              " Całkowite doświadczenie: " + Math.Round(this.umiejetnosci, 2) + " Obecna stawka: " +
                              Math.Round(this.cenaBazowa, 2) + " zł " +
                              "\n");

            Wiadomosc nW = new Wiadomosc();

            nW.idOdbiorcy = w.idNadawca;
            nW.zlecenie   = Zdarzenie.ukonczonoZlecenie;

            broker.dodajZlecenie(nW);
        }
예제 #9
0
 public void dodajZlecenie(Wiadomosc w)
 {
     listaZlecen.Add(w);
 }
예제 #10
0
 public void dodajZlecenie(Wiadomosc w)
 {
     kolejka.Add(w);
 }
예제 #11
0
        private void szacujOferty(List <Oferty> listaOdpowiedzi)
        {
            //Priorytet naprawczy

            //PRIORYTET JAKOSC
            if (listaOdpowiedzi[0].priorytetNaprawczy == 1)
            {
                double _jakoscNaprawy = listaOdpowiedzi[0].jakoscNaprawy;
                double _cena          = listaOdpowiedzi[0].cena;
                int    _index         = 0;

                for (int i = 1; i < listaMechanikow.Count; i++)
                {
                    if (listaOdpowiedzi[i].jakoscNaprawy > _jakoscNaprawy)
                    {
                        _jakoscNaprawy = listaOdpowiedzi[i].jakoscNaprawy;
                        _cena          = listaOdpowiedzi[i].cena;
                        _index         = i;
                    }
                    else if (listaOdpowiedzi[i].jakoscNaprawy == _jakoscNaprawy)
                    {
                        if (listaOdpowiedzi[i].cena < _cena)
                        {
                            _jakoscNaprawy = listaOdpowiedzi[i].jakoscNaprawy;
                            _cena          = listaOdpowiedzi[i].cena;
                            _index         = i;
                        }
                    }
                }

                Wiadomosc nW = new Wiadomosc(
                    listaOdpowiedzi[_index].idMechanik,
                    listaOdpowiedzi[_index].idKlient,
                    listaOdpowiedzi[_index].poziomTrudnosci,
                    listaOdpowiedzi[_index].cena,
                    _jakoscNaprawy,
                    listaOdpowiedzi[_index].priorytetNaprawczy);

                nW.zlecenie = Zdarzenie.znaleziono;

                for (int i = 0; i < listaKlientow.Count; i++)
                {
                    if (listaKlientow[i].IdKlient == listaOdpowiedzi[_index].idKlient)
                    {
                        listaKlientow[i].dodajWiadomosc(nW);
                        break;
                    }
                }
            }
            // PRIORYTET CENA
            else if (listaOdpowiedzi[0].priorytetNaprawczy == 2)
            {
                double _cenaNaprawy = listaOdpowiedzi[0].cena;
                int    _index       = 0;

                for (int i = 1; i < listaMechanikow.Count; i++)
                {
                    if (listaOdpowiedzi[i].cena < _cenaNaprawy)
                    {
                        _cenaNaprawy = listaOdpowiedzi[i].cena;
                        _index       = i;
                    }
                }

                Wiadomosc nW = new Wiadomosc(
                    listaOdpowiedzi[_index].idMechanik,
                    listaOdpowiedzi[_index].idKlient,
                    listaOdpowiedzi[_index].poziomTrudnosci,
                    _cenaNaprawy,
                    listaOdpowiedzi[_index].jakoscNaprawy,
                    listaOdpowiedzi[_index].priorytetNaprawczy);

                nW.zlecenie = Zdarzenie.znaleziono;

                for (int i = 0; i < listaKlientow.Count; i++)
                {
                    if (listaKlientow[i].IdKlient == listaOdpowiedzi[_index].idKlient)
                    {
                        listaKlientow[i].dodajWiadomosc(nW);
                        break;
                    }
                }
            }
            //PRIORYTET BALANS
            else if (listaOdpowiedzi[0].priorytetNaprawczy == 3)
            {
                double sredniaCena   = 0.0;
                double sredniaJakosc = 0.0;
                //SZUKAM USREDNIONEJ WARTOSCI
                for (int i = 0; i < listaMechanikow.Count; i++)
                {
                    sredniaCena   += listaOdpowiedzi[i].cena;
                    sredniaJakosc += listaOdpowiedzi[i].jakoscNaprawy;
                }

                sredniaCena   /= listaMechanikow.Count;
                sredniaJakosc /= listaMechanikow.Count;


                double _cenaNaprawy   = sredniaCena - listaOdpowiedzi[0].cena;
                double _jakoscNaprawy = sredniaJakosc - listaOdpowiedzi[0].jakoscNaprawy;

                _cenaNaprawy   = Math.Round(_cenaNaprawy, 2);
                _jakoscNaprawy = Math.Round(_jakoscNaprawy, 2);

                if (_cenaNaprawy < 0)
                {
                    _cenaNaprawy *= -1;
                }

                if (_jakoscNaprawy < 0)
                {
                    _jakoscNaprawy *= -1;
                }

                int _index = 0;


                double tmpCena   = 0.0;
                double tmpJakosc = 0.0;
                for (int i = 0; i < listaMechanikow.Count; i++)
                {
                    tmpCena   = sredniaCena - listaOdpowiedzi[i].cena;
                    tmpJakosc = sredniaJakosc - listaOdpowiedzi[i].jakoscNaprawy;

                    tmpCena   = Math.Round(tmpCena, 2);
                    tmpJakosc = Math.Round(tmpJakosc, 2);

                    if (tmpCena < 0)
                    {
                        tmpCena *= -1;
                    }
                    if (tmpJakosc < 0)
                    {
                        tmpJakosc *= -1;
                    }

                    if (_cenaNaprawy > tmpCena && _jakoscNaprawy > tmpJakosc)
                    {
                        _cenaNaprawy   = tmpCena;
                        _jakoscNaprawy = tmpJakosc;
                        _index         = i;
                    }
                }

                Wiadomosc nW = new Wiadomosc(
                    listaOdpowiedzi[_index].idMechanik,
                    listaOdpowiedzi[_index].idKlient,
                    listaOdpowiedzi[_index].poziomTrudnosci,
                    listaOdpowiedzi[_index].cena,
                    listaOdpowiedzi[_index].jakoscNaprawy,
                    listaOdpowiedzi[_index].priorytetNaprawczy);

                nW.zlecenie = Zdarzenie.znaleziono;

                for (int i = 0; i < listaKlientow.Count; i++)
                {
                    if (listaKlientow[i].IdKlient == listaOdpowiedzi[_index].idKlient)
                    {
                        listaKlientow[i].dodajWiadomosc(nW);
                        break;
                    }
                }
            }
        }
예제 #12
0
 public void dodajWiadomosc(Wiadomosc w)
 {
     ListaWiadomosci.Add(w);
 }