Kochrezepte (Objekte und Klassen)
Modellieren Sie ein Kochrezept. Ein solches besteht aus 3 Teilen. Im ersten Teil steht
die Anzahl der Portionen und eine Kurzbeschreibung mit Menuvorschlag. Im zweiten Teil sind die Zutaten vermerkt. Jede Zutat hat einen Namen und eine Menge. Die Menge ist entweder eine einfache Anzahl oder aber es handelt sich um eine Maßangabe zusammen mit einer Maßeinheit (z. B. "2.5 kg"). Im dritten Teil folgt eine Aufzählung der Zubereitungsschritte. Leiten Sie die Maßangabe von der Menge ab und verwenden Sie dadurch das Prinzip des Polymorphismus.
0 Kommentare
1 Lösung(en)
// NET 8.x | C# 12.x | VS-2022
using System;
using System.Collections.Generic;
namespace MeineRezepte {
public class Programm {
static void Main() {
var rezeptbuch = new Rezeptbuch([
// 1. Beispielrezept
new Rezept {
Name = "Indische Hackröllchen",
AnzahlPersonen = 4,
Zutaten = [
new ("Hackfleich", MassEinheit.gr, 400),
new ("Linsen", MassEinheit.gr, 400),
new ("Tomaten gehackt", MassEinheit.gr, 400),
new ("Kokosmilch", MassEinheit.ml, 400),
new ("Honig", MassEinheit.EL, 1),
new ("Chilischote", MassEinheit.Stk, 1),
new ("Currypaste", MassEinheit.EL, 2),
new ("Koriander", MassEinheit.Bd, 1),
new ("Salz", MassEinheit.Pr, 1),
new ("Pfeffer", MassEinheit.Pr, 1),
new ("Garam Masala", MassEinheit.TL, 2),
new ("Knoblauchzehe", MassEinheit.Stk, 3),
new ("Lauchzwiebel", MassEinheit.Stg, 3)
],
Schritte = [
new(1, "Mach als erstes..."),
new(2, "Mache dann..."),
new(3, "Als letztes..."),
],
Menuevorschlag = "Hier der Menüvorschlag...",
Bilder = []
},
// 2. Beispielrezept
new Rezept{
Name = "Rouladen wie bei Muddern",
AnzahlPersonen = 8,
Zutaten = [
new("Rouladen", MassEinheit.Stk, 8),
new("Senf", MassEinheit.EL, 8),
new("Gewürzgurken", MassEinheit.Stk, 3),
new("Schwarzwälder Schinkenscheiben", MassEinheit.Stk, 8),
new("Zwiebel", MassEinheit.Stk, 3),
new("Möhrenstreifen",MassEinheit.Stk, 8),
new("Selleriestreifen", MassEinheit.Stk, 8),
new("Salz", MassEinheit.Pr, 16),
new("Pfeffer", MassEinheit.Pr, 16)
],
Schritte = [
new(1, "Mach dies..."),
new(2, "Mach das..."),
new(3, "Als nächstes..."),
],
Menuevorschlag = "Hier der Menüvorschlag...",
Bilder = []
}
]);
// Ausgabe Standardrezept
Console.WriteLine(rezeptbuch);
// Ausgabe gem. geänderter Anzahl Personen
rezeptbuch.FuerAnzahlPersonen = 6;
Console.WriteLine(rezeptbuch);
}
}
public enum MassEinheit { Stk, ml, ltr, gr, kg, EL, TL, Msp, Bd, Pr, Stg }
public record struct Bild { } // Platzhalter für Bilder
public record struct Zutat(string Bezeichnung, MassEinheit Einheit, uint Anzahl);
public record struct Schritt(uint Nummer, string Beschreibung);
public record struct Rezept(string Name, uint AnzahlPersonen, List<Zutat> Zutaten, List<Schritt> Schritte, string Menuevorschlag, List<Bild> Bilder);
public class Rezeptbuch(List<Rezept> Rezepte) {
public uint FuerAnzahlPersonen { private get; set; }
public override string ToString() {
string rezeptAusgabe = "";
foreach (var (name, anzahlPersonen, zutaten, schritte, menuevorschlag, _) in Rezepte) {
var korrekturPersonen = FuerAnzahlPersonen == 0 ? anzahlPersonen : FuerAnzahlPersonen;
rezeptAusgabe += $"\n{name} für {korrekturPersonen} Person{(korrekturPersonen == 1 ? "" : "en")}\n";
rezeptAusgabe += $" Zutaten:\n";
foreach (var (bezeichnung, einheit, anzahl) in zutaten) {
var korrekturAnzahlZutat = Math.Ceiling(anzahl/ (double)anzahlPersonen * korrekturPersonen / 0.5) * 0.5;
rezeptAusgabe += $" {korrekturAnzahlZutat} {Enum.GetName(typeof(MassEinheit), einheit)} {bezeichnung}\n";
}
rezeptAusgabe += $" Schritte:\n";
foreach (var (nummer, beschreibung) in schritte) {
rezeptAusgabe += $" {nummer}. {beschreibung}\n";
}
rezeptAusgabe += $" Menüvorschlag:\n {menuevorschlag}\n";
// und ggf. die Bilder ausgeben
}
return rezeptAusgabe;
}
}
}
Lösung von: Jens Kelm (@JKooP)
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 2-4 |
Schwierigkeit: | k.A. |
Webcode: | h77o-a589 |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |