Salve a tutti, sto creando un progetto universitario che consiste nella realizzazione di un sistema di gestione di un'agenzia di viaggi. I dati principali sono tre (clienti, prenotazioni, pacchetti vacanze) e sono tutti salvati su un semplice file di testo. Siccome bisogna operare sul suddetto txt, ho creato inanzitutto una classe letturaDB che mi permette (teoricamente) di leggere tutto quanto il file e costruirmi gli ArrayList di clienti, prenotazioni e pacchetti in modo da gestirli più facilmente. La classe è la seguente:
[SPOILER]
codice:
public class letturaDB {
public static void lettura(String pathname) throws Exception{
try{
Scanner sc = new Scanner(pathname);
ArrayList<Pacchetto> pacchetti = new ArrayList<Pacchetto>();
ArrayList<Cliente> clienti = new ArrayList<Cliente>();
ArrayList<Prenotazione> prenotazioni = new ArrayList<Prenotazione>();
String temp;
while(sc.hasNextLine()){
temp=sc.nextLine();
if(temp.equals("PACCHETTO"))
pacchetti=readPacchetti(sc);
else if(temp.equals("CLIENTI"))
clienti=readClienti(sc);
else if(temp.equals("PRENOTAZIONI"))
prenotazioni=readPren(sc);
else
throw new Exception("Il file selezionato non è corretto");
}
} catch(Exception e){
throw new IOException("Errore");
}
}
public static Pacchetto leggiPacchetto(Scanner sc){
String nome, indirizzo, temp;
//ArrayList<String> t = new ArrayList<String>();
ArrayList<Settimana> s = new ArrayList<Settimana>();
temp=sc.nextLine();
nome=temp;
temp=sc.nextLine();
indirizzo=temp;
temp=sc.nextLine();
String[] tel = temp.split(";");
ArrayList<String> t= new ArrayList<String>(Arrays.asList(tel)); //copia l'array tel nell'arrayList t
temp=sc.nextLine();
s=readSettimane(sc);
return new Pacchetto(nome,indirizzo,t,s);
}
public static ArrayList<Pacchetto> readPacchetti(Scanner sc){
ArrayList<Pacchetto> p = new ArrayList<Pacchetto>();
//finchè non incontro una stringa PACCHETTO o CLIENTI...
while(!(sc.nextLine().equals("PACCHETTO") || sc.nextLine().equals("CLIENTI")))
p.add(leggiPacchetto(sc));
return p;
}
public static Settimana leggiSettimana(Scanner sc){
int nsett, nsd, psd, nsu, psu;
String seq, temp;
temp=sc.nextLine();
String[] result = temp.split(";");
nsett=Integer.parseInt(result[0]);
nsd=Integer.parseInt(result[1]);
psd=Integer.parseInt(result[2]);
nsu=Integer.parseInt(result[3]);
psu=Integer.parseInt(result[4]);
seq=result[5];
temp=sc.nextLine();
String[] result2 = temp.split(";");
Queue<String> coda = new LinkedList<String>(Arrays.asList(result2));
return new Settimana(nsett,nsd,psd,nsu,psu,seq,coda);
}
public static ArrayList<Settimana> readSettimane(Scanner sc){
ArrayList<Settimana> x = new ArrayList<Settimana>();
while(!(sc.nextLine().equals("PACCHETTO") || sc.nextLine().equals("CLIENTI")))
x.add(leggiSettimana(sc));
return x;
}
public static Cliente leggiCliente(Scanner sc){
String cognome, nome, telefono, carta, temp;
temp=sc.nextLine();
String[] result = temp.split(";");
cognome=result[0];
nome=result[1];
telefono=result[2];
carta=result[3];
return new Cliente(cognome,nome,telefono,carta);
}
public static ArrayList<Cliente> readClienti(Scanner sc){
ArrayList<Cliente> c = new ArrayList<Cliente>();
while(!(sc.nextLine().equals("PRENOTAZIONI")))
c.add(leggiCliente(sc));
return c;
}
public static Prenotazione leggiPren(Scanner sc){
String villaggio, cognome, nome, stanza, corsi, temp;
int settimana;
temp=sc.nextLine();
//se la linea letto contiene la stringa PRENOTAZIONI
//passo alla linea successiva per continuare a
//leggere le prenotazioni
if(temp.equals("PRENOTAZIONI"))
temp=sc.nextLine();
villaggio=temp;
temp=sc.nextLine();
String[] result = temp.split(";");
settimana=Integer.parseInt(result[0]);
cognome=result[1];
nome=result[2];
stanza=result[3];
corsi=result[4];
return new Prenotazione(villaggio,settimana,cognome,nome,stanza,corsi);
}
public static ArrayList<Prenotazione> readPren(Scanner sc){
ArrayList<Prenotazione> p = new ArrayList<Prenotazione>();
while(sc.hasNextLine())
p.add(leggiPren(sc));
return p;
}
}
[/SPOILER]
Per farvi un'idea di come dev'essere il file del database ve lo incollo nello spoiler sottostante:
[SPOILER]PACCHETTO
CubMed Lampedusa
Lampedusa, piazza Centrale
087 8989898;087 5656655
1;20;80;7;140;TSB
2;3;80;7;140;TSB
3;3;80;7;140;TSB
4;3;80;7;140;TSB
5;3;80;7;140;TSB
6;3;80;7;140;TSB
7;3;80;7;140;TSB
8;3;80;7;140;TSB
9;3;80;7;140;TSB
10;3;80;7;140;TSB
11;3;80;7;140;TSB
12;3;80;7;140;TSB
13;3;80;7;140;TSB
14;3;80;7;140;TSB
15;3;80;7;140;TSB
16;3;80;7;140;TSB
17;4;100;25;180;VTSB
18;4;100;25;180;VTSB
19;4;100;25;180;VTSB
20;4;100;25;180;VTSB
21;4;100;25;180;VTSB
22;4;120;30;200;VETSB
23;4;120;30;200;VETSB
24;4;120;30;200;VETSB
25;4;120;30;200;VETSB
De Fabbris;Bluastri
26;3;150;30;220;VETSB
27;3;150;30;220;VETSB
28;4;150;30;220;VETSB
Calzolari;Fornaioli;Mulinello
29;4;150;30;220;VETSB
30;4;150;30;220;VETSB
31;4;150;30;220;VETSB
32;4;150;30;220;VETSB
33;4;150;30;220;VETSB
34;3;120;20;180;TSB
35;3;120;20;180;TSB
36;3;120;20;180;TSB
37;3;120;20;180;TSB
38;3;120;20;180;TSB
39;3;120;20;180;TSB
40;2;100;14;150;TSB
41;2;100;14;150;TSB
42;2;100;14;150;TSB
43;2;100;14;150;TSB
44;2;100;14;150;TSB
45;2;100;14;150;TSB
46;2;100;14;150;TSB
47;0;100;4;130;T
48;0;100;4;130;T
49;0;100;0;130;
50;0;100;0;130;
51;0;100;0;130;
52;0;100;0;130;
PACCHETTO
ValTur Porto Cervo
Porto Cervo, zona Centrale
096 56545445
1;2;80;7;140;TSB
2;2;80;7;140;TSB
3;2;80;7;140;TSB
4;2;80;7;140;TSB
5;2;80;7;140;TSB
6;2;80;7;140;TSB
7;2;80;7;140;TSB
8;2;80;7;140;TSB
9;2;80;7;140;TSB
10;2;80;7;140;TSB
11;2;80;7;140;TSB
12;2;80;7;140;TSB
13;2;80;7;140;TSB
14;2;80;7;140;TSB
15;2;80;7;140;TSB
16;2;80;7;140;TSB
17;4;100;25;180;VTSB
18;4;100;25;180;VTSB
19;4;100;25;180;VTSB
20;4;100;25;180;VTSB
21;4;100;25;180;VTSB
22;4;120;30;200;VETSB
23;4;120;30;200;VETSB
24;4;120;30;200;VETSB
25;4;120;30;200;VETSB
26;3;150;30;220;VETSB
Tulipani
27;3;150;30;220;VETSB
28;3;150;30;220;VETSB
29;3;150;30;220;VETSB
De Garofali;Gardenia
30;4;150;30;220;VETSB
31;4;150;30;220;VETSB
32;4;150;30;220;VETSB
33;4;150;30;220;VETSB
34;3;120;20;180;TSB
35;3;120;20;180;TSB
36;3;120;20;180;TSB
37;3;120;20;180;TSB
38;3;120;20;180;TSB
39;3;120;20;180;TSB
40;2;100;14;150;TSB
41;2;100;14;150;TSB
42;2;100;14;150;TSB
43;2;100;14;150;TSB
44;2;100;14;150;TSB
45;2;100;14;150;TSB
46;2;100;14;150;TSB
47;0;100;4;130;T
48;0;100;4;130;T
49;0;100;0;130;
50;0;100;0;130;
51;0;100;0;130;
52;0;100;0;130;
CLIENTI
Rossi;Mario;06987675;VISA4986754435540032
De Luca;Lucia;078956454;MASTERCARD4999954435540777
Verdi;Gian Carlo;3456435466;VISA49999544355499988
Bruni;Giorgia;566876876;VISA87867678754345678
Di Colore;Viola;787443455;MASTERCARD7865654534567676
Violetti;Ciro;798709878907;AURORA786467656768999
Bluastri;Calogero;666767766;ALBA98900000000045
Degli Aranci;Olivia;787887878778;FINEC8989998767540098
Gialli;Ugo;787987987;FIN6765000000098765
Bianchi;Nerina;68768689;VISA9878987604090099
Grigio;Perla;25435435;VISA234567654567890
Marrone;Chiara;2636363636;VISA1234567890234567
De Fabbris;Michele;6869898787;VISA1234456567654567
Calzolari;Maria;798798779;MASTERCARD89878974319876 54
Fornaioli;Luca;79879870;FFF8765643456093468
Mulinello;Lia;69879870;VISA1234987698345829
Tulipani;Emilio;967987979;VISA2020987654591296
De Garofali;Fiore;70978098089;VISA2340986398293749
Gardenia;Andrea;67987098089;MATERCARD9876920398563 781
PRENOTAZIONI
CubMed Lampedusa
5;Verdi;Gian Carlo;D;S
28;Verdi;Gian Carlo;D;TB
28;Di Colore;Viola;D;B
28;Bluastri;Calogero;D;
28;Rossi;Mario;D;VB
25;Di Colore;Viola;D;B
25;Degli Aranci;Olivia;D;T
28;Violetti;Ciro;S;VETSB
25;Bruni;Giorgia;D;VBT
25;De Luca;Lucia;D;
27;Gialli;Ugo;D;BE
PRENOTAZIONI
ValTur Porto Cervo
30;Degli Aranci;Olivia;S;B
26;Gialli;Ugo;D;T
29;Verdi;Gian Carlo;S;V
26;Grigio;Perla;D;SV
26;Marrone;Chiara;D;
29;Rossi;Mario;D;VSBET
29;De Luca;Lucia;D;BE
29;Di Colore;Viola;D;BS[/SPOILER]
Perchè però una volta richiamato il metodo lettura non mi legge correttamente il file? C'è qualcosa di errato?
Grazie in anticipo a tutti quanti quelli che mi daranno una mano.
PS: L'acquisizione del file avviene tramite jFileChooser