# Routerlager



## Bandonion (24. Jun 2009)

Hallo zusammen

hab vor einer Woche von meinem Lehrer den Auftrag bekommen ein Router Lager zu Programmieren ohne verwendung einer Datenbank nur mit hilfe eines Arrays... hab so weit alle features die mein Lehrer wollte eingebaut (Router aufnehmen, Router löschen, Betriebsstunden ändern, sowie das Routerlager auf der Gui Oberfläche anzeigen lassen). Jedoch sollten wir das ganze in eine datei abspeichern sodas wir bei beenden des Programmes und einem neustart diese datei wieder in das Array einlesen können. Hab das ganze mit einem Objektserializer probiert und das speichern funktioniert soweit ich das sehen kann auch (auf jeden fall verändert sich der Text in der abgespeicherten datei :toll: ) nur das einlesen will nicht so richtig bringt zwar keinen fehler aber wnn ich auf Routerlager zeigen klicke wird nichts angezeigt. Mach da seit Tagen mit rum kann mir da vielleicht jemand nen tip geben woran das liegen kann stehe im moment ziehmlich auf dem schlauch.

Funktioniert das überhaupt so wie ich mir das gedacht habe oder sollte ich da nen ganz anderen Ansatz gehen?


----------



## Bandonion (24. Jun 2009)

```
public class RouterStart {
	
	public static void main (String[] s)
	{
		RouterGUI RouterVerw = new RouterGUI();
		RouterVerw.führeAus();
	}
}
```


----------



## Bandonion (24. Jun 2009)

