Zadanie 8

Najneskorší termín odovzdania: 18.12.2022 (nedeľa) o 18:00
Odovzdávané súbory: Odber.java, ZoznamOdberov.java

Doplňujúce požiadavky:

  • riešenia, ktoré nebude možné skompilovať (t.j. riešenia so syntaktickými chybami) nebudú hodnotené,
  • zdrojový kód správne naformátujte (CTRL+SHIFT+F),
  • očakáva sa vhodne okomentovaný zdrojový kód
  • v prípade potreby si vytvorte pomocné metódy

Zoznam Odberov

Počas pandémie je testovanie jedným zo základných diagnostických nástrojov. Aktuálne sú najpoužívanejšie odbery z nosohltanu, ktoré sú analyzované PCR testom alebo antigénovým testom. Aj viacero firiem sa rozhodlo používať testovanie ako nastroj na ochranu svojich zamestnancov. Ale aj nástroje treba používať správne a pomocou kvalitného vyhodnocovania a dátovej analýze vieme získať aj pridanú informáciu, ktorú by sme z jedného testu (odberu) nevedeli získať.

Máme triedu Odber, ktorá reprezentuje informácie z jedného odberu.
Naprogramujte triedu ZoznamOdberov, ktorá reprezentuje informácie o odberoch. Bodové hodnotenia jednotlivých metód sú uvedené v komentároch v zdrojovom kóde.

Poznámky:

  • Ak do triedy Odber nepridávate pomocne metódy, tak ju odovzdajte do Moodlu tak ako je na stránke.
  • Pri viacerých úlohách odporúčame rozdeliť funkcionalitu na viacero metód, či už v triede Odber alebo ZoznamOdberov.
  • Metódy a konštruktory, ktoré nemajú napísane bodové hodnotenie nemodifikujte.
  • Niektoré úlohy obsahujú hint, ale je prípustné aj iné korektné riešenie.
  • Jednotlivé odbery nemajú v zozname odberov žiadne chronologické ani lexikografické poradie.
  • Za úspešné vyriešenie aspoň šiestich úloh získavate jeden ďalší bod a za úspešné vyriešenie všetkých úloh získavate opäť ďalší bod.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
public class Odber {

    private String menoZamestnanca;
    private String datumOdberu;
    private int odberneMiesto;
    private boolean vysledok;

    public Odber(String menoZamestnanca, String datumOdberu, int odberneMiesto, boolean vysledok) {
        super();
        this.menoZamestnanca = menoZamestnanca;
        this.datumOdberu = datumOdberu;
        this.odberneMiesto = odberneMiesto;
        this.vysledok = vysledok;
    }

    @Override
    public String toString() {
        return menoZamestnanca + ", " + datumOdberu + ", " + odberneMiesto + ", " + vysledok;
    }

    public String getMenoZamestnanca() {
        return menoZamestnanca;
    }

    public String getDatumOdberu() {
        return datumOdberu;
    }

    public int getOdberneMiesto() {
        return odberneMiesto;
    }

    public boolean getVysledok() {
        return vysledok;
    }

    /**
     * Vygenerovana metoda hashCode, metodu neupravujte
     */

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((datumOdberu == null) ? 0 : datumOdberu.hashCode());
        result = prime * result + ((menoZamestnanca == null) ? 0 : menoZamestnanca.hashCode());
        result = prime * result + odberneMiesto;
        result = prime * result + (vysledok ? 1231 : 1237);
        return result;
    }

    /**
     * Vygenerovana metoda equals, ktora zisti, ci objekt triedy odber je rovnaky
     * ako parameterom zadany objekt obj. Metodu neupravujte
     *
     * @param obj porovnavany objekt
     */

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Odber other = (Odber) obj;
        if (datumOdberu == null) {
            if (other.datumOdberu != null)
                return false;
        } else if (!datumOdberu.equals(other.datumOdberu))
            return false;
        if (menoZamestnanca == null) {
            if (other.menoZamestnanca != null)
                return false;
        } else if (!menoZamestnanca.equals(other.menoZamestnanca))
            return false;
        if (odberneMiesto != other.odberneMiesto)
            return false;
        if (vysledok != other.vysledok)
            return false;
        return true;
    }

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import java.util.*;

public class ZoznamOdberov {

    /**
     * List reprezentujuci zoznam odberov
     */

    private List<Odber> odbery;

    /**
     * Konstruktor zoznamu odberov vytvori prazdny ArrayList
     */

    public ZoznamOdberov() {
        odbery = new ArrayList();
    }

    /**
     * Pridavanie odberu do list-u
     * @param o
     */

    public void pridaj(Odber o) {
        odbery.add(o);
    }

