XML Speicherung und ArrayList < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) für Interessierte | Datum: | 13:39 Sa 05.02.2011 | Autor: | juel |
Aufgabe | (An die Profis)
Hallo Zusammen,
ich hab ein Problem beim Quelltext schreib.
und am Montag ist auch schon die Klausur.
Das Programm läuft einwandfrei, allerdings habe ich gestern erst ein Fehler entdeckt, und hab den ganzen Tag mit Programmieren verbracht, ich konnte es nicht hinbekommen. Ich total am verzweifeln, weiß nicht mehr weiter.
Deshalb wäre es sehr nett, wenn mir jemand helfen würde :(
Das Programm läuft folgendermaßen ab:
Ein Händler betreibt einen Goldankauf und -verkauf. Er möchte, dass sein Programm Kunden anlegt (id,name,vorname,tel.,adresse),alle Kunden anzeigt, Kunden löscht, Artikel kauft(id,artikelname,goldreinheit,gramm,ankaufspreis,verkaufspreis,anzahl), Artikel verkauft, alle Artikel anzeigt, bestimmten Artikel sucht, usw.
Neun Artikel und vier Kunden sind bereits im Quelltext als initData() angelegt.
[red]Zu meinem Problem:
Wenn ich das Programm starte und mir alle Artikel anzeigen lasse, dann zeigt er mir alle 9 Artikel (vom Quelltext) an, beginnend mit der ID 1000 und der letzte Artikel hat dann ID 1008.
Anschließend kaufe ich ein Artikel. Als Element wird er dann in der ArrayListe gespeichert und wenn ich nochmal alle Artikel anschaue, hat der letzte Artikel ID 1009. Damit bin ich zufrieden. Dann kaufe ich noch ein Artikel, letzter Artikel ID 1010. ok
Ich beende das Programm.
Aber dann........ Wenn ich das Programm wieder starte, und alle Daten aus XML lade, mir danach alle Artikel anzeigen lasse, stehen die zuletzt angelegten Artikel da, letzter Artikel ID 1010. Wenn ich aber ein Artikel anschließend kaufe, steht in meiner Artikelliste letzter Artikel ID 1009 und der zweitletzte Artikel ID 1010.
Waaaaaaaaaaaarum????????? ich versteh es nicht.
ich habe ein paar Ausschnitte aus dem Quelltext herausgenommen, ich denke mal das sind die wichtigsten.
Vielleicht erkennt ihr den Fehler oder eine Lücke wo etwas fehlt, damit das Programm auch richtig funktioniert.....
Danke im Voraus |
[red]//für die XML speicherung
private void saveDataToXML() throws IOException
{
XMLEncoder o = new XMLEncoder(new FileOutputStream("Gold.xml"));
o.writeObject("Gold-Ankauf und -Verkauf");
o.writeObject(this);
o.close();
}
[red]// für das Laden aus XML
public Object loadDataFromXML() throws IOException
{
XMLDecoder o = new XMLDecoder(new FileInputStream("Gold.xml"));
o.readObject();
Object obj = o.readObject();
o.close();
return obj;
}
[red]// Methode speichert
private void save()
{
try
{
saveDataToXML();
[mm] System.out.println('\n'+"GESPEICHERT!" +'\n');
[/mm]
}
catch(java.io.IOException ioe)
{
ioe.printStackTrace();
}
}
[red]// Methode ladet
private void load()
{
try
{
VERWALTUNG v = (VERWALTUNG) loadDataFromXML();
// hier starten wir ein neues Programm (eine neue Instanz der Klasse Verwaltung, der wir auch die Kontrolle übergeben), damit wir an die geladenen Daten kommen
[mm] System.out.println('\n'+"GELADEN!" +'\n');
[/mm]
v.mainMenue();
}
catch(java.io.IOException ioe)
{
ioe.printStackTrace();
}
}
[red]// Methode Artikel kaufen
private void kaufeGoldartikel()
{
boolean artikelpruefung = false;
String artikelname;
boolean goldtypnrpruefung = false;
String goldtypnr;
double gewicht =0.0;
int anzahl=0;
boolean treffer = false;
Goldtyp goldtyp = null;
double f=0;
char eingabe;
boolean menuewechsel=false;
boolean jetztkaufen=false;
do // liesst wiederholend artikelname, solange bis die Bedingung erfüllt wird
{
artikelname = [mm] Stdin.readString('\n'+"Bitte [/mm] geben Sie hier den Artikelnamen ein : ");
artikelpruefung = pruefeArtikelname(artikelname);
} while (!artikelpruefung);
do // liesst wiederholend goldtypnr, solange Bedingung wahr ist
{
goldtypnr = Stdin.readString("Bitte geben Sie die [1] fuer Goldtyp 333, [2] fuer Goldtyp 555, [3] fuer 777 : ");
goldtypnrpruefung = pruefeGoldtypnr(goldtypnr);
} while (!goldtypnrpruefung);
artikelpruefung = false;
do // liesst wiederholend gewicht, solange Bedingung wahr ist
{
try
{
gewicht = Stdin.readlnDouble("Bitte geben Sie hier das Gewicht ein : ");
artikelpruefung = true;
}
catch(Exception e)
{
System.out.println("Es ist ein Fehler passiert: " + e.getMessage());
artikelpruefung = false;
}
}while((!artikelpruefung));
do // liesst wiederholend anzahl, solange Bedingung wahr ist
{
try
{
anzahl = Stdin.readlnInt("Bitte geben Sie hier die Anzahl ein : ");
artikelpruefung = true;
}
catch(Exception e) {
System.out.println("Es ist ein Fehler passiert: " + e.getMessage());
artikelpruefung = false;
}
}while((!artikelpruefung));
// Schleife, die die Eingabe fuer den Goldtyp (333,555 bzw.777)im Untermenue von "Goldartikel kaufen" prueft und zuordnet
if (goldtypnr.equals("1"))
{
goldtyp = Goldtyp.q333;
f = Goldtyp.q333.faktor;
}
if (goldtypnr.equals("2"))
{
goldtyp = Goldtyp.q555;
f = Goldtyp.q555.faktor;
}
if (goldtypnr.equals("3"))
{
goldtyp = Goldtyp.q777;
f = Goldtyp.q777.faktor;
}
System.out.println( [mm] '\n' [/mm] +"Ankaufspreis betraegt: "+ castDouble2String(gewicht*anzahl*f*ankpreis333)+" Euro insgasamt und "+castDouble2String(gewicht*f*ankpreis333)+" Euro pro [mm] Stueck"+'\n');
[/mm]
do // durchlauft die Schleife, solange Bedingung wahr ist (oben menuewechsel als false deklariert)
{
System.out.println("[1] Fuer Artikel kaufen");
System.out.println("[0] Goldartikelmenue");
printAuswahlTreffen();
// hierdurch soll das Programm trotz Falscheigabe weiterlaufen und nicht abstuerzen
try
{
eingabe = Stdin.readlnChar();
}
catch (Exception ex)
{
eingabe = 'a';
}
switch (eingabe)
{
case '0': menuewechsel = true;
[mm] System.out.println('\n' [/mm] + "Artikel wurde nicht [mm] gekauft."+'\n');
[/mm]
break;
case '1': jetztkaufen = true;
menuewechsel = true;
break;
default: printEingabeFehler();
}
if(jetztkaufen==true) // Schleife prueft welcher Artikelname eingegeben wurde und ordnet ihn zu.
{
if (artikelname.equals("Ohrring"))
{
Ohrring ohr1 = new Ohrring(artikelname, gewicht, goldtyp, anzahl);
goldartikelListe.add(ohr1);
System.out.println( [mm] '\n'+"Artikel [/mm] wurde gekauft! Anzahl: "+anzahl+" Stueck"+ ", Ankaufspreis: "+castDouble2String(gewicht*anzahl*f*ankpreis333)+" [mm] Euro"+'\n');
[/mm]
}
if (artikelname.equals("Halskette"))
{
Halskette h1 = new Halskette(artikelname, gewicht, goldtyp, anzahl);
goldartikelListe.add(h1);
[mm] System.out.println('\n'+"Artikel [/mm] wurde gekauft! Anzahl: "+anzahl+" Stueck"+ ", Ankaufspreis: "+castDouble2String(gewicht*anzahl*f*ankpreis333)+" [mm] Euro"+'\n');
[/mm]
}
if (artikelname.equals("Ring"))
{
Ring r1 = new Ring(artikelname, gewicht, goldtyp, anzahl);
goldartikelListe.add(r1);
[mm] System.out.println('\n'+"Artikel [/mm] wurde gekauft! Anzahl: "+anzahl+" Stueck"+ ", Ankaufspreis: "+castDouble2String(gewicht*anzahl*f*ankpreis333)+" [mm] Euro"+'\n');
[/mm]
}
}
} while (!menuewechsel);
}
[red]// main Methode
public static void main(String[] args)
{
VERWALTUNG v = new VERWALTUNG();
v.printProgrammInfo();
v.initData();
v.load();
v.mainMenue();
}
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:11 Sa 05.02.2011 | Autor: | juel |
habe das Problem gefunden und behoben
deshalb auf diese Frage nicht mehr reagieren
|
|
|
|