-
09.09.07 17:14 #1
- Registriert seit
- Apr 2007
- Beiträge
- 32
Hallo,
soll für die Uni ein bestehendes Telefonbuch erweitern.
VorhanDen;
ein Telefonbuch mit Oberfläche
Klasse Einträge mit Informationen zu Person (eigene Klasse),
Anschrift (eigene Klasse)
Telefonnummer (eigne Klasse)
Was gesucht ist:
-Einträge in persistent in geeigneten Dateien zu verwalten.
(z.B. eine Datei für jeden Ort)
-Einträge sollen erst nach Vorwahl und dann nach Telefonnummer geordnet abgespeichert vorliegen...
Suche (nach Name und Vorname, eventuell Ort)
ich müsste ich 2 Aspekte speichern?
-eine Liste über die verschiedenen Orte/Telefonbücher
-einmal die Einträge zu jedem dieser Orte
könnt ihr mir da methodische Hinweise geben?
--> vor allem betreffend Datenhaltung
-- Filter und Sortieren?
DANKEGeändert von Cortadillo (09.09.07 um 17:54 Uhr) Grund: Konkretisierung
-
Muss das in Dateien gespeichert werden? Eine Datenbank scheint mir dafür mehr geeignet.
-
10.09.07 10:17 #3
- Registriert seit
- Apr 2007
- Beiträge
- 32
ja,
nach Aufgabenstellung 'in Dateien'
-
Hallo,
darfst du andere Frameworks nutzen?
Dann würde ich dir nämlich vorschlagen, das ganze mit XML zu lösen. Dazu kannst du dann einen der folgen Mapper nutzen.
JAXB
XMLBeans
Castor
JBind
JBiX
Sollen die in der richtigen Reihenfolgen abgespeichert werden oder nur angezeigt werden?
MFG
zEriXEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
10.09.07 17:09 #5
- Registriert seit
- Apr 2007
- Beiträge
- 32
wie ich das verstanden habe, sollen sie geordnet abgespeichert sein.
und vermutlich ohne Verwendung eines Mappers.
bin selbst etwas voran gekommen.
habe eine sortierte ArrayList gefüllt
mit folgendem wird ein neuer Eintrag angelegt und gleich sortiertCode :1 2 3 4 5 6 7 8 9 10 11 12
if (eingabeModus) { Person p = new Person(jc_anrede.getSelectedItem().toString(), jt_vorname.getText(), jt_name.getText()); Anschrift a = new Anschrift(jt_strasse.getText(), jt_hausnr.getText(), jt_postleitzahl.getText(), jt_ort.getText(), jt_zusatz.getText()); TeleNummer t = new TeleNummer(jt_vorwahl.getText(), jt_nummer.getText(), jc_anschluss.getSelectedItem(). toString()); System.out.println(p.toString() + a.toString() + t.toString()); Eintrag e = new Eintrag(p, t, a);
implementiert werden soll dann eine Suche nach Vorname,Name,Ort (dieser optional)Code :1 2 3 4 5 6 7 8
public boolean neuenEintragAnlegen(Eintrag e) { tbL.add(e); Collections.sort(tbL); indexAktuell=tbL.size()-1; this.setChanged(); this.notifyObservers(); return true; }
wie komme ich daran? (tbl ist als List definiert)
Code :1 2 3
public TelBuch1() { tbL = new ArrayList(); }
Danke
-
Ist das ne Übung oder ist das ein Auftrag der Uni?
Du kannst bei einer Liste leicht über den Index zugreifen.
Code :1
Eintrag e = (Eintrag)tbl.get(0);
Wenn du mit Java 5 arbeitest, dann kannst du das auch so machen, dann brauchst du nicht zu casten.
MFGCode :1 2 3
List<Eintrag> tbl = new ArrayList<Eintrag>(); // Einträge hinzufügen Eintrag e = tbl.get(0);
zEriXGeändert von zerix (11.09.07 um 07:46 Uhr)
Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
11.09.07 10:56 #7
- Registriert seit
- Apr 2007
- Beiträge
- 32
so beides.
einerseits muss ich es machen als Schein;
und habs nicht ohne Hilfe hinbekommen.
(hab mich allerdings eigentlich nur mit c# beschäftigt und insgesamt nur wenig
mit Collections)
andererseits will ich auch selbst verstehen, wie es funkt.
Danke, das (Eintrag) hilft.
ich versuchte direkt auf (Person) zu casten, dass nahm mir aber eclipse übel.
-
11.09.07 12:20 #8
- Registriert seit
- Apr 2007
- Beiträge
- 32
hi, der letzte Tip war hilfreich.
die Suche funktioniert nun.
Warum funktioniert '==' nicht bei Vergleichen, aber 'equals' ?
danke
-
11.09.07 12:33 #9
- Registriert seit
- Nov 2006
- Beiträge
- 15
Weil == nur überprüft, ob die Referenzen auf das selbe Objekt zeigen.
Inhaltlicher Vergleich (von String) macht man halt mit equals()...
-
Mit "==" wird geschaut, ob es sich um das gleiche Object handelt. Also ob die Objecte an der gleichen Speicherstelle liegen.
Mit equals wird geprüft ob die Objecte gleich sind. Also ob der "Inhalt" der Objecte gleich ist. Deshalb ist es auch wichtig wenn du selbst Models oder ähnliches schreibst, dass du die equals-Methode überschreibst.
MFG
zEriXEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
11.09.07 18:26 #11
- Registriert seit
- Apr 2007
- Beiträge
- 32
so, danke,
kann mich nun an den nächsten Schritt wagen.
das Speichern.
-
Mit equals vergleicht man nicht nur Strings, sondern genrell Objecte.
Zitat von daN-the-man
MFG
zEriXEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
12.09.07 10:41 #13
- Registriert seit
- Apr 2007
- Beiträge
- 32
hallo,
ich bins wieder.
hab jetzt geschafft, das Telefonbuch abzuspeichern...
--> Liste wieder in einzelne Objekte zerpflücken,
diese abspeichern.
Code :1 2 3 4 5 6 7 8 9 10 11
OutputStream fos = null; List ll=tb.getTelList(); try { fos = new FileOutputStream(fname); ObjectOutputStream o = new ObjectOutputStream( fos ); for (int x=0;x<(ll.size());x++){ Eintrag ee = (Eintrag) ll.get(x); o.writeObject( ee ); } }
nun, das funktioniert soweit, nur ist das Sinnvoll?
bzw. wie speichert man die komplette Liste?
nun möchte ich die Liste wieder auslesen
Code :1 2 3 4 5 6 7 8
try { ObjectInputStream in = new ObjectInputStream( new FileInputStream(fname)); int xx; Eintrag e = (Eintrag) in.readObject(); tb = new TelBuch1(); tb.neuenEintragAnlegen(e);
dabei habe ich leider nichts gefunden,
eine Schleife oder ähnlich,
um das File auszulesen, bis alle Objekte gelesen und übertragen
-
Sofern die Liste Serializable ist kannst du diese auch einfach selbst mit dem ObjectOutputStream rausschreiben. ArrayList ist z.B. Serialisierbar.
Ansonsten schreibst du an den Anfang einen Integer mit der Anzahl von Elementen und liest diesen zuerst aus, dann kannst du solange entsprechend die Listenelemente wieder auslesen.
-
12.09.07 14:36 #15
- Registriert seit
- Apr 2007
- Beiträge
- 32
hi,
scheinbar funktioniert das Ausschreiben der serialisierten Liste nun.
aber das Einlesen...
--> die Ausgabe von cap ist immer -1, was EOF bedeutetCode :1 2 3 4 5 6 7 8
InputStream fis = null; try { fis = new FileInputStream(fname); ObjectInputStream ois = new ObjectInputStream(fis); int cap = ois.read(); System.out.println(cap); }
wieso ist der Eingangstrom leer?
das File ist definitiv nicht leer
danke
Ähnliche Themen
-
telefonbuch in Fensterapplikation umwandeln
Von mazcapone im Forum C/C++Antworten: 2Letzter Beitrag: 26.02.08, 15:18 -
Telefonbuch Suche
Von port29 im Forum Coders TalkAntworten: 0Letzter Beitrag: 12.10.07, 19:28 -
Telefonbuch script
Von Angel Arts Grafix im Forum JavaAntworten: 1Letzter Beitrag: 22.05.05, 14:57 -
Telefonbuch in JAVA
Von Angel Arts Grafix im Forum JavaAntworten: 2Letzter Beitrag: 17.05.05, 21:32 -
Telefonbuch programmieren
Von alma im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 21.08.03, 22:43



1Danke

Zitieren


Login





