WinFuture-Forum.de: Java: Kunden Db Mit Vector - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Java: Kunden Db Mit Vector Vector muss leider sein!


#1 Mitglied ist offline   mubbelbubbel82 

  • Gruppe: Mitglieder
  • Beiträge: 16
  • Beigetreten: 28. Mai 05
  • Reputation: 0

geschrieben 28. Mai 2005 - 10:52

Hallo,

code:public class KundenContainer {

protected Vector v=new Vector(5,2);
int i;
protected int kundennummer;


public KundenContainer() {
}

//wählt zwischen den einzelnen Menüoptionen
public void auswahl() {

KundenContainer einKundenContainer=new KundenContainer();

System.out.println("Kundenverwaltung");
System.out.println("Was wollen sie tun?");
int ein;

//Auswahl-Maske, die solange wiederkommt, bis einer Abbruch wählt
do {
ein=IOTools.readInteger("(1) Kunde anlegen, (2) Kunde nach Knr suchen, (3) Kunde nach Name suchen (4) bisheriger Kundentamm, () Abbruch\n");

switch(ein){
case 1: einKundenContainer.eingabe(); //Eingabe-Maske
break;

case 2: einKundenContainer.sucheKunde(); // Suche nach der KNR
break;

// case 3: einKundenContainer.sucheKunde(); //Suche nach Name
// break;

case 4: einKundenContainer.ausgabe(); //bisheriger Kundenstamm
break;

default:
System.out.println("Programmende erwünscht! "); //alles andere: Abbruch
break;
}
}while(ein==1 || ein==2 || ein==3 || ein==4);

}

public void sucheKunde(){

int suchknr=IOTools.readInteger("Welche Kundennummer wollen sie suchen? ");

//fängt Kundennummern ab, die nicht existieren
if(suchknr>v.size() || suchknr<1) {
System.out.println("Kundennummer nicht vorhanden!");
}

i=0;
for( Enumeration e = v.elements(); e.hasMoreElements(); e.nextElement()){




//einKunde=(Kunde)e.nextElement();
Kunde k1=new Kunde();
// einKunde = (Kunde)k1.ausgebenKunde();
System.out.println(k1.getKnr());


if(suchknr == i+1){ //i+1
System.out.println(v.elementAt(suchknr-1)); //oder i
}
i++;
}
}

//Eingabemaske
public void eingabe() {
String name=IOTools.readString("Wie heißt der Kunde? ");
kundennummer=v.size()+1;
Kunde k1=new Kunde(name,kundennummer);
v.add(k1.ausgebenKunde());
}

//Ausgabeprozedur
public void ausgabe() { //selbsterklärend und irrelevant

for(int i=0;i<v.size();i++) {
System.out.println(v.elementAt(i));
}
}

}



Erstmal das Wesentliche. In der Main dazu steht noch der Aufruf eigtl auf die auswahl() drinne und in der Kunde.class stehen halt Name und KNR als Eigenschaften für die Kunden.

Erklärung: Man soll einen Kunden eingeben können mit KNR, die automatisch generiert werden soll und soll mit diesen Eigenschaften mehrere Kundenobjekte anlegen mit Hilfe eines Vektors.
Läuft alles problemlos.

Suchfunktion per KNR: Wie es oben steht, geht es zwar, jedoch wär es wohl geschickter, wenn ich statt i irgendwie direkt an die Kundennummer der einzelnen Vekotrenelemente komme. Schaff das aber einfach nicht. Wie geht das? Ich pfusch das ja ein wenig hin mit dem i.

Hier ist es zwar noch nich so das Prob, jedoch soll da noch ne weitere Suche aufsetzen: nach Namen. Und spätestens da sollte ich die Namen seperat aus dem Vektor Objektname für Objektname auslesen können.
Nur leider krieg ich immer nur den Namen der letzten Instanz. Wie kann ich dem sagen, dass der einfach direkt Name bzw. KNR jedes Vektorelements ansprechen soll!?

==> Es folgen evlt noch weitere Fragen, da ich bei der Suche auch noch an nem Detail häng und auf das ganze noch ne AWT bzw. Swing-GUI aufsetzen soll. Hab nur noch bis nächste Woche Freitag Zeit, daher wär es kewl, wenn ihr mich bißl stützen könnt und mir nen kleinen Tipp gebt.
Unsern Prof kannste diesbezüglich vergessen!
0

Anzeige



#2 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 28. Mai 2005 - 15:37

1. Verzichte auf Vektor - was du brauchst, ist ein SortedMap<Integer,String>.
2. Darüber kannst du mit der for(each)-Schleife auch vernünftig iterieren, .keySet().contains(Integer) verwenden, lastKey()...
3. Fehlerbehandlung, Objektorientierung und Modularität sind unter aller Sau.

Versuch's mal so:

public class KundenContainer {

  protected SortedMap<Integer,Kunde> KundenDB=new TreeMap<Integer,Kunde>();
  private static final String frage="(1) Kunde anlegen, (2) Kunde nach Knr suchen, (3) Kunde nach Name suchen (4) bisheriger Kundentamm, () Abbruch\n";

  public KundenContainer() {
  }

  //wählt zwischen den einzelnen Menüoptionen
  public void auswahl() {

    System.out.println("Kundenverwaltung");
    System.out.println("Was wollen sie tun?");
    //Auswahl-Maske, die solange wiederkommt, bis einer Abbruch wählt
    do { int ein=IOTools.readInteger(frage);
      switch(ein){
        case 1: eingabe(); //Eingabe-Maske
        break;
  
        case 2: sucheKunde(); // Suche nach der KNR
        break;
  
        // case 3: sucheKunde(); //Suche nach Name
        // break;
  
        case 4: ausgabe(); //bisheriger Kundenstamm
        break;
  
        default:
        System.out.println("Programmende erwünscht! "); //alles andere: Abbruch
        break;
      }
    } while(0<ein<5);
  }

  protected void sucheKunde(){
    int suchknr=IOTools.readInteger("Welche Kundennummer wollen sie suchen? ");
    if (KundenDB.keySet().contains(suchknr)) {
      System.out.println("Kundennummer nicht vorhanden!");
    }
    else {
      System.out.println(KundenDB.get(suchknr));
    }

  //Eingabemaske
  protected void eingabe() {
    String name=IOTools.readString("Wie heißt der Kunde? ");
    kundennummer=KundenDB.lastKey()+1;
    KundenDB.put(kundennummer,name);
  }

  //Ausgabeprozedur
  public void ausgabe() { //selbsterklärend und irrelevant
  
    for(Integer knr:KundenDB) {
      System.out.println(knr+" "+KundenDB.get(knr));
    }
  }
}
[CODE]

Dieser Beitrag wurde von Rika bearbeitet: 28. Mai 2005 - 15:40

Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#3 Mitglied ist offline   mubbelbubbel82 

  • Gruppe: Mitglieder
  • Beiträge: 16
  • Beigetreten: 28. Mai 05
  • Reputation: 0

geschrieben 28. Mai 2005 - 16:58

1. Es steht zwar schonmal so oben, aber wenn der Prof die Aufgabe mit Vector gelöst haben möchte, dann sollte man es auch so machen!

2. Da wir zu Exceptions erst in den nächsten 2 Vorlesungen kommen werden, sind auch keine vorzufinden. Oh Wunder!

3. Was ist daran von der Objektorientierung zu bemängeln?

4. Was meinst du mit Modularität?

5. Es geht auch höflicher. Man sollte doch bei simplen Fragestellungen durchaus mal die Kirche im Dorf lassen und nicht wunder was zusammen programmieren wollen. Es ist lediglich ein Testat und keine Doktorarbeit.
0

#4 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 28. Mai 2005 - 20:58

1. Dann sag deinem Professor, daß das so keinen Sinn macht. Normalerweise schaut man sich an, was für eine Datenstruktur man braucht und sucht sich dann eine geeignete Implementierung - aber Vector ist hier einfach unbrauchbar, weil es ein nichtsortierte Multimenge ist. Sag ihm das, dann wird er's auch einsehen.
Zumal Vector aus gutem Grund deprecated ist.
2. Meinst du nicht eher Collections anstatt Exceptions?
3. Die Datenkapselung ist fast Null.
4. Siehe 3. Was hat die Datenein- und -ausgabe mit der Datenhaltung/-verarbeitung zu tun? Alles total durcheinander in eine Klasse geklatscht.
5. Nun ja, du machst es dir selbst nur unnötig schwierig und kompliziert. Dein Problem ist, daß du die Klasse mehrfach in sich selbst einpackst. Da Objektnamen aber nur auf Instanzen verweisen, aber sich das tatsächliche Objekt ändert, entsteht ein Durcheinander. Hint: Set<Long> a=new HashSet<Long>(); a.add(3);Set b=a; System.out.println(a.get()); -> 3
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#5 Mitglied ist offline   mubbelbubbel82 

  • Gruppe: Mitglieder
  • Beiträge: 16
  • Beigetreten: 28. Mai 05
  • Reputation: 0

geschrieben 29. Mai 2005 - 12:37

Ich hab es im 1. und 2. Post schon versucht, aber ich versteh leider großteils nur Bahnhof, was du mir für Tipps geben willst.

Ich meinte, dass ich keinerlei Exception-Handling drin habe, weil das noch besprochen wird.
Mal davon abgesehen, ob es sinnvoll ist in deinen Augen oder nicht. Es muss damit gehen, da gibt`s keine Diskussion!

Kapselung etc... kein Plan, was du meinst.

Wo würdest du denn bei nem solch kleinen Programm die Ausgabe rein? In die main?
Also wenn, dann halt bitte auch sagen, wie es besser gehen soll, da ich das noch lerne.

Für mich war diese Struktur schonmal recht sinnvoll: Kunde+Eigenschaften in kunde.class, in der Main steht der Aufruf der auswahl() und im Container legt er Objekte an, die er in den Vektor schiebt (bzw. in meinem Beispiel hier noch schiebt er nur nen String rein, im aktuellen schiebt er nen k1 (Kunden-Instanz) rein).

Kann ja sein, dass ich mich einfach zu wenig auskenne, aber wenn jetzt eine dieser Methoden eher in die main sollte, dann sollte man etwas chillen und net von totalem Müll sprechen. Sowas ärgert mich, wenn man nicht objektiv helfen kann. :blink:

Was du unter 5. sagst, ist mir klar, dass das net passt. Das ist ja die Frage, wie ich das umgehen kann!! So einfach scheints wohl net zu sein, waS? ^_^
0

#6 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 29. Mai 2005 - 16:33

Ok, hier mal ein sinnvoller Vorschlag nur mit Vector:

public class Kunde {
    private int Kundennummer;
    private String Kundenname;
  
    public Kunde(int f_Kundennummer, String f_Kundenname) {
      Kundennummer=f_Kundennummer;
      Kundenname=f_Kundenname;
    }
  
    public int Nummer() {
      return Kundennummer;
    }
  
    public String Name() {
      return Kundenname;
    }
  }

public static class KundenDB {

  private Vector<Kunden> Kundenliste=new Vector<Kunde>();
  
  private int index=0;
  
  public KundenDB() {
  }
  
  private Kunde getKundeByName(String f_Kundenname) {
    Enumeration<Kunde> e=Kundenliste.elements();
	while (e.hasMoreElements()) {
   Kunde kunde=e.nextElement();
   if (kunde.Name().equals(f_Kundenname)) {
     return Kunde;
      }
	}
	return null;
  }
  
  private Kunde getKundeByName(int f_Kundennummer) {
    Enumeration e=Kundenliste.elements();
	while (e.hasMoreElements()) {
   Kunde kunde=e.nextElement();
   if (kunde.Nummer()==f_Kundennummer) {
     return Kunde;
      }
	}
	return null;
  }
  
  private boolean isKunde(String f_Kundenname) {
    return (getKundeByName(f_Kundenname) != null);
  }
  
  private boolean isKunde(int f_Kundennummer) {
    return (getKundeByName(f_Kundennummer) != null);
  }
  
  public boolean addKunde(String f_Kundenname) {
    if (!isKunde(f_Kundenname)) {
   Kunde neuerKunde=new Kunde(index,f_Kundennummer);
      index++;
   return true;
	}
	else {
   return false;
  }
  
  public Integer getNummerByNummer(int f_Kundennummer) {
    if (isKunde(f_KundenNummer)) {
   return getKundeByNummer(f_Kundennummer).Name();
	}
	else {
   return null;
	}
  }

  public String getNameByName(String f_Kundenname) {
    if (isKunde(f_KundenName)) {
   return getKundeByName(f_Kundenname).Nummer();
	}
	else {
   return null;
	}
  }
  
  public Enumeration<Kunde> getAlleKunden() {
    return Kundenliste.elements();
  }
}

public class Main {
  KundenDB meineKunden=new KundenDB();

  public Main {
  }
  
  public static int main(String[] args) {
     System.out.println("Kundenverwaltung");
     System.out.println("Was wollen sie tun?");
     int ein;

    while (0<(ein=IOTools.readInteger("(1) Kunde anlegen, (2) Kunde nach Knr suchen, (3) Kunde nach Name suchen (4) bisheriger Kundentamm, () Abbruch\n")<5); {
   switch(ein){
        case 1:
    String name=IOTools.readString("Wie heißt der Kunde? ");
          if (!meineKunden.addKunde(name)) {
            System.out.println("Der Kunde existiert bereits in der Datenbank."); 
          }
  break;

        case 2: 
          int suchknr=IOTools.readInteger("Welche Kundennummer wollen sie suchen? ");
          String name=meineKunden.getKundeByNummer(suchknr);
    if (name!=null) {
      System.out.println("Name: "+name);
    }
    else {
            System.out.println("Kundennummer nicht vorhanden!");
    }
       break;

       case 4: Enumeration<Kunde> kunden=meineKunden.getAlleKunden();
      while (e.hasMoreElements()) {
         Kunde kunde=e.nextElement();
         System.out.println("("kunde.Nummer()+","+kunde.Name()+")")
   }
       break;

    }
  }
}


Aber letztendlich ist es absolut häßlich, kaum objektorientiert und letztendlich nur ein Nachbau einer Collection.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#7 Mitglied ist offline   mubbelbubbel82 

  • Gruppe: Mitglieder
  • Beiträge: 16
  • Beigetreten: 28. Mai 05
  • Reputation: 0

geschrieben 31. Mai 2005 - 00:07

hmm danke schonmal. so hatte ich mir das ja auch gedacht, aber es funzt bei mir nicht.

ich post einfach mal alles. :)




public class Kunde {

public String kunde;
public String name;
public static int kundennummer;

public Kunde() {
}

public Kunde(String name,int kundennummer) {
this.kundennummer=kundennummer;
this.name=name;
}

public void setKnr(int kundennummer){
this.kundennummer=kundennummer;
}

public static int getKnr() {
return kundennummer;
}

public void setName(String name){
this.name=name;
}

public String getName(){
return name;
}

public String ausgebenKunde() {
kunde=this.getName()+"\t "+this.getKnr();
return this.kunde; //kunde
}

}



public class KundenContainer {

protected Vector v=new Vector(5,2);
int i;
protected int kundennummer;


public KundenContainer() {
}

//wählt zwischen den einzelnen Menüoptionen
public void auswahl() {

KundenContainer einKundenContainer=new KundenContainer();

System.out.println("Kundenverwaltung");
System.out.println("Was wollen sie tun?");
int ein;

//Auswahl-Maske, die solange wiederkommt, bis einer Abbruch wählt
do {
ein=IOTools.readInteger("(1) Kunde anlegen, (2) Kunde nach Knr suchen, (3) Kunde nach Name suchen (4) bisheriger Kundentamm, () Abbruch\n");

switch(ein){
case 1: einKundenContainer.eingabe(); //Eingabe-Maske
break;

case 2: einKundenContainer.sucheKunde(); // Suche nach der KNR
break;

case 3: einKundenContainer.sucheKunde(); //Suche nach Name
break;

case 4: einKundenContainer.ausgabe(); //bisheriger Kundenstamm
break;

default:
System.out.println("Programmende erwünscht! "); //alles andere: Abbruch
break;
}
}while(ein<5 && ein>0); //ein==1 || ein==2 || ein==3 || ein==4);

}

public void sucheKunde(){

int suchknr=IOTools.readInteger("Welche Kundennummer wollen sie suchen? ");

//fängt Kundennummern ab, die nicht existieren
if(suchknr>v.size() || suchknr<1) {
System.out.println("Kundennummer nicht vorhanden!");
}

i=0;
for(Iterator iter = v.iterator(); iter.hasNext(); ){

Kunde kunde = (Kunde)v.get(i);
// Kunde kunde = (Kunde) iter.next();
// kunde = new Kunde();
if (kunde.getKnr() == suchknr) {
// Gefunden!
System.out.println("Gefunden!");
break;
}
i++;


// Kunde k1=new Kunde();
// System.out.println(k1.getKnr());
//
// if(suchknr == i+1){
// System.out.println(v.elementAt(suchknr-1)); //oder i
// }
// i++;
}
}

//Eingabemaske
public void eingabe() {
String name=IOTools.readString("Wie heißt der Kunde? ");
kundennummer=v.size()+1;
Kunde k1=new Kunde(name,kundennummer);
v.add(k1); //k1.ausgebenKunde()
}

//Ausgabeprozedur
public void ausgabe() { //selbsterklärend und irrelevant
for(int i=0;i<v.size();i++) {
System.out.println(v.elementAt(i));
}
}

}




public class Kundenverwaltung {

/** Creates a new instance of Kundenverwaltung */
public Kundenverwaltung() {
}

/**
* @param args the command line arguments
*
*/



public static void main(String[] args) {

KundenContainer einKundenContainer=new KundenContainer();

einKundenContainer.auswahl(); //die auswahl im Container steuert das ganze Programm


}

}
0

#8 Mitglied ist offline   [U]nixchecker 

  • Gruppe: aktive Mitglieder
  • Beiträge: 347
  • Beigetreten: 17. Mai 05
  • Reputation: 0
  • Wohnort:Bayern
  • Interessen:Informatik, Linux, Rollerbladen, Bodybuilding, GungFu

geschrieben 01. Juni 2005 - 10:49

Weil ich gerade zufällig reingeguckt habe, mal ein kleiner Tipp.
Dein Code ist nämlich ziemlich confus.

Du lässt im Kundencontainer ne Schleife laufen damit die Eingabe abgefragt wird, das ist kein besponders toller stil. Du blähst den Kundencontainer mit Code auf der da eigentlich für die Kundenliste irrelevant ist.

Zitat

Suchfunktion per KNR: Wie es oben steht, geht es zwar, jedoch wär es wohl geschickter, wenn ich statt i irgendwie direkt an die Kundennummer der einzelnen Vekotrenelemente komme. Schaff das aber einfach nicht. Wie geht das? Ich pfusch das ja ein wenig hin mit dem i.


Du must den Vektor durchlaufen und jedes Kundenobject.Name prüfen.
Hier wäre natürlich ne Hashtabelle, wie Rika sie vorgeschlagen hätte viel besser.

Was ich jedoch als Abschluss sagen möchte ist was ganz anderes.
Da du von Prof geredet hast, heißt das, dass du studierst. Ich hoffe jetzt nicht, dass du irgendwas mit Informatik studierst. Denn mit deinen Softwareentwicklunsgskills schauts nicht sehr gut aus, wenn du bei so Peanuts Sachen schon Probleme hast was passiert dann, wenn du mal ein richtiges Design benötigst, MVC z.B. Wenn du wirklich im Bereich Infor5matik studierst, dann empfehle ich dir mal zuerst ein Buch durchzulesen, wie z.B. Java ist auch eine Insel, denn momentan siehts mir so aus, als wäre das dein erstes Javaproject und due hast einfach Qucik & Dirty angefangen Code zu hacken ohne je groß was mit Java gemacht zu haben.
0

#9 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 06. Juni 2005 - 19:19

Vor allem das mit dem Iterator ist heftig... also entweder nimmt man das altgebackene Vector-spezifische elements() oder gleich eine foreach-Schleif.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0