Files
2026-06-17 15:58:48 +02:00

109 lines
3.5 KiB
C#

using Pannenkoekenhuis;
using Pannenkoekenhuis.Strategy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Strategy_Kassabon
{
public class Kassabon
{
private KortingsCalculator korting { get; set; }
public List<Pannenkoek> pannenkoeken
{
get; private set;
}
/// <summary>
/// Deze klasse realiseert een eenvoudige kassabon voor ons
/// pannenkoekenhuis, en toont hoe het Strategy design pattern kan worden
/// gebruikt.
///
/// Introductie:
/// Met enige regelmaat worden er nieuwe kortingsacties bedacht,
/// waardoor telkens het algoritme voor het berekenen van korting
/// in deze Kassabon klasse moet worden aangepast.
///
/// Opgave:
/// Gebruik het Strategy pattern om de algoritmen af te splitsen in
/// aparte klassen onder een gemeenschappelijk interface.
/// </summary>
public Kassabon()
{
pannenkoeken = new List<Pannenkoek>();
korting = new NulKorting(this);
}
/// <summary>
/// Voegt een pannenkoek toe aan de kassabon
/// </summary>
/// <param name="p">De Pannenkoek om toe te voegen</param>
public void VoegToe(Pannenkoek p)
{
pannenkoeken.Add(p);
}
/// <summary>
/// Drukt een kassabon af op de console, met daarin opgenomen
/// de beschrijving en prijs van elke pannenkoek op de rekening,
/// de totaalprijs (= som van de prijzen van alle pannenkoeken),
/// de korting (= bedrag dat van de totaalprijs zal worden afgetrokken),
/// en het eindbedrag (= totaalprijs - korting)
/// </summary>
public void DrukBonAf()
{
Console.WriteLine("\nKassabon");
foreach (Pannenkoek p in pannenkoeken)
{
Console.WriteLine("{0} : \t{1,6:F2}", p.Beschrijving, p.Prijs);
}
Console.WriteLine("Totaalprijs : \t{0,6:F2}", Totaalprijs());
Console.WriteLine("Korting : -\t{0,6:F2}", Korting());
Console.WriteLine("Eindbedrag = \t{0,6:F2}", Eindbedrag());
}
/// <summary>
/// Geeft de som van de prijzen van alle pannenkoeken op de kassabon
/// </summary>
/// <returns></returns>
public double Totaalprijs()
{
double totaalprijs = 0.0;
foreach (Pannenkoek p in pannenkoeken)
{
totaalprijs += p.Prijs;
}
return totaalprijs;
}
/// <summary>
/// Geeft de totaalprijs minus de korting
/// </summary>
/// <returns></returns>
public double Eindbedrag()
{
double eindbedrag = Totaalprijs() - Korting();
if (eindbedrag < 0.0)
{
eindbedrag = 0.0;
}
return eindbedrag;
}
/// <summary>
/// Berekent de korting, volgens de actuele kortingsactie(s)
///
/// Deze kortingsregels veranderen regelmatig, telkens als nieuwe
/// kortingsacties worden bedacht.
/// </summary>
/// <returns></returns>
public double Korting()
{
return korting.Korting();
}
}
}