Programm Kaffeetassen (zehnte Version)


                 import java.util.*;
                 import java.io.*;

                 class Kaffeetassen {

                         /* Programm Kaffeetassen von Heiko Schmuck, im April 2011
                         * Das Programm beschreibt Kaffetassen und gibt die Beschreibung
                         * auf dem Bildschirm aus.
                         * In der zehnten Version werden die Daten aus einer Datei gelesen.
                         * Es können neue Tassen eingegeben werden.
                         * Zum Zwischenspeichern der Tassen werden Listen benutzt
                         * Die Tassen können in einer Datei gespeichert werden.
                         */

                         /* Methode um Kaffeetassen aus einer Datei zu lesen
                         * dp ist der Dateipfad als String
                         * tl ist die Liste der Tassen.
                         */

                         void DateiLesen(LinkedList tl, String dp) throws IOException {

                                 // In diese Variablen kommen die Eigenschaften der Tasse.
                                 String f, he, a;
                                 int h, d;
                                 Tasse t;

                                 System.out.println("Datei lesen");
                                 System.out.println("--------------------------------");

                                 //Das Datei-Objekt erzeugen
                                 FileReader Datei = new FileReader(dp);

                                 //Die Datei öffnen und einen Input Stream für die Datei erzeugen
                                 BufferedReader din = new BufferedReader(Datei);

                                 //Die Zeilen in einer FOR-Schleife einlesen
                                 for(String zeile = din.readLine(); zeile != null; zeile = din.readLine()){
                                         StringTokenizer data = new StringTokenizer(zeile, ",");

                                         //Die Eigenschaften in Variablen ablegen
                                         f = data.nextToken();
                                         h = new Integer(data.nextToken());
                                         d = new Integer(data.nextToken());
                                         he = data.nextToken();
                                         a = data.nextToken();

                                         //Das Objekt Tasse erzeugen und ausgeben.
                                         t = new Tasse(f, h, d, he, a);
                                         t.hinzufuegen(tl);
                                 }

                                 //Datei schließen
                                 din.close();

                                 System.out.println("--------------------------------");
                         }

                         void NeueTasse(LinkedList tl) throws IOException {

                                 // In diese Variablen kommen die Eigenschaften der Tasse.
                                 String f, he, a;
                                 int h, d;
                                 Tasse t;

                                 // Variable für die Antwort
                                 String e;

                                 // Hier wird die Tastatureingabe eingebunden
                                 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

                                 // Abfragen ob eine neue Tasse eingegeben werden soll
                                 System.out.println("Möchten Sie eine neue Tasse eingeben? J oder N eingeben.");
                                 e = in.readLine();      // Wartet auf eine Eingabe, die Eingabe wird mit Enter abgeschlossen.

                                 // Nach der Eingabe prüfen ob ein "J" eingegeben wurde, ansonsten diesen Teil überspringen.
                                 if(e.equals("J")) {

                                         // Die Eigenschaften der neuen Tassen eingeben
                                         System.out.println("Farbe?");
                                         f = in.readLine();
                                         System.out.println("Höhe?");
                                         h = new Integer(in.readLine()).intValue();
                                         System.out.println("Durchmesser?");
                                         d = new Integer(in.readLine()).intValue();
                                         System.out.println("Henkel?");
                                         he = in.readLine();
                                         System.out.println("Aufdruck?");
                                         a = in.readLine();

                                         // Neue Tasse anlegen
                                         t = new Tasse(f, h, d, he, a);

                                         // Die neue Tasse ausgeben
                                         System.out.println("--------------------------------");
                                         t.hinzufuegen(tl);
                                         System.out.println("--------------------------------");
                                         System.out.println();
                                 }
                         }

                         void TassenAusgeben(LinkedList tl) {

                                 // Erst einmal eine Überschrift
                                 System.out.println("Meine Kaffeetassen:");
                                 System.out.println("--------------------------------");

                                 Tasse t;

                                 for (ListIterator l = tl.listIterator();l.hasNext();) {
                                         t = (Tasse) l.next();
                                         t.ausgeben();
                                 }
                         }

                         void TassenSpeichern(LinkedList tl, String dp) throws IOException {

                                 //Das Dateiobjekt erzeugen
                                 FileWriter Datei = new FileWriter(dp);

                                 //Die Datei öffnen und einen Output Stream für die Datei erzeugen
                                 BufferedWriter dout = new BufferedWriter(Datei);

                                 Tasse t;
                                 String zeile;
                                 String neueZeile = System.getProperty("line.separator");

                                 for (ListIterator l = tl.listIterator();l.hasNext();) {
                                         t = (Tasse) l.next();
                                         zeile = t.farbe + "," + String.valueOf(t.hoehe) + "," + String.valueOf(t.durchmesser) + "," + t.henkel + "," + t.aufdruck + neueZeile;
                                         dout.write(zeile);
                                         System.out.println("--------------------------------");
                                         System.out.println("Tasse gespeichert");
                                         System.out.println("--------------------------------");
                                 }
                                 dout.close();
                         }


                         public static void main (String [] args) throws IOException {

                                 // Der Pfad zur Datei
                                 String P = "C:\\justfun\\Tassen.txt";

                                 // Das Objekt Kaffeetassen erzeugen
                                 Kaffeetassen K = new Kaffeetassen();

                                 // Ein Listenobjekt für die Tassen erzeugen.
                                 LinkedList T = new LinkedList();

                                 K.DateiLesen(T,P);
                                 K.NeueTasse(T);
                                 K.TassenAusgeben(T);
                                 K.TassenSpeichern(T, P);


                         }

                 // Die Klasse Kaffeetassen wieder schließen.
                 }

                 class Tasse {

                         // Erst einmal wieder Platzhalter für die Werte
                         String farbe, henkel, aufdruck;
                         int hoehe, durchmesser;


                         /* Ich beschreibe meine Tasse:
                         * f ist die Farbe und vom Typ String
                         * h ist die Höhe und vom Typ int
                         * d ist der Durchmesser und auch vom Typ int
                         * he ist die Aussage ob die Tasse einen Henkel hat oder nicht und vom Typ String
                         * a ist der Aufdruck und ebenfalls vom Typ String
                         */

                         public Tasse (String f, int h, int d, String he, String a) {
                                 farbe = f;
                                 hoehe = h;
                                 durchmesser = d;
                                 henkel = he;
                                 aufdruck = a;
                         }


                         // Die Methode ausgeben
                         void ausgeben () {
                                 System.out.println("Farbe: " + farbe);
                                 System.out.println("Höhe: " + hoehe);
                                 System.out.println("Durchmesser: " + durchmesser);
                                 System.out.println("Henkel: " + henkel);
                                 System.out.println("Aufdruck: " + aufdruck);
                                 System.out.println();
                         }

                         void hinzufuegen (LinkedList l) {
                                 l.add(this);
                                 System.out.println("Tasse hinzugefügt");
                         }

                         void loeschen (LinkedList l) {
                                 l.remove(this);
                                 System.out.println("Tasse gelöscht");
                         }

                 // Die Klasse Tasse schließen
                 }