    /**
     * Metoda vrati, kolko odberov sa vykonalo na odbernom mieste zdanom parametrom
     * @param odberneMiesto cislo odberneho miesta
     * @return pocet odberov, ktore sa vykonali na odbernom mieste odberneMiesto
     */

    public int pocetOdberovNaMieste(int odberneMiesto) {
        // ??? (1 bod)
        return 0;
    }

    /**
     * Metoda vrati zoznam mien pozitivne testovanych. Mena sa nenachadzaju na zozname dupliticne
     * @return zoznam mien pozitivne testovanych, bez duplicit
     */

    public List<String> pozitivneTestovani(){
        // ??? (1 bod)
        // hint: Set
        return null;
    }
    /**
     * Metoda vrati priemerny pocet testovanych za den testovania.
     * Ak testujeme v pondelok 30.11. a piatok 4.12., tak sú to dva dni,
     * pocas ktorych sa testovalo.
     * @return priemerny pocet testovanych za den testovania
     */

    public double priemernyPocetTestovZaDenTestovania() {
        // ??? (1 bod)
        return 0;
    }

    /**
     * Metoda vrati zoznam mien vsetkych testovanych, ktori sa zucastnili odberu v rozmedzi datumov. Mena sa nenachadzaju na zozname dupliticne
     * @param odDatum datum zaciatku, vratane tohto datumu
     * @param doDatum datum konca, vratane tohto datumu
     * @return mena testovanych v rozmedzi datumov
     */

    public List<String> testovaniOdDo(String odDatum, String doDatum){
        // ??? (1 bod)
        // hint: Pre jednoduchost nepouzivajte triedu Date, ale odporucame datumy prerobit na cislo a pracovat s cislami
        // napr. ak je odDatum "30.11.2020" a doDatum "4.12.2020" a zaujima nas, ci "1.12.2020"
        // je medzi tymito datumami, tak ich prerobime na cisla, 20201130, 20201204, 20201201
        // a zistujeme, ci plati 20201130 <= 20201201 a zaroven 20201201 <= 20201204
        // pozn.: ak chcete znak '.' (bodka) zapisat ako delimiter pre scanner alebo v metode split, tak ju zapisujeme ako "\\." lebo ide o specialny znak
        // pozn.: pri vstupe vzdy plati, ze odDatum <= doDatum
        return null;
    }

    /**
     * Metoda vrati mapu, kde je kazdemu menu priradene kolko testov absolvoval
     * @return mapa osob a ich poctu absolvovanych testov
     */

    public Map<String, Integer> pocetTestovOsoby(){
        // ??? (1 bod)
        return null;
    }

    /**
     * Metoda vrati zoznam mien pozitivne testovanych, ktori mali aspon 2 pozitivne testy. Mena sa nenachadzaju na zozname dupliticne.
     * @return zoznam mien tych, ktori boli pozitivne testovani aspon dvakrat, bez duplicity mien
     */

    public List<String> opakovanePozitivny(){
        // ??? (1 bod)
        return null;
    }

    /**
     * Metoda vrati, ci zamestnanec prekonal nakazu. To znamena, ze mal pozitivny test v nejaky den a negativny neskor.
     * @param menoZamestnanca
     * @return
     */

    public boolean prekonalNakazu(String menoZamestnanca) {
        // ??? (1 bod)
        // hint je pri metoda testovanyOdDo
        return false;
    }

    /**
     * Metoda vrati zoznam tych mien z vyberu zamestnancov, ktori este neabsolvovali ziaden odber.
     * @param vyberZamestnancov
     * @return novy zoznam vytvoreny zo zoznamu vyberZamestancov, bez zamestancov, ktori uz absolvovali odber
     */

    public List<String> bezOdberu(List vyberZamestnancov){
        // ??? (1 bod)
        return null;
    }

    /**
     * Metoda vrati zoznam mien zamestnancov, ktori mali pocas toho isteho dna pozitivny aj negativny test. Mena sa nenachadzaju na zozname dupliticne.
     * @return zoznam mien tych, ktori pocas jedneho dna mali pozitivny aj negativny test
     */

    public List<String> podozrivoTestovani(){
        // ??? (1 bod)
        // hint: vyuzite dvojicu menoZamestnanca datumOdberu
        return null;
    }

    /**
     * Metoda vrati cislo odberneho miesta, kde sa vykonalo najviac odberov. Ak je takychto pracovisk viac, tak vrati ktorekolvek z nich.
     * @return cislo pracoviska, ktore vykonalo najviac odberov
     */

    public int najvytazenejsiePracovisko() {
        // ??? (1 bod)
        return 0;
    }

}