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); }
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(); } }
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; } } }
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)); } }
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; } } }
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); }
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); } }
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); }
public void dodajZlecenie(Wiadomosc w) { listaZlecen.Add(w); }
public void dodajZlecenie(Wiadomosc w) { kolejka.Add(w); }
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; } } } }
public void dodajWiadomosc(Wiadomosc w) { ListaWiadomosci.Add(w); }