Opzione 3 + gestione dati non ancora creati

This commit is contained in:
La Programmatrice Verde
2025-12-02 21:45:27 +01:00
parent 7c6fcc0789
commit 9719ac92fb
2 changed files with 109 additions and 37 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
data/

View File

@@ -6,6 +6,7 @@ package gradeanalyzer;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
@@ -30,6 +31,7 @@ public class GradeAnalyzer {
static final String ERRORE_GENERICO = "Opzione non valida."; static final String ERRORE_GENERICO = "Opzione non valida.";
static ArrayList<Valutazione> valutazioni = valutazioniDaFile(); static ArrayList<Valutazione> valutazioni = valutazioniDaFile();
static boolean isSaved = true; static boolean isSaved = true;
static boolean isEmpty = true;
public static void main(String[] args) { public static void main(String[] args) {
int scelta = -1; int scelta = -1;
@@ -51,20 +53,38 @@ public class GradeAnalyzer {
break; break;
case 1: case 1:
isSaved = false; isSaved = false;
isEmpty = false;
inserisciDati(); inserisciDati();
System.out.println("Studente aggiunto correttamente."); System.out.println("Studente aggiunto correttamente.");
pausa(); pausa();
break; break;
case 2: case 2:
if (isEmpty) {
System.out.println(
"Errore: inserire almeno la valutazione di uno studente prima di proseguire.");
} else {
if (!isSaved) { if (!isSaved) {
System.out.println("Attenzione: ci sono dati non salvati."); System.out.println("Attenzione: ci sono dati non salvati.");
salva(); salvaValutazioni();
} }
trovaMigliorePeggiore(); trovaMigliorePeggiore();
}
pausa(); pausa();
break; break;
case 3: 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(); pausa();
break; break;
default: default:
@@ -124,7 +144,7 @@ public class GradeAnalyzer {
valutazioni.add(new Valutazione(nome, cognome, voto)); valutazioni.add(new Valutazione(nome, cognome, voto));
} }
salva(); salvaValutazioni();
} }
static double voto() { static double voto() {
@@ -152,11 +172,28 @@ public class GradeAnalyzer {
static ArrayList<Valutazione> valutazioniDaFile() { static ArrayList<Valutazione> valutazioniDaFile() {
ArrayList<Valutazione> valutazioni = new ArrayList<>(); ArrayList<Valutazione> valutazioni = new ArrayList<>();
File voti = new File(PATH_VOTI);
if (!voti.exists()) {
if (!voti.getParentFile().exists()) {
voti.getParentFile().mkdir();
}
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.");
} catch (IOException e) {
System.out.println("Errore nella scrittura del file: " + e.getMessage());
pausa();
}
} else {
try (BufferedReader bf = new BufferedReader(new FileReader(PATH_VOTI))) { try (BufferedReader bf = new BufferedReader(new FileReader(PATH_VOTI))) {
String riga = bf.readLine(); String riga = bf.readLine();
String[] valoriValutazione; String[] valoriValutazione;
while (riga != null) { while (riga != null) {
isEmpty = false;
valoriValutazione = riga.split(";"); valoriValutazione = riga.split(";");
valutazioni.add(new Valutazione(valoriValutazione[0], valoriValutazione[1], valutazioni.add(new Valutazione(valoriValutazione[0], valoriValutazione[1],
Double.parseDouble(valoriValutazione[2]))); Double.parseDouble(valoriValutazione[2])));
@@ -167,6 +204,8 @@ public class GradeAnalyzer {
pausa(); pausa();
} }
}
return valutazioni; return valutazioni;
} }
@@ -174,7 +213,8 @@ public class GradeAnalyzer {
boolean exit = false; boolean exit = false;
int posizione = -1; int posizione = -1;
for (int i = 0; i < valutazioni.size() && !exit; i++) { for (int i = 0; i < valutazioni.size() && !exit; i++) {
if (nome.equalsIgnoreCase(valutazioni.get(i).getNome()) && cognome.equalsIgnoreCase(valutazioni.get(i).getCognome())) { if (nome.equalsIgnoreCase(valutazioni.get(i).getNome())
&& cognome.equalsIgnoreCase(valutazioni.get(i).getCognome())) {
posizione = i; posizione = i;
exit = true; exit = true;
} }
@@ -182,7 +222,7 @@ public class GradeAnalyzer {
return posizione; return posizione;
} }
static void salva() { static void salvaValutazioni() {
boolean exit; boolean exit;
String scelta; String scelta;
do { do {
@@ -192,7 +232,23 @@ public class GradeAnalyzer {
switch (scelta) { switch (scelta) {
case "s": case "s":
try (BufferedWriter bw = new BufferedWriter(new FileWriter(PATH_VOTI))) { 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(); StringBuilder sb = new StringBuilder();
for (Valutazione valutazione : valutazioni) { for (Valutazione valutazione : valutazioni) {
sb.append(valutazione.getNome()); sb.append(valutazione.getNome());
@@ -205,21 +261,9 @@ public class GradeAnalyzer {
bw.write(sb.toString()); bw.write(sb.toString());
System.out.println("Dati salvati correttamente."); System.out.println("Dati salvati correttamente.");
valutazioni = valutazioniDaFile();
isSaved = true;
} catch (IOException e) { } catch (IOException e) {
System.out.println("Errore nella scrittura del file: " + e.getMessage()); System.out.println("Errore nella scrittura del file: " + e.getMessage());
} }
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 trovaMigliorePeggiore() { static void trovaMigliorePeggiore() {
@@ -251,4 +295,31 @@ public class GradeAnalyzer {
System.out.println(String.format(stringaFormattazione, nomi[i], cognomi[i], Double.toString(voti[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);
}
} }