Gestire una biblioteca con Java

Exarion

Utente Attivo
1,187
12
CPU
Q9550 Step E0 @ 4 GHz Cooled ZEROtherm Nirvana NV120
Scheda Madre
Asus P5Q Deluxe
HDD
Samsung SSD 840 EVO 250 GB + RIP Seagate 2x 250GB 32MB Buffer in Stripe + Seagate 1TB 32MB Buffer
RAM
Corsair TWIN2X4096-6400C4DHX
GPU
R9 270X OC
Audio
SupremeFX II
Monitor
Samsung - 2232BW
PSU
ENERMAX INFINITI DXX 650W
Case
CM690 with NANOXIA FX12
OS
Windows XP SP2 - Windows 7 Ultimate - Ubuntu Lucid Lynx
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:
 

Exarion

Utente Attivo
1,187
12
CPU
Q9550 Step E0 @ 4 GHz Cooled ZEROtherm Nirvana NV120
Scheda Madre
Asus P5Q Deluxe
HDD
Samsung SSD 840 EVO 250 GB + RIP Seagate 2x 250GB 32MB Buffer in Stripe + Seagate 1TB 32MB Buffer
RAM
Corsair TWIN2X4096-6400C4DHX
GPU
R9 270X OC
Audio
SupremeFX II
Monitor
Samsung - 2232BW
PSU
ENERMAX INFINITI DXX 650W
Case
CM690 with NANOXIA FX12
OS
Windows XP SP2 - Windows 7 Ultimate - Ubuntu Lucid Lynx

appena_iscritto

Utente Attivo
505
2
CPU
t7600
HDD
200GB
RAM
2GB
GPU
Nvidia
OS
Vista Hp
La cosa è abbastanza semplice. Non capisco da dove nascano le tue perplessità
 

Exarion

Utente Attivo
1,187
12
CPU
Q9550 Step E0 @ 4 GHz Cooled ZEROtherm Nirvana NV120
Scheda Madre
Asus P5Q Deluxe
HDD
Samsung SSD 840 EVO 250 GB + RIP Seagate 2x 250GB 32MB Buffer in Stripe + Seagate 1TB 32MB Buffer
RAM
Corsair TWIN2X4096-6400C4DHX
GPU
R9 270X OC
Audio
SupremeFX II
Monitor
Samsung - 2232BW
PSU
ENERMAX INFINITI DXX 650W
Case
CM690 with NANOXIA FX12
OS
Windows XP SP2 - Windows 7 Ultimate - Ubuntu Lucid Lynx
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. :)
 

appena_iscritto

Utente Attivo
505
2
CPU
t7600
HDD
200GB
RAM
2GB
GPU
Nvidia
OS
Vista Hp
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.
 

Exarion

Utente Attivo
1,187
12
CPU
Q9550 Step E0 @ 4 GHz Cooled ZEROtherm Nirvana NV120
Scheda Madre
Asus P5Q Deluxe
HDD
Samsung SSD 840 EVO 250 GB + RIP Seagate 2x 250GB 32MB Buffer in Stripe + Seagate 1TB 32MB Buffer
RAM
Corsair TWIN2X4096-6400C4DHX
GPU
R9 270X OC
Audio
SupremeFX II
Monitor
Samsung - 2232BW
PSU
ENERMAX INFINITI DXX 650W
Case
CM690 with NANOXIA FX12
OS
Windows XP SP2 - Windows 7 Ultimate - Ubuntu Lucid Lynx
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();        
            }    
        
        */
    }
    
          
    }
 

appena_iscritto

Utente Attivo
505
2
CPU
t7600
HDD
200GB
RAM
2GB
GPU
Nvidia
OS
Vista Hp
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.
 

Exarion

Utente Attivo
1,187
12
CPU
Q9550 Step E0 @ 4 GHz Cooled ZEROtherm Nirvana NV120
Scheda Madre
Asus P5Q Deluxe
HDD
Samsung SSD 840 EVO 250 GB + RIP Seagate 2x 250GB 32MB Buffer in Stripe + Seagate 1TB 32MB Buffer
RAM
Corsair TWIN2X4096-6400C4DHX
GPU
R9 270X OC
Audio
SupremeFX II
Monitor
Samsung - 2232BW
PSU
ENERMAX INFINITI DXX 650W
Case
CM690 with NANOXIA FX12
OS
Windows XP SP2 - Windows 7 Ultimate - Ubuntu Lucid Lynx
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?
 

appena_iscritto

Utente Attivo
505
2
CPU
t7600
HDD
200GB
RAM
2GB
GPU
Nvidia
OS
Vista Hp
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.
 

Exarion

Utente Attivo
1,187
12
CPU
Q9550 Step E0 @ 4 GHz Cooled ZEROtherm Nirvana NV120
Scheda Madre
Asus P5Q Deluxe
HDD
Samsung SSD 840 EVO 250 GB + RIP Seagate 2x 250GB 32MB Buffer in Stripe + Seagate 1TB 32MB Buffer
RAM
Corsair TWIN2X4096-6400C4DHX
GPU
R9 270X OC
Audio
SupremeFX II
Monitor
Samsung - 2232BW
PSU
ENERMAX INFINITI DXX 650W
Case
CM690 with NANOXIA FX12
OS
Windows XP SP2 - Windows 7 Ultimate - Ubuntu Lucid Lynx
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:
 

Exarion

Utente Attivo
1,187
12
CPU
Q9550 Step E0 @ 4 GHz Cooled ZEROtherm Nirvana NV120
Scheda Madre
Asus P5Q Deluxe
HDD
Samsung SSD 840 EVO 250 GB + RIP Seagate 2x 250GB 32MB Buffer in Stripe + Seagate 1TB 32MB Buffer
RAM
Corsair TWIN2X4096-6400C4DHX
GPU
R9 270X OC
Audio
SupremeFX II
Monitor
Samsung - 2232BW
PSU
ENERMAX INFINITI DXX 650W
Case
CM690 with NANOXIA FX12
OS
Windows XP SP2 - Windows 7 Ultimate - Ubuntu Lucid Lynx
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:
 

appena_iscritto

Utente Attivo
505
2
CPU
t7600
HDD
200GB
RAM
2GB
GPU
Nvidia
OS
Vista Hp
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.
 

Exarion

Utente Attivo
1,187
12
CPU
Q9550 Step E0 @ 4 GHz Cooled ZEROtherm Nirvana NV120
Scheda Madre
Asus P5Q Deluxe
HDD
Samsung SSD 840 EVO 250 GB + RIP Seagate 2x 250GB 32MB Buffer in Stripe + Seagate 1TB 32MB Buffer
RAM
Corsair TWIN2X4096-6400C4DHX
GPU
R9 270X OC
Audio
SupremeFX II
Monitor
Samsung - 2232BW
PSU
ENERMAX INFINITI DXX 650W
Case
CM690 with NANOXIA FX12
OS
Windows XP SP2 - Windows 7 Ultimate - Ubuntu Lucid Lynx
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? :)
 

appena_iscritto

Utente Attivo
505
2
CPU
t7600
HDD
200GB
RAM
2GB
GPU
Nvidia
OS
Vista Hp
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.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!