Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Javakurs/Übungsaufgaben/Kassenbon

Kassenbon

Es soll ein Programm geschrieben werden, das einen Kassenbon auf der Konsole anzeigt (mit System.out.println). Am Anfang des Programmes werden in Form von Variablen folgende Werte festgelegt:

  • Anzahl von mindestens vier verschiedenen Waren, die gekauft werden sollen.
  • Einzelpreise der Waren. (Ja, jede Warensorte hat einen anderen Preis)
  • Inhalt der Brieftasche.

Das Programm soll den Gesamtpreis der eingangs festgelegten Waren ermitteln. Übersteigt der Gesamtpreis den Inhalt der Brieftasche, wird der Benutzer auf den fehlenden Betrag hingewiesen. Reicht der Inhalt der Brieftasche für den Einkauf aus, wird ein Kassenbon ausgegeben, der die gekauften Waren mit Anzahl und Preis sowie am Ende den Gesamtpreis auflistet.

Hinweis: Erstellt zuerst die Ausgabe des Kassenbons und füllt sie anschließend mit Berechnungen und der Fallunterscheidung.


Beispiel wie ein Kassenbon aussehen könnte:

Wurst      1 x  4.20 EUR
                          4.20 EUR
Käse       1 x  2.30 EUR
                          2.30 EUR
Brot       1 x  2.10 EUR
                          2.10 EUR
DVD        2 x 12.00 EUR
                         24.00 EUR
----------------------------------
Gesamt                   32.60 EUR
Gegeben                  50.00 EUR

Zurück                   17.40 EUR

Kassenbon + automatischer Einkauf

Erstellt eine Kopie eures soeben geschriebenden Programmes.

Verändert das Programm so, dass nun versucht wird, mehrfach Produkte eines Typs (z.B. Wurst) hintereinander zu kaufen, und abgebrochen wird, wenn das Geld für keine weiteren Einkäufe mehr ausreicht. Danach soll für diesen Einkauf der Kassenbon ausgegeben werden.

Hinweis: Viele, viele Fallunterscheidungen hintereinander! Natürlich ließe sich ein Einkauf, bis das Geld nicht mehr ausreicht, besser mit einer Schleife realisieren, die allerdings erst in Vorlesung 2 behandelt wird - hier ist auch "Spagetticode", d.h. viele gleiche Befehle hintereinander, erlaubt.


Kommentare

Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)


Unknown User

hallo alle freitagsrunde Team,

diese lehrveranstaltung finde ich persönlich super megageil, aber ich wünsche,dass die Musterlösungen von solchen schweren Aufgaben im Netz gestellt werden.

ich wünsche Euch viel Erfolg und weiterso...:-)


Robert

Der Eine oder Andere hat darauf bestanden auf seinem Kassenbon keine Hundertstelcent ausgeben zu wollen. Diese entstehen mitunter dadurch, dass Doublewerte mit einer gewissen Toleranz gespeichert werden. Hier ein Vorschlag für einen Workaround:

double kommazahl = 123.290402;
	
int ganzzahl = (int)kommazahl; // Nachkommastelle abschneiden
int kommastelle = (int)(kommazahl * 100)%100 ; // zwei Nachkommastellen extrahieren
 
System.out.println("Preis=" + ganzzahl + "." + kommastelle ); // Zahl in der Ausgabe zusammensetzen


Katrin

Wer zusätzlich zu korrekter Rundung rechts ausgerichtete Preise möchte:

kopiere die Datei [Euro.java] in Dein Arbeitsverzeichnis.

Solange diese Datei in demselben Verzeichnis liegt, wie die java-Datei, an der Du arbeitest, stehen Dir der Befehl Euro.format(<preis>, <breite>); zur Verfügung. Wenn dich interessiert, warum das so ist, so erfährst du es hier. Ersetze einfach <preis> mit dem tatsächlichen Preis als double und <breite> mit der Breite des Preises als String inclusive führender Leerzeichen. Ein Euro-Zeichen wird automatisch hinten angefügt.


Ich

Wie ist das gemeint, mit Kassenbon automatisch füllen? Man kann doch nicht "zufällig" einkaufen...

Die Idee der Aufgabe war es, so lange dasselbe Produkt zu kaufen, wie du kannst. Aber (da am Anfang des Kurses) nicht mit einer Schleife, sondern mit mehreren if's. -- Robert Buchholz 02:13, 4. Jun. 2007 (CEST)

Me2

Beim Kassenbon oben sollte, wenn ich nicht total falsch bin, 17.40 zurück gegeben werden, ist vielleicht für den ein oder anderen ganz nützlich :)

Shiomi

Das Runden ist auch viel einfacher bei Doubles. Einfach (Variable*100)/100 klappt auch :)