Information
Diese Aufgabe ist eine abgewandelte Version des Snackbar Practice Problems von CS50.
Disclaimer: Diese Aufgabe wurde nicht vom Lehrstuhl herausgegeben und kann Fehler enthalten. Sie dient lediglich zu Übungszwecken!
Stell dir vor, du bist am Strand und möchtest eine Reihe von Gerichten am Kiosk bestellen. Du hast nur eine begrenzte Menge Bargeld bei dir und möchtest vor der Bestellung den Gesamtpreis deiner Gerichte wissen.
Im Kiosk werden folgende Gerichte angeboten:
| Name | Preis |
|---|---|
| 🍔 Burger | 5,99 € |
| 🍕 Pizza | 7,49 € |
| 🥗 Salad | 4,99 € |
| 🍟 Fries | 2,99 € |
| 🥤 Soda | 1,99 € |
Wir sind Informatiker! Somit würden wir ein solches Problem grundsätzlich mithilfe eines Algorithmus lösen.
Implementiere diesen in einer C-Datei namens snackbar.c. In snackbar.c wirst du unter anderem zwei Funktionen und eine struct implementieren.
Tipp
Du kannst die Datei auch über das Terminal erstellen, nutze hierfür touch snackbar.c.
Deine Aufgabe besteht darin, eine struct namens menu_item zu erstellen, die den Namen eines Gerichts (name) sowie dessen Preis (price) speichert. Zusätzlich musst du noch die Funktion add_items erstellen, welche die menu_items erstellt.
Außerdem soll die Funktion purchase implementiert werden, die mithilfe eines linearen Suchalgorithmus den Preis eines ausgewählten Gerichts ermittelt und zurückgibt. Dabei soll die Suche nicht zwischen Groß- und Kleinschreibung unterscheiden. Kann ein angegebenes Gericht nicht gefunden werden, so soll The provided dish wasn't found. auf der Konsole ausgegeben werden.
Schließlich soll die main-Funktion implementiert werden, sodass sie den Nutzer wie im untenstehenden Beispiel begrüßt und ihn danach auffordert den Namen eines Gerichts einzugeben. Der Preis dieses Gerichts wird dann mit purchase ermittelt und die Eingabe solange wiederholt, bis der Nutzer keine weiteren Gerichte mehr auswählt (Abbruch durch Drücken von Enter). Sobald die Eingabe beendet wird, gibt die Funktion den Gesamtpreis aller ausgewählten Gerichte aus. Die Ausgabe soll folgendermaßen formatiert sein: The order costs 1.23 €\n. Achte darauf, das Format wie in dieser Beispielausgabe beizubehalten.
$ ./snackbar
Welcome to our Snackbar!
Choose your dishes, press Enter when done.
Dish: Burger
Dish:
The order costs 5.99 €strings.h, die für die purchase-Funktion hier nützlich sein könnte. Welche ist das?Deine Aufgabe ist es nun eine struct und drei Funktionen, wie oben spezifiziert, zu implementieren:
struct menu_item, welche die Gerichte und Preise repräsentiert.add_items, die menu_items entsprechend der Angabe erstellt.main, um die Nutzereingaben zu verarbeiten und den Gesamtpreis zu berechnen.purchase, die den Preis eines Gerichts anhand des Namens ermittelt.Warum ist ein Array von structs hier besser geeignet als mehrere Arrays?
Die angegeben Preise in der vorherigen Teilaufgabe waren ohne Mehrwertsteuer angegeben. In dieser Teilaufgabe sollst du die Berechnung der Mehrwertsteuer in die Funktionalität integrieren. Die Mehrwertsteuer beträgt 19% und soll mithilfe einer Konstante VAT_RATE definiert werden.
Erweitere daher die Funktionalität des existierenden Programms, sodass der letztendlich ausgegebene Preis inklusive 19% Mehrwertsteuer ist.
Das Lager im Kiosk ist sehr begrenzt. Somit können nicht viele Gerichte vorrätig gelagert werden. Es kommt also immer wieder vor, dass Kunden ein Gericht bestellen, dieses aber nicht verkauft werden kann, da es nicht auf Lager ist. In dieser Teilaufgabe sollst du die struct und die Funktionen erweitern, um die Verfügbarkeit von Gerichten zu verwalten und zu überprüfen, ob die angeforderte Menge eines Gerichts bestellt werden kann. Den aktuellen Lagebestand des Kiosks kannst du der folgenden Tabelle entnehmen.
| Name | Preis | Bestand |
|---|---|---|
| 🍔 Burger | 5,99 € | 5 |
| 🍕 Pizza | 7,49 € | 12 |
| 🥗 Salad | 4,99 € | 3 |
| 🍟 Fries | 2,99 € | 7 |
| 🥤 Soda | 1,99 € | 16 |
Passe deshalb dein Programm gemäß folgenden Schritten an:
struct um eine Möglichkeit, die verfügbare Menge der Gerichte zu speichern. Passe hierbei auch die add_items Funktion an.purchase-Funktion so, dass sie den index des Gerichts verwendet und basierend darauf prüft, ob genügend Gerichte vorrätig sind.Falls genügend Gerichte vorrätig sind, wird die gewünschte Anzahl (in unserem Fall hier -1) von den verfügbaren Gerichten abgezogen und der Preis entsprechend berechnet. Achte darauf, dass die Logik sauber implementiert ist und der Nutzer bei fehlenden Gerichten mit der Meldung Not enough dishes available. informiert wird.
Verwende dazu je nach Teilaufgabe die folgenden Befehle, um dein Programm mit check50 zu überprüfen.
check50 -l inf-lab-dev/check/snackbar/a1check50 -l inf-lab-dev/check/snackbar/a2check50 -l inf-lab-dev/check/snackbar/a3Führe den folgenden Befehl aus, um den Stil deines Codes mit style50 zu analysieren:
style50 snackbar.c