elektronische Kartei

brilzi89

Bekanntes Mitglied
Hallo zusammen. Ich habe von der Schule eine Aufgabe bekommen an der ich mich jetzt seit 3 Tagen beschäftige, aber immer noch nicht weiterkomme.

Kurz die Aufgabenstellung.

Erstellen einer elektronischen Kartei für Freunde
Entwickeln sie eine Klasse Kartei, eine Klasse Freund und eine Klasse Adresse.
In der Klasse Kartei sollen die Freunde verwaltet werden. Es sollen Methoden zum Hinzufügen, zum Ändern, zum Löschen von Freunde geben. Auch möchte man nach Freunde in der Kartei suchen können (z.B. nach dem Nachnamen oder dem Schlüssel) und die Gesamtanzahl der Freunde, die gespeichert sind, ausgeben können. Berücksichtigen Sie auch mögliche Fehler, die auftreten können.
In der Klasse Freund werden die Vornamen, Nachname, Geburtsdatum und Adressen der Freunde gespeichert. Außerdem benötigen Sie noch eine Variable, welche jedes Objekt „Freund“ eindeutig identifiziert (Schlüssel). Es gibt Methoden zum Anlegen von neuen Freunden, sowie zum Auslesen und zu den Änderungen einzelner wesentlicher Attribute. Außerdem sollen die Freunde auch mehrere Adressen haben können. Stellen Sie für diese Problemstellung nur die wichtigen Methoden zum Auslesen und Ändern der Attribute zur Verfügung. Berücksichtigen Sie auch mögliche Fehler, die auftreten können.
In der Klasse Adresse werden die Adressen wie PLZ, Ort und Strasse verwaltet. Stellen Sie für diese Problemstellung nur die wichtigen Methoden zum Auslesen und Ändern der Attribute zur Verfügung. Berücksichtigen Sie auch mögliche Fehler, die auftreten können.
In einem Mainprogramm sollen dann beispielhaft verschiedene Freunde mit ihren möglichen Adressen eingegeben und in der Kartei angelegt werden. Man soll auch das Löschen eines Eintrags und eine Änderung an einem Eintrag beispielhaft vornehmen. Am Schluss soll eine Adressliste aller Freunde erstellt und ausgegeben werden.


Ich habe nun 3 Klassen erstellt mit den Namen Freund, Adresse und Kartei. In den Klassen Freund und Adresse habe ich Instanzvariablen (z.B. String vorname) sowie Konstruktoren und getter und setter Methoden angelegt. Jetzt habe ich seit paar Tagen einen Blackout, da ich nicht weiß wie ich die ganzen Daten speichern soll. Kann mir da einer weiterhelfen. Sollte ich alles in ein Array speichern oder doch in eine XML Datei?
 

Robert Zenz

Top Contributor
Sollte ich alles in ein Array speichern oder doch in eine XML Datei?
Gar nicht, wenn ich die Aufgabe richtig lese. Also im Text wird das Wort "speichern" so verwendet dass es halt heiszt dass die Daten gehalten werden muessen, nicht dass diese auf irgendeine Art und Weise persistiert werden muessen ueber das Programmleben hinaus.

Ich habe nun 3 Klassen erstellt mit den Namen Freund, Adresse und Kartei. In den Klassen Freund und Adresse habe ich Instanzvariablen (z.B. String vorname) sowie Konstruktoren und getter und setter Methoden angelegt.
Perfekt, und so geht es weiter. Wenn du mehrere Freunde oder Adressen hast, verwendest du einfache eine java.util.List. Also so verkettet quasi:

Code:
public class Kartei
    private List<Freund> freunde = new ArrayList<>();

public class Freund
    private List<Adresse> adressen = new ArrayList<>();

public class Adresse

Dann noch die gefordereten add/remove Methoden hinzufuegen, und du bist schon fast fertig. Das aufwendisgte wird die Benutzerinteraktion sein zum eingeben der Daten (ist es immer, die Idee dass du "mal eben so" eine UI (egal ob CLI, TUI oder GUI) schreibst kannst du dir gleich abschminken).
 

brilzi89

