Compare commits

1 Commits
GUI ... main

Author SHA1 Message Date
La Programmatrice Verde
f0f37bfdf9 Correzioni 2025-12-04 11:33:14 +01:00
20 changed files with 242 additions and 467 deletions

Binary file not shown.

View File

@@ -1,3 +1,3 @@
compile.on.save=true
user.properties.file=/home/Verde/.netbeans/28/build.properties
user.properties.file=/home/Verde/.netbeans/27/build.properties

View File

@@ -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>

View File

@@ -33,11 +33,9 @@ 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=\
${file.reference.lanterna-3.1.3.jar}
javac.classpath=
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=false

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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.");
}
}
}

View File

@@ -11,14 +11,10 @@ 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
@@ -38,18 +34,140 @@ public class GradeAnalyzer {
static ArrayList<Valutazione> valutazioni = valutazioniDaFile();
public static void main(String[] args) {
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);
int scelta = -1;
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) {
System.out.println("Qualcosa è andato storto nella creazione dell'interfaccia.");
System.out.println(e.getMessage());
e.printStackTrace();
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();
}
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() {
@@ -63,10 +181,11 @@ public class GradeAnalyzer {
}
try (BufferedWriter bw = new BufferedWriter(new FileWriter(PATH_VOTI))) {
bw.write("");
GlobalGUI.showNoteMessage("Nuovo file creato.");
GlobalGUI.showNoteMessage("Aggiungere le valutazioni prima di proseguire.");
System.out.println("Nuovo file creato.");
System.out.println("Aggiungere le valutazioni prima di proseguire.");
} catch (IOException e) {
GlobalGUI.showErrorMessage("Errore nella scrittura del file: " + e.getMessage());
System.out.println("Errore nella scrittura del file: " + e.getMessage());
pausa();
}
} else {
try (BufferedReader bf = new BufferedReader(new FileReader(PATH_VOTI))) {
@@ -81,7 +200,8 @@ public class GradeAnalyzer {
riga = bf.readLine();
}
} 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;
}
static String salva(ArrayList<Valutazione> valutazioni, String path) {
String messaggio = null;
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) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) {
StringBuilder sb = new StringBuilder();
for (Valutazione valutazione : valutazioni) {
@@ -103,11 +260,66 @@ public class GradeAnalyzer {
}
bw.write(sb.toString());
messaggio = "Dati salvati correttamente.";
System.out.println("Dati salvati correttamente.");
} catch (IOException e) {
messaggio = "Errore nella scrittura del file: " + e.getMessage();
System.out.println("Errore nella scrittura del file: " + e.getMessage());
}
}
return messaggio;
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);
}
}

View File

@@ -1,3 +1,4 @@
Mario;Rossi;7.0
Anna;Bianchi;5.0
Luca;Verdi;6.0
Mario;Rossi;7
Anna;Bianchi;5
Luca;Verdi;6
Mia;Chan;9