package lezione14; import java.time.LocalDate; import java.util.ArrayList; import java.util.HashMap; public class Registro { private HashMap studenti; private HashMap> esami; public Registro() { this.studenti = new HashMap<>(); this.esami = new HashMap<>(); } public HashMap getStudenti() { return this.studenti; } public HashMap> getEsami() { return this.esami; } public void aggiungiStudente(String nome, String cognome) { Studente s = new Studente(nome, cognome); this.studenti.put(s.getMatricola(), s); this.esami.put(s.getMatricola(), new ArrayList<>()); } public boolean aggiungiEsame(String nome, String cognome, String materia, int voto, LocalDate data) { for (Studente s : this.studenti.values()) { if (s.getNome().equals(nome) && s.getCognome().equals(cognome)) { // perche' non posso usare il metodo containsValue() passando uno Studente? this.esami.get(s.getMatricola()).add(new Esame(materia, voto, data)); return true; } } return false; } public double calcolaMedia(String nome, String cognome) { double avg = 0; for (Studente s : this.studenti.values()) { if (s.getNome().equals(nome) && s.getCognome().equals(cognome)) { for (Esame e : this.esami.get(s.getMatricola())) { avg += e.getVoto(); } avg /= this.esami.get(s.getMatricola()).size(); break; } } return avg; } public double calcolaMedia(String nome, String cognome, LocalDate inizio, LocalDate fine) { double avg = 0; int nEsami = 0; for (Studente s : this.studenti.values()) { if (s.getNome().equals(nome) && s.getCognome().equals(cognome)) { for (Esame e : this.esami.get(s.getMatricola())) { if (e.getData().isAfter(inizio) && e.getData().isBefore(fine)) { avg += e.getVoto(); nEsami++; } } avg /= nEsami; break; } } return avg; } public double calcolaMedia(LocalDate inizio, LocalDate fine) { double avg = 0; int nEsami = 0; for (Studente s : this.studenti.values()) { for (Esame e : this.esami.get(s.getMatricola())) { if (e.getData().isAfter(inizio) && e.getData().isBefore(fine)) { avg += e.getVoto(); nEsami++; } } } avg /= nEsami; return avg; } public double calcolaMedia() { double avg = 0; int nEsami = 0; for (Studente s : this.studenti.values()) { for (Esame e : this.esami.get(s.getMatricola())) { avg += e.getVoto(); } nEsami += this.esami.get(s.getMatricola()).size(); } avg /= nEsami; return avg; } public void visualizzaDati(String nome, String cognome) { for (Studente s : this.studenti.values()) { if (s.getNome().equals(nome) && s.getCognome().equals(cognome)) { System.out.println(new StringBuilder().append("Carrieria di ").append(s.getNome()).append(" ") .append(s.getCognome()).append(" (").append(s.getMatricola()).append("):")); for (Esame e : this.esami.get(s.getMatricola())) { System.out.println(new StringBuilder().append("\tMateria: ").append(e.getMateria()) .append(", Voto: ").append(e.getVoto()).append(", Data: ").append(e.getData())); } break; } } } public void visualizzaDati() { for (Studente s : this.studenti.values()) { System.out.println(new StringBuilder().append("Carrieria di ").append(s.getNome()).append(" ") .append(s.getCognome()).append(" (").append(s.getMatricola()).append("):")); for (Esame e : this.esami.get(s.getMatricola())) { System.out.println(new StringBuilder().append("\tMateria: ").append(e.getMateria()).append(", Voto: ") .append(e.getVoto()).append(", Data: ").append(e.getData())); } } } }