Fondamenti di Informatica
Corso di Laurea in Ingegneria Informatica e Ingegneria Automatica

Prova al calcolatore 9 Dicembre 2003


Si vuole realizzare un programma per la gestione di una biblioteca. Per ogni libro nella biblioteca e' necessario mantenere le seguenti informazioni: autore, titolo, prezzo, numero di copie disponibili.

Parte 1.

Scrivere una classe Libro per rappresentare le informazioni relative ad un libro con la seguente interfaccia:
- Libro(String autore, String titolo, float prezzo) : costruttore con tre argomenti: autore, titolo e prezzo; il costruttore inizializza la disponibilità a 0;
- String getAutore( ) : restituisce l'autore del libro; 
- String getTitolo( ) : restituisce il titolo del libro; 
- float getPrezzo( ) : restituisce il prezzo del libro;
- int getDisp( ) : restituisce la disponibilità del libro;
- void setDisp(boolean prestito, int n) : se prestito è true decrementa la disponibilità di n, altrimenti incrementa la disponibilità di n;
- boolean isDisp(int n): restituisce true se sono disponibili almeno n copie del libro;
- boolean uguale( Libro x ) : restituisce true se il Libro su cui il metodo è invocato è uguale a x (indipendentemente dalla disponibilità), e false altrimenti;

Programma di esempio: ProvaLibro.java

public class ProvaLibro {
    public static void main (String[] args) {
        Libro a1 = new Libro("Cicerone", "Pro domo sua", 10);
           
        System.out.println("Autore "+a1.getAutore());
        System.out.println("Titolo "+a1.getTitolo());
        System.out.println("Prezzo "+a1.getPrezzo()+ " Euro");
        System.out.println("Disponibilita "+a1.getDisp());
      
        a1.setDisp(false, 6);
        System.out.println("Nuova disponibilita "+a1.getDisp());

        Libro a2 = new Libro(new String("Cicerone"), new String("Pro domo sua"), 10);
        if (a1.uguale(a2)) System.out.println("a1 e a2 sono uguali");
        else System.out.println("a1 e a2 sono diversi");
    }
}

Soluzione



Parte 2.

Si assuma che un libro che costa 10 Euro ed è disponibile in 3 copie ha un valore complessivo di 30 Euro.

Viene fornita una classe RaccoltaLibri che mette a disposizione un metodo Libro[] leggi(String) che legge da un file avente il nome passato come argomento un insieme di record rappresentanti oggetti della classe Libro, e ritorna un array di oggetti Libro opportunamente istanziato.

Programma di prova per RaccoltaLibri1

import java.io.*;
   
class ProvaRaccoltaLibri1 {
    public static void main (String[] args) throws IOException {
        Libro[] r = RaccoltaLibri.leggi("libri.dat");
        Libro investimento = RaccoltaLibri1.massimoInvestimento(r);
        System.out.println("Libro di maggior valore (in " + investimento.getDisp() + 
            " copie) e' \"" + investimento.getTitolo() + "\" di " + investimento.getAutore() + 
            " e vale complessivamente " + investimento.getPrezzo()*investimento.getDisp() + " Euro.");
    }
}

Soluzione

Programma di prova per RaccoltaLibri2

import java.io.*;
   
class ProvaRaccoltaLibri2 {
    public static void main (String[] args) throws IOException{
        Libro[] v = RaccoltaLibri.leggi("libri.dat");
        System.out.println("Numero di libri economici: " + RaccoltaLibri2.pezziEconomici(v));
    }
}

Soluzione