Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Fondamenti di architettura e programmazione
 
[Laboratorio] Es x il 19-12 !PROROGATO al 9-1! Gestione Biblioteca
Clicca QUI per vedere il messaggio nel forum
[D]ani[J]
Postate qua i vostri commenti ecc... sull'esercizio di laboratorio GESTIONE BIBLIOTECA per il 19-12-2003

citrus
come diavolo funzionano le hashtables??????????

ma sopratutto, come faccio a sapere quanti elementi contiene un hash tables?
ho provato con borrows.Size(); però questo metodo mi restituisce il numero di chiavi utilizzate e in questo caso non va bene perchè i libri noleggiati vengono tutti memorizzati con la stessa chiave (user), quindi questometodo restituisce sempre 1!!!!!!

io ho bisogno di sapere quanti oggetti sono mappati da una determinata chiave!
(in questo modo posso sapere quanti libri ha già noleggiato un determinato utente!)
... ma non trovo un metodo adatto.....
...
qualcuno sa aiutarmi?
denghiuuuuu

040381
Le hashtable funziona come una tabella di un database con due soli campi, uno è quello chiave che serve per riconoscere le "righe"(quindi non ci possono esere key doppie!) e l'atro e il dato che può essere anche ripetuto.

io ho usato un array di 3 hashtable con le key sempre associate allo user, per non duplicarle.

Sembra funzionare.

ciao

citrus
mmh!!
non male come idea.....
io mi ero fossilizzato su di un unico hashtable
ma in effetti nessuno ci vieta di usarne di più.....
bella 040381!!!

citrus
... preò un problema mi sorge comunque.....
l'immortacci a sti minchia di hashtable!!!!
non hanno un costruttore vero e proprio giusto?
si crea una chiave
Book b1 = (Book)borrows.get(u);
e poi le si associa un oggetto
borrows.put(u, b);
....
allora io come faccio a mettere un hashtable in un array?
per intenderci non posso fare

array[0]=new Hashtable(key,object);

allora come se fa?

040381
Originally posted by citrus
... preò un problema mi sorge comunque.....
l'immortacci a sti minchia di hashtable!!!!
non hanno un costruttore vero e proprio giusto?
si crea una chiave
Book b1 = (Book)borrows.get(u);
e poi le si associa un oggetto
borrows.put(u, b);
....
allora io come faccio a mettere un hashtable in un array?
per intenderci non posso fare

array[0]=new Hashtable(key,object);

allora come se fa?


Le Hashtable le crei una volta sola e poi le riempi, svuoti e leggi con i metodi di questa classe(put(), get(), ...).

Es:
import java.util.Hashtable;

class Esempio{
  //Variabile
  private Hashtable[] borrows = new Hashtable[3];

  //dentro al costuttore della classe
  public Esempio(){
    borrows[0] = new Hashtable();
    borrows[1] = new Hashtable();
    borrows[2] = new Hashtable();
  }

Scusate ora ho corretto.
Prima era sbagliato(e ho sclerato di brutto per capirlo) perchè scrivendo:

borrows[0]=borrows[1]=borrows[2]= new HastTable()

si crea un solo oggetto per tutti e 3 quindi modificandone uno si modificano tutti e tre


  //e nei metodi puoi usare tutte e tre le hashtable
  public Object get(Object key, int indiceArray){
    return borrows[indiceArray].get(key);
  }
}


foolish
visto il server down webcen posto il testo per questo esercizio, l'altro è dall'alra parte

Gestione biblioteca

Considerare l'esempio della gestione di una biblioteca visto a lezione.
Derivare dalla classe User la classe UserWithCard con il privilegio di poter prendere in prestito fino a tre libri.
Il programma principale dovrà essere modificato in modo da prevedere l'operazione di emissione della tessera (che ovviamente da una tessera all'utente che la richiede. La tessera viene fornita dai punti di gestione e relativi bibliotecari (devono quindi essere modificate anche queste classi).
Analogamente dovrà essere modificato il punto di prestito in modo che l'Hashtable borrows ammetta più libri per lo stesso utente.
Nota: il modo più semplice per modificare le varie classi è sfruttare ereditarietà e polimorfismo. Derivare quindi nuove classi da quelle da modificare, ridefinire i metodi coinvolti, riscrivere quindi il main in modo che usi le classi definite.

