Compare commits

18 Commits
main ... GUI

Author SHA1 Message Date
La Programmatrice Verde
5706c59760 Fix per NetBeans 2025-12-04 12:03:22 +01:00
La Programmatrice Verde
0223bc19c6 Pulizia delle cose inutili 2025-12-04 11:58:46 +01:00
La Programmatrice Verde
5b9031263a Ripristino file voti originale 2025-12-04 11:47:01 +01:00
La Programmatrice Verde
32296cfa50 FinestraPromossi 2025-12-04 11:46:34 +01:00
La Programmatrice Verde
4183ac2e5c Rimossi import inutili 2025-12-04 11:34:20 +01:00
La Programmatrice Verde
4539d48a81 Nuova classe creata: FinestraPromossi 2025-12-04 11:33:49 +01:00
La Programmatrice Verde
a5695e7b06 FinestraTrovaAltoBasso 2025-12-04 11:31:13 +01:00
La Programmatrice Verde
19633da71a Nuova classe creata: FinestraTrovaAltoBasso 2025-12-04 09:32:10 +01:00
La Programmatrice Verde
fbd17ef76b Rimosso styling a caso che non so a cosa servisse 2025-12-04 09:30:56 +01:00
La Programmatrice Verde
ae631cda22 transizione GUI valutazioniDaFile + migliorie 2025-12-04 00:03:41 +01:00
La Programmatrice Verde
f72549f93a GlobalGUI + FinestraInserisciAlunno 2025-12-03 23:56:28 +01:00
La Programmatrice Verde
283674f206 Nuova classe creata: RecoloredTheme 2025-12-03 22:47:39 +01:00
La Programmatrice Verde
587cca2acb Nuova classe creata: GlobalGUI 2025-12-03 21:59:41 +01:00
La Programmatrice Verde
268d98af79 Sperimentale: contenuto FinestraPrincipale 2025-12-03 21:50:24 +01:00
La Programmatrice Verde
68c7a526b3 Nuova classe creata: FinestraInserisciAlunno 2025-12-03 21:49:35 +01:00
La Programmatrice Verde
19c50136b6 Finestra principale funzionante 2025-12-03 21:42:16 +01:00
La Programmatrice Verde
5f0630eca1 Nuova classe creata: FinestraPrincipale 2025-12-03 21:36:46 +01:00
La Programmatrice Verde
9dae96b911 Prova finestra principale 2025-12-03 21:35:11 +01:00
20 changed files with 467 additions and 242 deletions

View File

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
lib/lanterna-3.1.3.jar Normal file

Binary file not shown.

View File

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

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

View File

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

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

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

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

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

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

View File

@@ -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();
}
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));
} catch (IOException e) {
System.out.println("Qualcosa è andato storto nella creazione dell'interfaccia.");
System.out.println(e.getMessage());
e.printStackTrace();
}
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());
}
}
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();
messaggio = "Errore nella scrittura del file: " + e.getMessage();
}
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;
}
}

View File

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