diff --git a/src/gradeanalyzer/FinestraInserisciAlunno.java b/src/gradeanalyzer/FinestraInserisciAlunno.java index 8390801..5b15fae 100644 --- a/src/gradeanalyzer/FinestraInserisciAlunno.java +++ b/src/gradeanalyzer/FinestraInserisciAlunno.java @@ -55,6 +55,7 @@ public class FinestraInserisciAlunno extends BasicWindow { GradeAnalyzer.isSaved = false; GradeAnalyzer.isEmpty = false; double voto = -1; + int lunghezzaMassimaNomeCognome = 21; boolean validitaCampoNome = !campoNome.getText().isBlank() && !campoNome.getText().isEmpty(); boolean validitaCampoCognome = !campoCognome.getText().isBlank() && !campoCognome.getText().isEmpty(); @@ -64,18 +65,31 @@ public class FinestraInserisciAlunno extends BasicWindow { GlobalGUI.showErrorMessage("Il nome non può essere vuoto."); } + if (campoNome.getText().trim().length() > lunghezzaMassimaNomeCognome) { + GlobalGUI.showErrorMessage( + "Il nome non può superare la lunghezza di " + lunghezzaMassimaNomeCognome + " caratteri."); + } + if (!validitaCampoCognome) { GlobalGUI.showErrorMessage("Il cognome non può essere vuoto."); } + if (campoCognome.getText().trim().length() > lunghezzaMassimaNomeCognome) { + GlobalGUI.showErrorMessage( + "Il cognome non può superare la lunghezza di " + lunghezzaMassimaNomeCognome + " caratteri."); + } + if (!validitaCampoVoto) { GlobalGUI.showErrorMessage("Il voto non può essere vuoto."); } else { voto = voto(campoVoto.getText()); } - if (voto != -1 && validitaCampoNome && validitaCampoCognome) { - inserisciDati(campoNome.getText().trim(), campoCognome.getText().trim(), + if (voto != -1 && validitaCampoNome && validitaCampoCognome + && campoNome.getText().trim().length() <= lunghezzaMassimaNomeCognome + && campoCognome.getText().trim().length() <= lunghezzaMassimaNomeCognome) { + + inserisciDati(campoNome.getText(), campoCognome.getText(), voto); this.close(); diff --git a/src/gradeanalyzer/FinestraPrincipale.java b/src/gradeanalyzer/FinestraPrincipale.java index 73d9982..d909886 100644 --- a/src/gradeanalyzer/FinestraPrincipale.java +++ b/src/gradeanalyzer/FinestraPrincipale.java @@ -33,7 +33,7 @@ public class FinestraPrincipale extends BasicWindow { contenutoFinestra.addComponent(new MenuItem("Inserisci dati alunno", () -> GlobalGUI.getGui().addWindowAndWait(new FinestraInserisciAlunno()))); contenutoFinestra.addComponent(new MenuItem("Trova voto più alto e più basso", - () -> openWindow("Trova voto più alto e più basso", "Questa è la finestra."))); + () -> GlobalGUI.getGui().addWindowAndWait(new FinestraTrovaAltoBasso()))); contenutoFinestra.addComponent(new MenuItem("Promossi", () -> openWindow("Promossi", "Questa è la finestra."))); contenutoFinestra.addComponent(new EmptySpace()); diff --git a/src/gradeanalyzer/FinestraTrovaAltoBasso.java b/src/gradeanalyzer/FinestraTrovaAltoBasso.java index 2209ad7..406073c 100644 --- a/src/gradeanalyzer/FinestraTrovaAltoBasso.java +++ b/src/gradeanalyzer/FinestraTrovaAltoBasso.java @@ -4,10 +4,88 @@ */ package gradeanalyzer; +import java.util.ArrayList; +import java.util.Collections; + +import com.googlecode.lanterna.TerminalSize; +import com.googlecode.lanterna.graphics.Scrollable; +import com.googlecode.lanterna.gui2.BasicWindow; +import com.googlecode.lanterna.gui2.Button; +import com.googlecode.lanterna.gui2.Direction; +import com.googlecode.lanterna.gui2.EmptySpace; +import com.googlecode.lanterna.gui2.GridLayout; +import com.googlecode.lanterna.gui2.Label; +import com.googlecode.lanterna.gui2.LinearLayout; +import com.googlecode.lanterna.gui2.Panel; +import com.googlecode.lanterna.gui2.TextBox; +import com.googlecode.lanterna.gui2.TextGUIGraphics; +import com.googlecode.lanterna.gui2.Window; +import com.googlecode.lanterna.gui2.table.Table; +import com.googlecode.lanterna.gui2.table.TableCellRenderer; + /** * * @author Verde */ -public class FinestraTrovaAltoBasso { +public class FinestraTrovaAltoBasso extends BasicWindow { + public FinestraTrovaAltoBasso() { + super("Trova voto più alto e più basso"); + ArrayList windowHints = new ArrayList<>(); + windowHints.add(Window.Hint.CENTERED); + this.setHints(windowHints); + + if (GradeAnalyzer.isEmpty) { + GlobalGUI.showErrorMessage("Inserire almeno la valutazione di uno studente prima di proseguire."); + this.close(); + } else { + if (!GradeAnalyzer.isSaved) { + GlobalGUI.showNoteMessage("Ci sono dati non salvati."); + GlobalGUI.salvaValutazioni(); + } + Panel contenutoFinestra = new Panel(new LinearLayout(Direction.VERTICAL)); + Panel pannelloMigliorePeggiore = new Panel(new GridLayout(2)); + Panel pannelloValutazioniOrdinate = new Panel(new LinearLayout(Direction.VERTICAL)); + + ArrayList copiaValutazioni = new ArrayList<>(); + for (Valutazione valutazione : GradeAnalyzer.valutazioni) { + copiaValutazioni.add(valutazione); + } + String[] nomi = new String[GradeAnalyzer.valutazioni.size()]; + String[] cognomi = new String[GradeAnalyzer.valutazioni.size()]; + double[] voti = new double[GradeAnalyzer.valutazioni.size()]; + + Collections.sort(copiaValutazioni); + + for (int i = 0; i < copiaValutazioni.size(); i++) { + nomi[i] = copiaValutazioni.get(i).getNome(); + cognomi[i] = copiaValutazioni.get(i).getCognome(); + voti[i] = copiaValutazioni.get(i).getVoto(); + } + + pannelloMigliorePeggiore.addComponent(new Label("Voto migliore: ")); + pannelloMigliorePeggiore.addComponent( + new Label(Double.toString(voti[voti.length - 1]))); + pannelloMigliorePeggiore.addComponent(new Label("Voto peggiore: ")); + pannelloMigliorePeggiore.addComponent(new Label(Double.toString(voti[0]))); + + // ---- Creazione tabella ---- + Table tabellaVoti = new Table<>("Nome", "Cognome", "Voto"); + tabellaVoti.setPreferredSize(new TerminalSize(50, 10)); // larghezza 50, altezza 10 + + for (int i = 0; i < copiaValutazioni.size(); i++) { + tabellaVoti.getTableModel().addRow(nomi[i], cognomi[i], Double.toString(voti[i])); + } + pannelloValutazioniOrdinate.addComponent(tabellaVoti); + + contenutoFinestra.addComponent(pannelloMigliorePeggiore); + contenutoFinestra.addComponent(new EmptySpace()); + contenutoFinestra.addComponent(new Label("Tutte le valutazioni, in ordine crescente:")); + contenutoFinestra.addComponent(new EmptySpace()); + contenutoFinestra.addComponent(pannelloValutazioniOrdinate); + contenutoFinestra.addComponent(new Button("Indietro", this::close)); + + this.setComponent(contenutoFinestra); + } + } } \ No newline at end of file diff --git a/src/gradeanalyzer/GradeAnalyzer.java b/src/gradeanalyzer/GradeAnalyzer.java index 1b39e64..5f4550f 100644 --- a/src/gradeanalyzer/GradeAnalyzer.java +++ b/src/gradeanalyzer/GradeAnalyzer.java @@ -34,9 +34,9 @@ public class GradeAnalyzer { static final String PATH_VOTI = "./src/gradeanalyzer/data/voti.txt"; static final String PATH_PROMOSSI = "./src/gradeanalyzer/data/promossi.txt"; static final String ERRORE_GENERICO = "Opzione non valida."; - static ArrayList valutazioni = valutazioniDaFile(); static boolean isSaved = true; static boolean isEmpty = true; + static ArrayList valutazioni = valutazioniDaFile(); /* * public static void main(String[] args) {