```
import java.awt.*;
import java.awt.event.*;
import java.io.*;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

 //Benutzer-Oberfläche der Router-Verwaltung, die ihrerseits ein Objekt
 //namens alleRouter der Klasse Routerlager anlegt und verwaltet
public class RouterGUI extends Frame
{
	Routerlager alleRouter = new Routerlager(); //Def. und Erzeugen

	TextField tfTypenzeichen = new TextField("",10);
	TextField tfHersteller = new TextField("",20);
	TextField tfModell = new TextField("",17);
	TextField tfBaujahr = new TextField("",6);
	TextField tfBetriebsstunden = new TextField("",8);
	Button btNeuerRouter = new Button("Router aufnehmen");
	Button btNeueStunden = new Button("Betriebsstunden eines vorhandenen Routers ändern");
	Button btZeigen = new Button("Routerlager zeigen");
	Button btDatenladen = new Button("Daten laden");
	Button btDatenspeichern = new Button("Daten speichern");
	Button btlöschen = new Button("löschen");
	TextArea taAusgabe = new TextArea(9,75);
	JLabel Bild = new JLabel();


	public void richteFensterEin() // Fenster initalisieren und beschreiben
	{
		//WindowsListener hinzufügen, damit Schließknopf funktioniert
		addWindowListener (new WindowAdapter ()
		{
			
			public void windowClosing (WindowEvent ereignis)
			{ //ersetzt bisher leere Methode
				setVisible (false);
				dispose();
				System.exit(0);
			}
		}
	);
		// runde Klammer vom Windowlistener geschlossen;
	
	tfModell.addKeyListener(new KeyAdapter()  
    {
			public void keyReleased(KeyEvent evt)
			{
				////TODO add your code for euro_Fenster.keyReleased
				init ();
			}
	  });
}
	public void richteKnöpfeEin()
	{
		btNeuerRouter.addActionListener (new ActionListener ()
		{
			public void actionPerformed (ActionEvent e)
			{
				 alleRouter.neuerRouter (tfTypenzeichen.getText(), tfHersteller.getText(),
				 tfModell.getText(), Integer.parseInt(tfBaujahr.getText()),
				 Integer.parseInt(tfBetriebsstunden.getText())); //Router aufnehmen
				 tfTypenzeichen.setText(""); //und Eingabefelder löschen
				 tfHersteller.setText("");
				 tfModell.setText("");
				 tfBaujahr.setText("");
				 tfBetriebsstunden.setText("");
				 ImageIcon icon3 = new ImageIcon ();   		
				 Bild.setIcon(icon3);
//				 Routerlager.Speichern();
			}
		}); // runde Klammer (von addActionListener)
				
		
		btNeueStunden.addActionListener (new ActionListener ()
		{
			public void actionPerformed (ActionEvent e)
			{
				 alleRouter.ändereBetriebsstunden (tfTypenzeichen.getText(),
				 Integer.parseInt(tfBetriebsstunden.getText())); //Stunden  ändern
				 tfTypenzeichen.setText(""); //und Eingabefelder löschen
				 tfHersteller.setText("");
				 tfModell.setText("");
				 tfBaujahr.setText("");//["+Integer.parseInt(tfBetriebsstunden.getText())+"]
				 tfBetriebsstunden.setText("");
//				 Routerlager.Speichern();
			}
		}); // runde Klammer (von addActionListener)
		
		
		btlöschen.addActionListener (new ActionListener ()
		{
			public void actionPerformed (ActionEvent e)
			{
				 alleRouter.lösche (tfTypenzeichen.getText(),
				 Integer.parseInt(tfTypenzeichen.getText())); //Stunden  ändern
			     tfTypenzeichen.setText(""); //und Eingabefelder löschen
				 tfHersteller.setText("");
				 tfModell.setText("");
				 tfBaujahr.setText("");//["+Integer.parseInt(tfBetriebsstunden.getText())+"]
				 tfBetriebsstunden.setText("");
//				 Routerlager.Speichern();
			}
		}); // runde Klammer (von addActionListener)
		
		
		btZeigen.addActionListener (new ActionListener ()
		{
			public void actionPerformed (ActionEvent e)
			{
				taAusgabe.setText( alleRouter.listeAlle() );
			}
		}); // runde Klammer (von addActionListener)
		
		btDatenspeichern.addActionListener (new ActionListener ()
		{
			public void actionPerformed (ActionEvent e)
			{
				Routerlager.Speichern();
			}
		}); // runde Klammer (von addActionListener) 
		
		btDatenladen.addActionListener (new ActionListener ()
		{
			public void actionPerformed (ActionEvent e)
			{
				Routerlager.Laden();
			}
		}); // runde Klammer (von addActionListener) 
		
	}
	
	public void führeAus ()
	{
//		Routerlager.Laden();
		setTitle("Router - Verwaltung - FTE - Katrinski/Müller"); // Fenster-Titel
		setSize (750,650); // Fenstergröße (Breite und Höhe in Pixeln)
		setLayout (new FlowLayout());
		richteFensterEin();
		richteKnöpfeEin();
		add (new Label("Typenzeichen:"));
		add (tfTypenzeichen);
		add (new Label("Routerhersteller:"));
		add (tfHersteller);
		add (new Label("Modell:"));
		add (tfModell);
		add (new Label("Baujahr:"));
		add (tfBaujahr);
		add (new Label("Aktuelle Betriebsstunden:"));
		add (tfBetriebsstunden);
		add (new Label("h."));
		add (btNeuerRouter);
		add (btNeueStunden);
		add (btZeigen);
		add (btlöschen);
		add (btDatenladen);
		add (btDatenspeichern);
		add (taAusgabe);
		setVisible(true);
//		Routerlager.Speichern();
	}
	public void init()
	 {
		 	ImageIcon icon3 = new ImageIcon ();   		
			Bild.setIcon(icon3);
			String Eingabe=null;
			Eingabe = tfModell.getText(); 
			setLayout (null);
			ImageIcon icon = new ImageIcon("bilder/"+Eingabe+".jpg");   		
			Bild.setIcon(icon);
			Bild.setBounds(275, 320, 200, 200);
			add (Bild);  
	 }
}
```


----------



## Bandonion (24. Jun 2009)

