UE Einführung in das Programmieren (TU Wien)

  

Inhalt
Angabe 1: Rechnungserstellung und Datumsumwandlung
Angabe 2: Rechnungserstellung und Banner
Angabe 3: Verkaufsgrafik und Rechnungsbearbeitung
Angabe 4: Modifizierte Verkaufsgrafik und Rechnungsbearbeitung

 
 

Rechnungserstellung und Datumsumwandlung

100 Punkte

Allgemeine Hinweise

Dateien einlesen:
Verwenden Sie zum Einlesen der Dateien die im Skriptum beschriebene Klasse ReadFile. Sie wird Ihnen auf den Rechnern im Übungsraum zur Verfügung gestellt werden, sodass Sie sie nicht abtippen müssen. Details werden in der Vorlesung bekanntgegeben, sobald sie geklärt sind.

Testdaten:
Die Testdaten, die im Folgenden erwähnt werden, stehen auf den Rechnern im Übungsraum in einem Directory, das beim Schreiben dieser Angabe noch nicht festgelegt war. Ihr Tutor wird Sie sobald als möglich informieren. Sie benötigen diese Daten erst zum Testen des fertigen Programmes.

Modularisierung:
Bie dieser Angabe ist es noch nicht unbedingt notwendig, mehrere eigene Klassen zu erzeugen. Sehr wohl soll das Programm aber durch Schaffung verschiedener Methoden untergliedert werden.

Beispiel 1: Rechnungserstellung

60 Punkte

Aufgabe

Schreiben sie ein Programm, das eine Datei mit Artikeldaten und mehrere Dateien mit den Daten je einer Rechnung einliest und die Rechnung am Standard Output (siehe Skriptum) darstellt.

Das File artikel.txt enthält Artikelstammdaten im folgendem Format:

<Artikelnummer>, <Bezeichnung>, <Preis>
      (z.B.: 111,Schuhpasta,123.50)

wobei <Artikelnummer> für die Artikelnummer steht, <Bezeichnung> für die Bezeichnung des Artikels mit dieser Artikelnummer und <Preis> für den Preis des Artikels.

Jeder Datensatz steht in einer eigenen Zeile. Die drei Felder sind durch Beistriche ohne Leerzeichen getrennt. Die Artikelnummer ist dreistellig. Die Bezeichnung maximal 20 Zeichen lang. Der Preis ist keine ganze Zahl und hat maximal 3 Vorkommastellen und bis zu zwei Nachkommastellen. Es gibt höchstens 30 Artikel.

Jedes der 9 Files rechnung1.txt bis rechnung9.txt enthält die Daten für je eine gesamte Rechnung im Format:

<Artikelnummer>, <Menge>      (z.B.: 111,23)

wobei <Artikelnummer> für die Artikelnummer steht, <Menge> für die Menge. Die Artikelnummer stimmt (im Normalfall) mit einer der Artikelnummern in artikel.txt überein. Jeder Datensatz steht auf einer Zeile. Die beiden Felder sind durch Beistriche ohne Leerzeichen voneinander getrennt. Pro Rechnung werden höchstens 10 Artikel verkauft.

Falls eine Artikelnummer nicht stimmt, muss eine Fehlermeldung an Stelle der Rechnung ausgegeben werden. Zum Erreichen der vollen Punktezahlen müssen alle Fehler in den Rechnungen 4 bis 9 erkannt bzw. behandelt werden (Fehlermeldung und Korrektur).

Beispiel 2: Datumsumwandlung

40 Punkte

Aufgabe

Schreiben sie ein Programm, das aus einem File Zeilen mit je einem Datum einliest, das Datum überprüft und in das entgegengesetzte Format (s.u.) umwandelt (und ausgibt):

Das File test.txt enthält Zeilen in einem von Folgenden drei Formaten:

<Jahr>/<Monat>/<Tag>    (z.B.: 1999/1/1)
<Jahr>-<Monat>-<Tag>    (z.B.: 1999-01-01)
<Tag>.<Monat>.<Jahr>    (z.B.: 1. Dez. 1999)

wobei <Jahr> für das Jahr steht, <Monat> für das Monat und <Tag> für den Tag.

