/** * la classe gestisce un archivio che contiene informazioni su studenti * @author Adriano Luchetta * @version 03-Nov-2005 * @version 12-Nov-2004 */ import java.io.FileReader; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Scanner; import java.util.NoSuchElementException; public class ArchivioStudenti { // parte privata private static final char CHAR_COMMENTO = '*'; private Studente[] studente; private int studenteSize; // parte pubblica /** costruttore: inizializza un archivio vuoto. */ public ArchivioStudenti() { studente = new Studente[1]; studenteSize = 0; } /** costruttore: inizializza un archivio, inserendo i dati letti dal file filename @param filename nome del file da cui acquisire dati @throws FileNotFoundException se il file filename non esiste @throws IOException */ public ArchivioStudenti(String filename) throws FileNotFoundException, IOException { // invocazione costruttore precedente this(); // apertura file di input Scanner reader = new Scanner(new FileReader(filename)); // lettura dati da file di input int count = 0; while (reader.hasNextLine()) { count++; String line = reader.nextLine(); /* passa alla riga successiva, se la riga e' vuota, oppure il primo carattere della riga identifica un commento */ if (line.length() == 0 || line.charAt(0) == CHAR_COMMENTO) continue; Scanner st = new Scanner(line); st.useDelimiter("[/]+"); String nome; String matr; try { nome = st.next(); matr = st.next(); // istanza di un oggetto di classe Studente Studente stud = new Studente(nome, matr); while (st.hasNext()) { Scanner st2 = new Scanner(st.next()); Esame esame = new Esame(st2.next(), st2.nextInt()); stud.aggiungiEsame(esame); } aggiungi(stud); } catch(NoSuchElementException e) { // se nome o matricola sono errati, // i dati non vengono inseriti in archivio System.out.println("riga " + count + " errata: " + line); continue; } } reader.close(); } /** aggiunge all'archivio uno studente @param unoStudente lo studente da aggiungere */ public void aggiungi(Studente unoStudente) { // stampa per debugging //System.out.println("aggiungo: " + unoStudente); // ridimensionamento dinamico dell'array if (studenteSize >= studente.length) { Studente[] newStudente = new Studente[2 * studente.length]; for (int i = 0; i < studente.length; i++) newStudente[i] = studente[i]; studente = newStudente; } // inserimento nuovo studente studente[studenteSize] = unoStudente; studenteSize++; } /** verifica se l'archivio e' vuoto @return true se l'archivio e' vuoto, false altrimenti */ public boolean isEmpty() { return studenteSize == 0; } /** rimuove il primo elemento dell'archivio. Il metodo non altera l'ordine degli oggetti dell'array. @return l'elemento rimosso @throws NoSuchElementException se il metodo viene invocato quando l'archivio e' vuoto */ public Studente rimuovi() throws NoSuchElementException { // verifica se l'archivio e' vuoto if (isEmpty()) throw new NoSuchElementException(); // stampa per debugging //System.out.println("rimuovo: " + studente[0]); // memorizzzione temporanea Studente tmpStud = studente[0]; // spostamento dati for (int i = 0; i < studenteSize - 1; i++) studente[i] = studente[i + 1]; // decremento numero di elementi studenteSize--; return tmpStud; } /** restituisce una stringa che contiene i dati degli studenti memorizzati nell'archivio. @return i dati contenuti nell'archivio */ public String toString() { String str = ""; for (int i = 0; i < studenteSize; i++) str = str + studente[i]; return str; } }