// Beispiel Klasse fuer FluSuServlet // WWW & Servlets // Fachgruppe Softwaretechnik // Uwe Poborski 14.04.99 // GraphDatei.java // benoetigte Klassen: // Flughafen // Flug // Flugzeug // ZeitAngabe import java.io.*; import java.util.*; class GraphDatei implements Serializable { public Flughafen Graph = null; private Flughafen Hafen = null; private Flug FlugNach = null; private char Delim = ';'; public HafenDatei HDatei; public FlugDatei FDatei; public class HafenDatei { public Flughafen Flughaefen; private PrintWriter PW; private StreamTokenizer ST; public HafenDatei() { Flughaefen = null; } public HafenDatei(String DateiName) throws IOException { ST = new StreamTokenizer(new BufferedReader( new InputStreamReader( new FileInputStream(DateiName)))); ST.eolIsSignificant(true); ST.commentChar('#'); String N = null, K = null; int i = 0; boolean weiter = true; Flughaefen = null; while (ST.nextToken() != StreamTokenizer.TT_EOL); // skip Header while (weiter) { switch (ST.nextToken()) { case StreamTokenizer.TT_EOF: weiter = false; break; case StreamTokenizer.TT_EOL: if (Flughaefen == null) Flughaefen = new Flughafen(N, K, i); else Flughaefen.anhaengen(new Flughafen(N, K, i)); N = null; break; case StreamTokenizer.TT_NUMBER: i = (int)ST.nval; break; case StreamTokenizer.TT_WORD: if (N == null) N = ST.sval; else K = ST.sval; break; } } } public void schreiben(Flughafen FH) throws IOException { PW = new PrintWriter(new FileWriter("d:\\flubu\\Flughaefen.dat")); Flughafen N = FH; PW.write("Name;Kuerzel;RelZeit\n"); while (N != null) { // System.out.println(N.Name + Delim + N.Kuerzel + Delim + Integer.toString(N.RelZeit) + "\n"); PW.write(N.Name + Delim); PW.write(N.Kuerzel + Delim); PW.write(Integer.toString(N.RelZeit) + "\n"); N = N.Naechster; } PW.close(); } } public class FlugDatei { private PrintWriter PW; private StreamTokenizer ST; public FlugDatei() { } public FlugDatei(String DateiName) throws IOException { ST = new StreamTokenizer(new BufferedReader( new InputStreamReader( new FileInputStream(DateiName)))); ST.eolIsSignificant(true); ST.commentChar('#'); String VonName = null, NachName = null, Nr = null, Typ = null; int AS = -1, AM = -1, ES = -1, EM = -1; boolean weiter = false; Flughafen Von = null, Nach = null; Flug F = null; if (HDatei != null) if (HDatei.Flughaefen != null) weiter = true; while (ST.nextToken() != StreamTokenizer.TT_EOL); // skip Header while (weiter) { switch (ST.nextToken()) { case StreamTokenizer.TT_EOF: weiter = false; break; case StreamTokenizer.TT_EOL: Von = HDatei.Flughaefen.gibFlughafenMitName(VonName); Nach = HDatei.Flughaefen.gibFlughafenMitName(NachName); if (Von != null && Nach != null) { F = new Flug(Nr, Nach, Typ); F.Anfang = new ZeitAngabe(AS, AM); F.Ende = new ZeitAngabe(ES, EM); if (Von.Fluege == null) Von.Fluege = F; else { if (F.Anfang.istFrueherals(Von.Fluege.Anfang)) Von.Fluege = Von.Fluege.eingefuegt(F); else Von.Fluege.anhaengen(F); } AS = AM = ES = EM = -1; VonName = NachName = Nr = Typ = null; Von = Nach = null; } break; case StreamTokenizer.TT_WORD: if (VonName == null) VonName = ST.sval; else if (Nr == null) Nr = ST.sval; else if (Typ == null) Typ = ST.sval; else if (NachName == null) NachName = ST.sval; break; case StreamTokenizer.TT_NUMBER: if (AS < 0) AS = (int)ST.nval; else if (AM < 0) AM = (int)ST.nval; else if (ES < 0) ES = (int)ST.nval; else if (EM < 0) EM = (int)ST.nval; break; } // switch } // while } public void schreiben(Flughafen FH) throws IOException { PW = new PrintWriter(new FileWriter("d:\\flubu\\Fluege.dat")); Flughafen N = FH; PW.write("Von;AbStd;AbMin;Nummer;Typ;AnStd;AnMin;Nach\n"); while (N != null) { schreiben(N.Name, N.Fluege); N = N.Naechster; } PW.close(); } public void schreiben(String Von, Flug F) throws IOException { Flug N = F; while (N != null) { // System.out.println(N.Name + Delim + N.Kuerzel + Delim + Integer.toString(N.RelZeit) + "\n"); PW.write(Von + Delim); PW.write(Integer.toString(N.Anfang.gibStunden()) + Delim); PW.write(Integer.toString(N.Anfang.gibMinuten()) + Delim); PW.write(N.Nummer + Delim); if (N.Maschine != null) PW.write(N.Maschine.Typ + Delim); else PW.write("XXX" + Delim); PW.write(Integer.toString(N.Ende.gibStunden()) + Delim); PW.write(Integer.toString(N.Ende.gibMinuten()) + Delim); PW.write(N.Hafen.Name + "\n"); N = N.Naechster; } } } public class FlugzeugDatei { } public GraphDatei() { Graph = new Flughafen("A", "A", 0); Hafen = new Flughafen("B", "B", 0); FlugNach = new Flug("AB1", Hafen, Flugzeug.Typ2); FlugNach.Anfang = new ZeitAngabe(10, 0); FlugNach.Ende = new ZeitAngabe(12, 0); Graph.anhaengen(Hafen); Graph.Fluege = FlugNach; FlugNach = new Flug("AB2", Hafen, Flugzeug.Typ1); FlugNach.Anfang = new ZeitAngabe(12, 0); FlugNach.Ende = new ZeitAngabe(15, 0); Graph.Fluege.anhaengen(FlugNach); Hafen = new Flughafen("C", "C", 0); FlugNach = new Flug("BC1", Hafen, Flugzeug.Typ3); FlugNach.Anfang = new ZeitAngabe(15, 0); FlugNach.Ende = new ZeitAngabe(16, 0); Graph.anhaengen(Hafen); Graph.gibFlughafenMitName("B").Fluege = FlugNach; Hafen = new Flughafen("D", "D", 0); FlugNach = new Flug("AD1", Hafen); FlugNach.Anfang = new ZeitAngabe(10, 0); FlugNach.Ende = new ZeitAngabe(12, 0); Graph.anhaengen(Hafen); Graph.gibFlughafenMitName("A").Fluege.anhaengen(FlugNach); } public void schreiben() { try { HDatei = new HafenDatei(); HDatei.schreiben(Graph); FDatei = new FlugDatei(); FDatei.schreiben(Graph); } catch (Exception ign){} } public void lesen(String Pfad) { Graph = null; String DatName = Pfad + "Flughaefen.dat"; System.out.println(DatName); try { // HDatei = new HafenDatei("\\flusu\\Flughaefen.dat"); HDatei = new HafenDatei(DatName); // HDatei.Flughaefen.show(false); // FDatei = new FlugDatei("\\flusu\\Fluege.dat"); DatName = Pfad + "Fluege.dat"; System.out.println(DatName); FDatei = new FlugDatei(DatName); // HDatei.Flughaefen.show(false); } catch (IOException ign){System.out.println("Schade");} } }