Hi!
Bevor ihr weiterlest, möchte ich darauf hinweisen, dass ihr evtl. viel lesen müsst.
UML-Diagramm und Methodenbeschreibungen: https://www.docdroid.net/PDrjhj7/exercise13.pdf#page=2
Meine Ausgabe:
R: Lege neue Rechnung an.
Z: Gibt alle gespeicherten Rechnungen mit Datum und Preis aus.
W: Fuege neue Ware zum Lager hinzu.
A: Gibt alle gespeicherten Waren im Lager aus.
E: Das Programm wird beendet.
R
Bei leerer Eingabe wird abgebrochen.
Gebe ID (Ganzzahl) ein:
1234
Jetzt Beschreibung und Preis der Ware bitte:
hund
1234
Neue Ware wurde der Rechnung hinzugefuegt.
Rechnung fertiggestellt.
Exception in thread "main" java.lang.NullPointerException
at kasse.Kasse.main(Kasse.java:53)
___________________________________________________________
oder:
R: Lege neue Rechnung an.
Z: Gibt alle gespeicherten Rechnungen mit Datum und Preis aus.
W: Fuege neue Ware zum Lager hinzu.
A: Gibt alle gespeicherten Waren im Lager aus.
E: Das Programm wird beendet.
W
ID, name und Preis eingeben:
1234
asdd
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Unknown Source)
at java.base/java.util.Scanner.next(Unknown Source)
at java.base/java.util.Scanner.nextDouble(Unknown Source)
at kasse.Kasse.main(Kasse.java:75)
_________________________________
Kasse:
Habe ich den Iterator in Warenlager richtig angewandt?
Ist der Rechnungskonstruktor tatsächlich mit dem heutigen Datum und den sortierten Waren richtig implementiert worden?
Ich komme nicht weiter...
Gruß
Bevor ihr weiterlest, möchte ich darauf hinweisen, dass ihr evtl. viel lesen müsst.
UML-Diagramm und Methodenbeschreibungen: https://www.docdroid.net/PDrjhj7/exercise13.pdf#page=2
Meine Ausgabe:
R: Lege neue Rechnung an.
Z: Gibt alle gespeicherten Rechnungen mit Datum und Preis aus.
W: Fuege neue Ware zum Lager hinzu.
A: Gibt alle gespeicherten Waren im Lager aus.
E: Das Programm wird beendet.
R
Bei leerer Eingabe wird abgebrochen.
Gebe ID (Ganzzahl) ein:
1234
Jetzt Beschreibung und Preis der Ware bitte:
hund
1234
Neue Ware wurde der Rechnung hinzugefuegt.
Rechnung fertiggestellt.
Exception in thread "main" java.lang.NullPointerException
at kasse.Kasse.main(Kasse.java:53)
___________________________________________________________
oder:
R: Lege neue Rechnung an.
Z: Gibt alle gespeicherten Rechnungen mit Datum und Preis aus.
W: Fuege neue Ware zum Lager hinzu.
A: Gibt alle gespeicherten Waren im Lager aus.
E: Das Programm wird beendet.
W
ID, name und Preis eingeben:
1234
asdd
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Unknown Source)
at java.base/java.util.Scanner.next(Unknown Source)
at java.base/java.util.Scanner.nextDouble(Unknown Source)
at kasse.Kasse.main(Kasse.java:75)
_________________________________
Kasse:
Java:
package kasse;
import java.util.*;
public class Kasse {
private static LinkedList<Rechnung> rechnungen;
private static Warenlager lager;
static boolean istNichtLeer(String str) {
return str != null && !str.isEmpty();
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
boolean weiter = true;
do {
System.out.println("R: Lege neue Rechnung an.");
System.out.println("Z: Gibt alle gespeicherten Rechnungen mit "
+ "Datum und Preis aus.");
System.out.println("W: Fuege neue Ware zum Lager hinzu.");
System.out.println("A: Gibt alle gespeicherten Waren im "
+ "Lager aus.");
System.out.println("E: Das Programm wird beendet.");
String auswahl = scan.nextLine();
if (auswahl.equals("R")) {
System.out.println("Bei leerer Eingabe wird abgebrochen.");
Rechnung rechnung = new Rechnung();
System.out.println("Gebe ID (Ganzzahl) ein: ");
String eingabe = scan.nextLine();
while(istNichtLeer(eingabe)) {
try {
Integer.parseInt(eingabe);
int id = Integer.parseInt(eingabe);
System.out.println("Jetzt Beschreibung und Preis"
+ " der Ware bitte:");
String name = scan.nextLine();
double preis = scan.nextDouble();
Ware ware = new Ware(id, name, preis);
rechnung.addWare(ware);
System.out.println("Neue Ware wurde der Rechnung"
+ " hinzugefuegt.");
} catch ( Exception e ) {
System.out.println("ID muss positiv sein!");
}
eingabe = scan.nextLine();
}
System.out.println("Rechnung fertiggestellt.");
rechnungen.add(rechnung);
}
if(auswahl.equals("Z")) {
for (Rechnung r: rechnungen) {
System.out.println(r);
}
}
if(auswahl.equals("W")) {
boolean korrekt = false;
System.out.println("ID, name und Preis eingeben: ");
do {
int id = scan.nextInt();
if (id <= 0) {
korrekt = true;
}
String name = scan.nextLine();
if (name == "") {
korrekt = true;
}
double preis = scan.nextDouble();
if (preis < 0) {
korrekt = true;
System.out.println("Gesamte Eingabe wdh.");
}
if (!korrekt) {
lager.addWare(new Ware(id, name, preis));
}
} while (korrekt);
System.out.println("Ware wurde ins Lager hinzugefuegt!");
}
if(auswahl.equals("A")) {
}
if(auswahl.equals("E")) {
System.exit(0);
}
} while(weiter);
scan.close();
}
}
Java:
package kasse;
import java.util.*;
import java.text.SimpleDateFormat;
public class Rechnung {
private LinkedList<Ware> waren;
private Date datum;
Scanner scan = new Scanner (System.in);
public Rechnung () {
datum = new Date();
waren = new LinkedList<Ware>();
}
public void addWare(Ware ware) {
if (ware == null) {
throw new IllegalArgumentException("Eingabe ist fehlerhaft!");
}
waren.add(ware);
}
public double getPreis() {
double summe = 0;
for(Ware w: waren) {
summe += w.getEinzelPreis();
}
return summe;
}
public String toString() {
StringBuilder sb = new StringBuilder();
for (Ware w : waren) {
sb.append(w.toString()).append(System.lineSeparator());
}
sb.append(this.datum);
return sb.toString();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
Java:
package kasse;
import java.util.Iterator;
import java.util.List;
public class Warenlager {
private Iterable<Ware> warenIt;
private List<Ware> waren;
public Ware addWare(Ware ware) {
if (ware == null) {
throw new IllegalArgumentException("Eingabe ist fehlerhaft!");
}
Ware alteWare = null;
Iterator<Ware> warenIterator = warenIt.iterator();
while (warenIterator.hasNext()) {
Ware w = warenIterator.next();
if (w.getID() == ware.getID()) {
warenIterator.remove();
alteWare = w;
}
}
waren.add(ware);
return alteWare != null ? alteWare : null;
}
public Ware getWare(int id) {
Ware nurAusgabe = null;
for (Ware w: waren) {
if (id == w.getID()) {
nurAusgabe = w;
} else {
return null;
}
}
return nurAusgabe;
}
}
Java:
package kasse;
import java.text.DecimalFormat;
public class Ware {
private int id;
private String name;
private double preis;
DecimalFormat f = new DecimalFormat("#0.00");
public Ware(int id, String name, double preis) {
if (name == null || name == "") {
throw new IllegalArgumentException("Name darf nicht null sein.");
}
this.id = id;
this.name = name;
this.preis = preis;
}
public String toString() {
return this.id + ", " + this.name + ", "
+ f.format(this.preis) + "�.";
}
public double getEinzelPreis() {
return this.preis;
}
public int getID() {
return this.id;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
Ist der Rechnungskonstruktor tatsächlich mit dem heutigen Datum und den sortierten Waren richtig implementiert worden?
Ich komme nicht weiter...
Gruß