Erste Schritte Adressbuch programmieren

Lauster

Neues Mitglied
Hallo,

mein Prolem ist,dass ich morgen ein fertiges Adressbuch in der Schule abgeben muss.
Ich bin leider sehr sehr schlecht in Informatik,weil es mich nie wirklich interessiert hat und ich es auch nichtmehr brauchen werde,jedoch darf ich mir kein Defizit in diesem Fach erlauben.
Bis jetzt sieht das programm so aus:

Java:
public class Adressbuch
{
  private String name;
  private int adresse;
  private boolean vergeben;
  
  public Adressbuch(String name, int laenge)
  {
  this.adresse=adresse;
  this.name=name;
  this.vergeben= false;  
  }
  
  public String getName()
  {
  return name;
  }
  
  public int getAdresse()
  {
  return adresse;
  }
  
  public boolean istVergeben()
  {
  return vergeben;
  }
  
  public void setVergeben(boolean verliehen)
  {
  this.vergeben= vergeben;
  }
}
Ich bin extrem verzweifelt, könnte mir vieleicht jemand das Programm zuende schreiben oder mir helfen, wie ich weiter vorgehen könnte, sodass man eine Namen in das Programm eingibt und das Programm den Namen nach Anfangsbuchstabe in die anderen einsortiert?
Wir sollen das mit Queue,List oder Stack verwirklichen und ich hab echt keine Ahnung wie das gehen soll.
 
Zuletzt bearbeitet von einem Moderator:

Saheeda

Top Contributor
Wenn du deine Hausaufgaben gemacht haben möchtest, schreibe einen Eintrag in die Jobbörse.

Andernfalls wird dir hier gern geholfen.
Du brauchst erstmal eine Klasse Person oder AdressbuchEintrag. In dieser Klasse speicherst du z.B. Vorname, Nachname, etc.
Die Klasse Adressbuch selbst hat nur eine Liste von Personen und Methoden, um neue Personen zu speichern oder zu verwalten.
 
X

Xyz1

Gast
Ich hab dir das, was @Saheeda beschriebt, mal aufgezeichnet,

ab.png

ein Adressbuch vergesst wie das Internet ja erst mal nix,

ich denke, in einer "Klassenarbeit", die ihr schreibt, wird genau das vorkommen,
deswegen ist es nicht schlecht, wenn du schon jetzt damit anfängst das zu lernen.

Das ist ein so genanntes Klassendiagramm in UML2.
 

Lauster

Neues Mitglied
Ich schreibe keine Klassenarbeit in diesem Fach deswegen ist es auch so schwachsinnig dafür eventuell ein defizit zu bekommen, aber über das Schulsystem müssen wir ja jetzt nicht reden.
Danke für das Klassendiagramm aber damit kann ich leider überhauptnichts anfangen :/
 

Tucan

Bekanntes Mitglied
Wie soll dein Adressbuch überhaupt aussehen? Sollst du praktisch mehrere Personen eintragen können. Dann empfehle ich dir eine saubere Trennung der Programmierung im Sinne der Objektorientierten Programmierung in der Form
Java:
import java.util.*;

public class Addressbuch {
private Person besitzer;
private ArrayList<Person> einträge;

public Addressbuch(Person besitzer) {
    this.besitzer = besitzer;
    this.einträge = new ArrayList<Person>();
}
public Person getBesitzer() {
    return this.besitzer;
}
public Person get(String name) {
    for(Person p : einträge){
   
        if(p.getName().equals(name))
            return p;
   
    }
}
//Ein Beispiel, wie man dann mit den Klassen arbeiten kann:
public static void main(String[] args) {
    //Herbert T.
    Person herbert_t = new Person("Herbert Thor", "Köln", "BStraße", 75, 12345);
    //Das Addressbuch soll Herbert T. gehören
    Addressbuch buch = new Addressbuch(herbert_t);
   
    //Herbert T. lebt im 18. Jhr.
    Person wolfgang = new Person("Wolfgang Amadeus Mozart", "Salzburg", "Unbekannte Straße", 0, 00000);
   
    //Oder doch nicht?
    Person billy = new Person("Bill Gates", "Redmond", "Sicherheitsleckstraße", 15, 0x00000);;
    //Ins Addressbuch eintragen
    buch.add(wolfgang);
    buch.add(willy);
   
    //Wolfgang ist tot :(
    buch.remove(wolfgang);
}
public void add(Person p) {
    einträge.add(p);
}
public void remove(Person p) {
    einträge.remove(p);
}
}


class Person {
private String name;
private String stadt;
private String straße;
private int hausnr;
private int postleitzahl;

public Person(String name, String stadt, String straße, int hausnr, int postleitzahl) {
    this.name = name;
    this.stadt = stadt;
    this.straße = straße;
    this.hausnr = hausnr;
    this.postleitzahl = postleitzahl;
}
//Gibt die ganzen Variablen zurück
public String getName() {
    return this.name;
}
public String getStadt() {
    return this.stadt;
}

public String getStraße() {
    return this.straße;
}
public int getHausnr() {
    return this.hausnr;
}
public int getPostleitzahl() {
    return this.postleitzahl;
}
//An dieser Stelle müsstest du für alles nochmal set...()-Methoden einbauen
//z.B. Kuchenstraße 9c, 15167 Nürnberg
public String getFullAddress() {
    return straße + " " + hausnr + ", " + postleitzahl + " " + stadt;
}

}

Das ist aber nur ein Beispiel für die Arbeit einer solchen Klasse. Dennoch hoffe ich, dir das Grundprinzip der OOP klargemacht zu haben:
1. Orientiere dich am realen Leben
2. Objekte bestehen im Prinzip nur aus Werten und Methoden, die darauf arbeiten
3. Was in einer Klasse intern passiert, ist Magie. Interne Werte sollten von außen maximal durch Aufruf von Methoden der Klasse geändert werden (herbert.setName("Oleg")), nicht direkt (z.B. Person.name = "Herbert")

Viel Glück bei deinem Schulprojekt ;)
 
X

Xyz1

Gast
Ich hab dir noch mal eins aufgezeichnet:

ab2.png

leider kann man sich streiten, zwischen Aggregation (hier) und Komposition,
ein Buch enthält 0 bis n Personen,
Adressbuch (Logik) hat genau ein Buch,
das Buch hat eine Methode, um eine Person hinzuzufügen,
Adressbuch hat eine Methode run (Einlesen), um Buch Person hinzuzufügen,

eigentlich müsste es auch eine Assoziation zwischen Adressbuch und Person geben, auch wenn Person kein(e) Variable, Parameter oder Rückgabetyp ist.

Kannst du damit etwas anfangen=?

Achja, bitte auf Gefällt mir klicken, das zeigt wer der Boss ist. :D
 

Saheeda

Top Contributor
@DerWissende
Welchen Sinn hat eine Trennung in Buch und Adressbuch? Das wäre so, als ob ich aus einem realen Addressbuch die Seiten (im Ganzen) entnehmen könnte. Als ob das Adressbuch nur ein Umschlag wäre.
Außerdem halte ich deine Klassendiagramme für syntaktisch falsch. Der Typ einer Variable bzw der Rückgabetyp steht nach dem Namen, nicht davor.
 
X

Xyz1

Gast
Java:
public class Adressbuch {
    private Buch buch = new Buch();
    public static void main(String[] args) {
        Adressbuch ab = new Adressbuch();
        ab.run();
    }
    public void run() { // einlesen...
        while (true) {
            // ...
        }
    }
}

class Buch {
    private List<Person> personen = new ArrayList<Person>();

    public Buch() {
    }

    public boolean hinzuf(Person p) {
        // ...
    }
}

class Person {
    private String name;
    private String adresse;
    private boolean vergeben;

    public Person(String name, String adresse, boolean vergeben) {
        this.name = name;
        this.adresse = adresse;
        this.vergeben = vergeben;
    }
    // ...
}

Wirklich falsch?

Das KD hat mir ein kleines Tool erstellt. Eigentlich ist es auch eine Komposition!

Dann verbessert bitte das KD.
 

JStein52

Top Contributor
Das Thema ist eh durch. Sie musste heute abgeben !! Der Rest könnte jetzt zu einem Wettbewerb der Adressbücher ausarten, hilft aber der TE nicht weiter ! Sie musste das Thema wohl alleine auf die Reihe kriegen.
 
X

Xyz1

Gast
1 Tag für ein Adressbuch ist nicht wirklich viel. ;)

Aber ja, wenn man möchte, kann man die "Einlese-Logik" auch in das Buch/Adressbuch schreiben.

Zum Link von Ibm: Hat hier nicht vor kurzer Zeit jemand geschrieben, ideal wäre es, aus KD <-> Quelltext und umgekehrt zu generieren?
 

JStein52

Top Contributor
1 Tag für ein Adressbuch ist nicht wirklich viel.
Das können wir zwar so sehen, ist aber nun mal so.

ideal wäre es, aus KD <-> Quelltext und umgekehrt zu generieren?
Das hatte ich geschrieben, ich hatte aber geschrieben dass das das normale Vorgehen ist dass aus dem UML-Modell (und das ist nicht nur das Klassendiagramm !) Code generiert wird. Und beim generieren legst du die Zielsprache fest, es kann deshalb genausogut C++ sein !
 
X

Xyz1

Gast
Und beim generieren legst du die Zielsprache fest, es kann deshalb genausogut C++ sein !

Ja, weiß ich, aber hier ist doch Java vorgegeben. Ich hatte in Softwareentwicklung ne 1, deshalb weiß ich, dass es nicht nur KDs gibt.

Vielleicht schreib ich mir für mich selber auch so ein Adressbuch, wenn dafür aber dieses nicht-kleine MySQL im Hintergrund laufen muss (500mb RAM?), dann lasse ich das lieber. :D
 
X

Xyz1

Gast
Dann nimm doch SQLite. Das ist für sowas perfekt.

Das Ding ist, SQLiTE kann es in-memory Datenbank verwendet werden, dann bräuchte man in Java gar keine Collection mehr, Laufzeittechnisch gesehen...

Aber alles der Aufgabenstellung nicht angemessen.

@Lauster: Wie weit bist du, welche Note hast du bekommen, bist du wirklich Mädchen?
 
K

kneitzel

Gast
Also eine Schulnote besagt nicht immer viel. Ich hatte damals in der Schule auch eine 1 in Informatik und ich würde unserem Informatik Unterricht auch die besten Beurteilungen geben. Aber verglichen mit dem Studium ist das nicht wirklich erwähnenswert.

Und im Studium hatten wir auch diverse Themen rund um die Software-Entwicklung, aber das ist einfach lachhaft im Vergleich zum späteren Job! Aber ok, da würde ich den Leuten auch nicht beste Noten geben. Aber Praxisferne würde ich denen auf jeden Fall sofort bescheinigen.

Und vieles ist einfach Handwerk. Das soll eine Uni aus meiner Sicht nicht unbedingt unterrichten. Da kommt man schnell rein, wenn man einmal in der Praxis aktiv ist. Aber das ist nichts, das einem einfach zu zufliegt sonder etwas, mit dem man sich intensiv beschäftigen muss.

Und viele Dinge gibt es fertig und da schreibt man das doch nicht mehr nach. Das kann mal Spass machen, so habe ich diverse abstrakte Datentypen selbst geschrieben, aber ich sehe keinen Grund, wieso ich die wirklich einsetzen sollte. Wäre meist eine unnötige Abhängigkeit. Und ab einer gewissen Komplexität ist die Frage, ob ich es wirklich besser machen könnte. Datenbanken sind da ein sehr guter Bereich. Und da gibt es gleich mehrere Lösungen, die man vergleichen kann, ehe man sich für eine Lösung entscheidet.
 
X

Xyz1

Gast
Das ist schon ok... do ganz praxisfern bin ich ja auch nicht.

Es wäre einfach nur schön gewesen, noch mal eine Rückmeldung zu bekommen, wies so gelaufen ist.

1 Tag Zeit -> Schwierige Aufgabe -> Keine Komplettlösung erhalten -> Abgabe steht bevor -> Klassenarbeit steht bevor -> Zeitdruck -> Gute Note wird erwartet -> Ich verstehe es nicht -> Motivation sinkt -> Verzweiflung -> Abgabe ist gelaufen -> Noch eine 3 bekommen -> Einmal durchschnaufen -> Klassenarbeit steht bevor -> Noch bessere Note wird erwartet -> Args... was nun tun? -> Kann das nicht jemand anderes für mich machen? -> Wieso muss ich das machen, wenn es doch andere könnten? -> Args...

(worst-case-scenario)
 

JStein52

Top Contributor
Aber alles der Aufgabenstellung nicht angemessen.
Wieso nicht ? Ich meinte ja jetzt auch nicht für die Hausaufgabe der TE. Die ist durch. Ich meinte das für dein eigenes Adressbuch das du machen wolltest. Ich verwende dieses SQLite auch in vielen solchen kleinen Anwendungen.
Das Ding ist, SQLiTE kann es in-memory Datenbank verwendet werden
Siehst du das jetzt als Vorteil oder Nachteil ?
 
K

kneitzel

Gast
@Saheeda Du warst nicht zu harsch. Ich habe mich zurück gehalten. Da ist jemand schlecht in Informatik und hat keine Lust sich einmal hin zu setzen und etwas zu lernen. Jemand anderes könnte es ja machen.

Ist ok. Ich finde auch, Geld zu verdienen ist viel zu blöd. Könntet Ihr nicht alle Geld für mich verdienen und es mir dann auf mein Konto überweisen? Und das aber bitte sofort, denn morgen sind wieder Ausgaben fällig. Und ich kann es mir einfach nicht erlauben, kein Geld auf dem Konto zu haben!

Ich helfe ja gerne, aber dann sollte auch die Hilfe angenommen werden. Aber ich muss niemandem etwas über Informatik erzählen, den es einfach nicht interessiert. Und nichts für ein Fach zu tun, in dem man sich kein Defizit erlauben kann, ist einfach nur Blödheit pur. Da ist ein Defizit vielleicht das Beste, denn dann hat sich evtl. noch ein Jahr mehr Zeit, sich mit dem Thema auseinander zu setzen.
 
X

Xyz1

Gast
:):):) Leeres Blatt abgegeben, 6 !

Textaufgaben, also "wo man" mit einem Text hätte antworten müssen, mit selbstgezeichneten Bildern beantworten (keine Penisse), hat bei mir auch eine 6 ergegeben.

Aber Spaß beiseite. Was heißt Defizit? 4? 5? Hauptfach, Nebenfach, LK, GK? Wann hattest du kein interesse mehr an dem Fach? Welche Bücher hast du gelesen / solltest/wirst du lesen?

Welche Bücher können wir emmpfehlen?
 

JStein52

Top Contributor
Ich helfe ja gerne, aber dann sollte auch die Hilfe angenommen werden
Sie hat ja um Hilfe gebeten. Und diese Hilfe wäre ein Adressbuch gewesen ... Diese Hilfe hat sie nicht bekommen und warum sollte sie sich jetzt nochmal melden ? Warum massen wir uns an zu entscheiden was für sie jetzt in der Situation eine Hilfe gewesen wäre ? Wir hätten ja auch mit ihr zusammen in 2-3 Stunden dieses Adressbuch gemeinsam entwickeln können statt ihr erst mal Grundkurse in Informatik zu empfehlen, Bücher die ihr dann auch nichts mehr nutzen und Grundsatzdiskussionen mit ihr zu führen ob sie denn nun gefälligst Informatik spannend finden soll oder nicht.
 
K

kneitzel

Gast
Also ich glaube nicht, dass ich mich so unverständlich ausgedrückt habe. Und es ist eben keine Hilfe, anderen die Hausaufgaben zu machen. Evtl. sollte man einmal über paar Dinge wie:
- Betrug (Wenn fremde Leistung als eigene ausgegeben wird)
- Sinn von Hausaufgaben
nachdenken. Ich werde diese Punkte nicht näher erläutern und überlasse jedem selbst, dies zu recherchieren, so es ihn interessiert.
 

JStein52

Top Contributor
Und es ist eben keine Hilfe, anderen die Hausaufgaben zu machen.
Und das entscheidest du ? Ich würde sagen das kann derjenige der um diese Hilfe bittet doch selber entscheiden. Ein 17-jähriger Schüler ist dazu durchaus in der Lage. Ich weiss dass wir inzwischen bei so einer Art Grundsatzdiskussion sind. Aber die "Standardaussage" bei so was ist immer: wenn du eine Komplettlösung willst dann kannst du die kriegen aber dann stell die Anfrage unter Stellenausschreibung und dann kostet dich das ganze halt ein paar Euros. Das halte ich dann aber auch für keine Hilfe.

Edit:
Wenn fremde Leistung als eigene ausgegeben wird
Und du hast nie abgeschrieben ?? Klar ist das Betrug. Deshalb 6, setzen wenn es auffällt. So funktioniert Schule
 
Zuletzt bearbeitet:
X

Xyz1

Gast
Also ich glaube nicht, dass ich mich so unverständlich ausgedrückt habe. Und es ist eben keine Hilfe, anderen die Hausaufgaben zu machen. Evtl. sollte man einmal über paar Dinge wie:
- Betrug (Wenn fremde Leistung als eigene ausgegeben wird)
- Sinn von Hausaufgaben

Den wesentlichen Punkt hast du leider vergessen: Ich postete das nach der Abgabe, nach ihren Angaben. ;)

Die Schuld liegt also zu 100 % bei ihr. :D
 
X

Xyz1

Gast
Ich kann es jetzt leider auch nicht mehr editieren,
@Mods: falls ihr es liest, Beitrag #34 von mir bitte löschen,
damit "niemand in Versuchung gerät".
Danke vielmals
 

Neue Themen


Oben