Gestire una biblioteca con Java

Pubblicità

Exarion

Utente Attivo
Messaggi
1,187
Reazioni
12
Punteggio
47
Ciao a tutti. Devo gestire una bibblioteca in java con la gestione dei prestiti e delle restituzioni.
Avevo pensato di implementare la cosa con una lista di libri a cui assegnavo un codice. Per effettuare il prestito quindi si stampava la lista dei libri con relativo codice e poi per effettuare il prestito si digitava quest'ultimo.
A prestito compiuto il libro non deve naturalmente essere più presente all'interno della lista.
Per la restituzione il contrario, quindi un inserimento del nome e del codice del libro.

Le mie perplessità sono:


  1. Come faccio ad assegnare un codice ad un prodotto?
  2. Come faccio il reinserimento?
Nel main avevo pensato ad un menu per gestire la cosa.

Aspetto vostre dritte!! Grazie anticipatamente. :ok:
 
La cosa è abbastanza semplice. Non capisco da dove nascano le tue perplessità
Visto che dai tanto l'impressione di saperlo fare, postami un codice di esempio. Non siamo tutti esperti programmatori come te. Se dall'alto della tua "intellighenzia" non ti puoi abbassare per diffondere la tua sconfinata sapienza puoi benissimo evitare di interevenire nella discussione. Grazie. :)
 
Solitamente nei forum che si rispettino, come lo è questo, non si posta mai la pappa pronta (leggasi codice già fatto) ma al più si discute sulle basi già approntate da chi pone la domanda.

