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!

C-Kurs/Sammelbestellung: Unterschied zwischen den Versionen

(beta 1)
(kein Unterschied)

Version vom 20. September 2009, 14:05 Uhr

Aufgabenstellung

Diese Aufgabe soll möglichst viele Elemente der bisherigen Vorlesungen aufgreifen und verbinden. Die Teilaufgaben fangen leicht an und werden gegen Ende etwas komplexer, so dass Ihr selbst schauen könnt 'wie weit' ihr kommt. Bei Problemen nicht verzagen, Tutor fragen!

Lest Euch die Aufgabe zunächst komplett durch und überlegt, welche Datenstrukturen ihr aufbauen müsst. Macht euch auf einem Blatt Papier einen Plan, welche Funktionalitäten ihr in funktionen ausgliedern wollt, z.B. Datensatz einfügen, suchen, entfernen, Liste ausgeben, Datei einlesen, etc.


Folgendes Szenario soll mit Hilfe von elektronischer Datenverarbeitung (kurz EDV) gelöst werden:

Eine Gruppe möchte zum zweck des Sparens von Versandkosten gemeinsam bei einem Onlinehändler bestellen. Dabei soll von allen Bestellern eine Bestellliste im CSV-Format entgegengenommen werden. Diese Einzellisten sollen dann zu einer Gesamtbestelliste zusammengeführt werden, die für jeden Artikel auflistet, wie oft er bestellt wurde. Bestellen mehrere Personen denselben Artikel, so soll dies anhand der Bestellnummer erkannt werden und dieser auf der Gesamtliste natürlich nur einmal, aber mit passender Menge, erscheinen.

Neben dieser Bestelliste soll am Ende eine kurze Liste ausgegeben werden, die angibt wieviele Produkte jeder einzelne Teilnehmer bestellt hat und wieviel Geld er bezahlen mus. Vereinfachung: Die Versandkosten sollen anhand der Menge der Artikel aufgeteilt werden, nicht nach dem Gewicht.

Im Vorfeld ist nicht bekannt, wieviele Personen insgesamt bestellen.

TODO: Beachtet die Vorgaben zu dieser Aufgabe, welche ihr hier herunterladen könnt: ..... (csv-dateien, programmrümpfe)

Teil 1

Schreibe ein Programm, dass eine csv-Datei 'bestellung.csv' aus dem aktuellen Verzeichnis einliest und auf dem Bildschirm ausgibt, wieviele Artikel bestellt wurden und was diese insgesamt kosten.

Die Artikel sollen dazu zunächst in einer einfach verketteten Liste unsortiert gespeichert werden, danach soll diese Liste vom Anfang durchlaufen werden und die Artikel gezählt sowie der Preis berechnet werden.

Die CSV-Datei hat folgendes Format (Beispiele in den Vorgaben):

Bestellnummer, Kurzbeschreibung, Einzelpreis, Anzahl, Preis
UT 2042 C, 40 MHz-Digital-Speicher-Oszilloskop	349.00, 1, 349,00 
AGF 2 SW, Hirschmann-Abgreifklemme 4mm schwarz	5.10,1, 5,10
AK 2 RT, Hirschmann-Krokoklemme 4mm rot	1.80, 1, 1,80

Teil 2

Stelle nun sicher, dass ein Artikel immer nur einmal in die Liste aufgenommen werden kann. Ist er bereits in der Liste vorhanden, so soll die anzahl und der Preis angepasst werden. Stelle ausserdem sicher, dass beim Einlesen der Liste der Preis jeweils das Produkt aus Anzahl und Einzelpreis ist, und sich keine Fehler in der Bestellliste eingeschlichen haben.

Erweitere nun das Programm so, dass der Dateiname auf der Kommandozeile angegeben werden kann und so mehrere Bestellungen bearbeitet werden können.

Teil 3

Das Programm soll nun beliebig viele Dateinamen als Kommandozeilenparameter beim Start übergeben bekommen und für jeden einzelnen eine neue Liste führen. Am Ende soll dann in einem Block eine kurze, formatierte Tabelle ausgegeben werden, welche eine Spalte mit dem Dateinamen, dann die Anzahl der Produkte und den Endpreis aus der Bestellung enthält:

Dateiname      Produkte   Gesamtpreis
florian.csv    51         123,51
bastla.csv     12         4,12
tannek.csv     6          1,80

Teil 4

Erweitere das Programm jetzt schließlich so, dass nach dem kompletten einlesen der einzelnen Listen die Gesamtbestelliste in eine Datei geschrieben wird. Dazu muss zunächst noch eine verkettete Liste angelegt werden, welche die Gesamtbestellung enthält.

Am Ende soll dann die Tabelle aus Teil 3 auf dem Bildschirm ausgeben werden und eine Datei 'gesamt.csv' im aktuellen Verzeichnis angelegt werden, welche die Gesamtbestellung enthält. Das Dateiformat ist hier exakt wie bei den einzelnen Bestelllisten.


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 ;)