Fondamenti di Informatica I
Corso di Laurea in Ingegneria Informatica
Canale G-O, A.A. 2002/03

Esercizio per la prova al calcolatore

Si vuole realizzare un programma per la gestione di un parcheggio formato da una collezione di posti auto. Per ciascun posto auto del parcheggio sono memorizzate le seguenti informazioni:

Parte 1. Scrivere una classe PostoAuto per la gestione di un posto auto che implementi i seguenti metodi:

Programma di esempio: ProvaPostoAuto.java

public class ProvaPostoAuto {
  public static void main (String[] args) {
    PostoAuto pa = new PostoAuto();
    System.out.println(pa);
    pa.arrivaAuto("BJ300GH",12);
    System.out.println("Libero: " + pa.libero() +
                       ", auto: " + pa.getAuto() +
                       ", ora arrivo: " + pa.getOra());
    System.out.println(pa);
    pa.parteAuto();
    System.out.println(pa);
  }
}

Parte 2. Scrivere una classe UsaPostoAuto che contiene una serie di metodi statici pubblici che sono clienti di PostoAuto. In particolare essa contiene i seguenti metodi:

  1. static int primoPostoLibero(PostoAuto[] p) : che dato un parcheggio p rappresentato semplicemente come un array di posti auto, restituisca l'indice del primo posto libero in p;
  2. static int contaPostiLiberi(PostoAuto[] p) : che dato un parcheggio p rappresentato semplicemente come un array di posti auto, restituisca il numero di posti liberi in p;
  3. static int[] qualiPostiLiberi(PostoAuto[] p) : che dato un parcheggio p rappresentato semplicemente come un array di posti auto, restituisca un array di interi contenente gli indici di tutti i posti liberi di p;
  4. static void entraAuto(PostoAuto[] p, String a, int ora) : che dato un parcheggio p rappresentato semplicemente come un array di posti auto, modifichi tale array introducendo l'auto a (rappresentata dalla targa) nel primo posto libero disponibile di p, assegnando ora come ora d'arrivo; se non sono presenti posti liberi lasci p immutato
  5. static void esceAuto(PostoAuto[] p, String a) : che dato un parcheggio p rappresentato semplicemente come un array di posti auto, modifichi tale array rendendo libero il posto auto dove è parcheggiata l'auto a (rappresentata dalla targa); se l'auto a non è presente lasci p immutato;
  6. static int autoPresenteDaPiuTempo(PostoAuto[] p) : che dato un parcheggio p rappresentato semplicemente come un array di posti auto, restituisca l'indice del posto auto dove è parcheggiata l'auto parcheggiata da più tempo; se sono presenti più auto che soddisfano la condizione restituisca l'indice di una qualsiasi; se non sono presenti auto restituisca -1;
  7. static String[] tutteLeAutoPresenti(PostoAuto[] p) : che dato un parcheggio p rappresentato semplicemente come un array di posti auto, restituisca un array di stringhe che rappresentano le targhe di tutte le auto presenti in p;
  8. static PostoAuto[] leggiParcheggioDaFile(String nomefile) : che dato il nome di un file che contiene record postiauto costruisca un array di PostiAuto che rappresenta il parcheggio avente esattamente i posti auto memorizzati sul file, ognuno con il proprio stato; i record postiauto hanno la seguente forma:
    libero
    targa auto
    ora
    
    dove Suggerimento: si introduca un metodo ausiliario per la lettura di un singolo record;
  9. static void scriviParcheggioSuFile(PostoAuto[] p, String nomefile) : dato un parcheggio p rappresentato semplicemente come un array di posti auto e il nome di un file, scriva su detto file i record postiauto (vedi sopra) corrispondenti al intero parcheggio.

Parte 3. Realizzare una classe Parcheggio per rappresentare parcheggi, i cui oggetti supportano le stesse funzionalità di UsaPostoAuto.