In deze oefening moet je een voorraadbeheersysteem implementeren met behulp van stacks. Het doel is om realistische voorraadoperaties te simuleren, waarbij producten in batches worden beheerd en het Last-In-First-Out (LIFO)-principe wordt toegepast. Deze aanpak weerspiegelt scenario’s waarin de meest recent toegevoegde voorraad als eerste wordt gebruikt, zoals bij duurzame goederen.
Maak de Inventory_Manager klasse (1 punt) die de voorraad beheert voor meerdere producten. Elk object bevat een woordenboek van producten waarbij product_name
als sleutel wordt gebruikt.
Deze klasse moet de volgende methoden bevatten:
add_product(product_name, holding_cost, stockout_penalty)
: Voegt een nieuw product toe aan de voorraad (1 punt). Als het product al is toegevoegd, wordt het volgende bericht weergegeven:Product [product_name] already exists.
restock_product(product_name, quantity, cost_per_unit)
: Vul een product aan door een nieuwe batch aan de stack toe te voegen (2 punten). Als het product niet wordt gevonden, wordt het volgende bericht weergegeven in de console:Product [product_name] not found
simulate_demand(min_demand, max_demand)
: Genereert een willekeurige vraag voor elk product (1 punt). De methode retourneert een woordenboek waarbij de sleutel product_name
is en de waarde de vraag is die overeenkomt met een willekeurige waarde tussen min_demand
en max_demand
. Standaard is min_demand
gelijk aan 0 en max_demand
gelijk aan 20.
simulate_day(demand)
: Simuleert een dag van operaties en retourneert de totale aanhoudingskosten en totale stockout-kosten (2 punten). De parameter van de methode komt overeen met de gesimuleerde vraag als een woordenboek (zie methode simulate_demand
).
save_to_csv(filename)
: Slaat de voorraad op in een CSV-bestand (1 punt). Elke rij in het CSV-bestand komt overeen met:
[product_name],[batch_quantity],[batch_cost_per_unit]
load_from_csv(filename)
: Laadt de voorraad vanuit het CSV-bestand (2 punten). Als de producten nog niet in de voorraad aanwezig zijn, worden ze toegevoegd aan de voorraad.
print_inventory()
: De methode print de voorraad voor elk product door gebruik te maken van eerder gedefinieerde functies (1 punt). Bijvoorbeeld:
Current Inventory: Product Widget: Batch(quantity=100, cost_per_unit=2.5) Batch(quantity=50, cost_per_unit=2.0) Product Gadget: Batch(quantity=70, cost_per_unit=3.0)
Voeg een main
-methode toe die twee producten toevoegt en voor elk product minimaal 2 batches. Print vervolgens je voorraad, simuleer vraag en sla je voorraad op in een CSV-bestand.