citrus
Originally posted by 040381
Le Hashtable le crei una volta sola e poi le riempi, svuoti e leggi con i metodi di questa classe(put(), get(), ...).

Es:
import java.util.Hashtable;

class Esempio{
  //Variabile
  private Hashtable[] borrows = new Hashtable[3];

  //dentro al costuttore della classe
  public Esempio(){
    borrows[0] = borrows[1] = borrows[2] = new Hashtable();
  }

  //e nei metodi puoi usare tutte e tre le hashtable
  public Object get(Object key, int indiceArray){
    return borrows[indiceArray].get(key);
  }
}



ok grazie mille....
però ora ho visto che c'è un metodo RenderaBook() e TakeaBook() anche nella classe library (non solo nella LoanPoint) e anche questi usano un hashtable questa volta però per i libri.....
devo creare un array anche per questi?
... ogni volta che mi avvicino alla soluzione porca miseria mi accorgo che devo fare altre modifiche!!!!

oltretutto io non ho davvero ancora capito come diavolo è stata organizzata sta applicazione!!!!!!!!!!!!
ce la farà il nostro eroe???

(io ho una gran voglia di riscriverlo da zero ma non so se poi verrà accettato perchè così cadrebbe lo scopo dll'esercizio, che è quello di fare delle modifiche su di un programma già fatto!)
confermate?

citrus
come non detto....
...era una stronzata...
meglio che ci dorma sopra altrimenti qui passo fuori!

Rocco.Li
Dato che webcen e' ancora Down, e siamo a mercoledi !
Qualcuno sa gentilmente indicarmi il link preciso per la sottoposizione delle esercitazioni ?

Grazie

Pigmalione
Questo è il sito per le sottoposizioni:
http://infogen.dsi.unimi.it/

040381
Originally posted by citrus
ok grazie mille....
però ora ho visto che c'è un metodo RenderaBook() e TakeaBook() anche nella classe library (non solo nella LoanPoint) e anche questi usano un hashtable questa volta però per i libri.....
devo creare un array anche per questi?
... ogni volta che mi avvicino alla soluzione porca miseria mi accorgo che devo fare altre modifiche!!!!

oltretutto io non ho davvero ancora capito come diavolo è stata organizzata sta applicazione!!!!!!!!!!!!
ce la farà il nostro eroe???

(io ho una gran voglia di riscriverlo da zero ma non so se poi verrà accettato perchè così cadrebbe lo scopo dll'esercizio, che è quello di fare delle modifiche su di un programma già fatto!)
confermate?


Devi capire come funziona il tutto a partire da LibraryManagmetSystem e quando trovi un metodo di una classe vai nella classe a vedere cosa fà, scoprirai che è tutta una cacscata che finisce alla classe Library lo spacchio è farsi lo schema mentale di come interagiscono le classi.

per esempio per prestare unu libro:

<LibraryManagerSystem>

llp istanza della classe LoanLibrarian(bibliotecario che presta) chiama il metodo takeBook(User u, Book b)

if(llp.takeBook(u, b))
   System.out.print("ecco il libro");

</LibraryManagerSystem>

llp e un istanza di LoanLibrarian quindi andiamo a vedere cosa fà in questa classe

<LoanLibrarian>
il bibliotecario(istanza di LoanLibrarian) chiede al Punto Prestiti(LoanPoint), di cui fà parte, se l'utente può ricevere un altro libro invocando il metodo della classe a cui è associato

return IlMioLoanPoint.takeBook(u, b)

</LoanLibrarian>


<LibraryLoanPoint>
il Punto Prestiti(LoanPoint) controlla in borrows se l'utente può ricevere un altro libro, se l'utente può prenderne un altro chiede alla biblioteca di dargli il libro che però potrebbe non esserci.

if(l'utente può prendere libri[qui dipende da te l'if l'ho messo giusto per far capire])
   if(LaMiaLibreria.takeBook(u))
      return true;

</LibraryLoanPoint>

<Library>

Qui la biblioteca controlla che il libro ci sia:
se c'è lo preleva e restituisce true
se non c'è restituisce false

</Library>

ciao

NB non ho davanti gli esercizi, magari i nomi delle classi non sono identici ma il ragionamento è giusto.
I tag <NomeClasse> li ho messi per far capire meglio in che file ci troviamo:
inizio file<classe>
fine file</classe>

supernova
Raga Dsy è in down!!!! Mi devo scaricare le slides della biblioteca altrimenti come faccio il programma!!!! Qualcuno può postare le slides x fare gli esercizi????? Grazie Tante!!!!

supernova
Bella lo zio Citrus, mi sono scaricato le slides e il library. Ti sei sbattuto alla grande e ti ringrazio!!!!

foolish
sottoposizioni spostate al 9 di gennaio

buon fine lezioni a tutti :) voi !!!

pulcetta
sigh... mi ci devo mettere sotto a fare sti cosi che non ho capito.... :(

Rocco.Li
Faccio un appello disperato visto che mancano poco piu' di 24 ore al termine....

Creare la classe UserWithCard che puo' prendere in prestito fino a tre libri e' facile, avra' come caratteristica (attributo o proprieta' che dir si voglia) aggiuntiva un ipotetico numero tessera.

al momento di prendere in prestito un secondo libro posso utilizzare l'operatore instanceOf per capire se e' un utente comune o un tesserato e restituire l'adeguato messaggio.
(previa modifica dell'hashtable borrows nella classe LoanPoint)

Ma non ho capito una cosa: L'EMISSIONE DELLA TESSERA ?
CHI LA DEVE FARE ?
CON CHE CRITERIO ?
DEVO GENERARE UN NUMERO CASUALE, E PREVEDERE UN METODO requestCard() NELLA CLASSE ManagementLibrarian MODIFICANDO A RITROSO Ponit , ManagementPoint ED INFINE Library ???

mi e' oscuro questo meccanismo perverso di questa applicazione...

Rocco.Li
Pensandoci bene ....
sfogandomi in questo thread ho trovato la soluzione !!!! :D

ci provo cosi....

citrus
non esiste un modo definito per farlo...
il bello della programmazione è che ogniuno lo fa a modo suo (è un arte!) :D
...
(premetto che io ho riscritto tutto quanto quindi non so quanto possa esserti d'aiuto....)
comunque ho assegnato il compito di consegnare la tessera al punto di gestione il quale crea l'utente, lo aggiunge nel file insieme agli altri e crea anche un file apposito (chiamato con il num di tessera per salvaguardare l'univocità) in cui poi salverò la situazione prestiti relativa all'utente.....
...
forse è un po' tardi per mettersi a rifare tutto però guarda,alla fine io ci sono impazzito per più di una settimana su quello del prof, e per riscriverlo daccapo ci ho messo solo un paio di giorni (lavorando comodo) quindi fai tu.......
oltretutto riscrivendolo fai un sacco di pratica il che non guasta!

:D

Rocco.Li
Mi sto incasinando di brutus....

vado a letto che e meglio !!!!!

AIUTOOOOOOOOOOOOOOOOO !!!!

Rocco.Li
Grazie Citrus,
e' solo che il mio tempo a disposizione e quasi nullo !!! causa lavoro...
Per gli esercizi del centro di controllo o altro sollevare exception e' una passeggiata. Anche perche la classe la fai tu nuovamente da zero !!!

ma qui volevo una scorciatoia !!! cacchio !

mi sembra che gli esercizi non sono di difficolta crescente, ma di difficolta' aleatoria.

bah, vado a letto...
... la notte porta consiglio !!!

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate