flochen Geschrieben 20. Januar 2011 Geschrieben 20. Januar 2011 Hallo Leute! Ich wollte fragen, ob mir jemand bei einem Problem helfe kann. Folgends: Wir müssen im Rahmen eines Progr. Praktikums ein Java Programm schreiben, dass den Bestand von Artikeln verwalten kann. Ich bin auch schon fast fertig damit. Das Problem ist nun, dass jeder Artikel von einem bestimmten Typ sein soll (333, 555 und 777). Das sollen wir mit einer enum Klasse lösen. Die Bestände werden in in Array Liste gespeichert und in einer einer Tabelle über die Console ausgegeben mit Gewicht, Preis, Artikelnummer und dem entsprechenden TYP (also 333, 555 und 777). Nun wollte ich wissen wie es es hinbekomme, dass für jeden Artikel der entsprechende Typ in der Tabelle angezeigt wird. Das Programm setzt sich folgendermaßen zusammen: - Klasse Verwaltungseinheit - abstrakte Klasse Bestand - enum Klasse Goldtyp - Klasse Ring - Klasse Halskette - Klasse Goldartikel Ich liste die Quelltexte der einzelnen Klassen mal auf. Vielleicht findet ihr den Fehler und könnt mir helfen. Ich habe den Quelltext der Verwaltungsklasse gekürzt. Nun werden nur noch die Goldartikel angezeigt. Die Klasse Kunde hab ich ganz weggelassen. So sieht es nachher auf der Console aus: (man beachte die 333en unter GOLDTYP) -------------------------------------- GEWICHT | ART. NR. | ARTIKELART NR. | PREIS | GOLDTYP | --------------------------------------------------------- 10,00 | 2000 | 1 | 50,00 | 333 | 12,00 | 2001 | 1 | 60,00 | 333 | 9,00 | 2002 | 1 | 100,00 | 333 | 4,00 | 2003 | 1 | 300,00 | 333 | und so sollte es aussehen: ------------------------- (hier sind die Goldtypen den einzelnen Artikeln richtig zugeordnet: A = 333, B = 555). GEWICHT | ART. NR. | ARTIKELART NR. | PREIS | GOLDTYP | --------------------------------------------------------- 10,00 | 2000 | 1 | 50,00 | 333 | 12,00 | 2001 | 1 | 60,00 | 555 | 9,00 | 2002 | 1 | 100,00 | 333 | 4,00 | 2003 | 1 | 300,00 | 555 | Hier sind meine Klassen: Verwaltungsklasse: ----------------- import java.util.Collections; import java.util.Enumeration; import java.io.FileOutputStream; import java.io.FileInputStream; import java.io.Serializable; import java.io.FileReader; import java.util.Iterator; import java.util.ArrayList; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.IOException; import de.htw.saarland.stl.Stdin; public class Verwaltungseinheit implements Serializable { private ArrayList <Kunde> kundenListe; private ArrayList <Bestand> bestandListe; final static int FELDLAENGE = 14; /** * Konstruktor fuer Objekte der Klasse Verwaltungseinheit */ public Verwaltungseinheit() { kundenListe = new ArrayList <Kunde>(); bestandListe = new ArrayList <Bestand>(); } /** * Testdaten für Die Bestands- und Kundenverwaltung. */ public void initData() { Goldartikel g1 = new Goldartikel(10, 1, 50, Goldtyp.A); Goldartikel g2 = new Goldartikel(12, 1, 60, Goldtyp.; Goldartikel g3 = new Goldartikel(9, 1, 100, Goldtyp.A); Goldartikel g4 = new Goldartikel(4, 1, 300, Goldtyp.; bestandListe.add(g1); bestandListe.add(g2); bestandListe.add(g3); bestandListe.add(g4); } private void saveDataToXML() throws IOException { XMLEncoder o = new XMLEncoder(new FileOutputStream("Softwareprojekt.xml")); o.writeObject("Softwareprojekt"); o.writeObject(this); o.close(); } public Object loadDataFromXML() throws IOException { XMLDecoder o = new XMLDecoder(new FileInputStream("Softwareprojekt.xml")); o.readObject(); Object obj = o.readObject(); o.close(); return obj; } private void save() { try { saveDataToXML(); } catch(java.io.IOException ioe) { ioe.printStackTrace(); } } private void load() { try { Verwaltungseinheit v = (Verwaltungseinheit) loadDataFromXML(); v.mainMenue(); } catch(java.io.IOException ioe) { ioe.printStackTrace(); } } private void exit() { System.exit(0); } public ArrayList getKundenListe() { return this.kundenListe; } public void setKundenListe(ArrayList liste) { this.kundenListe = liste; } public ArrayList getBestandListe() { return this.bestandListe; } public void setBestandListe(ArrayList liste) { this.bestandListe = liste; } private void mainMenue() { char eingabe; do { System.out.println(); System.out.println(); System.out.println(); System.out.println(); System.out.println(); System.out.println(" ################################################################## "); System.out.println(" # # "); System.out.println(" # WILKOMMEN IM GOLD-AN-UND-VERKAUF PROGRAMM!!! # "); System.out.println(" # # "); System.out.println(" # ZUR ZEIT BEFINDEN SIE SICH IM HAUPTMENUE. # "); System.out.println(" # BITTE WAEHLEN SIE DEN GEUENSCHTEN MENUEPUNKT DURCH EINGABE DER # "); System.out.println(" # ENTSPRECHENDEN ZIFFER! # "); System.out.println(" # ZUM VERLASSEN DES PROGRAMMS WaeHLEN SIE BITTE 'e'. # "); System.out.println(" # # "); System.out.println(" ################################################################## "); System.out.println(); System.out.println(); System.out.println(" *********************** "); System.out.println(" * H A U P T M E N U E * "); System.out.println(" *********************** "); System.out.println(); System.out.println(" ****************************** "); System.out.println(" * [1] BESTANDSVERWALTUNG * "); System.out.println(" * * "); System.out.println(" * [2] KUNENVERWALTUNG * "); System.out.println(" * * "); System.out.println(" * [3] DATENVERWALTUNG * "); System.out.println(" * * "); System.out.println(" * [e] EXIT * "); System.out.println(" ****************************** "); System.out.println(); System.out.println(); System.out.print("MENUEPUNKT AUSWAEHLEN UND MIT 'ENTER' BESTAETIGEN!\n"); eingabe = Stdin.readlnChar("MENUEPUNKT:"); switch (eingabe) { case 'e': System.out.println("DAS PROGRAMM WURDE BEENDET! BITTE FENSTER SCHLIEßEN!"); exit(); case '2': kundenverwaltung(); break; case '3': datenverwaltung(); break; default: System.out.print("MENUEPUNKT NICHT VORHANDEN! BITTE WAEHLEN SIE EINEN DER AUFGEFUEHRTEN MENUEPUNKTE!\n"); } } while (true); } private void bestandsverwaltung() { char eingabe; boolean menuewechsel = false; do { System.out.println(); System.out.println("WILKOMMEN IN DER BESTANDVERWALTUNG!"); System.out.println("SIE KOENNEN SICH IHRE BESTaeNDE ANSEHEN SOWIE AENERUNGEN AN IHNEN VORNEHMEN."); System.out.println(); System.out.println(" ***************************************"); System.out.println(" * B E S T A N S D V E R W A L T U N G *"); System.out.println(" ***************************************"); System.out.println(" ****************************************************************************"); System.out.println(" * [1] ANEZIGEN ALLER GOLDARTIKEL [6] VERKAUFPREIS BERECHNUNG *"); System.out.println(" * *"); System.out.println(" * [2] ANZEIGEN ALLER HALSKETTEN [7] VERKAUFE ARTIKEL *"); System.out.println(" * *"); System.out.println(" * [3] ANZEIGEN ALLER RINGE [8] ARTIKEL SUCHEN *"); System.out.println(" * *"); System.out.println(" * [4] ANZEIGEN DES GESAMTEN BESTANDS [9] ARTIKEL HINZUFUEGEN *"); System.out.println(" * *"); System.out.println(" * [5] ARTIKEL ANKAUFEN [z] ZURUECK *"); System.out.println(" ****************************************************************************"); System.out.println(); System.out.println(); System.out.print("MENUEPUNKT AUSWAEHLEN UND MIT 'ENTER' BESTAETIGEN!\n"); eingabe = Stdin.readlnChar("MENUEPUNKT:"); switch(eingabe) { case 'z': menuewechsel = true; break; case '1': getGoldartikelBestand(); break; default: System.out.print("MENUEPUNKT NICHT VORHANDEN! BITTE WAEHLEN SIE EINEN DER AUFGEFUEHRTEN MENUEPUNKTE!\n"); } }while(!menuewechsel); } private void datenverwaltung() { char eingabe; boolean menuewechsel = false; do { System.out.println(); System.out.println(" *********************************"); System.out.println(" * D A T E N V E R W A L T U N G *"); System.out.println(" *********************************"); System.out.println(); System.out.println(" *************************************"); System.out.println(" * [1] LADE DATEN AUS XML-DATEI *"); System.out.println(" * *"); System.out.println(" * [2] SPEICHERE DATEN IN XML-DATEI *"); System.out.println(" * *"); System.out.println(" * [z] ZURUECK ZUM HAUPTMENUE *"); System.out.println(" *************************************"); System.out.println(); System.out.print("MENUEPUNKT AUSWAEHLEN UND MIT 'ENTER' BESTSETIGEN!\n"); eingabe = Stdin.readlnChar("MENUEPUNKT:"); switch(eingabe) { case 'z': menuewechsel = true; break; case '1': load(); break; case '2': save(); break; default: System.out.print("MENUEPUNKT NICHT VORHANDEN! BITTE WAEHLEN SIE EINEN DER AUFGEFUEHRTEN MENUEPUNKTE!\n"); } }while (!menuewechsel); } public void getGoldartikelBestand() { String s; System.out.println("GOLDARTIKELBESTAND [ARTIKELART 1]"); System.out.println("*********************************"); System.out.println(""); System.out.println(""); printZentriert("GEWICHT"); printZentriert("ART. NR."); printZentriert("ARTIKELART NR."); printZentriert("PREIS"); printZentriert("GOLDTYP"); System.out.println(); printLinieLF(5); Iterator <Bestand>iter = bestandListe.iterator(); while(iter.hasNext()) { Bestand i = iter.next(); if (i instanceof Goldartikel) { s = castDouble2String(i.getGewicht()); printRechtsbuendig(s); s = castInt2String(i.getArtikelnummer()); printRechtsbuendig(s); s = castInt2String(i.getArtikelart()); printRechtsbuendig(s); s = castDouble2String(i.getPreis()); printRechtsbuendig(s); printRechtsbuendig(Goldtyp.A.getNr()); System.out.println(); } } System.out.println(); } private String castInt2String(int meinInt) { return Integer.toString(meinInt); // die obige Zeile ist von der Funktion identisch zu // Integer i = new Integer(meinInt); // return i.toString(); } private String castDouble2String(double meinDouble) { // hier nutzen wir die Format-Anweisung der Klasse String um die Nachkommastellen zu bestimmen etc. return String.format("%,8.2f", meinDouble); } private void printZentriert(String s) { System.out.print(baueZentriertenString(s, FELDLAENGE)); } private void printLinksbuendig(String s) { System.out.print(baueLinksbuendigenString(s, FELDLAENGE)); } private void printRechtsbuendig(String s) { System.out.print(baueRechtsbuendigenString(s, FELDLAENGE)); } private void printLinieLF(int anzahlFelder) { /* Besonderheit: hier Nutzung des StringBuilders statt direkt mit String zu arbeiten. * Ist sparsamer im Umgang mit Speicher. */ StringBuilder s = new StringBuilder(); int laenge = anzahlFelder*(FELDLAENGE+3); for (int i=1;i<=laenge;i++) { s=s.append("-"); } System.out.println(s); } private String baueZentriertenString(String s, int laenge) { // wir entfernen Leerzeichen am Anfang und Ende des Strings s.trim(); // falls der String zu lang ist, kuerzen wir ihn if (s.length() > laenge) { s.substring(0, laenge); } else { int differenzLinks = (laenge - s.length())/2; for (int i=1;i<=differenzLinks;i++) s=" "+s+" "; if (s.length()<laenge) s=s+" "; } return s+" | "; } private String baueRechtsbuendigenString(String s, int laenge) { // wir entfernen Leerzeichen am Anfang und Ende des Strings s.trim(); // falls der String zu lang ist, kuerzen wir ihn if (s.length() > laenge) { s.substring(0, laenge); } else { int differenzLinks = (laenge - s.length()); for (int i=1;i<=differenzLinks;i++) s=" "+s; } return s+" | "; } private String baueLinksbuendigenString(String s, int laenge) { // wir entfernen Leerzeichen am Anfang und Ende des Strings s.trim(); // falls der String zu lang ist, kuerzen wir ihn if (s.length() > laenge) { s.substring(0, laenge); } else { int differenz = (laenge - s.length()); for (int i=1;i<=differenz;i++) s=s+" "; } return s+" | "; } /** * Zeigt Informationen zum Programm. */ private void printProgrammInfo() { System.out.println(""); System.out.println(""); System.out.println(""); System.out.println(""); } /** * Statische Main Methode zum starten ohne ein Objekt erzeugen zu müssen. * @param args */ public static void main(String[] args) { Verwaltungseinheit v = new Verwaltungseinheit(); v.initData(); v.printProgrammInfo(); v.mainMenue(); } } [/code] Abstrakte Klasse Bestand: ------------------------ [code] public abstract class Bestand { private static int artikelnummerGen = 2000; private int artikelnummer; private double gewicht; private int artikelart; private double preis; /** * Standardkonstruktor */ public Bestand() { } /** * Konstruktor der Klasse Goldartikel. * Übergabe von 2 Parameter übergeben. * @param gewicht Gewicht des Artikels. * @param goldtyp Goldtyp des Artikels. */ public Bestand(double gewicht, int artikelart, double preis) { this.gewicht = gewicht; this.artikelart = artikelart; this.preis = preis; this.artikelnummer = artikelnummerGen; artikelnummerGen++; } /** * @param preis Preis */ public void setPreis(double preis) { this.preis = preis; } /** * @return preis Preis */ public double getPreis() { return this.preis; } /** * @param artilekart Artikelart */ public void setArtikelart(int artikelart) { this.artikelart = artikelart; } /** * @return artikelart Artikelart */ public int getArtikelart() { return this.artikelart; } /** * @param artikelnummer Artikelnummer */ public void setArtikelnummer(int artikelnummer) { this.artikelnummer = artikelnummer; } /** * @return artikelnummer Artikelnummer */ public int getArtikelnummer() { return this.artikelnummer; } /** * @param gewicht Gewicht des Artikels */ public void setGewicht(double gewicht) { this.gewicht = gewicht; } /** * @return gewicht Gewicht des Artikels */ public double getGewicht() { return this.gewicht; } Klasse Goldartikel: ---------------- public class Goldartikel extends Bestand { private Goldtyp goldtyp; public Goldartikel() { } public Goldartikel(double gewicht, int artikelart, double preis, Goldtyp goldtyp) { super(gewicht, artikelart, preis); this.goldtyp = goldtyp; } } enum Klasse Goldtyp: ------------------- /** * Diese Klasse "Goldtyp" wird ist vom Typ Enumeration. * Sie wird von den Klassen Goldartikel, Ring und Halskette genutzt. * Die definiert damit gültige Typen von Goldartikeln, Ringen und Halsketten. */ public enum Goldtyp { /** * Auflistung der gültigen Goldtypen. * Bei Bedarf können neue hinzugefügt werden. */ A("333"), B("555"), C("777"); private String nr; /** * Im Folgenden sind die Instanzvariabeln definiert. * Bei Klassen vom Typ Enum werden diese erst hiner der Aufzählung der * gültigen Typen aufgeführt. */ Goldtyp(String nr) { this.nr = nr; } String getNr() { return nr; } } Ich hoffe, Ihr könnt mir weiterhelfen!! Hab schon alles versucht...... :(:( Zitieren
flashpixx Geschrieben 20. Januar 2011 Geschrieben 20. Januar 2011 Ich habe es nur überflogen, aber ich würde sagen, dass Deine Enum Klasse nicht richtig ist. Schau Dir Galileo Computing :: Java ist auch eine Insel – 9.4 Die Spezial-Oberklasse Enum an, da ist erklärt wie man eine Enum Klasse richtig erzeugt Zitieren
etreu Geschrieben 21. Januar 2011 Geschrieben 21. Januar 2011 printRechtsbuendig(Goldtyp.A.getNr()); Wie sollte hier was anderes als 333 ausgegeben werden können? Dein Goldartikel braucht einen Getter für Goldtyp. Dann sollt es funktionieren: printRechtsbuendig(i.getGoldtyp().getNr()); Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.