Chiedi come assegnare un ID(solitamente ISBN) ad un libro: lo si fa in fase di costruzione dell' oggetto e se occorre lo si modifica a runtime attraverso un metodo mutatore.
Come alimentare la lista dei libri presenti: manualmente attraverso un prompt, oppure da file (binari o di testo in base all' implementazione che si segue).
In entrambi i casi si tratta di operazioni banali di IO.
Per la gestione dei prestiti le vie sono diverse, come quella di una lista complementare alla principale cui inserire i libri non disponibili (o disponibili), oppure in maniera più performante, utilizzando una struttura associativa, attraverso la quale (utilizzando un flag booleano) discriminare i titoli disponibili da quelli in prestito.
Se è d' interesse memorizzare i prestiti, occorre strutturare una classe Prestito apposita, istanziandone un oggetto ad ogni prestito.
 
Tanto per cominciare, almeno per quanto riguarda i forum puoi benissimo evitare di farmi scuola a riguardo, credimi. (Non a caso ti ho chiesto un codice di esempio che è tutt'altra cosa di un programma bello che fatto dalle mie parti)
Ritornando in topic, le mie sono conoscenze ed esigenze di base. Quindi le mie intenzioni sarebbero quelle di far leggere un file di testo che contiene i nomi dei libri e gestire dei semplici cancellamenti e reinserimenti, in altre parole prestiti e restituzioni. Per quanto semplice possa essere di per sé, per me, che ho nozioni base base, saper manipolare un file di testo purtroppo non è cosa tanto facile. :)

Ho abbozzato un main ma nonostante le poche righe di codice già errore: unreachable statement

Codice:
public class Biblioteca {

    public static void main(String args[]){
        
    String nome=new String();
    String scelta=new String();

    ConsoleReader console = new ConsoleReader(System.in);

       for(;;)
        {
            System.out.println("scegli un'opzione:");
            System.out.println("A. Stampa il catalogo");
            System.out.println("B. Preleva un libro");
            System.out.println("C. Restituisci un libro");
            System.out.println("D. Esci");
         }    
       if(scelta.equals("A"))
        {
            nome=console.readLine();
        }
        
    if(scelta.equals("B"))
        {
            nome=console.readLine();
        }    
 /*   if(scelta.equals("B"))
        {
        System.out.println("Inserisci il nome del libro da prelevare");
        nome=console.readLine();
        elenco.removeElementAt();        
            }    
        
        */
    }
    
          
    }
 
L' unreachable statement indica il fatto che il compilatore rileva un loop infinito (for(;;) senza condizione di break). Inoltre l' input da tastiera non viene mai intercettato, quindi il confronto sulle stringhe è perfettamente inutile.
 
L' unreachable statement indica il fatto che il compilatore rileva un loop infinito (for(;;) senza condizione di break). Inoltre l' input da tastiera non viene mai intercettato, quindi il confronto sulle stringhe è perfettamente inutile.
Allora cosa mi consigli di fare? Per il file di testo?
 
Per l' input personalmente utilizzerei una mappa di oggetti Command. Si la gestione dei file di testo (cui puoi leggere ogni riga come una stringa) può andar bene in questo caso.
 
Per l' input personalmente utilizzerei una mappa di oggetti Command. Si la gestione dei file di testo (cui puoi leggere ogni riga come una stringa) può andar bene in questo caso.

Per quanto riguarda il file, diciamo che ho "risolto" con:
Codice:
FileWriter fw=new FileWriter("prova.txt",true);
PrintWriter p=new PrintWriter(fw);
p.println("bao");
p.close();

Il problema è leggere, per quello sono in alto mare. Non ho idea di come fargli leggere tutto e successivamente fargli fare un confronto con la stringa che gli passo per prelevare il libro.

Ho fatto la classe biblioteca:

Codice:
public class Biblioteca {

    private String pre;
    private String res;

public Biblioteca()
{
       pre=new String();
       res=new String();
}
    
public Biblioteca(String pre, String res)
{
    this.pre=pre;
    this.res=res;    
}        
    
public String getPre()
{
    return pre;
}
    
public String getRes()
{
    return res;
}

public void setPre(String pre)
{
    this.pre=pre;
}    
    
public void setRes(String Res)
{
    this.res=res;
}
Va bene o manca qualcosa? :boh:
 
Per l' input personalmente utilizzerei una mappa di oggetti Command. Si la gestione dei file di testo (cui puoi leggere ogni riga come una stringa) può andar bene in questo caso.

Per quanto riguarda il file, diciamo che ho "risolto":
Codice:
FileWriter fw=new FileWriter("prova.txt",true);
PrintWriter p=new PrintWriter(fw);
p.println("bao");
p.close();

Il problema è leggere, per quello sono in alto mare. Non ho idea di come fargli leggere tutto e successivamente fargli fare un confronto con il stringa che gli passo per prelevare il libro.

Ho fatto la classe biblioteca:

Codice:
public class Biblioteca {

    private String pre;
    private String res;

public Biblioteca()
{
    pre=new String();
    res=new String();
}
    
public Biblioteca(String pre, String res)
{
    this.pre=pre;
    this.res=res;    
}        
    
public String getPre()
{
    return pre;
}
    
public String getRes()
{
    return res;
}

public void setPre(String pre)
{
    this.pre=pre;
}    
    
public void setRes(String Res)
{
    this.res=res;
}
Va bene o manca qualcosa? :boh:
 
E' proprio la logica che non va. Proprio volendo semplificare al massimo, una biblioteca è un contenitore di libri, bene per prima cosa occorre una classe Libro(se libro è l' unico supporto da gestire altrimenti si puo attrarre con operazione di up della gerarchia). Su ogni libro si può effettuare un' operazione quindi si può pensare ad una classe Astratta o Interfaccia Operazione che sarà specializzata(implementata)dalla classe peculiare Prestito ad esempio.
 
E' proprio la logica che non va. Proprio volendo semplificare al massimo, una biblioteca è un contenitore di libri, bene per prima cosa occorre una classe Libro(se libro è l' unico supporto da gestire altrimenti si puo attrarre con operazione di up della gerarchia). Su ogni libro si può effettuare un' operazione quindi si può pensare ad una classe Astratta o Interfaccia Operazione che sarà specializzata(implementata)dalla classe peculiare Prestito ad esempio.

Capisco che c'è qualcosa che non torna ma mi sfugge quel "qualcosa". Eppure non è il primo che faccio.

Codice:
import java.io.*;
import java.util.Scanner;

public class Bibliotest {
    
public static void main(String[] args) throws IOException {

String riga;
int i=0;
String libri[] = new String[3];
    
ConsoleReader console = new ConsoleReader(System.in);
FileReader fr = new FileReader("prova.txt");                                        // Legge il contenuto del file finché non arriva a null anche se non dovrebbe stamparlo...credo
BufferedReader br = new BufferedReader(fr);    

while((riga=br.readLine()) != null )
libri[i++]=riga;
        
System.out.println("scegli un'opzione:");
System.out.println("1. Stampa il catalogo");
System.out.println("2. Preleva un libro");
System.out.println("3. Restituisci un libro");
System.out.println("4. Esci \n");
              
int scelta = console.readInt();             
              
switch (scelta)
{
    case 1: {
            for(i=0; i<libri.length; i++)
            System.out.println("Nel catalogo è presente " + libri[i]);
            break;
              }
    case 2: break;
        
    case 3: break;
            
    case 4: System.exit(0);        
}

Come puoi vedere qualche passo in avanti l'ho fatto comunque...
Adesso dovrei gestire i prestiti e le restituzioni.
Qualche consiglio per il codice che ho postato? :)
 
Capisco che c'è qualcosa che non torna ma mi sfugge quel "qualcosa". Eppure non è il primo che faccio.
Quello che ti sfugge l ' ho già spiegato. Non si tratta tanto di codifica, ma di nozioni basi di POO.
import java.io.*;
import java.util.Scanner;

public class Bibliotest {

public static void main(String[] args) throws IOException {[/CODE]
Codice:
lanciare l' eccezione su un' interfaccia user non è proprio una buona scelta. Al minimo occorre wrapparla su un messaggio user-friendly.
[quote]
String riga;
int i=0;
String libri[] = new String[3];
 
ConsoleReader console = new ConsoleReader(System.in);
FileReader fr = new FileReader("prova.txt"); // Legge il contenuto del file finché non arriva a null anche se non dovrebbe stamparlo...credo
BufferedReader br = new BufferedReader(fr); 
 
while((riga=br.readLine()) != null )
libri[i++]=riga;[/quote]
Questo è grave, inizializzi un array a dimensione 3 quando non puoi sapere il file quante occorrenze avrà: devi ciclare 2 volte sul file, una per recuperare la dimensione dell' array e una per inserire le "tuple", o molto meglio utilizzare una struttura dinamica come un ArrayList ad esempio.
 
[quote] 
System.out.println("scegli un'opzione:");
System.out.println("1. Stampa il catalogo");
System.out.println("2. Preleva un libro");
System.out.println("3. Restituisci un libro");
System.out.println("4. Esci \n");
 
int scelta = console.readInt(); 
 
switch (scelta)
{
case 1: {
for(i=0; i<libri.length; i++)
System.out.println("Nel catalogo è presente " + libri[i]);
break;
}
case 2: break;
 
case 3: break;
 
case 4: System.exit(0); 
}
[/quote][quote]
 
Come puoi vedere qualche passo in avanti l'ho fatto comunque...
Adesso dovrei gestire i prestiti e le restituzioni. 
Qualche consiglio per il codice che ho postato? :)[/quote]
E se si preme 5 cosa avviene?Semplicemente il programma si blocca perchè manca il recupero dell' errore da input.
 
Pubblicità
Pubblicità
Indietro
Top