Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5706c59760 | ||
|
|
0223bc19c6 | ||
|
|
5b9031263a | ||
|
|
32296cfa50 | ||
|
|
4183ac2e5c | ||
|
|
4539d48a81 | ||
|
|
a5695e7b06 | ||
|
|
19633da71a | ||
|
|
fbd17ef76b | ||
|
|
ae631cda22 | ||
|
|
f72549f93a | ||
|
|
283674f206 | ||
|
|
587cca2acb | ||
|
|
268d98af79 | ||
|
|
68c7a526b3 | ||
|
|
19c50136b6 | ||
|
|
5f0630eca1 | ||
|
|
9dae96b911 |
0
build/classes/.netbeans_automatic_build
Normal file
0
build/classes/.netbeans_automatic_build
Normal file
0
build/classes/.netbeans_update_resources
Normal file
0
build/classes/.netbeans_update_resources
Normal file
BIN
build/classes/gradeanalyzer/FinestraInserisciAlunno.class
Normal file
BIN
build/classes/gradeanalyzer/FinestraInserisciAlunno.class
Normal file
Binary file not shown.
BIN
build/classes/gradeanalyzer/FinestraPrincipale.class
Normal file
BIN
build/classes/gradeanalyzer/FinestraPrincipale.class
Normal file
Binary file not shown.
BIN
build/classes/gradeanalyzer/FinestraPromossi.class
Normal file
BIN
build/classes/gradeanalyzer/FinestraPromossi.class
Normal file
Binary file not shown.
BIN
build/classes/gradeanalyzer/FinestraTrovaAltoBasso.class
Normal file
BIN
build/classes/gradeanalyzer/FinestraTrovaAltoBasso.class
Normal file
Binary file not shown.
BIN
build/classes/gradeanalyzer/GlobalGUI.class
Normal file
BIN
build/classes/gradeanalyzer/GlobalGUI.class
Normal file
Binary file not shown.
BIN
build/classes/gradeanalyzer/GradeAnalyzer.class
Normal file
BIN
build/classes/gradeanalyzer/GradeAnalyzer.class
Normal file
Binary file not shown.
BIN
build/classes/gradeanalyzer/Valutazione.class
Normal file
BIN
build/classes/gradeanalyzer/Valutazione.class
Normal file
Binary file not shown.
BIN
lib/lanterna-3.1.3.jar
Normal file
BIN
lib/lanterna-3.1.3.jar
Normal file
Binary file not shown.
@@ -1,3 +1,3 @@
|
||||
compile.on.save=true
|
||||
user.properties.file=/home/Verde/.netbeans/27/build.properties
|
||||
user.properties.file=/home/Verde/.netbeans/28/build.properties
|
||||
|
||||
|
||||
8
nbproject/private/private.xml
Normal file
8
nbproject/private/private.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?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,9 +33,11 @@ dist.javadoc.dir=${dist.dir}/javadoc
|
||||
dist.jlink.dir=${dist.dir}/jlink
|
||||
dist.jlink.output=${dist.jlink.dir}/GradeAnalyzer
|
||||
excludes=
|
||||
file.reference.lanterna-3.1.3.jar=/home/Verde/git/lanterna-3.1.3.jar
|
||||
includes=**
|
||||
jar.compress=false
|
||||
javac.classpath=
|
||||
javac.classpath=\
|
||||
${file.reference.lanterna-3.1.3.jar}
|
||||
# Space-separated list of extra javac options
|
||||
javac.compilerargs=
|
||||
javac.deprecation=false
|
||||
|
||||
157
src/gradeanalyzer/FinestraInserisciAlunno.java
Normal file
157
src/gradeanalyzer/FinestraInserisciAlunno.java
Normal file
@@ -0,0 +1,157 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
49
src/gradeanalyzer/FinestraPrincipale.java
Normal file
49
src/gradeanalyzer/FinestraPrincipale.java
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
76
src/gradeanalyzer/FinestraPromossi.java
Normal file
76
src/gradeanalyzer/FinestraPromossi.java
Normal file
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
87
src/gradeanalyzer/FinestraTrovaAltoBasso.java
Normal file
87
src/gradeanalyzer/FinestraTrovaAltoBasso.java
Normal file
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
59
src/gradeanalyzer/GlobalGUI.java
Normal file
59
src/gradeanalyzer/GlobalGUI.java
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* 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,10 +11,14 @@ import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.InputMismatchException;
|
||||
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
|
||||
@@ -34,140 +38,18 @@ public class GradeAnalyzer {
|
||||
static ArrayList<Valutazione> valutazioni = valutazioniDaFile();
|
||||
|
||||
public static void main(String[] args) {
|
||||
int scelta = -1;
|
||||
try (Screen schermo = new TerminalScreen(new DefaultTerminalFactory().createTerminal())) {
|
||||
schermo.startScreen(); // crea terminale, inserisci CRT e dai corrente
|
||||
final WindowBasedTextGUI gui = new MultiWindowTextGUI(schermo); // crea interfaccia con le finestre
|
||||
GlobalGUI.setGui(gui);
|
||||
|
||||
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: ");
|
||||
gui.addWindowAndWait(new FinestraPrincipale());
|
||||
|
||||
try {
|
||||
scelta = sc.nextInt();
|
||||
sc.nextLine();
|
||||
|
||||
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();
|
||||
} catch (IOException e) {
|
||||
System.out.println("Qualcosa è andato storto nella creazione dell'interfaccia.");
|
||||
System.out.println(e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
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() {
|
||||
@@ -181,11 +63,10 @@ public class GradeAnalyzer {
|
||||
}
|
||||
try (BufferedWriter bw = new BufferedWriter(new FileWriter(PATH_VOTI))) {
|
||||
bw.write("");
|
||||
System.out.println("Nuovo file creato.");
|
||||
System.out.println("Aggiungere le valutazioni prima di proseguire.");
|
||||
GlobalGUI.showNoteMessage("Nuovo file creato.");
|
||||
GlobalGUI.showNoteMessage("Aggiungere le valutazioni prima di proseguire.");
|
||||
} catch (IOException e) {
|
||||
System.out.println("Errore nella scrittura del file: " + e.getMessage());
|
||||
pausa();
|
||||
GlobalGUI.showErrorMessage("Errore nella scrittura del file: " + e.getMessage());
|
||||
}
|
||||
} else {
|
||||
try (BufferedReader bf = new BufferedReader(new FileReader(PATH_VOTI))) {
|
||||
@@ -200,8 +81,7 @@ public class GradeAnalyzer {
|
||||
riga = bf.readLine();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
System.out.println("Errore nella lettura del file: " + e.getMessage());
|
||||
pausa();
|
||||
GlobalGUI.showErrorMessage("Errore nella lettura del file: " + e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -209,45 +89,8 @@ public class GradeAnalyzer {
|
||||
return valutazioni;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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) {
|
||||
static String salva(ArrayList<Valutazione> valutazioni, String path) {
|
||||
String messaggio = null;
|
||||
try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (Valutazione valutazione : valutazioni) {
|
||||
@@ -260,66 +103,11 @@ public class GradeAnalyzer {
|
||||
}
|
||||
|
||||
bw.write(sb.toString());
|
||||
System.out.println("Dati salvati correttamente.");
|
||||
messaggio = "Dati salvati correttamente.";
|
||||
} catch (IOException e) {
|
||||
System.out.println("Errore nella scrittura del file: " + e.getMessage());
|
||||
}
|
||||
messaggio = "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();
|
||||
}
|
||||
|
||||
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);
|
||||
return messaggio;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
Mario;Rossi;7
|
||||
Anna;Bianchi;5
|
||||
Luca;Verdi;6
|
||||
Mia;Chan;9
|
||||
Mario;Rossi;7.0
|
||||
Anna;Bianchi;5.0
|
||||
Luca;Verdi;6.0
|
||||
|
||||
Reference in New Issue
Block a user