In den ersten beiden Fällen wird der Monat als Zahl angegeben. Dabei sind keine Leerzeichen erlaubt. Im dritten Fall wird der Monat entweder mit der vollen Bezeichnung (z.B. November) oder mit der Abkürzung (Nov.) angegeben. Dabei können auch ein oder mehrere Leerzeichen vor und/oder nach dem Monat stehen. Das Jahr wird vierstellig angegeben. Tag und Monat können mit oder ohne führende Null angegeben werden (also 01 oder 1). Bei der Ausgabe soll jedenfalls bei den ersten beiden Formaten bei einstelligen Zahlen eine Null vorangestellt werden.

Wandeln Sie Zeilen in den ersten beiden Formaten in das dritte um und Zeilen im dritten Format in das erste. Geben Sie das Originaldatum und das Ergebnis der Umwandlung auf einer Zeile am Standard Output aus, mit einem Pfeil dazwischen:

1.Dez. 1999 -> 1999/12/01
1999/12/1   -> 1. Dezember 1999

Die Eingabe muss auf Korrektheit überprüft werden, d.h. ob die Werte für Tag und Monat zulässig sind. Insbesondere muss das Programm "wissen", wieviele Tage jedes Monat hat.

Hinweis 1: Jedes vierte Jahr ist ein Schaltjahr, weitere Regeln müssen nicht berücksichtigt werden (jedes 200. ist z.B. keines)

Hinweis 2: Verwenden Sie nicht die Date-Klasse von Java, sondern implementieren sie die Datumsüberprüfung und -umwandlung selbst.

   

Rechnungserstellung und Banner

100 Punkte

Allgemeine Hinweise

Dateien einlesen:
Verwenden Sie zum Einlesen der Dateien die im Skriptum beschriebene Klasse ReadFile Sie steht auf den Rechnern im Übungsraum im Directory /mnt /import/java/Classes als ReadFile.Java und ReadFile.Class zur Verfügung.

Testdaten:
Die Testdaten, die im Folgenden erwähnt werden stehen auf den Rechnern im Übungsraum im Directory /mnt/Import/]ava/tests.

Modularisierung:
Bei dieser zweiten Abgabe sollten Sie bereits das Programm durch die Schaffung mehrerer eigener Klassen modularisieren.

Beispiel 1: Rechnungserstellung

30 Punkte

Aufgabe

Ändern Sie das Programm, das Sie für die letzte Abgabe geschrieben haben, so daß die Ausgabe mittels Methoden der Klasse Graphics am Bildschirm erscheint (in einem Frame).

Das Programm soll alle Files im Directory mit den Beispieldaten (/mnt/import/java/tests) deren Name mit rechnung beginnt und mit .txt endet, ausgeben - unabhängig davon, wieviele Files mit einem solchen Namen im Directory stehen.

Als Argumente auf der Commandline können dem Programm ein oder zwei Integers übergeben werden Ein Integer gibt die Größe des Fonts an in dem die Ausgabe erfolgen soll Bei zwei Integers gibt das erste Integer die Größe des Fonts für die Kopfzeile(n) an das zweite die Größe des Fonts für die restlichen Zeilen einer Rechnung. Der Default für die Kopfzeiie(n) ist 16 pt (Point), der Default für die restlichen Zeilen ist 14 pt. Die Kopfzeile(n) soll(en) immer fett (bold) gedruckt werden, die anderen Zeilen normal (plain).

Verwenden sie die Methoden der Klassen Font und Fontmetrics, um die Zeilenhöhe und Spaltenbreiten zu berechnen, da im Programm festgeschriebene Konstanten bei wechselnder Fontgröße nicht zum Erfolg führen.

Zum Erreichen der vollen Punktezahl muß eine Möglichkeit vorgesehen werden die Ausgabe hin- und herzuscrollen, wenn sie nicht in das Window paßt: Entweder mittels Scrollbar oder Scrollpane.

Beispiel 2: Banner

70 Punkte

Schreiben sie ein Programm, das Textzeilen aus einem File am Bildschirm in Blockbuchstaben als Grafik zeichnet.

Das File banner.txt enthält in jeder Zeile zuerst eine ganze Zahl, die den Vergrößerungsfaktor für diese Zeile an gibt und dann (nach einem Leerzeichen) den Text in Blockbuchstaben, der ausgegeben werden soll.

Im Directory /mnt/import /java/tests/letters steht für jeden Buchstaben in Files mit der Extension .def also z.B.: A .def für den Buchstaben A. Jedes dieser Files enthält die Beschreibung des Buchstabens in mehreren Zeilen, von denen jede eines der beiden folgenden Formate hat:

Strich <x1> <y1> <x2> <y2>
Kurve <Außenradius> <Anfangswinkel> <Bogenwinkel>

Alle Buchstaben sind auf einem 5x7-Raster spezifiziert, bei der Ausgabe müssen sie um den Vergrößerungsfaktor der jeweiligen Zeile vergrößert werden. Zwischen den Buchstaben bliebt ein Kästchen breit Abstand.

Strich meint einen (breiten) Strich in Form eines Parallelogramms. Dabei ist zu unterscheiden, ob es sich um einen Strich nach rechts oder einen Strich nach unten handelt.  Wenn die Differenz von x1 und x2 größer ist als die von y1 und y2, dann handelt es sich um einen Strich nach rechts. Striche die im  Winkel von 45° nach rechts unten weisen, werden daher zu den Strichen nach unten gerechnet.

Die Zahlen <x1> und <y1> bezeichnen die X und Y-Koordinaten des ersten Kästchens, in dem der Strich beginnt, die Zahlen <x2> und <y2> die des Kästchens, in dem der Strich endet. Die Strichbreite ist ein Kästchen. Kästchen (0/0) ist links oben, entsprechend dem Koordinatensystem in Java.

Kurve meint einen Bogen, der so breit ist, wie ein Kästchen, und bezeichnen den Mittelpunkt des Bogens. Er liegt immer am Kreuzungspunkt von Trennlinien zwischen den Kästchen und nicht im Mittelpunkt eines Kästchens. <Außenradius> bezeichnet den Außenradius des Bogens, <Anfangswinkel> dessen Anfangswinkel und <Bogenwinkel> den Winkel, über den sich der Bogen erstrecken soll. Beide Winkelangaben entsprechen dem 5. und 6. Argument der fillArc-Methode (s.u.), sodaß keine Umrechnungen notwendig sind.

Hinweise

  • Beachten Sie bitte die unterschiedliche Interpretation der Koordinaten: Bei Strichen beziehen sie sich auf Kästchen(mittelpunkte), bei Kurven auf die Trennlinien zwischen den Kästchen.
  • Verwenden Sie zum Zeichnen der Striche die Methode filiPolygon und zum Zeichnen der Kurven die Methode fillArc, beide in der Klasse Graphics.
  • Um einen Bogen am Bildschirm darzustellen, zeichnen Sie zuerst ein Kreissegment in der Zeichenfarbe (schwarz), dessen Radius dem Außenradius des Bogens entspricht, und dann in der Hintergrundfarbe (weiß) ein Kreissegment, dessen Radius dem Innenradius (ein Kästchen weniger als der Außenradius) entspricht.
  • Zur Erreichung der vollen Punktezahl darf Ihr Programm nicht davon ausgehen, daß die Zeichenfarbe schwarz und die Hintergrundfarbe weiß ist.

   

Verkaufsgrafik und Rechnungsbearbeitung

100 Punkte

Schreiben Sie ein Programm, das Verkaufsdaten wahlweise als Balken- oder Tortendiagramm darstellt. Das Diagramm soll die Menge der verkauften Artikel wahlweise nach Kassen oder Artikeln gegliedert (auf einem Canvas in einer Scrollpane) anzeigen. Balken und Torten müssen nur zweidimensional sein, ohne 3D-Effekte.

Das Balkendiagramm besteht aus je einem Balken pro Artikel beim Artikeldiagramm bzw. por Kassa beim Kassendiagramm. Die Breite aller Balken ist gleich. Die Höhe ist proportional zur Menge der verkauften Waren dieses Artikels bzw. an dieser Kassa. Die Höhe des größten Balken soll so bemessen sein, daß kein vertikales Scrolling notwendig ist.

Die Balken sollten unterschiedliche Farben haben. Natürlich genügt es, wenn einige Farben verwendet werden, die sich immer wieder wiederholen. Es muß nicht für jeden Artikel eine einmalige Farbe verwendet werden. Sie könnte in der Praxis von einer anderen, ähnlichen Farbe so wie so nicht unterschieden werden.

Das Tortendiagramm besteht aus einem (gefüllten) Kreis, dessen Durchmesser so bemessen ist, daß kein Scrolling notwendig ist. Jedes Segment des Kreises stellt eine Artikelgruppe oder die an einer Kassa verkauften Waren dar.