```
import java.io.*;
		
public class Router implements Serializable
{
		//Hier stehen die Daten, die einen Router beschreiben.
		//Das vorangestellte private sorgt dafür, dass nur die Methoden
		//dieser Klasse auf die Daten zugreifen dürfen (verhindert Fehler)

	public String typenzeichen; // z.B. "A-2-Verw" – Gebäude A-2.Stock Verwaltung
	public String hersteller; // z.B. "CISCO"
	public String typ; // z.B. "1800"
	public int baujahr; // z.B. 1998
	public int Betriebsstunden; // z.B. 17520 =2a
	
		//Und hier kommen die Methoden, um die Daten zu ändern oder anzusehen:

	public void merken (String nummer, String firma, String modell,int jahr, int Laufzeit)
		//Beim Aufruf Router.merken ("A-2-Verw","CISCO","1800",1998,17520)
		//werden die übergebenen Daten in die fünf Variablen eingetragen:
	{
		typenzeichen = nummer;
		hersteller = firma;
		typ = modell;
		baujahr = jahr;
		Betriebsstunden = Laufzeit;
	}

	public String nennen ()
		//Gibt eine Zeichenkette mit allen Daten des Routers aus
	{
		String daten = "Der Router mit der Nr. '"+typenzeichen+"', ein "+
		hersteller+" "+typ+" von "+baujahr+", ist bisher "+Betriebsstunden+" Stunden gelaufen.";
		return (daten);
	}

	public String nummer()
		//Nennt nur das Typenzeichen des Routers, sonst nichts
	{
		return (typenzeichen);
	}
	public String hst()
		//Nennt nur den Hersteller des Routers, sonst nichts
	{
		return (hersteller);
	}
	public String ty()
		//Nennt nur den Typ des Routers, sonst nichts
	{
		return (typ);
	}
	public int bau()
		//Nennt nur das Baujahr des Routers, sonst nichts
	{
		return (baujahr);
	}
	public int bet()
		//Nennt nur die Betriebsstunden des Routers, sonst nichts
	{
		return (Betriebsstunden);
	}
	public int Betriebsstunden ()
		//Nennt nur die Betriebsstunden des Routers, sonst nichts
	{
		return (Betriebsstunden);
	}

	public void neuerStand (int Stunden)
		//Ändert nur die Betriebsstunden des Routers, sonst nichts
	{
		Betriebsstunden = Stunden;
	}
	
	public void alleslöschen (String tz,String hs,String t,int bj, int bs)
	{
		typenzeichen = tz;
		hersteller = hs;
		typ = t;
		baujahr = bj;
		Betriebsstunden = bs;
	}

	
}
```


----------



## Bandonion (24. Jun 2009)

```
import java.io.*;
		//Erzeugt und verwaltet Reihung Router aus 25 Objekten der Klasse Router
import java.util.Arrays;

public class Routerlager implements Serializable
{
		//Daten des Routerlagers
	public static Router[] lager = new Router[25]; //(bis zu) 25 Router im Routerlager
	private int anzahlDerRouter = 0; //zunächst ist noch kein Router bekannt.
		//Erlaubt ist/sind 0 <= anzahlDerRouter <= 25
		//Methoden zur Verwaltung des  Routerlagers

	public Routerlager() //Automatische Initialisierung
	{
		for (int i=0; i<25; i++)
		{
			lager[i] = new Router (); //Erzeugen der 25 Objekte vom Typ Router
		}
	}

	
	public int RouterAnzahl () //Sagt, wie viele Router es gibt
	{
		return (anzahlDerRouter);
	}

	public void neuerRouter (String nummer, String produzent, String modell,int jahr, int Betriebsstunden)
 //Erweitert Routerlager um den angegebenen Router
	{
		lager[anzahlDerRouter].merken (nummer,produzent,modell,jahr,Betriebsstunden);
			//Speichert Daten im lager an der indizierten Stelle durch Aufruf
			//der Router-Methode merken. Jede der 25 lager-Komponenten ist ein Router!
		anzahlDerRouter = anzahlDerRouter + 1;
			//Durch die Neuaufnahme hat sich die Zahl der Router um 1 erhöht!
	}

	public String listeAlle()
		//Erzeugt Text mit den Daten aller Router: 1 Zeile pro Router
	{
		String ausgabe = "";
		for (int i=0; i<anzahlDerRouter; i++)
		{
			ausgabe = ausgabe+(i+1)+".) "+lager[i].nennen()+"\n";
		} //nutzt  Router-Methode
		return (ausgabe);
		
	}
	
	
	public void ändereBetriebsstunden (String Typenzeichen, int neueStd)
		//Ändert denBetriebsstunden des Routers  mit dem angeg. Typenzeichen
	{
		//Finden des Index i vom Router mit der gesuchten Nummer
		int i = anzahlDerRouter - 1; //von hinten beginnen
		while ((i>=0)&&(! lager[i].nummer().equals(Typenzeichen)))
		{ 	//equals statt == , da versch. Objekte mit gleichem Inhalt
			i = i-1;
		}
			//Betriebsstunden ändern
		if (i>=0) //Router gefunden -- sonst ist i = -1
		{
			lager[i].neuerStand (neueStd); //Aufruf der Router-Methode
		}
	}
	public void lösche (String Typenzeichen, int test)
		//Ändert denBetriebsstunden des Routers  mit dem angeg. Typenzeichen
	{
			//Finden des Index i vom Router mit der gesuchten Nummer
		int i = anzahlDerRouter - 1; //von hinten beginnen
		int z = anzahlDerRouter -1;
		
		while ((i>=0)&&(! lager[i].nummer().equals(Typenzeichen)))
		{ 	//equals statt == , da versch. Objekte mit gleichem Inhalt
			i = i-1;
		}
			//Betriebsstunden ändern
		if (i == z)
		{
			anzahlDerRouter=anzahlDerRouter-1;
		}
		
		else if (i>=0) //Router gefunden -- sonst ist i = -1
		{
			String tz = lager[z].nummer();
			String hs = lager[z].hst();
			String t =lager[z].ty();
			int bj = lager[z].bau();
			int bs = lager[z].bet();
			lager[i].alleslöschen (tz,hs,t,bj,bs); //Aufruf der Router-Methode	
			anzahlDerRouter=anzahlDerRouter-1;
		}
	}
	public static void Speichern() 
	{

		File file = new File("arraysasfile.bin");
		// arrays definieren
		// serializer erzeugen
		Speichern serializer = new Speichern(); 
		// arrays speichern
		serializer.save2file(lager, file);
		serializer.close_out();
		
	}
	
	public static void Laden() 
	{
		File file = new File("arraysasfile.bin");

		Speichern serializer = new Speichern(); 

		lager = (Router[]) serializer.readFromFile(file);
		serializer.close_in();
		// geladene arrays ausgeben
		System.out.println(lager);
	}	
}
```


