Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 2, 9 CFU => Topic started by: Mito on 18-04-2009, 19:39:30



Title: Prova in itinere Aprile 2006
Post by: Mito on 18-04-2009, 19:39:30
Qualcuno ha svolto questa Prova?
Quote
L’implementazione deve contenere le classi con tutti gli attributi e metodi necessari al corretto funzionamento con l’opportuna gestione delle eccezioni. I metodi devono essere opportunamente commentati. E’ necessario implementare una classe di test contenente il metodo main.
Sia dato un file di oggetti transazioni.dat contenente oggetti transazione. Un oggetto transazione contiene i campi Data, Nome, Cognome, Importo, Zona, ed un campo ListaProdotti contenente una lista di prodotti.

1. Leggere gli oggetti dal file transazioni.dat. Inserire gli oggetti in una lista semplicemente linkata ordinati in modo crescente secondo il Cognome. Invertire gli elementi all’interno della lista in modo che essi compaiano inseriti in modo decrescente rispetto al cognome.

2. Inserire gli stessi oggetti all’interno di una coda circolare in base all’ordine di lettura. Estrarre dalla coda i dati e caricare all’interno di una lista relativa alle zone i totali incassati.

3. Per ogni cliente inserito nella lista calcolare l’importo totale delle transazioni. Inserire la coppia (cliente, totImporto) all’interno di uno stack.

4. Inserire all’interno lista semplicemente linkata gli incassi totali per data (ordinati in modo crescente). Digitare da tastiera due date, estrarre dalla coda tutte le date nell’intervallo tra le due. Inserire all’interno di una nuova lista la differenza di incassi tra due date consecutive. Attraversare la lista e stampare a video i risultati.


Title: Re:Prova in itinere Aprile 2006
Post by: TheSpecialOne on 19-04-2009, 10:16:26
ecco, io qui ho problemi a definire l'ordinamento in base ad un campo specifico!
che devo aprire il file, inserire i record in una lista, ci sono, ma poi non sò come posso inserirli ordinatamente in base al cognome come nell' esempio..
se qualcuno può darmi una mano, ne sarei grato!


Title: Re:Prova in itinere Aprile 2006
Post by: Mito on 19-04-2009, 10:58:23
ecco, io qui ho problemi a definire l'ordinamento in base ad un campo specifico!
che devo aprire il file, inserire i record in una lista, ci sono, ma poi non sò come posso inserirli ordinatamente in base al cognome come nell' esempio..
se qualcuno può darmi una mano, ne sarei grato!

Implementando il compareTo nella classe Transazione dovrebbe funzionare.

Code:
public int compareTo(Transazione t)
  {
    if(this.getCognome().compareTo(t.getCognome())>0)
      return 1;
    else if(this.getCognome().compareTo(t.getCognome())<0)
      return -1;
    else
      return 0;
  }

Parte del MAIN

Code:
boolean continua = true;
    LinkedList ListaT = new LinkedList();
    try
    {
      ObjectInputStream inFile = new ObjectInputStream(new FileInputStream("transazioni.dat"));
       
      while(continua) //Ciclo infinito per leggere i file
      {
        try
        {
          ListaT.InsertOrd((Transazione)inFile.readObject());
        }
        catch(EOFException e){...}
//[...altro...]


Title: Re:Prova in itinere Aprile 2006
Post by: TheSpecialOne on 19-04-2009, 11:14:13
dato che il file è dato, si presuppone abbia comparable,no?
a quel punto dovrei solo usare compareTo e il campo da confrontare,no?
grazie cmq  .smile


Title: Re:Prova in itinere Aprile 2006
Post by: feboss on 19-04-2009, 19:53:47
e se gli oggetti transazioni sono ordinati per nome?

cioè questo esercizio presuppone che la classe abbia già un compareTo che ordina per cognome


Title: Re:Prova in itinere Aprile 2006
Post by: Mito on 19-04-2009, 20:13:18
e se gli oggetti transazioni sono ordinati per nome?

cioè questo esercizio presuppone che la classe abbia già un compareTo che ordina per cognome

Basta cambiare...
Code:
public int compareTo(Transazione t)
  {
    if(this.getNome().compareTo(t.getNome())>0)
      return 1;
    else if(this.getNome().compareTo(t.getNome())<0)
      return -1;
    else
      return 0;
  }


Title: Re:Prova in itinere Aprile 2006
Post by: feboss on 19-04-2009, 20:26:20
Ma noi non abbiamo una classe transazioni.Andiamo semplicemente a leggere dal file e la inseriamo in una lista grazie ad un compareTo che ha già(quindi dobbiamo rimetterci alla buona fede di chi ha scritto la classe)

oppure dobbiamo assumere di avere la classe transazioni e quindi di poterla modificare.Quindi in questo caso dobbiamo anche supporre di aver scritto noi il file di oggetti

qualcosa mi sfugge


Title: Re:Prova in itinere Aprile 2006
Post by: Mito on 19-04-2009, 20:38:14
Ma noi non abbiamo una classe transazioni.Andiamo semplicemente a leggere dal file e la inseriamo in una lista grazie ad un compareTo che ha già(quindi dobbiamo rimetterci alla buona fede di chi ha scritto la classe)

oppure dobbiamo assumere di avere la classe transazioni e quindi di poterla modificare.Quindi in questo caso dobbiamo anche supporre di aver scritto noi il file di oggetti

qualcosa mi sfugge

A quanto ho capito dobbiamo fare tutto. Poi non so...
Code:
import java.io.*;
public class Transazione implements Comparable <Transazione>, Serializable

private Date Data;
private String Nome;
private String Cognome;
private int Zona;
private int Importo;

[...]
[...altri metodi...]


Title: Re:Prova in itinere Aprile 2006
Post by: Aigor on 19-04-2009, 22:03:08
devi fare TUTTO anche la classe Transizioni. L'unica cosa che NON DEVI fare è scrivere il file che avrai come input.


Title: Re:Prova in itinere Aprile 2006
Post by: feboss on 20-04-2009, 08:54:38
adesso è tutto chiaro
grazie


Title: Re:Prova in itinere Aprile 2006
Post by: Mito on 20-04-2009, 10:21:00
Qualche soluzione?