Bekanntes Mitglied
Erstmal vielen Dank für die schnelle Antwort :)
Das mit der ArrayList habe ich schon versucht. Allerdings habe ich nichts Hilfreiches im Internet gefunden, wie ich diese Listen verknüpfen kann, um eine Adresse dem richtigen Freund zuzuweisen. Könntest du mir da noch ein Tipp geben, wie ich das umsetzen kann.
 

Robert Zenz

Top Contributor
Du erstellst eine neue Adresse, befuellst diese, und setzt diese dann dem Freund. Etwas Pseudo-Code basierend auf meinem vorherigen Beispiel:

Java:
Adresse adresse = new Adresse();
// Befuellen
freund.addAdresse(adresse);

// ---

public void addAdresse(Adresse adresse) {
    adressen.add(adresse);
}
 

javaNoob1337

Neues Mitglied
Könntet ihr das noch einmal zusammenhängend schreiben? Ich stehe leider etwas auf dem Schlauch. Wo erstelle ich die neue Adresse ? In der Freund Klasse oder ist das noch alles in der Adresse Klasse?
 

temi

Top Contributor
Könntet ihr das noch einmal zusammenhängend schreiben? Ich stehe leider etwas auf dem Schlauch. Wo erstelle ich die neue Adresse ? In der Freund Klasse oder ist das noch alles in der Adresse Klasse?
Eher, weder noch. Du hast drei Klassen Kartei, Freund und Adresse und irgend eine andere Klasse (mit der main()-Methode), die diese drei Klassen verwendet (das Mainprogramm). Dort werden Kartei, Freunde und Adressen erstellt und verwaltet. Steht auch so im Text:
In einem Mainprogramm sollen dann beispielhaft verschiedene Freunde mit ihren möglichen Adressen eingegeben und in der Kartei angelegt werden.
 

janice_

Mitglied
Hallo zusammen,
Ich habe eine ähnlich Fragestellung, wie oben beschrieben. In meiner Klasse Kartei habe ich die Methoden addFreund, removeFreund und getAnzahlFreunde. Die Methoden freundHinzufuegen, freundLoeschen, freundSuchen habe ich jetzt aber in meiner Main Klasse implementiert. Mein Programm funktioniert zwar so, ich bin mir jedoch nicht sicher, ob das hinsichtlich objektorientiertem Programmieren so richtig ist oder ob diese Methoden auch in die Klasse Kartei gehören.
Wie würdet ihr das sehen?
 

janice_

Mitglied
Erstmal vielen Dank für die schnelle Rückmeldung!
Ich habe die ArrayListen so implementiert, wie du oben geschrieben hattest. In die Adressliste werden dann die Adresse ggf. Adressen eingefügt mittels add(adresse[]) und in die ArrayListe Kartei dann die Freunde mit add(freund[]). Im Main Programm deklariere ich dann Kartei , Freunde und Adressen:
Java:
private Adresse[] adresse = new Adresse [10];
private Freund [] freund = new Freund [50];
private Kartei [] kartei = new Kartei [1];

Der User steuert das Programm über Konsoleneingaben. Man kann über eine Auswahl dann die verschiedenen Aktionen auswählen und da sind dann die Methoden hinterlegt z.B. freundLoeschen. Die Methode freundLoeschen habe ich dann in der Main Klasse. Man wird nach der ID des Freundes gefragt, die Eingabe wird dann gespeichert und mittels for-Schleife werden alle Freunde durchgegangen, wenn if (schluessel == eingabe) dann wird die remove Methode aus der Klasse Kartei ausgeführt und der Freund so aus der ArrayListe Freunde gelöscht. Ähnlich habe ich auch die anderen Methoden in der Main Klasse aufgebaut.

Ich bin nur etwas irritiert, weil es laut Aufgabenstellung in der Klasse Kartei Methoden zum Hinzufügen, zum Ändern, zum Löschen von Freunde sein sollen. Ich hatte es jetzt so interpretiert, dass z.B. die removeFreund Methode in Klasse Kartei, die zum Löschen ist. Die Methode zum spezifischen Löschen nach ID habe ich dann in der Main Klasse, weil ich da auch erst die Freunde erstelle.
 

KonradN

