Traccia esercizio:
Una libreria ha deciso di informatizzare il proprio archivio delle giacenze. Si è creato un file
in cui, per ogni libro disponibile in magazzino, sono stati inseriti i seguenti elementi:
- titolo del libro;
- autore;
- editore;
- numero di copie disponibili.
La libreria ha la necessità di effettuare le seguenti operazioni:
- cercare tutti i libri di un particolare autore;
- cercare tutti i libri che contengono una determinata stringa nel titolo;
- cercare i libri che hanno il numero di copie massimo;
- listare tutti i libri per cui il numero di copie disponibili è al di sotto di una determinata
soglia.
- aggiornare il numero di copie di un libro. Il libro da aggiornare è identificato dal titolo.
Loperazione di aggiornamento deve essere propagata al file.
Creare inoltre una classe main per testare le classi ed i metodi definiti. In particolare occorre
leggere da un file contenente i dati dei 5 libri mostrati di seguito;
visualizzare i libri scritti da Camilleri;
visualizzare i libri che hanno la parola sogni nel titolo;
visualizzare il libro con il numero massimo di copie;
visualizzare i libri che hanno meno di 15 copie disponibili;
aggiungere 30 copie al libro sogni rossi.
Una voce di notte
Camilleri Andrea
Sellerio Editore Palermo
44
Cinquanta sfumature di grigio
James E. L.
Mondadori
21
Il corpo umano
Giordano Paolo
Mondadori
33
Sogni rossi
Mo Yan
Einaudi
11
Fai bei sogni
Gramellini Massimo
Longanesi
14
Ho pensato di risolvere questo esercizio dividendo il problema in 3 classi, qui sotto riportate:
Classe Libro che poteva anche essere una classe interna a Libreria
Allego anche il file se vi annoiate di copiare
Classe Libreria la più robusta dell'esercizio
ed infine la classe per testare il programma chiamata index
Una libreria ha deciso di informatizzare il proprio archivio delle giacenze. Si è creato un file
in cui, per ogni libro disponibile in magazzino, sono stati inseriti i seguenti elementi:
- titolo del libro;
- autore;
- editore;
- numero di copie disponibili.
La libreria ha la necessità di effettuare le seguenti operazioni:
- cercare tutti i libri di un particolare autore;
- cercare tutti i libri che contengono una determinata stringa nel titolo;
- cercare i libri che hanno il numero di copie massimo;
- listare tutti i libri per cui il numero di copie disponibili è al di sotto di una determinata
soglia.
- aggiornare il numero di copie di un libro. Il libro da aggiornare è identificato dal titolo.
Loperazione di aggiornamento deve essere propagata al file.
Creare inoltre una classe main per testare le classi ed i metodi definiti. In particolare occorre
leggere da un file contenente i dati dei 5 libri mostrati di seguito;
visualizzare i libri scritti da Camilleri;
visualizzare i libri che hanno la parola sogni nel titolo;
visualizzare il libro con il numero massimo di copie;
visualizzare i libri che hanno meno di 15 copie disponibili;
aggiungere 30 copie al libro sogni rossi.
Una voce di notte
Camilleri Andrea
Sellerio Editore Palermo
44
Cinquanta sfumature di grigio
James E. L.
Mondadori
21
Il corpo umano
Giordano Paolo
Mondadori
33
Sogni rossi
Mo Yan
Einaudi
11
Fai bei sogni
Gramellini Massimo
Longanesi
14
Ho pensato di risolvere questo esercizio dividendo il problema in 3 classi, qui sotto riportate:
Classe Libro che poteva anche essere una classe interna a Libreria
Allego anche il file se vi annoiate di copiare

