Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f0f37bfdf9 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,3 +1,3 @@
|
|||||||
compile.on.save=true
|
compile.on.save=true
|
||||||
user.properties.file=/home/Verde/.netbeans/28/build.properties
|
user.properties.file=/home/Verde/.netbeans/27/build.properties
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
|
|
||||||
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
|
||||||
<group>
|
|
||||||
<file>file:/home/Verde/git/GradeAnalyzer/src/gradeanalyzer/GradeAnalyzer.java</file>
|
|
||||||
</group>
|
|
||||||
</open-files>
|
|
||||||
</project-private>
|
|
||||||
@@ -33,11 +33,9 @@ dist.javadoc.dir=${dist.dir}/javadoc
|
|||||||
dist.jlink.dir=${dist.dir}/jlink
|
dist.jlink.dir=${dist.dir}/jlink
|
||||||
dist.jlink.output=${dist.jlink.dir}/GradeAnalyzer
|
dist.jlink.output=${dist.jlink.dir}/GradeAnalyzer
|
||||||
excludes=
|
excludes=
|
||||||
file.reference.lanterna-3.1.3.jar=/home/Verde/git/lanterna-3.1.3.jar
|
|
||||||
includes=**
|
includes=**
|
||||||
jar.compress=false
|
jar.compress=false
|
||||||
javac.classpath=\
|
javac.classpath=
|
||||||
${file.reference.lanterna-3.1.3.jar}
|
|
||||||
# Space-separated list of extra javac options
|
# Space-separated list of extra javac options
|
||||||
javac.compilerargs=
|
javac.compilerargs=
|
||||||
javac.deprecation=false
|
javac.deprecation=false
|
||||||
|
|||||||
@@ -1,157 +0,0 @@
|
|||||||
/*
|
|
||||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
|
||||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
|
||||||
*/
|
|
||||||
package gradeanalyzer;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import com.googlecode.lanterna.gui2.BasicWindow;
|
|
||||||
import com.googlecode.lanterna.gui2.Button;
|
|
||||||
import com.googlecode.lanterna.gui2.EmptySpace;
|
|
||||||
import com.googlecode.lanterna.gui2.GridLayout;
|
|
||||||
import com.googlecode.lanterna.gui2.Label;
|
|
||||||
import com.googlecode.lanterna.gui2.Panel;
|
|
||||||
import com.googlecode.lanterna.gui2.TextBox;
|
|
||||||
import com.googlecode.lanterna.gui2.Window;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Verde
|
|
||||||
*/
|
|
||||||
public class FinestraInserisciAlunno extends BasicWindow {
|
|
||||||
public FinestraInserisciAlunno() {
|
|
||||||
|
|
||||||
super("Inserisci alunno");
|
|
||||||
ArrayList<Window.Hint> windowHints = new ArrayList<>();
|
|
||||||
windowHints.add(Window.Hint.CENTERED);
|
|
||||||
this.setHints(windowHints);
|
|
||||||
|
|
||||||
Panel contenutoFinestra = new Panel(new GridLayout(2));
|
|
||||||
TextBox campoNome = new TextBox();
|
|
||||||
TextBox campoCognome = new TextBox();
|
|
||||||
TextBox campoVoto = new TextBox();
|
|
||||||
|
|
||||||
contenutoFinestra.addComponent(new Label("Nome: "));
|
|
||||||
contenutoFinestra.addComponent(campoNome);
|
|
||||||
|
|
||||||
contenutoFinestra.addComponent(new EmptySpace());
|
|
||||||
contenutoFinestra.addComponent(new EmptySpace());
|
|
||||||
|
|
||||||
contenutoFinestra.addComponent(new Label("Cognome: "));
|
|
||||||
contenutoFinestra.addComponent(campoCognome);
|
|
||||||
|
|
||||||
contenutoFinestra.addComponent(new EmptySpace());
|
|
||||||
contenutoFinestra.addComponent(new EmptySpace());
|
|
||||||
|
|
||||||
contenutoFinestra.addComponent(new Label("Voto: "));
|
|
||||||
contenutoFinestra.addComponent(campoVoto);
|
|
||||||
|
|
||||||
contenutoFinestra.addComponent(new EmptySpace());
|
|
||||||
contenutoFinestra.addComponent(new EmptySpace());
|
|
||||||
|
|
||||||
contenutoFinestra.addComponent(new Button("Conferma", () -> {
|
|
||||||
// imposta gli stati
|
|
||||||
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();
|
|
||||||
boolean validitaCampoVoto = !campoVoto.getText().isBlank() && !campoVoto.getText().isEmpty();
|
|
||||||
|
|
||||||
if (!validitaCampoNome) {
|
|
||||||
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
|
|
||||||
&& campoNome.getText().trim().length() <= lunghezzaMassimaNomeCognome
|
|
||||||
&& campoCognome.getText().trim().length() <= lunghezzaMassimaNomeCognome) {
|
|
||||||
|
|
||||||
inserisciDati(campoNome.getText(), campoCognome.getText(),
|
|
||||||
voto);
|
|
||||||
|
|
||||||
this.close();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
contenutoFinestra.addComponent(new Button("Indietro", this::close));
|
|
||||||
|
|
||||||
this.setComponent(contenutoFinestra);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean inserisciDati(String nome, String cognome, double voto) {
|
|
||||||
int posizione;
|
|
||||||
boolean notUpdated = false;
|
|
||||||
|
|
||||||
if ((posizione = exists(nome, cognome, GradeAnalyzer.valutazioni)) != -1) {
|
|
||||||
boolean scelta = GlobalGUI.showBooleanWarningMessage("Lo studente esiste già.\n\nAggiornarne i dati?");
|
|
||||||
|
|
||||||
if (scelta) {
|
|
||||||
GradeAnalyzer.valutazioni.get(posizione).setVoto(voto);
|
|
||||||
|
|
||||||
GlobalGUI.showNoteMessage("Studente aggiunto correttamente.");
|
|
||||||
|
|
||||||
} else {
|
|
||||||
GlobalGUI.showNoteMessage("Lo studente non è stato aggiornato.");
|
|
||||||
notUpdated = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
GradeAnalyzer.valutazioni.add(new Valutazione(nome, cognome, voto));
|
|
||||||
|
|
||||||
GlobalGUI.showNoteMessage("Studente aggiunto correttamente.");
|
|
||||||
}
|
|
||||||
|
|
||||||
GlobalGUI.salvaValutazioni();
|
|
||||||
|
|
||||||
return notUpdated;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static double voto(String votoStringa) {
|
|
||||||
double voto = -1;
|
|
||||||
final double VOTO_MINIMO = 1;
|
|
||||||
final double VOTO_MASSIMO = 10;
|
|
||||||
|
|
||||||
if (Math.round((Double.parseDouble(votoStringa) * 10) / 10) < VOTO_MINIMO
|
|
||||||
|| Math.round((Double.parseDouble(votoStringa) * 10) / 10) > VOTO_MASSIMO) {
|
|
||||||
GlobalGUI.showErrorMessage("Il voto deve essere compreso tra " + VOTO_MINIMO + " e " + VOTO_MASSIMO + ".");
|
|
||||||
} else {
|
|
||||||
voto = Math.round((Double.parseDouble(votoStringa) * 10) / 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
return voto;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int exists(String nome, String cognome, ArrayList<Valutazione> valutazioni) {
|
|
||||||
boolean exit = false;
|
|
||||||
int posizione = -1;
|
|
||||||
for (int i = 0; i < valutazioni.size() && !exit; i++) {
|
|
||||||
if (nome.equalsIgnoreCase(valutazioni.get(i).getNome())
|
|
||||||
&& cognome.equalsIgnoreCase(valutazioni.get(i).getCognome())) {
|
|
||||||
posizione = i;
|
|
||||||
exit = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return posizione;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
/*
|
|
||||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
|
||||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
|
||||||
*/
|
|
||||||
package gradeanalyzer;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
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.LinearLayout;
|
|
||||||
import com.googlecode.lanterna.gui2.Panel;
|
|
||||||
import com.googlecode.lanterna.gui2.Window;
|
|
||||||
import com.googlecode.lanterna.gui2.menu.MenuItem;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Verde
|
|
||||||
*/
|
|
||||||
public class FinestraPrincipale extends BasicWindow {
|
|
||||||
public FinestraPrincipale() {
|
|
||||||
|
|
||||||
super("Selezionare una delle seguenti opzioni:");
|
|
||||||
ArrayList<Window.Hint> windowHints = new ArrayList<>();
|
|
||||||
windowHints.add(Window.Hint.CENTERED);
|
|
||||||
this.setHints(windowHints);
|
|
||||||
|
|
||||||
Panel contenutoFinestra = new Panel(new LinearLayout(Direction.VERTICAL));
|
|
||||||
|
|
||||||
contenutoFinestra.addComponent(new MenuItem("Inserisci dati alunno",
|
|
||||||
() -> GlobalGUI.getGui().addWindowAndWait(new FinestraInserisciAlunno())));
|
|
||||||
contenutoFinestra.addComponent(new MenuItem("Trova voto più alto e più basso",
|
|
||||||
() -> GlobalGUI.getGui().addWindowAndWait(new FinestraTrovaAltoBasso())));
|
|
||||||
contenutoFinestra.addComponent(new MenuItem("Promossi", () -> GlobalGUI.getGui().addWindowAndWait(new FinestraPromossi())));
|
|
||||||
|
|
||||||
contenutoFinestra.addComponent(new EmptySpace());
|
|
||||||
|
|
||||||
contenutoFinestra.addComponent(new Button("Esci", () -> System.exit(0)));
|
|
||||||
|
|
||||||
this.setComponent(contenutoFinestra);
|
|
||||||
|
|
||||||
// Contenuto della finestra principale
|
|
||||||
// contenutoFinestra.addComponent(new EmptySpace()); // Margine
|
|
||||||
|
|
||||||
this.setComponent(contenutoFinestra);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
/*
|
|
||||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
|
||||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
|
||||||
*/
|
|
||||||
package gradeanalyzer;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
import com.googlecode.lanterna.TerminalSize;
|
|
||||||
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.Label;
|
|
||||||
import com.googlecode.lanterna.gui2.LinearLayout;
|
|
||||||
import com.googlecode.lanterna.gui2.Panel;
|
|
||||||
import com.googlecode.lanterna.gui2.Window;
|
|
||||||
import com.googlecode.lanterna.gui2.table.Table;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Verde
|
|
||||||
*/
|
|
||||||
public class FinestraPromossi extends BasicWindow {
|
|
||||||
public FinestraPromossi() {
|
|
||||||
|
|
||||||
super("Promossi");
|
|
||||||
ArrayList<Window.Hint> 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));
|
|
||||||
|
|
||||||
final int MINIMO_PROMOZIONE = 6;
|
|
||||||
ArrayList<Valutazione> promossi = new ArrayList<>();
|
|
||||||
ArrayList<Valutazione> copiaValutazioni = new ArrayList<>();
|
|
||||||
for (Valutazione valutazione : GradeAnalyzer.valutazioni) {
|
|
||||||
copiaValutazioni.add(valutazione);
|
|
||||||
}
|
|
||||||
|
|
||||||
Collections.sort(copiaValutazioni);
|
|
||||||
|
|
||||||
for (Valutazione valutazione : copiaValutazioni) {
|
|
||||||
if (valutazione.getVoto() >= MINIMO_PROMOZIONE) {
|
|
||||||
promossi.add(valutazione);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---- Creazione tabella ----
|
|
||||||
Table<String> tabellaVoti = new Table<>("Nome", "Cognome", "Voto");
|
|
||||||
tabellaVoti.setPreferredSize(new TerminalSize(50, 10)); // larghezza 50, altezza 10
|
|
||||||
|
|
||||||
for (int i = 0; i < promossi.size(); i++) {
|
|
||||||
tabellaVoti.getTableModel().addRow(promossi.get(i).getNome(), promossi.get(i).getCognome(), Double.toString(promossi.get(i).getVoto()));
|
|
||||||
}
|
|
||||||
|
|
||||||
GradeAnalyzer.salva(promossi, GradeAnalyzer.PATH_PROMOSSI);
|
|
||||||
|
|
||||||
contenutoFinestra.addComponent(new Label("Tutte le valutazioni dei promossi, in ordine crescente:"));
|
|
||||||
contenutoFinestra.addComponent(new EmptySpace());
|
|
||||||
contenutoFinestra.addComponent(tabellaVoti);
|
|
||||||
contenutoFinestra.addComponent(new Button("Indietro", this::close));
|
|
||||||
|
|
||||||
this.setComponent(contenutoFinestra);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
/*
|
|
||||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
|
||||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
|
||||||
*/
|
|
||||||
package gradeanalyzer;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
import com.googlecode.lanterna.TerminalSize;
|
|
||||||
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.Window;
|
|
||||||
import com.googlecode.lanterna.gui2.table.Table;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Verde
|
|
||||||
*/
|
|
||||||
public class FinestraTrovaAltoBasso extends BasicWindow {
|
|
||||||
public FinestraTrovaAltoBasso() {
|
|
||||||
|
|
||||||
super("Trova voto più alto e più basso");
|
|
||||||
ArrayList<Window.Hint> 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<Valutazione> 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<String> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
/*
|
|
||||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
|
||||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
|
||||||
*/
|
|
||||||
package gradeanalyzer;
|
|
||||||
|
|
||||||
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
|
|
||||||
import com.googlecode.lanterna.gui2.dialogs.MessageDialog;
|
|
||||||
import com.googlecode.lanterna.gui2.dialogs.MessageDialogButton;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Verde
|
|
||||||
*/
|
|
||||||
public class GlobalGUI {
|
|
||||||
|
|
||||||
private static WindowBasedTextGUI gui;
|
|
||||||
|
|
||||||
public static void setGui(WindowBasedTextGUI g) {
|
|
||||||
gui = g;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WindowBasedTextGUI getGui() {
|
|
||||||
return gui;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void showErrorMessage(String message) {
|
|
||||||
MessageDialog.showMessageDialog(GlobalGUI.getGui(), "Errore",
|
|
||||||
message,
|
|
||||||
MessageDialogButton.OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void showNoteMessage(String message) {
|
|
||||||
MessageDialog.showMessageDialog(GlobalGUI.getGui(), "Nota",
|
|
||||||
message,
|
|
||||||
MessageDialogButton.OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean showBooleanWarningMessage(String message) {
|
|
||||||
return MessageDialog.showMessageDialog(
|
|
||||||
GlobalGUI.getGui(),
|
|
||||||
"Attenzione",
|
|
||||||
message,
|
|
||||||
MessageDialogButton.Yes,
|
|
||||||
MessageDialogButton.No) == MessageDialogButton.Yes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void salvaValutazioni() {
|
|
||||||
boolean scelta = GlobalGUI.showBooleanWarningMessage("Salvare i dati?");
|
|
||||||
|
|
||||||
if (scelta) {
|
|
||||||
GradeAnalyzer.salva(GradeAnalyzer.valutazioni, GradeAnalyzer.PATH_VOTI);
|
|
||||||
GradeAnalyzer.valutazioni = GradeAnalyzer.valutazioniDaFile();
|
|
||||||
GradeAnalyzer.isSaved = true;
|
|
||||||
} else {
|
|
||||||
GlobalGUI.showNoteMessage("I dati non sono stati salvati.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,14 +11,10 @@ import java.io.FileReader;
|
|||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.InputMismatchException;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
import com.googlecode.lanterna.gui2.MultiWindowTextGUI;
|
|
||||||
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
|
|
||||||
import com.googlecode.lanterna.screen.Screen;
|
|
||||||
import com.googlecode.lanterna.screen.TerminalScreen;
|
|
||||||
import com.googlecode.lanterna.terminal.DefaultTerminalFactory;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Verde
|
* @author Verde
|
||||||
@@ -38,18 +34,140 @@ public class GradeAnalyzer {
|
|||||||
static ArrayList<Valutazione> valutazioni = valutazioniDaFile();
|
static ArrayList<Valutazione> valutazioni = valutazioniDaFile();
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
try (Screen schermo = new TerminalScreen(new DefaultTerminalFactory().createTerminal())) {
|
int scelta = -1;
|
||||||
schermo.startScreen(); // crea terminale, inserisci CRT e dai corrente
|
|
||||||
final WindowBasedTextGUI gui = new MultiWindowTextGUI(schermo); // crea interfaccia con le finestre
|
|
||||||
GlobalGUI.setGui(gui);
|
|
||||||
|
|
||||||
gui.addWindowAndWait(new FinestraPrincipale());
|
do {
|
||||||
|
System.out.println("Scegliere un'opzione:");
|
||||||
|
System.out.println("1. Inserisci dati alunno");
|
||||||
|
System.out.println("2. Trova voto più alto e più basso");
|
||||||
|
System.out.println("3. Promossi");
|
||||||
|
System.out.println("0. Esci");
|
||||||
|
System.out.print("Opzione: ");
|
||||||
|
|
||||||
} catch (IOException e) {
|
try {
|
||||||
System.out.println("Qualcosa è andato storto nella creazione dell'interfaccia.");
|
scelta = sc.nextInt();
|
||||||
System.out.println(e.getMessage());
|
sc.nextLine();
|
||||||
e.printStackTrace();
|
|
||||||
|
switch (scelta) {
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
isSaved = false;
|
||||||
|
isEmpty = false;
|
||||||
|
inserisciDati();
|
||||||
|
System.out.println("Studente aggiunto correttamente.");
|
||||||
|
pausa();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (isEmpty) {
|
||||||
|
System.out.println(
|
||||||
|
"Errore: inserire almeno la valutazione di uno studente prima di proseguire.");
|
||||||
|
} else {
|
||||||
|
if (!isSaved) {
|
||||||
|
System.out.println("Attenzione: ci sono dati non salvati.");
|
||||||
|
salvaValutazioni();
|
||||||
|
}
|
||||||
|
trovaMigliorePeggiore();
|
||||||
|
}
|
||||||
|
pausa();
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if (isEmpty) {
|
||||||
|
System.out.println(
|
||||||
|
"Errore: inserire almeno la valutazione di uno studente prima di proseguire.");
|
||||||
|
} else {
|
||||||
|
if (!isSaved) {
|
||||||
|
System.out.println("Attenzione: ci sono dati non salvati.");
|
||||||
|
System.out.println("Verranno salvati automaticamente.");
|
||||||
|
salva(valutazioni, PATH_VOTI);
|
||||||
|
valutazioni = valutazioniDaFile();
|
||||||
|
isSaved = true;
|
||||||
|
}
|
||||||
|
promossi();
|
||||||
|
}
|
||||||
|
pausa();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.println(ERRORE_GENERICO);
|
||||||
|
pausa();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} catch (InputMismatchException _) {
|
||||||
|
System.out.println("Errore: scelta non valida.");
|
||||||
|
pausa();
|
||||||
|
}
|
||||||
|
} while (scelta != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void pausa() {
|
||||||
|
System.out.println("Premere un tasto per continuare. . .");
|
||||||
|
sc.nextLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void inserisciDati() {
|
||||||
|
String nome;
|
||||||
|
String cognome;
|
||||||
|
double voto;
|
||||||
|
String scelta;
|
||||||
|
boolean exit;
|
||||||
|
int posizione;
|
||||||
|
|
||||||
|
System.out.print("Inserisci il nome: ");
|
||||||
|
nome = sc.nextLine().trim();
|
||||||
|
|
||||||
|
System.out.print("Inserisci il cognome: ");
|
||||||
|
cognome = sc.nextLine().trim();
|
||||||
|
|
||||||
|
voto = voto();
|
||||||
|
|
||||||
|
if ((posizione = exists(nome, cognome, valutazioni)) != -1) {
|
||||||
|
System.out.println("Attenzione: lo studente esiste già.");
|
||||||
|
do {
|
||||||
|
exit = true;
|
||||||
|
System.out.print("Aggiornarne i dati [S/N]? ");
|
||||||
|
scelta = sc.nextLine().trim().toLowerCase();
|
||||||
|
|
||||||
|
switch (scelta) {
|
||||||
|
case "s":
|
||||||
|
valutazioni.get(posizione).setVoto(voto);
|
||||||
|
break;
|
||||||
|
case "n":
|
||||||
|
System.out.println("Lo studente non è stato aggiornato.");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.println(ERRORE_GENERICO);
|
||||||
|
pausa();
|
||||||
|
exit = false;
|
||||||
|
}
|
||||||
|
} while (!exit);
|
||||||
|
} else {
|
||||||
|
valutazioni.add(new Valutazione(nome, cognome, voto));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
salvaValutazioni();
|
||||||
|
}
|
||||||
|
|
||||||
|
static double voto() {
|
||||||
|
double voto;
|
||||||
|
boolean error;
|
||||||
|
final double VOTO_MINIMO = 1;
|
||||||
|
final double VOTO_MASSIMO = 10;
|
||||||
|
|
||||||
|
do {
|
||||||
|
error = false;
|
||||||
|
System.out.print("Inserisci il voto: ");
|
||||||
|
voto = Math.round((sc.nextDouble() * 10) / 10);
|
||||||
|
sc.nextLine();
|
||||||
|
|
||||||
|
if (voto < VOTO_MINIMO || voto > VOTO_MASSIMO) {
|
||||||
|
System.out.println(
|
||||||
|
"Errore: il voto deve essere compreso tra " + VOTO_MINIMO + " e " + VOTO_MASSIMO + ".");
|
||||||
|
pausa();
|
||||||
|
error = true;
|
||||||
|
}
|
||||||
|
} while (error);
|
||||||
|
|
||||||
|
return voto;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ArrayList<Valutazione> valutazioniDaFile() {
|
static ArrayList<Valutazione> valutazioniDaFile() {
|
||||||
@@ -63,10 +181,11 @@ public class GradeAnalyzer {
|
|||||||
}
|
}
|
||||||
try (BufferedWriter bw = new BufferedWriter(new FileWriter(PATH_VOTI))) {
|
try (BufferedWriter bw = new BufferedWriter(new FileWriter(PATH_VOTI))) {
|
||||||
bw.write("");
|
bw.write("");
|
||||||
GlobalGUI.showNoteMessage("Nuovo file creato.");
|
System.out.println("Nuovo file creato.");
|
||||||
GlobalGUI.showNoteMessage("Aggiungere le valutazioni prima di proseguire.");
|
System.out.println("Aggiungere le valutazioni prima di proseguire.");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
GlobalGUI.showErrorMessage("Errore nella scrittura del file: " + e.getMessage());
|
System.out.println("Errore nella scrittura del file: " + e.getMessage());
|
||||||
|
pausa();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try (BufferedReader bf = new BufferedReader(new FileReader(PATH_VOTI))) {
|
try (BufferedReader bf = new BufferedReader(new FileReader(PATH_VOTI))) {
|
||||||
@@ -81,7 +200,8 @@ public class GradeAnalyzer {
|
|||||||
riga = bf.readLine();
|
riga = bf.readLine();
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
GlobalGUI.showErrorMessage("Errore nella lettura del file: " + e.getMessage());
|
System.out.println("Errore nella lettura del file: " + e.getMessage());
|
||||||
|
pausa();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -89,8 +209,45 @@ public class GradeAnalyzer {
|
|||||||
return valutazioni;
|
return valutazioni;
|
||||||
}
|
}
|
||||||
|
|
||||||
static String salva(ArrayList<Valutazione> valutazioni, String path) {
|
static int exists(String nome, String cognome, ArrayList<Valutazione> valutazioni) {
|
||||||
String messaggio = null;
|
boolean exit = false;
|
||||||
|
int posizione = -1;
|
||||||
|
for (int i = 0; i < valutazioni.size() && !exit; i++) {
|
||||||
|
if (nome.equalsIgnoreCase(valutazioni.get(i).getNome())
|
||||||
|
&& cognome.equalsIgnoreCase(valutazioni.get(i).getCognome())) {
|
||||||
|
posizione = i;
|
||||||
|
exit = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return posizione;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void salvaValutazioni() {
|
||||||
|
boolean exit;
|
||||||
|
String scelta;
|
||||||
|
do {
|
||||||
|
exit = true;
|
||||||
|
System.out.print("Salvare i dati [S/N]? ");
|
||||||
|
scelta = sc.nextLine().trim().toLowerCase();
|
||||||
|
|
||||||
|
switch (scelta) {
|
||||||
|
case "s":
|
||||||
|
salva(valutazioni, PATH_VOTI);
|
||||||
|
valutazioni = valutazioniDaFile();
|
||||||
|
isSaved = true;
|
||||||
|
break;
|
||||||
|
case "n":
|
||||||
|
System.out.println("I dati non sono stati salvati.");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.println(ERRORE_GENERICO);
|
||||||
|
pausa();
|
||||||
|
exit = false;
|
||||||
|
}
|
||||||
|
} while (!exit);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void salva(ArrayList<Valutazione> valutazioni, String path) {
|
||||||
try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) {
|
try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for (Valutazione valutazione : valutazioni) {
|
for (Valutazione valutazione : valutazioni) {
|
||||||
@@ -103,11 +260,66 @@ public class GradeAnalyzer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bw.write(sb.toString());
|
bw.write(sb.toString());
|
||||||
messaggio = "Dati salvati correttamente.";
|
System.out.println("Dati salvati correttamente.");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
messaggio = "Errore nella scrittura del file: " + e.getMessage();
|
System.out.println("Errore nella scrittura del file: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void trovaMigliorePeggiore() {
|
||||||
|
ArrayList<Valutazione> copiaValutazioni = new ArrayList<>();
|
||||||
|
for (Valutazione valutazione : valutazioni) {
|
||||||
|
copiaValutazioni.add(valutazione);
|
||||||
|
}
|
||||||
|
String[] nomi = new String[valutazioni.size()];
|
||||||
|
String[] cognomi = new String[valutazioni.size()];
|
||||||
|
double[] voti = new double[valutazioni.size()];
|
||||||
|
String stringaFormattazione = "%-20s%-20s%-20s";
|
||||||
|
|
||||||
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
return messaggio;
|
System.out.println("Voto migliore:");
|
||||||
|
System.out.println(Double.toString(voti[voti.length -1]));
|
||||||
|
System.out.println("\nVoto peggiore:");
|
||||||
|
System.out.println(Double.toString(voti[0]));
|
||||||
|
|
||||||
|
System.out.println("\nTutte le valutazioni, in ordine crescente:\n");
|
||||||
|
System.out.println(String.format(stringaFormattazione, "Nome", "Cognome", "Voto"));
|
||||||
|
for (int i = 0; i < nomi.length; i++) {
|
||||||
|
System.out.println(String.format(stringaFormattazione, nomi[i], cognomi[i], Double.toString(voti[i])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void promossi() {
|
||||||
|
final int MINIMO_PROMOZIONE = 6;
|
||||||
|
String stringaFormattazione = "%-20s%-20s%-20s";
|
||||||
|
ArrayList<Valutazione> promossi = new ArrayList<>();
|
||||||
|
ArrayList<Valutazione> copiaValutazioni = new ArrayList<>();
|
||||||
|
for (Valutazione valutazione : valutazioni) {
|
||||||
|
copiaValutazioni.add(valutazione);
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.sort(copiaValutazioni);
|
||||||
|
|
||||||
|
for (Valutazione valutazione : copiaValutazioni) {
|
||||||
|
if (valutazione.getVoto() >= MINIMO_PROMOZIONE) {
|
||||||
|
promossi.add(valutazione);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("\nTutte le valutazioni dei promossi, in ordine crescente:\n");
|
||||||
|
System.out.println(String.format(stringaFormattazione, "Nome", "Cognome", "Voto"));
|
||||||
|
for (int i = 0; i < promossi.size(); i++) {
|
||||||
|
System.out.println(String.format(stringaFormattazione, promossi.get(i).getNome(),
|
||||||
|
promossi.get(i).getCognome(), Double.toString(promossi.get(i).getVoto())));
|
||||||
|
}
|
||||||
|
|
||||||
|
salva(promossi, PATH_PROMOSSI);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
Mario;Rossi;7.0
|
Mario;Rossi;7
|
||||||
Anna;Bianchi;5.0
|
Anna;Bianchi;5
|
||||||
Luca;Verdi;6.0
|
Luca;Verdi;6
|
||||||
|
Mia;Chan;9
|
||||||
Reference in New Issue
Block a user