----------



## Bandonion (24. Jun 2009)

```
/* #####################
* ObjectSerializer.java
*  #####################
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Arrays;

public class Speichern 
{
	private FileOutputStream FOS = null;
	private ObjectOutputStream OOS = null;
	private FileInputStream FIS = null;
	private ObjectInputStream OIS = null;

	public Speichern() 
	{
	}

	public void save2file(Object obj, File file) 
	{
		if (OOS == null || FOS == null) 
		{
			open_out(file);
		}

		try 
		{
			OOS.writeObject(obj);
		} 
		
		catch (IOException ioe)
		{
			System.err.println
			("Error: Could not serialize object.");
			ioe.printStackTrace(System.err);
//			System.exit(1);
		}
	}

	public Object readFromFile(File file)
	{
		if (OIS == null || FIS == null)
		{
			open_in(file);
		}

		try
		{
			Object obj = (Object) OIS.readObject();
			return obj;
		}
		
		catch (IOException ioe)
		{
			System.err.println
			("Error: Could not deserialize object.");
			ioe.printStackTrace(System.err);
//			System.exit(1);
		}
		
		catch (ClassNotFoundException cnfe)
		{
			System.err.println
			("Error: Could not find class!");
			cnfe.printStackTrace(System.err);
//			System.exit(1);
		}
		return null;
	}

	private void open_out(File file)
	{
		if (OOS != null || FOS != null) 
		{
			close_out();
		}

		try 
		{
			FOS = new FileOutputStream(file);
			OOS = new ObjectOutputStream(FOS);
		}
		
		catch (IOException ioe)
		{
			System.err.println(ioe.getMessage());
			ioe.printStackTrace(System.out);
//			System.exit(1);
		}
	}

	private void open_in(File file)
	{
		if (FIS != null || OIS != null)
		{
			close_in();
		}

		try 
		{
			FIS = new FileInputStream(file);
			OIS = new ObjectInputStream(FIS);
		}
		
		catch (IOException ioe)
		{
			System.err.println(ioe.getMessage());
			ioe.printStackTrace(System.out);
//			System.exit(1);
		}
	}

	public void close_out()
	{
		if (OOS != null && FOS != null) 
		{
			try 
			{
				OOS.close();
				OOS = null;
				FOS.close();
				FOS = null;
			} 
			
			catch (IOException ioe) 
			{
				System.err.println(ioe.getMessage());
				ioe.printStackTrace(System.out);
//				System.exit(1);
			}
		}
	}

	public void close_in() 
	{
		if (OIS != null && FIS != null) 
		{
			try 
			{
				OIS.close();
				OIS = null;
				FIS.close();
				FIS = null;
			} 
			
			catch (IOException ioe) 
			{
				System.err.println(ioe.getMessage());
				ioe.printStackTrace(System.out);
//				System.exit(1);
			}
		}
	}
}
```


----------