PHP Code:
public class Libro {
public Libro(){}
public Libro(String titolo,String autore,String editore,int numCopie){
this.titolo = titolo;
this.autore = autore;
this.editore = editore;
numeroCopie = numCopie;
}
public void showLibro(){
System.out.println(titolo+", "+autore+", "+editore+", "+numeroCopie);
}
public String titolo;
public String autore;
public String editore;
public int numeroCopie;
}
Classe Libreria la più robusta dell'esercizio
PHP Code:
import java.io.File;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Scanner;
public class Libreria {
public Libreria(File x) throws Exception{
libri = x;
}
public void ShowLibri() throws Exception{
in = new Scanner(libri);
Libro l = new Libro();
while(in.hasNext() == true){
l.titolo = in.nextLine();
l.autore = in.nextLine();
l.editore = in.nextLine();
String x = in.nextLine();
l.numeroCopie = Integer.parseInt(x);
l.showLibro();
}
}
public void ShowLibriAutore(String Autore)throws Exception{
in = new Scanner(libri);
Libro l = new Libro();
while(in.hasNext() == true){
l.titolo = in.nextLine();
l.autore = in.nextLine();
l.editore = in.nextLine();
String x = in.nextLine();
l.numeroCopie = Integer.parseInt(x);
String[] k = l.autore.split(" ");
for(int i=0;i < k.length;i++){
if(k[i].compareToIgnoreCase(Autore) == 0)
l.showLibro();
}
}
}
public void ShowLibriTitolo(String Titolo) throws Exception{
in = new Scanner(libri);
Libro l = new Libro();
while(in.hasNext() == true){
l.titolo = in.nextLine();
l.autore = in.nextLine();
l.editore = in.nextLine();
String x = in.nextLine();
l.numeroCopie = Integer.parseInt(x);
String[] k = l.titolo.split(" ");
for(int i=0;i < k.length;i++){
if(k[i].compareToIgnoreCase(Titolo) == 0)
l.showLibro();
}
}
}
public void ShowLibriMaxCopie() throws Exception{
in = new Scanner(libri);
Libro max,l;
max = new Libro(in.nextLine(),in.nextLine(),in.nextLine(),Integer.parseInt(in.nextLine()));
while(in.hasNext() == true){
l = new Libro(in.nextLine(),in.nextLine(),in.nextLine(),Integer.parseInt(in.nextLine()));
if(max.numeroCopie < l.numeroCopie){
max = l;
}
}
max.showLibro();
}
public void ShowLibriConPocheCopie(int copie) throws Exception{
in = new Scanner(libri);
Libro x;
while(in.hasNext() == true){
x = new Libro(in.nextLine(),in.nextLine(),in.nextLine(),Integer.parseInt(in.nextLine()));
if(x.numeroCopie < copie){
x.showLibro();
}
}
}
public void AggiungiCopieLibro(String titolo,int NuoveCopie) throws Exception{
ArrayList<Libro> libri = new ArrayList<Libro>();
//carica ArrayList
in = new Scanner(this.libri);
while(in.hasNext() == true){
libri.add(new Libro(in.nextLine(),in.nextLine(),in.nextLine(),Integer.parseInt(in.nextLine())));
}
//Scorri ArrayList e aggiungi nuove copie
for(int i=0;i<libri.size();i++){
if(libri.get(i).titolo.compareToIgnoreCase(titolo) == 0){
libri.get(i).numeroCopie += NuoveCopie;
}
}
//stampa ArrayList nel file
PrintStream x = new PrintStream(this.libri);
for(int i=0;i<libri.size();i++){
x.println(libri.get(i).titolo);
x.println(libri.get(i).autore);
x.println(libri.get(i).editore);
x.println(libri.get(i).numeroCopie);
}
}
private File libri;
private Scanner in;
}
PHP Code:
import java.io.File;
public class index {
public static void main(String[] args) throws Exception{
File libri = new File("libreria.txt");
Libreria l = new Libreria(libri);
System.out.println("Visualizza tutti i libri");
l.ShowLibri();
System.out.println("\n\nVisualizza libri per autore: Camilleri");
l.ShowLibriAutore("Camilleri");
System.out.println("\n\nVisualizza libri per titolo: sogni");
l.ShowLibriTitolo("sogni");
System.out.println("\n\nVisualizza libro con più numero di copie disponibile:");
l.ShowLibriMaxCopie();
System.out.println("\n\nLibri con meno di 15 copie");
l.ShowLibriConPocheCopie(15);
System.out.println("\n\nAggiungere 30 libri al libro sogni rossi");
l.AggiungiCopieLibro("Sogni rossi",30);
l.ShowLibri();
}
}

Comment