|
|
UE Einführung in das Programmieren (TU Wien) |
|||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||
|
Inhalt |
|||||||||||||||||||||||||
![]() |
Allgemeine HinweiseDateien einlesen: Testdaten: Modularisierung:
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).
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. |
|||||||||||||||||||||||||
![]() |
Allgemeine HinweiseDateien einlesen: Testdaten: Modularisierung:
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.
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
|
|||||||||||||||||||||||||
![]() |
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. |
|||||||||||||||||||||||||
![]() |
Bringen Sie am Programm für die 3. Abgabe folgende Erweiterungen/Änderungen an:
|
|||||||||||||||||||||||||
![]() |
Für weitere Informationen wende dich bitte an den Webmaster.
Alle Angaben ohne Gewähr.
Zuletzt aktualisiert am 2007-03-28 von MAG