Beachten Sie, daß das Tortendiagramm Artikelgruppen zeigt, während das Balkendiagramm jeden Artikel getrennt zeigt. Eine Artikelgruppe besteht aus allen Artikeln, deren Artikelnummer in der ersten Stelle gleich ist.

Vergessen Sie nicht, die Balken und Kreissegmente zu beschriften - an einer Stelle, die Ihnen passend erscheint, jedenfalls aber so, daß das Erscheinungsbild harmonisch ist, unabhängig von der Länge der ausgegebenen Strings. M.a.W.: Verwenden sie FontMetrics.

Die Auswahl, wie die Daten angezeigt werden, erfolgt durch je eine Gruppe von Radiobuttons für "Was soll angezeigt werden?" und "Wie soll es angezeigt werden?" - siehe Screenshot. Radiobuttons werden als Checkboxes, die einer CheckboxGroup angehören, realisiert.

Die Daten werden Rechnungsfiles entnommen, deren Namen das folgende (gegenüber den vorangehenden Abgaben veränderte) Format haben:

rechnung<Nummer>.<Kassa>.txt

Dabei bezeichnet <Nummer> die Rechnungsnummer (wie bisher) und <Kassa> die Nummer der Kassa, an der die Rechnung ausgestellt wurde.

Weiters sollen über ein Menü oder über Buttons die Funktionen "Rechnung eingeben", "Rechnung ändern" und "Rechnung löschen" verfügbar sein. Jede zeigt eine Dialogbox am Bildschirm (zusätzlich zum Fenster mit der Grafik), in der die Daten eingegeben werden (und beim Ändern und Löschen die betroffene Rechnung ausgewählt wird).

Die Änderungen betreffen nur die Daten im Hauptspeicher, Dateien werden dadurch nicht verändert/gelöscht/erzeugt! Alle Änderungen an Rechnungen wirken sich natürlich auf die angezeigte Grafik aus. Verwenden sie das Observer-Modell von Java um diese Veränderungen sofort weiterzuleiten. Verwenden Sie Hashtables zum Speichern der Artikeldaten.

   

Modifizierte Verkaufsgrafik und Rechnungsbearbeitung

100 Punkte

Bringen Sie am Programm für die 3. Abgabe folgende Erweiterungen/Änderungen an:

  1. Speichern sie die Rechnungen in einer einfach verketteten Liste (ohne Verwendung der Klasse vector). Wer nicht in der Vorlesung wahr, erfährt im Buch von Judy Bishop ab Seite 247 was eine Linked List ist.
  2. Stellen Sie mehrere Fenster mit Statistikgraphiken gleichzeitig dar. Die einfachste Lösung besteht darin, daß das Fenster einen Button hat auf den man klickt um das Fenster zu dublizieren.Danach kann man am neuen Fenster - ohne das alte zu beeinflussen - eine andere Form der Darstellung wählen. Endergebnis muß sein, daß verschiedene Fenster verschiedene Präsentationen der selben Daten darstellen und sich Änderungen an den Rechnungen auf alle Fenster auswirken. Mit Hilfe des Observer-Modells ist das leicht realisierbar, wenn jedes Fenster ein Observer ist (und die Gesamtheit der Rechnungen ein Observable).
  3. Erstellen sie ein zusätzliches File Gruppen.txt in dem für jede Artikelgruppe eine Zeile mit Gruppennummer (eine Ziffer) und Gruppenbezeichnung steht. Verwenden Sie dieses File bei der Ausgabe der Artikelgruppen als Tortendiagramm, bei dem wie bei der vorigen Abgabe nicht einzelne Artikel, sondern nur Artikelgruppen dargestellt werden sollen.
  4. Leerzeichen und Leerzeilen sind in den Datenfiles erlaubt und müssen beim Einlesen übergangen werden.
  5. Berücksichtigen Sie alle denkbaren Fehlerfälle (lt. Email vom 9. Nov. 98)
  6. Erstellen Sie eine übersichtliche Abschlußdokumentation. Handgeschriebene Zettel werden nicht mehr akzeptiert.

   

Für weitere Informationen wende dich bitte an den Webmaster.
 
Alle Angaben ohne Gewähr.
Zuletzt aktualisiert am 2007-03-28 von MAG