Oppure

Loading
16/06/11 18:42
crack001
Salve ragazzi, ho un piccolo problema, sto svolgendo una traccia per il progetto dell'universita dell'esame di Java, in pratica devo gestire un agenzia di viaggi, vi spiego un po il mio problema, all'inizio questo programma deve leggere un file di testo e riempire un database, ho pensato di creare questo database tramite una serie di ArrayList.

In pratica ho varie parti del file, una per i Pacchetti vacanze, una per i Clienti e una per le Prenotazioni, il mio problema sta nelle prenotazioni.

Quando vado a leggere le prenotazioni cosa devo fare, leggo il nome del villaggio, che sara uguale ad almeno 1 nome del villaggio di 1 pacchetto, poi dopo aver letto il nome mi ritrovo sotto una serie di prenotazioni che contengono alcuni dati, tra cui il numero della settimana a cui deve essere associata questa prenotazione.

io l'ho gestita in questo modo, l'oggetto pacchetto contiene un ArrayList di settimane, che a loro volta contengono ognuna 1 ArrayList di prenotazioni, in parole povere ogni settimana puo avere piu prenotazioni, e ogni pacchetto puo avere piu settimane, max 52.

Ora...il problema me lo ritrovo quando vado a stampare per vedere se effettivamente il file è letto per bene e l'archivio viene riempito, cosa succede...mi ritrovo con tutte le prenotazioni di tutti i pacchetti...inserite in ogni pacchetto, mi spiego meglio

PARTE DEL FILE DI TESTO DA LEGGERE
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


in questo esempio io ho 2 insiemi di prenotazioni per 2 pacchetti vacanze diversi. ora chiaramente il primo numero della prenotazione consiste nella settimana al quale deve essere associato...quando vado a stampare mi ritrovo per ogni pacchetto l'insieme di TUTTE le prenotazioni di OGNI pacchetto. in parole semplici mi ritrovo con 2 volte la stampa di ttt le prenotazioni nel caso in cui i pacchetti sono 2.

Ora sinceramente non capisco se il problema sia nell'aggiunta o nella stampa di prova, vi mostro il codice e i vari metodo che interessano questa parte:

Questo e il metodo della lettura da FILE
public static void letturaPrenotazioni(Scanner s){
		String cognome,nome,strSeq,nomeV;
		int NSett,n;
		char tipoStanza;
		char[] seq;
		s.skip("PRENOTAZIONI");
		s.nextLine();
		nomeV=s.nextLine();
		while((s.hasNext()) && (!s.hasNext("PRENOTAZIONI"))){
			s.useDelimiter("[;]");
			NSett=Integer.parseInt(s.next());
			cognome=s.next();
			nome=s.next();
			tipoStanza=s.next().charAt(0);
			s.useDelimiter("\p{javaWhitespace}");
			//Gestione dei corsi
			strSeq=s.nextLine();
			n=strSeq.length();
			seq=new char[n];
			for(int i=0;i<n;i++)
				seq[i]=strSeq.charAt(i);

			SistemaPrenotazioni(new Prenotazioni(NSett,cognome,nome,tipoStanza,seq),nomeV,NSett);
		}


Questo e il metodo SistemaPrenotazioni che dovrebbe occuparsi del posizionamento della prenotazione nella giusta settimana del giusto pacchetto
	private static void SistemaPrenotazioni(Prenotazioni p,String nomeV,int nsett){
		ArrayList<Pacchetto> ALP=Pacchetto.getALP();
		ArrayList<Settimana> ALS=null;
		for(Pacchetto x:ALP){
			if(x.getNomeVillaggio().equals(nomeV)){
				ALS=x.getSettimana();
				for(Settimana k:ALS){
					if(k.getNSett()==nsett)
						k.addPrenotazione(p);
					}
				}
			}
		}


Questa è invece la parte del codice del main che si occupa della stampa per la prova delle prenotazioni, per ogni pacchetto mi estrae la settimana, per ogni settimana mi estrae l'elenco prenotazioni e poi le stampa
		for(Pacchetto x:p){
			ArrayList<Prenotazioni> pr=null;
			System.out.println();
			ArrayList<Settimana> s=x.getSettimana();
			for(Settimana y:s){
				pr=y.getlistaPrenotazioni();
				for(Prenotazioni k:pr)
					System.out.println(k);
			}
		}



Ora chiaramente sono richiamati altri metodi ma nn li sto a scrive perche sono deducibili nel senso che i metodi con GET mi ritornano i valori, e il metodo addPrenotazioni si limita ad eseguire un ArrayList.add(elem);

Avevo pensato in un errore nella lettura nel file, però non sembra...perche quando vado a sistemare la prenotazione nel posto giusto (metodo SistemaPrenotazione) se oltre all'aggiunta do anche una System.out.println(prenotazione); mi stampa SOLO le prenotazioni presenti nel file di testo iniziale, quindi questo mi fa pensare che l'errore è nella stampa.

Poi però mi sono rimangiato quello che ho detto, nel senso che avevo bisogno di un metodo che mi portasse sul file tutte le prenotazioni del database, e anche in questo caso succede la stessa cosa della stampa a video, cioè mi ritrovo con:

Pacchetto vacanze 1

elenco prenotazioni del pacchetto 1 e del pacchetto 2

Pacchetto vacanze 2

elenco prenotazioni del pacchetto 1 e del pacchetto 2

questo è il codice del metodo per esportare i dati su file

	public static void export(String path) throws FileNotFoundException{
		PrintStream WText;
		FileOutputStream fos=new FileOutputStream(path,true);
		WText =new PrintStream(fos,true);
		ArrayList<Pacchetto> ALP=Pacchetto.getALP();
		ArrayList<Settimana> ALS=null;
		ArrayList<Prenotazioni> ALPr=null;
		for(Pacchetto x:ALP){
			ALS=x.getSettimana();
			WText.println(x.getNomeVillaggio());
			for(Settimana y:ALS){
				ALPr=y.getlistaPrenotazioni();
				if(ALPr!=null)
					for(Prenotazioni k:ALPr)
						WText.println(k);	
			}
		}
	}


Ora sinceramente non so cosa pensare, sono 4 giorni che cerco di capire perche mi succede questo, spero che qualcuno di voi possa aiutarmi perche sinceramente non so cosa succede xD
Ultima modifica effettuata da crack001 16/06/11 18:43
aaa