Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- *
- * @author alexanderkahl
- */
- import java.util.Scanner;
- /**
- */
- public class tempPseudoCode
- {
- // TODO Declare and initialise class variables here
- /**
- * @param args
- */
- public static void main(String[] args)
- {
- // TODO: Declare and initialise local variables here:
- Erstelle eine Rezeptliste;
- rezeptliste == new Rezeptliste();;
- INPUT Rezeptliste;
- - Pfad und Dateiname aus Parameterliste, Abfrage oder GUI-Element;
- - Datei öffnen;
- - Text auslesen bis EOF;
- ;
- Dabei gilt:;
- for (dummy_counter = Für jede Zeile (REZEPT) in Rezepte.csv; dummy_counter <= null; dummy_counter += (1))
- {
- if (Rezept bereits enthalten? rezeptliste.findRezept(String REZEPT_Spalte1);)
- {
- Rezeptverweis holen;
- rezept == Rezepteliste.getRezept(REZEPT_Spalte1);;
- }
- else
- {
- Erstelle ein neues Objekt vom Typ Rezept;
- rezept == new Rezept(REZEPT_Spalte1);;
- }
- Zutat hinzufügen (Menge, Maßeinheit, Zutatbezeichnung);
- rezept.addZutat(REZEPT_Spalte2, REZEPT_Spalte3, REZEPT_Spalte4);;
- ;
- (Arbeitshypothese: Zutaten werden innerhalb der Klasse Rezept in einem;
- einfachen Vektor, Array, o. ä. gespeichert; keine Klasse Zutat, keine zu-;
- gehörige Verwaltungsklasse Zutatenliste);
- }
- INPUT Hitliste;
- - Pfad und Dateiname aus Parameterliste, Abfrage oder GUI-Element;
- - Datei öffnen;
- - Text auslesen bis EOF;
- ;
- Dabei gilt:;
- for (dummy_counter = Für jede Zeile (HITLISTE) in Hitliste.csv; dummy_counter <= null; dummy_counter += (1))
- {
- if (rezeptliste.findRezept(HITLISTE_Spalte2);)
- {
- rezeptliste.getRezept(HITLISTE_Spalte2).setRanking(HITLISTE_Spalte1);;
- }
- else
- {
- Gericht der Hitliste ist nicht auf der Rezeptliste;
- Ausgabe eines entsprechenden Hinweis (nachrichtlich);
- }
- }
- MERKER;
- ;
- Erstellen einer Collection, eines Arrays, Vector o. ä., um die Preislisten zu sammeln;
- z. B.;
- ;
- ArrayList<Preisliste> preislisten_container == new ArrayList<Preisliste>();;
- Erstelle eine Lieferantenliste;
- Klasse Lieferantenliste == Verwaltungsklasse für Objekte des Typ Lieferant;
- ;
- lieferantenliste == new Lieferantenliste();;
- INPUT Preisliste;
- - Pfade und Dateinamen aus Parameterliste, Abfrage oder GUI-Element;
- - Dateien öffnen;
- - jeweils Text auslesen bis EOF;
- ;
- Dabei gilt:;
- for (dummy_counter = Für jede CSV-Datei (preisliste_x.csv); dummy_counter <= null; dummy_counter += (1))
- {
- Einlesen der Lieferantendaten (Zeile 1 == LIEFERANT);
- if (Lieferant in Lieferantenliste? lieferantenliste.findLieferant(LIEFERANT_Spalte2);)
- {
- Verweis auf Lieferantenobjekt holen;
- lieferant == Lieferantenliste.getLieferant(LIEFERANT_Spalte2);;
- }
- else
- {
- Erstellen eines neuen Objektes Lieferant (Firmenname, Typ, Lieferkostengrundlage);
- lieferant == new Lieferant(LIEFERANT_Spalte2, LIEFERANT_Spalte1, LIEFERANT_Spalte3);
- Hinzufügen des Objektes Lieferant in Lieferantenliste;
- lieferantenliste.addLieferant(lieferant);;
- }
- Erstellen einer Preisliste (mit Verweis auf Lieferanten);
- preisliste == new Preisliste(Lieferant lieferant);;
- ;
- // lieferant == Attribut von Preisliste;
- for (dummy_counter = Für die Zeilen 2 bis n in CSV (==Artikelpositionen); dummy_counter <= null; dummy_counter += (1))
- {
- // Spalte 1: Mengenangabe pro Verkaufseinheit
- // Spalte 2: Maßeinheit einer Verkaufseinheit
- // Spalte 3: Name der Produkts
- // Spalte 4: "m" steht für Fleisch(Meat); "f" steht für Fisch, leer bedeutet weder Fleisch noch Fisch
- // Spalte 5: Preis pro Verkaufseinheit
- // Spalte 6: tatsächlich vorhandene Menge an Verkaufseinheiten des Produkts
- Objekt Artikel erstellen und der Preisliste hinzufügen;
- ;
- preisliste.addArtikel(new Artikel(;
- PREISLISTE_Spalte3, // Name des Produkts;
- PREISLISTE_Spalte1, // Mengenangabe je Verkaufseinheit;
- PREISLISTE_Spalte2, // Maßeinheit einer Verkaufseinheit;
- PREISLISTE_Spalte5, // Preis pro Verkaufseinheit;
- PREISLISTE_Spalte4, // Sonderkennzeichen (m, f, LEER);
- PREISLISTE_Spalte6, // vorhandene Menge an Verkaufseinheiten des Produkts));;
- }
- Preisliste dem Container hinzufügen;
- preislisten_container.add(preisliste);;
- }
- Für jedes Werk ein entsprechendes Objekt anlegen;
- ;
- werkn == new Werk(Anzahl der MA,;
- Anzahl der Gerichte pro Tag (Durchschnitt?);
- Budget (falls je Werk relevant; == Anzahl MA * Pauschale));;
- ;
- MERKER:;
- Kantinenplanung je Werk, aber Einkaufsplanung global;
- kantinenplanung == new Kantinenplanung();;
- // kantinenplanung.addWerk(Werk werk);;
- kantinenplanung.addWerk(werkn);;
- // Preislisten hinzufügen (optional);
- // kantinenplanung.updatePreislisten(ArrayList<Preisliste> preislisten); ==> Alternative: eig. Verwaltungsklasse, s. Anm. oben!;
- kantinenplanung.updatePreislisten(preislisten_container);;
- // Rezeptliste hinzufügen (optional);
- // kantinenplanung.updateRezeptliste(Rezeptliste rezeptliste);;
- kantinenplanung.updateRezeptliste(rezeptliste);;
- // Kalkulationsbasis schaffen: Kosten pro Gericht ohne Berücksichtigung von Mindestabnahmemengen;
- // Mindestabnahmemenge ggf. betrachten, bei Wochenplanerstellung;
- // gleichzeitig RankingGesamt bestimmen (Kosten gewichtet nach Ranking);
- for (dummy_counter = Für alle Gerichte gericht in rezeptliste; dummy_counter <= null; dummy_counter += (1))
- {
- // Grundidee: Alle Zutaten durchgehen und für jede Zutat den günstigsten Einkaufspreis;
- // ermitteln. Dabei Maßeinheit und Mengenangabe werden hierbei berücksichtigt, die "Mindest-;
- // abnahmemenge" jedoch zur Vereinfachung nicht.;
- for (dummy_counter = Für jede Zutat zutat in rezeptliste.rezept.zutaten; dummy_counter <= null; dummy_counter += (1))
- {
- // für Folgendes sei eine eigene Verwaltungsklasse für Preisliste unterstellt;
- // die Methode double findGuenstigstenPreis(String Zutat); dieser Klasse durchsucht alle Preislisten nach dem günstigsten;
- // Preis der gesuchten Zutat / des gesuchten Artikels;
- ;
- gericht.setKalkulatKosten == gericht.getKalkulatKosten + preislisten_container.findGuenstigstenPreis(String Zutat, int Menge, String Mass);;
- }
- // Nachdem die Gerichte nun sowohl ein Ranking als auch;
- // kalkulatorische "Produktionskosten" ausweisen, kann ein Gesamt-;
- // ranking ermittelt werden;
- ;
- gericht.rankGericht();;
- ;
- // rankGericht zieht den mittels getKalkulatKosten ermittelten kalkulatorischen Preis heran und gewichtet diesen;
- // mit der Position in der Hitliste;
- // z. B. RankingGesamt == Preis * (1 + (Hitlistenposition/Gesamtzahl in Hitliste);
- // RankingGesamt == kalkulatKosten * (1 + Ranking);;
- ;
- // Unterstellt, dass die Gesamtzahl zuvor gesondert gespeichert wird oder .setRanking statt der Position;
- // jenen Wert speichert (Position/Gesamtzahl);
- }
- // Nun kann die Rezeptliste nach dem Gesamtranking sortiert werden;
- // Die Methode void sortNachRanking(); sortiert die ArrayList dann nach RankingGesamt;
- rezeptliste.sortNachRanking();;
- // Anlegen einer Einkaufsliste;
- einkaufsliste == new Einkaufsliste();;
- // Anzahl der Werke ermitteln;
- anzahlWerke == kantinenplanung.countWerke();;
- // Def. der Mindestanzahl von Fisch-, Fleisch- und vegetarischen Gerichten;
- // 5 steht stellv. für Anzahl der Wochentage;
- anzahlMinFleisch == 5 * ;;
- anzahl;
- // Ausgangssituation;
- // - rezeptliste ist absteigend nach Ranking sortiert;
- // Idee:;
- // - jedes Rezept, das von der Rezepteliste genommen wird, wird in der Gerichteliste (gerichteliste);
- // hinzugefügt und von rezepteliste gestrichen;
- // - pro Bedingung (Fisch, Vegetarisch, Fleisch) wird ein Durchgang durch die Liste vorgenommen,;
- // sodass keine Gerichte doppelt verwendet werden;
- for (dummy_counter = Für jedes Werk werk erstelle Wochenspeisepläne und ergänze fortlaufende die Einkaufliste // ArrayList<Werk> werke == kantinenplanung.getAllWerke(); // for each werk in werke; dummy_counter <= null; dummy_counter += (1))
- {
- // Planungshorizont == Anzahl der zu planenden Wochen;
- // anzahlWochen ==> ggf. Attribut in Kantinenplanung ?;
- // ggf. als Parameter erfassen;
- anzahlWochen == 3;;
- // Die Anzahl der benötigten Gerichte ergibt sich aus;
- // Anzahl der Wochentage * Anzahl der Gerichte pro Tag;
- // Berücksichtigung des Planungskalenders hier einbauen bzw. zumindest;
- // berücksichtigen ???; ansonsten 5;
- anzahlGerichte == 3 * 5;;
- // Anlegen einer Gerichteliste (enthält alle Gerichte, die in der Planungsperiode angeboten werden sollen);
- gerichteliste == new Rezeptliste();;
- // Duplikat der Rezeptliste erschaffen;
- tempRezepteliste == rezepteliste.clone();;
- for (dummy_counter = Für Woche 1 bis anzahlWochen; dummy_counter <= null; dummy_counter += (1))
- {
- // Hilfsvariablen für jede Woche;
- int anzahlFleisch == 0; // 1 pro Tag, i.d.R. 5 pro Woche;
- int anzahlFisch == 0; // 1 pro Woche;
- int anzahlVeget == 0; // 1 pro Tag, i.d.R. 5 pro Woche;
- // Zuerst die Mindestanzahl an Fischgerichten sicherstellen;
- // Rezeptliste mit allen Verweisen auf Fischrezepte abfragen (sortiert);
- Rezeptliste fischRezepte == tempRezepteliste.getFischRezepteSortiert();;
- // Initialisieren eines Iterators;
- ListIterator<T> it == fischRezepte.listIterator();;
- while (Solange (it.hasNext() && 1 > anzahlFisch))
- {
- // Nächstes Rezept der Liste betrachten;
- T gericht == it.next();;
- gerichteliste.addRezept(gericht);;
- tempRezepteliste.removeRezept(gericht);;
- anzahlFisch++;;
- }
- // Nun die nächste Minimalbedingungen erfüllen ==> 1 Fleischgericht pro Tag;
- // Rezeptliste mit allen Verweisen auf Fleischrezepte abfragen (sortiert);
- Rezeptliste fleischRezepte == tempRezepteliste.getFleischRezepteSortiert();;
- // Initialisieren eines Iterators;
- ListIterator<T> it == fleischRezepte.listIterator();;
- while (Solange (it.hasNext() && 5 > anzahlFleisch) // Statt 5 müsste ggf. Anzahl der Wochentage als Variable stehen (==> Planungskalender?))
- {
- // Nächstes Rezept der Liste betrachten;
- T gericht == it.next();;
- gerichteliste.addRezept(gericht);;
- tempRezepteliste.removeRezept(gericht);;
- anzahlFleisch++;;
- }
- // Nun die noch die letzte Minimalbedingungen erfüllen ==> 1 vegetarisches Gericht pro Tag;
- // Rezeptliste mit allen Verweisen auf veget. Gerichte abfragen (sortiert);
- Rezeptliste vegetRezepte == tempRezepteliste.getVegetRezepteSortiert();;
- // Initialisieren eines Iterators;
- ListIterator<T> it == vegetRezepte.listIterator();;
- while (Solange (it.hasNext() && 5 > anzahlVeget) // Statt 5 müsste ggf. Anzahl der Wochentage als Variable stehen (==> Planungskalender?))
- {
- // Nächstes Rezept der Liste betrachten;
- T gericht == it.next();;
- gerichteliste.addRezept(gericht);;
- tempRezepteliste.removeRezept(gericht);;
- }
- ListIterator<T> it == list.listIterator();;
- ;
- while (it.hasNext()) {;
- T t == it.next();;
- T prev == it.previous();;
- };
- // Starte mit ersten (bestgerankten) Rezept;
- tempRezepteliste.;
- // Und jetzt noch die übrigen Gerichte gemäß absteigenden Rankingpunkten ermitteln;
- // Initialisieren eines Iterators;
- ListIterator<T> it == tempRezepteliste.listIterator();;
- while (Solange (it.hasNext() && anzahlGerichte > gerichteliste.countRezepte()))
- {
- // Nächstes Rezept der Liste betrachten;
- T gericht == it.next();;
- gerichteliste.addRezept(gericht);;
- }
- // Nun sollte die gerichteliste exakt anzahlGerichte Rezepte enthalten;
- // Diese Gerichte/Rezepte müssen nun noch auf die Tage verteilt werden;
- Wochenspeiseplan speiseplan == new Wochenspeiseplan();;
- // Attribut speiseplan.containsFisch == false;
- for (dummy_counter = Für jeden Tag der Woche (1 to max. 5); dummy_counter <= null; dummy_counter += (1))
- {
- Tag tag == new Tag();;
- speiseplan.addTag(...);;
- }
- werk.addWochenspeiseplan(speiseplan);;
- }
- tempRezepteliste == null;;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement