Volo.java
codice:
package aeroporto;
import java.util.*;
public class Volo
implements Comparable
{
String key;
String id;
String part;
String citta;
String arr;
List<Passeggero> list = new LinkedList<Passeggero>();
public void popolaCampi(Scanner sc)
{
id = sc.nextLine();
part = sc.nextLine();
citta = sc.nextLine();
arr = sc.nextLine();
key = id.concat(part);
}
public void addPasseggero(Passeggero p)
{
if(!p.idVolo.equals(key))
{
throw new IllegalArgumentException(p.toString() + " non vola con " + toString());
}
list.add(p);
}
public int compareTo(Object o)
{
assert o instanceof Volo;
Volo v = (Volo)o;
return part.compareTo(v.part);
}
public String toString()
{
return "<id: " + id + "; giorn part: " + part + "; origine: " + citta + "; ora arrivo: " + arr + ">";
}
}
Passeggero.java
codice:
package aeroporto;
public class Passeggero
{
String cognome;
String nome;
String nazione;
String residenza;
String idVolo;
public void popolaCampi(Java.util.Scanner sc)
{
cognome = sc.nextLine();
nome = sc.nextLine();
nazione = sc.nextLine();
residenza = sc.nextLine();
idVolo = sc.nextLine();
}
public String toString()
{
return "<Cognome: " + cognome + "; Nome: " + nome + "; Nazionalita: " + nazione + "; Residenza: " + residenza + "; id volo: " + idVolo + ">";
}
}
Infine aeroporto.java
codice:
package aeroporto;
import java.util.*;
import java.io.*;
public class Aeroporto
{
Map<String, Volo> voli = new HashMap<String, Volo>();
Map<String, List<Passeggero>> nazionalita = new HashMap<String, List<Passeggero>>();
List<Volo> elenco = new LinkedList<Volo>();
public static void main(String[] argv)
{
(new Aeroporto()).exec(argv);
}
void exec(String[] argv)
{
Scanner stdin = new Scanner(System.in);
while(true)
{
System.out.print("cmd? Leggi/Elenco/Nazionalita/Exit > "); //r
String cmd = stdin.nextLine();
if(cmd == null || cmd.equals("") || cmd.equalsIgnoreCase("exit"))
{
break;
}
else if(cmd.equalsIgnoreCase("leggi"))
{
leggi(stdin);
}
else if(cmd.equalsIgnoreCase("elenco"))
{
elenco(stdin);
}
else if(cmd.equalsIgnoreCase("nazionalita"))
{
nazionalita(stdin);
}
else
{
System.out.println("Comando <" + cmd + "> non riconosciuto");
}
}
}
void nazionalita(Scanner sc)
{
System.out.print("Nazionalita? > ");
String n = sc.nextLine();
List<Passeggero> l = nazionalita.get(n);
System.out.println(String.valueOf(l));
}
void elenco(Scanner sc)
{
Collections.sort(elenco);
System.out.println(elenco);
}
void leggi(Scanner sc)
{
System.out.print("Nome file? > ");
String nome = sc.nextLine();
Scanner file = null;
try
{
file = new Scanner(new FileReader(nome));
while(file.hasNextLine())
{
String tipo = sc.nextLine();
if(tipo.equals("VOLO"))
{
Volo v = new Volo();
v.popolaCampi(file);
voli.put(v.key, v);
elenco.add(v);
}
else if(tipo.equals("PASSEGGERO"))
{
Passeggero p = new Passeggero();
Volo v = voli.get(p.idVolo);
v.addPasseggero(p);
List<Passeggero> l = nazionalita.get(p.nazione);
if(l == null)
{
l = new LinkedList<Passeggero>();
nazionalita.put(p.nazione, l);
}
l.add(p);
}
else
{
System.out.println("Record tipo <" + tipo + "> non riconosciuto");
continue;
}
}
file.close();
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
}
}
E' possibile secondo voi migliorare questo codice?
Quale potrebbe essere una soluzione alternativa? Magari al posto delle HashMap utilizzare delle LinkedHashMap, ecc.
Fatemi sapere, grazie!