C-Kurs/Sammelbestellung: Unterschied zwischen den Versionen
Mutax (Diskussion | Beiträge) K (block zusammengefasst) |
Mario (Diskussion | Beiträge) (Typo) |
||
Zeile 2: | Zeile 2: | ||
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! | 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 | + | 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 [[wikipedia:EDV|EDV]]) gelöst werden: | Folgendes Szenario soll mit Hilfe von elektronischer Datenverarbeitung (kurz [[wikipedia:EDV|EDV]]) gelöst werden: | ||
− | Eine Gruppe möchte zum | + | 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. | 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 | + | 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 muß. Vereinfachung: Die Versandkosten sollen anhand der Menge der Artikel aufgeteilt werden, nicht nach dem Gewicht. |
Im Vorfeld ist nicht bekannt, wieviele Personen insgesamt bestellen. | Im Vorfeld ist nicht bekannt, wieviele Personen insgesamt bestellen. | ||
Zeile 62: | Zeile 62: | ||
Stelle nun sicher, dass ein Artikel immer nur einmal in die Liste aufgenommen werden kann. Ist er bereits in der Liste | 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 | + | 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 nacheinander mehrere Teilbestellungen bearbeitet werden können. | Erweitere nun das Programm so, dass der Dateiname auf der Kommandozeile angegeben werden kann und so nacheinander mehrere Teilbestellungen bearbeitet werden können. | ||
Zeile 78: | Zeile 78: | ||
SUMME: 69 129.43 | SUMME: 69 129.43 | ||
− | Tipps: Liste von Listen, argv, argc, structs, printf, ... | + | Tipps: Nutze Liste von Listen, argv, argc, structs, printf, ... |
=== Teil 5 === | === Teil 5 === |
Version vom 20. September 2009, 15:12 Uhr
Inhaltsverzeichnis
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 muß. 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
Erweitere die Vorgabe so, dass jeder Aufruf der addItem()-Funktion den Artikel in einer einfach verketteten Liste speichert und diese Liste am Ende auf dem Bidlschirm formatiert ausgibt.
typedef struct llist_t{ ... ... } llist; void addItem(llist* alist, char* orderno, char* name, float price, int count, float sum){ ... } int main(int argc, char** argv){ ... llist* alist; ... addItem(alist, "UT 2042 C","40 MHz-Digital-Speicher-Oszilloskop",349.00, 1, 349.00); addItem(alist, "AGF 2 SW","Hirschmann-Abgreifklemme 4mm schwarz",5.10,1, 5.10); ... }
Ausgabe:
Bestellnummer Name Einzelpreis Menge Gesamtpreis 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
Teil 2
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 3
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 nacheinander mehrere Teilbestellungen bearbeitet werden können.
Teil 4
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 ===================================== SUMME: 69 129.43
Tipps: Nutze Liste von Listen, argv, argc, structs, printf, ...
Teil 5
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 ;)