Super-Moderator
Mitarbeiter
Du sollst da auch nicht die Arrays so erstellen. Wie sehen denn die Klassen bei Dir aus? Denn die Klassen sollen sich ja gegenseitig nutzen.

Wenn Du ein Auto hast, dann hat das Auto Sitze und einen Motor. Und der Motor hat Kolben.

Wenn du Dir 3 Autos kaufst: bekommst du dann einen Haufen Karosserien (ohne Motoren und Sitze), einen Haufen Motoren (ohne Kolben), einen Haufen Sitze und natürlich noch ein Haufen Kolben?

Das wurde doch zusammen gesetzt. Jedes Auto hat die Sitze und den Motor, die es braucht. Und jeder Motor hat die Kolben, die er braucht.

So ist es auch hier. Ein Freund hat mehrere Adressen … dann sind die im Freund … und die Freunde sind in einer Kartei.
 

janice_

Mitglied
Stimmt das ergibt Sinn! Ich habe in den Klassen Freund und Kartei jeweils einen Konstruktor und die getter und setter Methoden für die jeweiligen Attribute Name, Vorname, Geburtstag etz. bzw. PLZ, Ort, Straße.

Müsste ich dann im Konstruktor von Freund schon die Arrays für Adresse erstellen? und im Konstruktor von Kartei dann die von Freund?
Also z.B. so bei Klasse Freund:
Java:
public class Freund
{
    
    private static int count = 0;
    private int ID ;
    private String name;     
    private String vorname; 
    private String geburtsdatum; 
    private Adressse [] adresse;
    private ArrayList<Adresse> adressliste = new ArrayList<Adresse>();
    
    
    
    public Freund (Scanner eingabe)
    {
        this.ID = count++;
        System.out.print ("Vorname: ");
        vorname = eingabe.nextLine();
        System.out.print ("Nachname: ");
        name = eingabe.nextLine();
        System.out.print ("Geburtstag: ");
        geburtsdatum = eingabe.nextLine();
        adresse = new Adresse [100]
    }
 

KonradN

Super-Moderator
Mitarbeiter
Das kommt dem Ganzen schon etwas näher. Zwei Dinge fallen da auf:

a) wo und wie willst due die Adressen speichern? Du hast da jetzt zwei Instanzvariablen: einmal das Array und einmal die ArrayList. Brauchst du beide?

b) bei so Klassen spricht man oft von Datenklassen. Da sind also meist nur die Daten drin. Logik wie Dinge abfragen und so sind unüblich (und kommen dann eher nicht in den Konstruktor). Daher sollte so ein Konstruktor nur entgegen nehmen, was an Daten notwendig ist zur Erzeugung des Datensatzes. Das kann dann etwas sein wie z.B. der Name. Ein Freund ohne Name gibt es nicht.

Die Eingabe von Werten ist dann da nicht. Das ist eine eigene Methode. Die fragt dann alles ab und erstellt den Freund und gibt ihn zurück.

Die Methode kommt üblicher Weise in eine Klasse, die so UI Dinge in sich hat. Aber prinzipiell könnte sie auch in Freund sein (technisch geht das, aber UI trennt man gerne von den Daten).
 

janice_

Mitglied
a)Ich dachte ich bräuchte beide, damit ein Freund mehrere Adressen haben kann. Aber wahrscheinlich brauche ich dann dafür nur die Liste?

b)Auch das macht Sinn, werde ich anpassen

Vielen Dank für die Rückmeldung!! 🙂
 

KonradN

Super-Moderator
Mitarbeiter
Ich dachte ich bräuchte beide, damit ein Freund mehrere Adressen haben kann. Aber wahrscheinlich brauche ich dann dafür nur die Liste?
Eins von beidem reicht Dir. In dem Array kannst Du mehrere Adressen speichern. Das Gleiche gilt für die ArrayList (Die hat intern auch nur ein Array - bietet nach außen aber die Zugriffsmöglichkeiten einer List. Daher der Name: ArrayList).

Wenn Du die ArrayList nutzen darfst, dann vereinfacht diese Dir alles. Beim Array musst Du etwas mehr Code selbst schreiben.
 

Neue Themen


Oben