Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2006 W
2. Übungsaufgabe
Themen:
Untertypbeziehungen, stepwise refinement, Programmiereffizienz
Termine:
| Ausgabe: |
19.10.2006 |
| reguläre Abgabe: |
09.11.2006, 12:45 Uhr |
| nachträgliche Abgabe: |
16.11.2006, 12:45 Uhr |
Abgabeverzeichnis:
Aufgabe2
Programmaufruf:
java EinAus
Grundlage:
Skriptum bis Seite 57.
Aufgabe
Welche Aufgabe zu lösen ist:
Erweitern Sie die Einnahmen/Ausgaben-Rechnung aus der ersten Aufgabe so,
dass sie in der Praxis tatsächlich verwendbar wird. Folgende
Eigenschaften werden von Anwendern als wichtig angesehen:
- Daten sollen beim Abschalten des Computers nicht verloren gehen.
- Es sollen mehrere Kassen gleichzeitig verwaltet werden. Neue Kassen
können stets eingeführt und leere Kassen aufgelöst werden.
- Alle Buchungen, die dieselbe Kassa betreffen, müssen genau in der
Reihenfolge, in der die Einzahlungen und Auszahlungen tatsächlich
erfolgt sind, durchgeführt werden. Um dies sicherzustellen bekommt
jede Buchung derselben Kassa automatisch eine eindeutige Nummer, die
nachträglich nicht verändert werden darf. Die Auflistung aller
Buchungen einer Kassa muss die Nummern im aufgelisteten Bereich
lückenlos enthalten (= keine Nummer darf fehlen). Korrekturen können
nur durch neue Buchungen mit neuen Nummern gemacht werden. Diese
Regelung soll absichtliche Falschbuchungen erschweren bzw. als solche
erkennbar machen.
- Unterschiedliche Kassen können Beträge in unterschiedlichen Währungen
enthalten.
- Umschichtungen von einer Kassa in eine andere sollen in einer einzigen
Buchung möglich sein. Diese Art von Buchung bekommt zwei Nummern, je
eine für jede beteiligte Kassa. Dies gilt auch für Umschichtungen
zwischen Kassen unterschiedlicher Währung, wobei ein Umrechnungsfaktor
anzugeben ist.
- Am Ende jeden Tages muss der Inhalt jeder Kassa, für die an diesem Tag
Buchungen erfolgten, überprüft werden. Dazu gibt der Computer die
Beträge aus, die in den Kassen sein sollen, der Benutzer gibt die
tatsächlich in den Kassen enthaltenen Beträge ein, und der Computer
verbucht die Differenzen automatisch als Einnahmen oder Ausgaben.
- Um den Informationsgehalt einzelner Buchungen zu erhöhen soll nicht nur
der Name sondern auch die vollständige Adresse aller Kunden und
Lieferanten, die das Geld einzahlen oder ausbezahlt bekommen, eingegeben
werden. Zur Vereinfachung bekommt jeder Geschäftspartner eine eindeutige
Nummer (ohne Unterscheidung zwischen Kunden und Lieferanten) und bei der
Buchung wird nur diese Nummer eingegeben. Es wird aber eine eigene
Verwaltung der Nummern und dazugehörigen Adressen benötigt. Dazu benötigt
man Möglichkeiten, alle Geschäftspartner anzuzeigen und Daten zu ändern,
wobei aber alte (= überschriebene) Daten bei Bedarf auch noch sichtbar
sein sollen.
- Auch die Verwaltung des Zahlungsgrundes soll effizienter gestaltet werden.
Dazu sollen Rechnungen, die entweder an Kunden gerichtet sind
(Forderungen) oder von Lieferanten kommen (Verbindlichkeiten) verwaltet
werden. Bei Bezahlung der Rechnung über eine Kassa wird als Zahlungsgrund
nur die entsprechende Rechnungsnummer eingetragen. Weiters sollen die
Daten über Forderungen verwendet werden, um automatisch Rechnungen und
nach der Bezahlung Quittungen zu drucken. Das System soll sicherstellen,
dass keine Rechnung mehrfach bezahlt wird und Rechnungsbeträge mit den
bezahlten Beträgen übereinstimmen. Es soll auch möglich sein, offene
Forderungen und Verbindlichkeiten anzuzeigen.
- Ein ganz wichtiger Punkt ist die Erstellung von Berichten, welche die
Buchungen nach unterschiedlichsten Kriterien auflisten. Es soll möglich
sein, alle (auch aufgelöste) Kassen, den aktuellen Inhalt der Kassen,
sowie Buchungen aller oder nur einiger Kassen anzuzeigen. Weiters soll
die Auswahl der anzuzeigenden Buchungen auf bestimmte Zeiträume sowie
bestimmte Geschäftspartner eingeschränkt werden können.
- Das System soll von mehreren Personen (auch gleichzeitig) bedient werden
können. Es muss sichergestellt sein, dass nur berechtigte Personen auf
die Daten zugreifen können, und jeder solche Zugriff soll protokolliert
werden. Insbesondere muss bei jeder Buchung vermerkt sein, wer sie
vorgenommen hat.
- Da die gespeicherten Daten für das Funktionieren eines Betriebes sehr
wichtig sind, müssen regelmäßig Backups angelegt werden. Die Verwalutung
der Backups soll automatisiert werden.
Wie die Aufgabe zu lösen ist:
Eine vollständige Lösung dieser Aufgabe ist sehr umfangreich und in der
gegebenen Zeit (3 Wochen) vermutlich nicht zu schaffen. Versuchen Sie, die
Aufgabe so zu lösen, dass zumindest die wichtigsten Benutzerwünsche erfüllt werden.
Die entsprechene Auswahl müssen Sie selbst treffen. Erweitern Sie die
bestehende Lösung schrittweise. Versuchen Sie, möglichst produktiv zu sein;
vermeiden Sie es aber, Programmteile zu schreiben, die nicht gebraucht
werden oder nicht das tun, wofür sie gedacht sind. Achten Sie stets auf
gute Wartbarkeit aller Programmteile (Einfachheit, Objektkopplung,
Klassenzusammenhalt, etc.). Stecken Sie nicht zu viel Arbeit in die
Benutzerschnittstelle, sondern konzentrieren Sie sich auf den Inhalt.
Entwickeln Sie zuerst ein grobes Konzept (welche Punkte wollen Sie in
welcher Reihenfolge angehen, wer in der Gruppe soll wann was machen, etc.)
und beginnen Sie erst dann mit dem Programmieren.
Betreuung durch Tutor:
Falls Sie Tutor-Betreuung wünschen, schicken Sie möglichst bald Ihr Konzept
über die von Ihnen geplante Vorgehensweise an Ihre Tutorin oder Ihren Tutor.
Alles Weitere erfahren Sie dann von ihr oder ihm.
Was im Hinblick auf die Abgabe zu beachten ist:
Schreiben Sie Ihre Lösung in den bereits existierenden Ordner
Aufgabe2
in Ihrem Verzeichnis auf dem Übungsrechner b3. Das Programm soll von
diesem Ordner aus durch
java EinAus
aufrufbar sein. Schreiben Sie nicht
mehr als eine Klasse in jede Datei. Der Ordner soll zum Zeitpunkt der Abgabe
(9.11.2006, 12:45 Uhr) und der nachträglichen Abgabe (16.11.2006,
12:45 Uhr) alle
.java
-Dateien enthalten, die Sie für Ihre Lösung
benötigen. Bitte entfernen Sie alle
.java
-Dateien, die nicht zur Abgabe
gehören. Dateien mit anderen Endungen werden bei der Beurteilung nicht
berücksichtigt. Das ist die einzige Aufgabe, bei der Sie auch Ordner
innerhalb des Abgabeordners (
Aufgabe2
) verwenden dürfen.