From adcacd2cc1c0d39e6c04e4b177d2b36cc7c92b9a Mon Sep 17 00:00:00 2001 From: kennyboy55 Date: Mon, 30 Nov 2015 14:00:00 +0100 Subject: [PATCH] Store in GIT --- DesPat.sln | 58 +++++ HueLights/App.config | 6 + HueLights/HueLights.csproj | 63 +++++ HueLights/Light.cs | 74 ++++++ HueLights/LightHandler.cs | 54 +++++ HueLights/LightHue.cs | 27 +++ HueLights/LigthLux.cs | 26 ++ HueLights/Properties/AssemblyInfo.cs | 36 +++ Pannenkoekenhuis/App.config | 6 + Pannenkoekenhuis/Builder/Pannenkoek.cs | 41 ++++ Pannenkoekenhuis/Builder/PannenkoekBuilder.cs | 60 +++++ Pannenkoekenhuis/Builder/desktop.ini | 5 + Pannenkoekenhuis/ClassDiagram1.cd | 123 ++++++++++ Pannenkoekenhuis/ClassDiagram2.cd | 158 +++++++++++++ Pannenkoekenhuis/ClassDiagram3.cd | 223 ++++++++++++++++++ Pannenkoekenhuis/Command/Keuken.cs | 23 ++ Pannenkoekenhuis/Command/Klant.cs | 27 +++ Pannenkoekenhuis/Command/Serveerster.cs | 25 ++ Pannenkoekenhuis/Command/desktop.ini | 5 + Pannenkoekenhuis/Composite/Menu.cs | 45 ++++ Pannenkoekenhuis/Composite/MenuComponent.cs | 41 ++++ Pannenkoekenhuis/Composite/MenuItem.cs | 24 ++ Pannenkoekenhuis/Composite/desktop.ini | 5 + Pannenkoekenhuis/Decorators/Champignon.cs | 16 ++ Pannenkoekenhuis/Decorators/Honing.cs | 16 ++ Pannenkoekenhuis/Decorators/Kaas.cs | 16 ++ .../Decorators/PannenkoekDecorator.cs | 36 +++ Pannenkoekenhuis/Decorators/Stroop.cs | 16 ++ Pannenkoekenhuis/Decorators/Suiker.cs | 16 ++ Pannenkoekenhuis/Decorators/Ui.cs | 16 ++ Pannenkoekenhuis/Decorators/desktop.ini | 5 + .../Factory/KaasPannenkoekFactory.cs | 18 ++ .../Factory/PannenkoekenFactory.cs | 31 +++ .../Factory/StroopPannenkoekFactory.cs | 18 ++ Pannenkoekenhuis/Factory/desktop.ini | 5 + Pannenkoekenhuis/Kassabon.cs | 108 +++++++++ Pannenkoekenhuis/KassabonSimpel.png | Bin 0 -> 37807 bytes Pannenkoekenhuis/Observer/MenuGegevens.cs | 15 ++ Pannenkoekenhuis/Observer/ObserverMenu.cs | 14 ++ Pannenkoekenhuis/Observer/OnlineMenu.cs | 26 ++ Pannenkoekenhuis/Observer/Recepten.cs | 47 ++++ Pannenkoekenhuis/Observer/desktop.ini | 5 + Pannenkoekenhuis/Pannenkoek.cs | 58 +++++ Pannenkoekenhuis/Pannenkoekenhuis.csproj | 102 ++++++++ Pannenkoekenhuis/Pannenkoekenhuis.sln | 22 ++ Pannenkoekenhuis/Program.cs | 25 ++ Pannenkoekenhuis/Properties/AssemblyInfo.cs | 36 +++ Pannenkoekenhuis/Properties/desktop.ini | 5 + Pannenkoekenhuis/Singleton/FactoryFactory.cs | 31 +++ Pannenkoekenhuis/State/EatingState.cs | 41 ++++ Pannenkoekenhuis/State/Klant.cs | 44 ++++ Pannenkoekenhuis/State/State.cs | 17 ++ Pannenkoekenhuis/State/WaitingState.cs | 41 ++++ Pannenkoekenhuis/State/desktop.ini | 5 + .../Strategy/KortingsCalculator.cs | 21 ++ Pannenkoekenhuis/Strategy/NaturelKorting.cs | 32 +++ Pannenkoekenhuis/Strategy/NulKorting.cs | 20 ++ Pannenkoekenhuis/Strategy/desktop.ini | 5 + Pannenkoekenhuis/TestBuilder.cs | 23 ++ Pannenkoekenhuis/TestFactory.cs | 27 +++ Pannenkoekenhuis/TestKassabon.cs | 31 +++ Pannenkoekenhuis/TestMenu.cs | 44 ++++ Pannenkoekenhuis/TestSingleton.cs | 19 ++ Pannenkoekenhuis/TestState.cs | 21 ++ 64 files changed, 2249 insertions(+) create mode 100644 DesPat.sln create mode 100644 HueLights/App.config create mode 100644 HueLights/HueLights.csproj create mode 100644 HueLights/Light.cs create mode 100644 HueLights/LightHandler.cs create mode 100644 HueLights/LightHue.cs create mode 100644 HueLights/LigthLux.cs create mode 100644 HueLights/Properties/AssemblyInfo.cs create mode 100644 Pannenkoekenhuis/App.config create mode 100644 Pannenkoekenhuis/Builder/Pannenkoek.cs create mode 100644 Pannenkoekenhuis/Builder/PannenkoekBuilder.cs create mode 100644 Pannenkoekenhuis/Builder/desktop.ini create mode 100644 Pannenkoekenhuis/ClassDiagram1.cd create mode 100644 Pannenkoekenhuis/ClassDiagram2.cd create mode 100644 Pannenkoekenhuis/ClassDiagram3.cd create mode 100644 Pannenkoekenhuis/Command/Keuken.cs create mode 100644 Pannenkoekenhuis/Command/Klant.cs create mode 100644 Pannenkoekenhuis/Command/Serveerster.cs create mode 100644 Pannenkoekenhuis/Command/desktop.ini create mode 100644 Pannenkoekenhuis/Composite/Menu.cs create mode 100644 Pannenkoekenhuis/Composite/MenuComponent.cs create mode 100644 Pannenkoekenhuis/Composite/MenuItem.cs create mode 100644 Pannenkoekenhuis/Composite/desktop.ini create mode 100644 Pannenkoekenhuis/Decorators/Champignon.cs create mode 100644 Pannenkoekenhuis/Decorators/Honing.cs create mode 100644 Pannenkoekenhuis/Decorators/Kaas.cs create mode 100644 Pannenkoekenhuis/Decorators/PannenkoekDecorator.cs create mode 100644 Pannenkoekenhuis/Decorators/Stroop.cs create mode 100644 Pannenkoekenhuis/Decorators/Suiker.cs create mode 100644 Pannenkoekenhuis/Decorators/Ui.cs create mode 100644 Pannenkoekenhuis/Decorators/desktop.ini create mode 100644 Pannenkoekenhuis/Factory/KaasPannenkoekFactory.cs create mode 100644 Pannenkoekenhuis/Factory/PannenkoekenFactory.cs create mode 100644 Pannenkoekenhuis/Factory/StroopPannenkoekFactory.cs create mode 100644 Pannenkoekenhuis/Factory/desktop.ini create mode 100644 Pannenkoekenhuis/Kassabon.cs create mode 100644 Pannenkoekenhuis/KassabonSimpel.png create mode 100644 Pannenkoekenhuis/Observer/MenuGegevens.cs create mode 100644 Pannenkoekenhuis/Observer/ObserverMenu.cs create mode 100644 Pannenkoekenhuis/Observer/OnlineMenu.cs create mode 100644 Pannenkoekenhuis/Observer/Recepten.cs create mode 100644 Pannenkoekenhuis/Observer/desktop.ini create mode 100644 Pannenkoekenhuis/Pannenkoek.cs create mode 100644 Pannenkoekenhuis/Pannenkoekenhuis.csproj create mode 100644 Pannenkoekenhuis/Pannenkoekenhuis.sln create mode 100644 Pannenkoekenhuis/Program.cs create mode 100644 Pannenkoekenhuis/Properties/AssemblyInfo.cs create mode 100644 Pannenkoekenhuis/Properties/desktop.ini create mode 100644 Pannenkoekenhuis/Singleton/FactoryFactory.cs create mode 100644 Pannenkoekenhuis/State/EatingState.cs create mode 100644 Pannenkoekenhuis/State/Klant.cs create mode 100644 Pannenkoekenhuis/State/State.cs create mode 100644 Pannenkoekenhuis/State/WaitingState.cs create mode 100644 Pannenkoekenhuis/State/desktop.ini create mode 100644 Pannenkoekenhuis/Strategy/KortingsCalculator.cs create mode 100644 Pannenkoekenhuis/Strategy/NaturelKorting.cs create mode 100644 Pannenkoekenhuis/Strategy/NulKorting.cs create mode 100644 Pannenkoekenhuis/Strategy/desktop.ini create mode 100644 Pannenkoekenhuis/TestBuilder.cs create mode 100644 Pannenkoekenhuis/TestFactory.cs create mode 100644 Pannenkoekenhuis/TestKassabon.cs create mode 100644 Pannenkoekenhuis/TestMenu.cs create mode 100644 Pannenkoekenhuis/TestSingleton.cs create mode 100644 Pannenkoekenhuis/TestState.cs diff --git a/DesPat.sln b/DesPat.sln new file mode 100644 index 0000000..d8e1405 --- /dev/null +++ b/DesPat.sln @@ -0,0 +1,58 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HueLights", "HueLights\HueLights.csproj", "{9D404DA7-E094-4031-B3B9-3041C2E69CE4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pannenkoekenhuis", "Pannenkoekenhuis\Pannenkoekenhuis.csproj", "{A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Debug|ARM.ActiveCfg = Debug|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Debug|ARM.Build.0 = Debug|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Debug|x64.ActiveCfg = Debug|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Debug|x64.Build.0 = Debug|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Debug|x86.ActiveCfg = Debug|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Debug|x86.Build.0 = Debug|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Release|Any CPU.Build.0 = Release|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Release|ARM.ActiveCfg = Release|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Release|ARM.Build.0 = Release|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Release|x64.ActiveCfg = Release|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Release|x64.Build.0 = Release|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Release|x86.ActiveCfg = Release|Any CPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4}.Release|x86.Build.0 = Release|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Debug|ARM.ActiveCfg = Debug|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Debug|ARM.Build.0 = Debug|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Debug|x64.ActiveCfg = Debug|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Debug|x64.Build.0 = Debug|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Debug|x86.ActiveCfg = Debug|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Debug|x86.Build.0 = Debug|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Release|Any CPU.Build.0 = Release|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Release|ARM.ActiveCfg = Release|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Release|ARM.Build.0 = Release|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Release|x64.ActiveCfg = Release|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Release|x64.Build.0 = Release|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Release|x86.ActiveCfg = Release|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/HueLights/App.config b/HueLights/App.config new file mode 100644 index 0000000..d740e88 --- /dev/null +++ b/HueLights/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/HueLights/HueLights.csproj b/HueLights/HueLights.csproj new file mode 100644 index 0000000..108f074 --- /dev/null +++ b/HueLights/HueLights.csproj @@ -0,0 +1,63 @@ + + + + + Debug + AnyCPU + {9D404DA7-E094-4031-B3B9-3041C2E69CE4} + Exe + Properties + HueLights + HueLights + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/HueLights/Light.cs b/HueLights/Light.cs new file mode 100644 index 0000000..848bebf --- /dev/null +++ b/HueLights/Light.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HueLights +{ + public abstract class Light + { + protected int id { get; } + protected bool on { get; set; } + protected int bri { get; set; } + protected int hue { get; set; } + protected int sat { get; set; } + + public Light(int id) + { + this.id = id; + this.on = false; + this.bri = 255; + this.hue = 0; + this.sat = 0; + } + + public virtual int getID() + { + return id; + } + + public virtual bool getState() + { + return on; + } + public virtual void setState(bool on) + { + this.on = on; + } + + public virtual int getBrightness() + { + return bri; + } + public virtual void setBrightness(int bri) + { + this.bri = bri; + } + + public virtual int getHue() + { + return hue; + } + public virtual void setHue(int hue) + { + this.hue = hue; + } + + public virtual int getSaturation() + { + return sat; + } + public virtual void setSaturation(int sat) + { + this.sat = sat; + } + + public abstract void Update(); + + public override string ToString() + { + return "Light " + id + " is " + (getState() ? "on" : "off"); + } + } +} diff --git a/HueLights/LightHandler.cs b/HueLights/LightHandler.cs new file mode 100644 index 0000000..c9b7d17 --- /dev/null +++ b/HueLights/LightHandler.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HueLights +{ + class LightHandler + { + static void Main(string[] args) + { + new LightHandler(); + } + + private List lights; + + public LightHandler() + { + lights = new List(); + + Populate(); + RunTest(); + } + + private void RunTest() + { + Random r = new Random(); + + TurnOn(lights[r.Next(0, lights.Count)].getID()); + + Update(); + + Console.ReadLine(); + } + + private void Populate() + { + lights.Add(new LightHue(1, 100)); + lights.Add(new LightHue(2, 200)); + lights.Add(new LigthLux(3, 300)); + } + + public void TurnOn(int id) + { + lights.ForEach(a => { if (a.getID() == id) { a.setState(true); } }); + } + + public void Update() + { + lights.ForEach(a => a.Update() ); + } + } +} diff --git a/HueLights/LightHue.cs b/HueLights/LightHue.cs new file mode 100644 index 0000000..3fcc622 --- /dev/null +++ b/HueLights/LightHue.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HueLights +{ + public class LightHue : Light + { + public LightHue(int id, int hue) : base(id) + { + this.hue = hue; + this.sat = 255; + } + + public override void Update() + { + Console.WriteLine(this.ToString()); + } + + public override string ToString() + { + return base.ToString() + ". bri=" + bri + ", hue=" + hue + ", sat=" + sat; + } + } +} diff --git a/HueLights/LigthLux.cs b/HueLights/LigthLux.cs new file mode 100644 index 0000000..96b37f3 --- /dev/null +++ b/HueLights/LigthLux.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HueLights +{ + public class LigthLux : Light + { + public LigthLux(int id, int bri) : base(id) + { + this.bri = bri; + } + + public override void Update() + { + Console.WriteLine(this.ToString()); + } + + public override string ToString() + { + return base.ToString() + ". bri=" + bri; + } + } +} diff --git a/HueLights/Properties/AssemblyInfo.cs b/HueLights/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..7f4c3eb --- /dev/null +++ b/HueLights/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("HueLights")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("HueLights")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("9d404da7-e094-4031-b3b9-3041c2e69ce4")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Pannenkoekenhuis/App.config b/Pannenkoekenhuis/App.config new file mode 100644 index 0000000..d740e88 --- /dev/null +++ b/Pannenkoekenhuis/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Pannenkoekenhuis/Builder/Pannenkoek.cs b/Pannenkoekenhuis/Builder/Pannenkoek.cs new file mode 100644 index 0000000..645d7a1 --- /dev/null +++ b/Pannenkoekenhuis/Builder/Pannenkoek.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Builder +{ + class Pannenkoek + { + private string beschrijving; + private int formaat; + private double prijs; + private bool stroop; + private bool suiker; + private bool spek; + private bool kaas; + + public Pannenkoek(string beschrijving, int formaat, double prijs, bool metStroop, bool metSuiker, bool metSpek, bool metKaas) + { + this.beschrijving = beschrijving; + this.formaat = formaat; + this.prijs = prijs; + this.stroop = metStroop; + this.suiker = metSuiker; + this.spek = metSpek; + this.kaas = metKaas; + } + + public Pannenkoek(PannenkoekBuilder builder) + { + this.beschrijving = PannenkoekBuilder.beschrijving; + this.formaat = PannenkoekBuilder.formaat; + this.prijs = PannenkoekBuilder.prijs; + this.stroop = PannenkoekBuilder.stroop; + this.suiker = PannenkoekBuilder.suiker; + this.spek = PannenkoekBuilder.spek; + this.kaas = PannenkoekBuilder.kaas; + } + } +} diff --git a/Pannenkoekenhuis/Builder/PannenkoekBuilder.cs b/Pannenkoekenhuis/Builder/PannenkoekBuilder.cs new file mode 100644 index 0000000..e886589 --- /dev/null +++ b/Pannenkoekenhuis/Builder/PannenkoekBuilder.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Builder +{ + class PannenkoekBuilder + { + public static string beschrijving; + public static double prijs; + public static int formaat; + public static bool stroop; + public static bool suiker; + public static bool spek; + public static bool kaas; + + public PannenkoekBuilder MaakPannenkoek(string beschr, double pr) + { + beschrijving = beschr; + prijs = pr; + formaat = 0; + stroop = false; + suiker = false; + spek = false; + kaas = false; + return this; + } + public PannenkoekBuilder Formaat(int f) + { + formaat = f; + return this; + } + public PannenkoekBuilder MetStroop() + { + stroop = true; + return this; + } + public PannenkoekBuilder MetSuiker() + { + suiker = true; + return this; + } + public PannenkoekBuilder MetSpek() + { + spek = true; + return this; + } + public PannenkoekBuilder MetKaas() + { + kaas = true; + return this; + } + public Pannenkoek Build() + { + return new Pannenkoek(this); + } + } +} diff --git a/Pannenkoekenhuis/Builder/desktop.ini b/Pannenkoekenhuis/Builder/desktop.ini new file mode 100644 index 0000000..49e4bec --- /dev/null +++ b/Pannenkoekenhuis/Builder/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=This folder is shared online. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/Pannenkoekenhuis/ClassDiagram1.cd b/Pannenkoekenhuis/ClassDiagram1.cd new file mode 100644 index 0000000..bf0be08 --- /dev/null +++ b/Pannenkoekenhuis/ClassDiagram1.cd @@ -0,0 +1,123 @@ + + + + + + AAAAAAAAAAAAAAAAAACABAABABQAAAAAAAAAAIAAAAA= + Composite\Menu.cs + + + + + + AAAAAAAAAAAAAIAAAAAAAAABABAAAAAAAAAAAIAAQAA= + Composite\MenuComponent.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAABAAACAAAAAAAAAAAAAAA= + Composite\MenuItem.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Champignon.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Honing.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Stroop.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Suiker.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Ui.cs + + + + + + AAAAAAAIAAAAAAAAAAAAAAAgAAAAAAAgAQAAAAAAAQA= + Decorators\PannenkoekDecorator.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAA= + TestMenu.cs + + + + + + AAAAAAAAAAAAAAAAAAAQABAAGAEAQAAAAAAAAIAAAAA= + Kassabon.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Pannenkoek.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA= + Program.cs + + + + + + AAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAA= + TestKassabon.cs + + + + + + AAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAA= + Strategy\KortingsCalculator.cs + + + + + + AAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA= + Strategy\NaturelKorting.cs + + + + + + AAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA= + Strategy\NulKorting.cs + + + + \ No newline at end of file diff --git a/Pannenkoekenhuis/ClassDiagram2.cd b/Pannenkoekenhuis/ClassDiagram2.cd new file mode 100644 index 0000000..52686b3 --- /dev/null +++ b/Pannenkoekenhuis/ClassDiagram2.cd @@ -0,0 +1,158 @@ + + + + + + AAAAAAAAAAAAAAAAAACABAABABQAAAAAAAAAAIAAAAA= + Composite\Menu.cs + + + + + + AAAAAAAAAAAAAIAAAAAAAAABABAAAAAAAAAAAIAAQAA= + Composite\MenuComponent.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAABAAACAAAAAAAAAAAAAAA= + Composite\MenuItem.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Champignon.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Honing.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Kaas.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Stroop.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Suiker.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Ui.cs + + + + + + AAQAAAIIAAAAgAAAAAAAAAAgABAIAAAgAQAAAAAAAQA= + Decorators\PannenkoekDecorator.cs + + + + + + AAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + TestFactory.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAA= + TestMenu.cs + + + + + + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Factory\KaasPannenkoekFactory.cs + + + + + + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA= + Factory\PannenkoekenFactory.cs + + + + + + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Factory\StroopPannenkoekFactory.cs + + + + + + AAAAAAAAAAAAAAAAAAAQABAAGAEAQAAAAAAAAIAAAAA= + Kassabon.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Pannenkoek.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA= + Program.cs + + + + + + AAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAA= + TestKassabon.cs + + + + + + AAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAA= + Strategy\KortingsCalculator.cs + + + + + + AAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA= + Strategy\NaturelKorting.cs + + + + + + AAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA= + Strategy\NulKorting.cs + + + + \ No newline at end of file diff --git a/Pannenkoekenhuis/ClassDiagram3.cd b/Pannenkoekenhuis/ClassDiagram3.cd new file mode 100644 index 0000000..dadf18d --- /dev/null +++ b/Pannenkoekenhuis/ClassDiagram3.cd @@ -0,0 +1,223 @@ + + + + + + AAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Command\Keuken.cs + + + + + + AAAAAEAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAI= + Command\Klant.cs + + + + + + AAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAEA= + Command\Serveerster.cs + + + + + + AAAAAAAAAAAAAAAAAACABAABABQAAAAAAAAAAIAAAAA= + Composite\Menu.cs + + + + + + AAAAAAAAAAAAAIAAAAAAAAABABAAAAAAAAAAAIAAQAA= + Composite\MenuComponent.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAABAAACAAAAAAAAAAAAAAA= + Composite\MenuItem.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Champignon.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Honing.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Kaas.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Stroop.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Suiker.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Decorators\Ui.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAACAAAgAAAAAAEAAAA= + Decorators\PannenkoekDecorator.cs + + + + + + AAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + TestFactory.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAA= + TestMenu.cs + + + + + + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Factory\KaasPannenkoekFactory.cs + + + + + + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA= + Factory\PannenkoekenFactory.cs + + + + + + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Factory\StroopPannenkoekFactory.cs + + + + + + AAAAAAAAAAAAAAAAAAAQABAAGAEAQAAAAAAAAIAAAAA= + Kassabon.cs + + + + + + AAQAAAIAAAAAgAAAAAAAAAAAABAIIAAAAAAAAAEAAAA= + Pannenkoek.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA= + Program.cs + + + + + + AAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAA= + TestKassabon.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAACAAAAAA= + Observer\OnlineMenu.cs + + + + + + + AAQAACAAAAAAAAAQAAAAAAAEABAAQAAAAAAAAIAAAAA= + Observer\Recepten.cs + + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAA= + State\Klant.cs + + + + + + AAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAA= + Strategy\KortingsCalculator.cs + + + + + + AAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA= + Strategy\NaturelKorting.cs + + + + + + AAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA= + Strategy\NulKorting.cs + + + + + + AAQAACAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAA= + Observer\MenuGegevens.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAA= + Observer\ObserverMenu.cs + + + + + + ABAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAQAAAgAAAAAg= + State\State.cs + + + + \ No newline at end of file diff --git a/Pannenkoekenhuis/Command/Keuken.cs b/Pannenkoekenhuis/Command/Keuken.cs new file mode 100644 index 0000000..75f29eb --- /dev/null +++ b/Pannenkoekenhuis/Command/Keuken.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Command +{ + class Keuken + { + public Keuken() + { + + } + + public void bakPannenkoek() + { + //Hier zou je gebruik kunnen maken van een Pannenkoekfactory om de pannenkoek te maken. + } + } + + +} diff --git a/Pannenkoekenhuis/Command/Klant.cs b/Pannenkoekenhuis/Command/Klant.cs new file mode 100644 index 0000000..f40e26d --- /dev/null +++ b/Pannenkoekenhuis/Command/Klant.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Command +{ + class Klant + { + String naam; + Serveerster server; + + public Klant() + { + server = new Serveerster(this); + } + + + //Geef aan deze methode mee wat voor pannenkoek men zou willen. Dit word dan meegegeven aan bestelPannenkoek() + public void geefBestelling() + { + server.BestelPannenkoek(); + } + + } +} diff --git a/Pannenkoekenhuis/Command/Serveerster.cs b/Pannenkoekenhuis/Command/Serveerster.cs new file mode 100644 index 0000000..9e58ba2 --- /dev/null +++ b/Pannenkoekenhuis/Command/Serveerster.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Command +{ + class Serveerster + { + private Klant klant; + private Keuken keuken; + + public Serveerster(Klant klant) + { + this.klant = klant;//Serveerster kan uiteraard ook meerdere klanten afhandelen maar hier gaan we uit van een klant. + keuken = new Keuken(); + } + //Geef hier ook mee wat voor pannenkoek er gemaakt zou moeten worden. + public void BestelPannenkoek() + { + keuken.bakPannenkoek(); + } + } +} diff --git a/Pannenkoekenhuis/Command/desktop.ini b/Pannenkoekenhuis/Command/desktop.ini new file mode 100644 index 0000000..49e4bec --- /dev/null +++ b/Pannenkoekenhuis/Command/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=This folder is shared online. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/Pannenkoekenhuis/Composite/Menu.cs b/Pannenkoekenhuis/Composite/Menu.cs new file mode 100644 index 0000000..e156af7 --- /dev/null +++ b/Pannenkoekenhuis/Composite/Menu.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Composite +{ + public class Menu : MenuComponent + { + string naam; + List components; + + public Menu(string naam) + { + this.naam = naam; + components = new List(); + } + + public override string DrukAf() + { + string str = naam + "\n"; + foreach(MenuComponent m in components) + { + str += "\t" + m.DrukAf() + "\n"; + } + return str; + } + + public override void VoegToe(MenuComponent m) + { + components.Add(m); + } + + public override void Verwijder(MenuComponent m) + { + components.Remove(m); + } + + public string Naam() + { + return naam; + } + } +} diff --git a/Pannenkoekenhuis/Composite/MenuComponent.cs b/Pannenkoekenhuis/Composite/MenuComponent.cs new file mode 100644 index 0000000..51bf7fa --- /dev/null +++ b/Pannenkoekenhuis/Composite/MenuComponent.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Composite +{ + public class MenuComponent + { + public MenuComponent component; + + public MenuComponent() + { + + } + + public virtual string DrukAf() + { + if (component != null) + return component.DrukAf(); + else + return ""; + } + + public virtual void VoegToe(MenuComponent m) + { + this.component = m; + } + + public virtual void Verwijder(MenuComponent m) + { + this.component = null; + } + + public MenuComponent Child() + { + return component; + } + } +} diff --git a/Pannenkoekenhuis/Composite/MenuItem.cs b/Pannenkoekenhuis/Composite/MenuItem.cs new file mode 100644 index 0000000..3665712 --- /dev/null +++ b/Pannenkoekenhuis/Composite/MenuItem.cs @@ -0,0 +1,24 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Composite +{ + public class MenuItem : MenuComponent + { + Pannenkoek pannenkoek; + + public MenuItem(Pannenkoek p) + { + this.pannenkoek = p; + } + + public override string DrukAf() + { + return pannenkoek.Beschrijving + "\t ... " + pannenkoek.Prijs; + } + } +} diff --git a/Pannenkoekenhuis/Composite/desktop.ini b/Pannenkoekenhuis/Composite/desktop.ini new file mode 100644 index 0000000..49e4bec --- /dev/null +++ b/Pannenkoekenhuis/Composite/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=This folder is shared online. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/Pannenkoekenhuis/Decorators/Champignon.cs b/Pannenkoekenhuis/Decorators/Champignon.cs new file mode 100644 index 0000000..980a4e3 --- /dev/null +++ b/Pannenkoekenhuis/Decorators/Champignon.cs @@ -0,0 +1,16 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Decorators +{ + public class Champignon : PannenkoekDecorator + { + public Champignon(Pannenkoek p) : base(p, "Champignon", 2.0) + { + } + } +} diff --git a/Pannenkoekenhuis/Decorators/Honing.cs b/Pannenkoekenhuis/Decorators/Honing.cs new file mode 100644 index 0000000..8bcc2f8 --- /dev/null +++ b/Pannenkoekenhuis/Decorators/Honing.cs @@ -0,0 +1,16 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Decorators +{ + public class Honing : PannenkoekDecorator + { + public Honing(Pannenkoek p) : base(p, "Honing", 1.3) + { + } + } +} diff --git a/Pannenkoekenhuis/Decorators/Kaas.cs b/Pannenkoekenhuis/Decorators/Kaas.cs new file mode 100644 index 0000000..86602f2 --- /dev/null +++ b/Pannenkoekenhuis/Decorators/Kaas.cs @@ -0,0 +1,16 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Decorators +{ + public class Kaas : PannenkoekDecorator + { + public Kaas(Pannenkoek p) : base(p, "Kaas", 1.5) + { + } + } +} diff --git a/Pannenkoekenhuis/Decorators/PannenkoekDecorator.cs b/Pannenkoekenhuis/Decorators/PannenkoekDecorator.cs new file mode 100644 index 0000000..0c5b12c --- /dev/null +++ b/Pannenkoekenhuis/Decorators/PannenkoekDecorator.cs @@ -0,0 +1,36 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis +{ + public class PannenkoekDecorator : Pannenkoek + { + protected Pannenkoek pannenkoek; + + public PannenkoekDecorator(Pannenkoek p, string beschrijving, double prijs) : base(beschrijving, prijs) + { + this.pannenkoek = p; + this.status = Status.NULL; + } + + public double GetPrijs() + { + return Prijs + (pannenkoek == null ? 0 : pannenkoek.Prijs); + } + + public new string Beschrijving + { + get + { + if (pannenkoek == null) + return Beschrijving + " met "; + else + return pannenkoek.Beschrijving + ", " + Beschrijving; + } + } + } +} diff --git a/Pannenkoekenhuis/Decorators/Stroop.cs b/Pannenkoekenhuis/Decorators/Stroop.cs new file mode 100644 index 0000000..4fc857f --- /dev/null +++ b/Pannenkoekenhuis/Decorators/Stroop.cs @@ -0,0 +1,16 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Decorators +{ + public class Stroop : PannenkoekDecorator + { + public Stroop(Pannenkoek p) : base(p, "Stroop", 0.5) + { + } + } +} diff --git a/Pannenkoekenhuis/Decorators/Suiker.cs b/Pannenkoekenhuis/Decorators/Suiker.cs new file mode 100644 index 0000000..fd48db6 --- /dev/null +++ b/Pannenkoekenhuis/Decorators/Suiker.cs @@ -0,0 +1,16 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Decorators +{ + public class Suiker : PannenkoekDecorator + { + public Suiker(Pannenkoek p) : base(p, "Suiker", 0.3) + { + } + } +} diff --git a/Pannenkoekenhuis/Decorators/Ui.cs b/Pannenkoekenhuis/Decorators/Ui.cs new file mode 100644 index 0000000..51d71c6 --- /dev/null +++ b/Pannenkoekenhuis/Decorators/Ui.cs @@ -0,0 +1,16 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Decorators +{ + public class Ui : PannenkoekDecorator + { + public Ui(Pannenkoek p) : base(p, "Ui", 0.7) + { + } + } +} diff --git a/Pannenkoekenhuis/Decorators/desktop.ini b/Pannenkoekenhuis/Decorators/desktop.ini new file mode 100644 index 0000000..49e4bec --- /dev/null +++ b/Pannenkoekenhuis/Decorators/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=This folder is shared online. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/Pannenkoekenhuis/Factory/KaasPannenkoekFactory.cs b/Pannenkoekenhuis/Factory/KaasPannenkoekFactory.cs new file mode 100644 index 0000000..e76aa3a --- /dev/null +++ b/Pannenkoekenhuis/Factory/KaasPannenkoekFactory.cs @@ -0,0 +1,18 @@ +using Pannenkoekenhuis.Decorators; +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Factory +{ + public class KaasPannenkoekFactory : PannenkoekenFactory + { + public override Pannenkoek CreatePannenkoek() + { + return new Kaas(new Pannenkoek("Kaaspannenkoek", 5.00)); + } + } +} diff --git a/Pannenkoekenhuis/Factory/PannenkoekenFactory.cs b/Pannenkoekenhuis/Factory/PannenkoekenFactory.cs new file mode 100644 index 0000000..f809b99 --- /dev/null +++ b/Pannenkoekenhuis/Factory/PannenkoekenFactory.cs @@ -0,0 +1,31 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Factory +{ + public abstract class PannenkoekenFactory + { + public abstract Pannenkoek CreatePannenkoek(); + + public Pannenkoek BestelPannenkoek() + { + Pannenkoek p = CreatePannenkoek(); + + p.Voorbereiden(); + Console.WriteLine(p.status); + p.Bakken(); + Console.WriteLine(p.status); + p.Snijden(); + Console.WriteLine(p.status); + p.Verpakken(); + Console.WriteLine(p.status); + + return p; + } + + } +} diff --git a/Pannenkoekenhuis/Factory/StroopPannenkoekFactory.cs b/Pannenkoekenhuis/Factory/StroopPannenkoekFactory.cs new file mode 100644 index 0000000..fac5a02 --- /dev/null +++ b/Pannenkoekenhuis/Factory/StroopPannenkoekFactory.cs @@ -0,0 +1,18 @@ +using Pannenkoekenhuis.Decorators; +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Factory +{ + public class StroopPannenkoekFactory : PannenkoekenFactory + { + public override Pannenkoek CreatePannenkoek() + { + return new Stroop(new Pannenkoek("Strooppannenkoek", 4.50)); + } + } +} diff --git a/Pannenkoekenhuis/Factory/desktop.ini b/Pannenkoekenhuis/Factory/desktop.ini new file mode 100644 index 0000000..49e4bec --- /dev/null +++ b/Pannenkoekenhuis/Factory/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=This folder is shared online. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/Pannenkoekenhuis/Kassabon.cs b/Pannenkoekenhuis/Kassabon.cs new file mode 100644 index 0000000..0078028 --- /dev/null +++ b/Pannenkoekenhuis/Kassabon.cs @@ -0,0 +1,108 @@ +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 pannenkoeken + { + get; private set; + } + + /// + /// 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. + /// + public Kassabon() + { + pannenkoeken = new List(); + korting = new NulKorting(this); + } + + /// + /// Voegt een pannenkoek toe aan de kassabon + /// + /// De Pannenkoek om toe te voegen + public void VoegToe(Pannenkoek p) + { + pannenkoeken.Add(p); + } + + /// + /// 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) + /// + 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()); + } + + /// + /// Geeft de som van de prijzen van alle pannenkoeken op de kassabon + /// + /// + public double Totaalprijs() + { + double totaalprijs = 0.0; + foreach (Pannenkoek p in pannenkoeken) + { + totaalprijs += p.Prijs; + } + return totaalprijs; + } + + /// + /// Geeft de totaalprijs minus de korting + /// + /// + public double Eindbedrag() + { + double eindbedrag = Totaalprijs() - Korting(); + if (eindbedrag < 0.0) + { + eindbedrag = 0.0; + } + return eindbedrag; + } + + /// + /// Berekent de korting, volgens de actuele kortingsactie(s) + /// + /// Deze kortingsregels veranderen regelmatig, telkens als nieuwe + /// kortingsacties worden bedacht. + /// + /// + public double Korting() + { + return korting.Korting(); + } + } +} diff --git a/Pannenkoekenhuis/KassabonSimpel.png b/Pannenkoekenhuis/KassabonSimpel.png new file mode 100644 index 0000000000000000000000000000000000000000..8d80b3194f6065aa7a54c243fb62092a6d366282 GIT binary patch literal 37807 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%0A|3p#qB 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 pannenkoeken); + } +} diff --git a/Pannenkoekenhuis/Observer/OnlineMenu.cs b/Pannenkoekenhuis/Observer/OnlineMenu.cs new file mode 100644 index 0000000..6e35e94 --- /dev/null +++ b/Pannenkoekenhuis/Observer/OnlineMenu.cs @@ -0,0 +1,26 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Observer +{ + class OnlineMenu : ObserverMenu + { + List pannenkoeken; + + public void Actualiseer(List pannenkoeken) + { + this.pannenkoeken = pannenkoeken; + DrukAf(); + } + + public void DrukAf() + { + Console.WriteLine("Online Menu: "); + pannenkoeken.ForEach(p => Console.WriteLine(p.Beschrijving)); + } + } +} diff --git a/Pannenkoekenhuis/Observer/Recepten.cs b/Pannenkoekenhuis/Observer/Recepten.cs new file mode 100644 index 0000000..2243bd9 --- /dev/null +++ b/Pannenkoekenhuis/Observer/Recepten.cs @@ -0,0 +1,47 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Observer +{ + class Recepten : MenuGegevens + { + public List menus; + public List pannenkoeken; + + public Recepten() + { + menus = new List(); + pannenkoeken = new List(); + } + + public void RegistreerMenu(ObserverMenu m) + { + menus.Add(m); + } + + public void VerwijderMenu(ObserverMenu m) + { + menus.Remove(m); + } + + public void VerwittigMenus() + { + foreach (ObserverMenu m in menus) + m.Actualiseer(pannenkoeken); + } + + public void VoegToe(Pannenkoek p) + { + pannenkoeken.Add(p); + } + + public void Verwijder(Pannenkoek p) + { + pannenkoeken.Remove(p); + } + } +} diff --git a/Pannenkoekenhuis/Observer/desktop.ini b/Pannenkoekenhuis/Observer/desktop.ini new file mode 100644 index 0000000..49e4bec --- /dev/null +++ b/Pannenkoekenhuis/Observer/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=This folder is shared online. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/Pannenkoekenhuis/Pannenkoek.cs b/Pannenkoekenhuis/Pannenkoek.cs new file mode 100644 index 0000000..fb5731c --- /dev/null +++ b/Pannenkoekenhuis/Pannenkoek.cs @@ -0,0 +1,58 @@ +using Pannenkoekenhuis; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Strategy_Kassabon +{ + /// + /// Een simpele pannenkoek klasse. + /// Een pannenkoek heeft een beschrijving en een prijs, die + /// beide read-only zijn en tijdens constructie worden vastgelegd. + /// + /// In deze eerste versie zijn alle pannenkoeken nog van + /// hetzelfde type, en kunnen er nog geen ingredienten + /// worden toegevoegd. + /// + /// In een volgende versie worden met het Decorator design pattern + /// wrappers voor deze basisklasse gemaakt om ingredienten toe + /// te kunnen voegen. + /// + public class Pannenkoek + { + public enum Status { NULL, VOORBEREIDEN, BAKKEN, SNIJDEN, VERPAKKEN } + public Status status; + + public double Prijs { get; set; } + public string Beschrijving { get; } + + public Pannenkoek(string beschrijving, double prijs) + { + Prijs = prijs; + Beschrijving = beschrijving; + this.status = Status.NULL; + } + + internal void Verpakken() + { + status = Status.VERPAKKEN; + } + + internal void Snijden() + { + status = Status.SNIJDEN; + } + + internal void Bakken() + { + status = Status.BAKKEN; + } + + internal void Voorbereiden() + { + status = Status.VOORBEREIDEN; + } + } +} diff --git a/Pannenkoekenhuis/Pannenkoekenhuis.csproj b/Pannenkoekenhuis/Pannenkoekenhuis.csproj new file mode 100644 index 0000000..204fefa --- /dev/null +++ b/Pannenkoekenhuis/Pannenkoekenhuis.csproj @@ -0,0 +1,102 @@ + + + + + Debug + AnyCPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B} + Exe + Properties + Pannenkoekenhuis + Pannenkoekenhuis + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Pannenkoekenhuis/Pannenkoekenhuis.sln b/Pannenkoekenhuis/Pannenkoekenhuis.sln new file mode 100644 index 0000000..370a2e2 --- /dev/null +++ b/Pannenkoekenhuis/Pannenkoekenhuis.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pannenkoekenhuis", "Pannenkoekenhuis.csproj", "{A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A8D42246-A7F6-4404-98D5-3FCBA8F13E4B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Pannenkoekenhuis/Program.cs b/Pannenkoekenhuis/Program.cs new file mode 100644 index 0000000..355859c --- /dev/null +++ b/Pannenkoekenhuis/Program.cs @@ -0,0 +1,25 @@ +using Pannenkoekenhuis; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Strategy_Kassabon +{ + class Program + { + static void Main(string[] args) + { + //TestKassabon.TestKassabon1(); + //TestKassabon.TestKassabon2(); + + //TestMenu.TestMenu1(); + + TestFactory.TestFactory1(); + + Console.WriteLine("Druk op Enter..."); + Console.ReadLine(); // Wacht tot de gebruiker op Enter drukt + } + } +} diff --git a/Pannenkoekenhuis/Properties/AssemblyInfo.cs b/Pannenkoekenhuis/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..bf57498 --- /dev/null +++ b/Pannenkoekenhuis/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Pannenkoekenhuis")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Pannenkoekenhuis")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a8d42246-a7f6-4404-98d5-3fcba8f13e4b")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Pannenkoekenhuis/Properties/desktop.ini b/Pannenkoekenhuis/Properties/desktop.ini new file mode 100644 index 0000000..49e4bec --- /dev/null +++ b/Pannenkoekenhuis/Properties/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=This folder is shared online. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/Pannenkoekenhuis/Singleton/FactoryFactory.cs b/Pannenkoekenhuis/Singleton/FactoryFactory.cs new file mode 100644 index 0000000..444a7b2 --- /dev/null +++ b/Pannenkoekenhuis/Singleton/FactoryFactory.cs @@ -0,0 +1,31 @@ +using Pannenkoekenhuis.Factory; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Singleton +{ + class FactoryFactory + { + private static PannenkoekenFactory kfactory { get; set; } + + public static PannenkoekenFactory KaasInstance() + { + if (kfactory == null) + kfactory = new KaasPannenkoekFactory(); + return kfactory; + } + + + private static PannenkoekenFactory sfactory { get; set; } + + public static PannenkoekenFactory StroopInstance() + { + if (sfactory == null) + sfactory = new StroopPannenkoekFactory(); + return sfactory; + } + } +} diff --git a/Pannenkoekenhuis/State/EatingState.cs b/Pannenkoekenhuis/State/EatingState.cs new file mode 100644 index 0000000..d403960 --- /dev/null +++ b/Pannenkoekenhuis/State/EatingState.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.State +{ + class EatingState : State + { + public State BrengBestelling() + { + return this; + } + + public State BrengMenuKaart() + { + return new WaitingState(); + } + + public State BrengRekening() + { + return new WaitingState(); + } + + public State DeelWensMee() + { + return new WaitingState(); + } + + public State Instance() + { + return new EatingState(); + } + + public override string ToString() + { + return "Eating"; + } + } +} diff --git a/Pannenkoekenhuis/State/Klant.cs b/Pannenkoekenhuis/State/Klant.cs new file mode 100644 index 0000000..923884a --- /dev/null +++ b/Pannenkoekenhuis/State/Klant.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.State +{ + class Klant + { + State state; + + public Klant() + { + state = new WaitingState(); + } + + public void BrengBestelling() + { + state = state.BrengBestelling(); + Console.WriteLine(state); + } + + public void BrengMenuKaart() + { + state = state.BrengMenuKaart(); + Console.WriteLine(state); + } + + public void BrengRekening() + { + state = state.BrengRekening(); + Console.WriteLine(state); + } + + public void DeelWensMee() + { + state = state.DeelWensMee(); + Console.WriteLine(state); + } + + } +} diff --git a/Pannenkoekenhuis/State/State.cs b/Pannenkoekenhuis/State/State.cs new file mode 100644 index 0000000..3f4c1e8 --- /dev/null +++ b/Pannenkoekenhuis/State/State.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.State +{ + interface State + { + State Instance(); + State DeelWensMee(); + State BrengMenuKaart(); + State BrengBestelling(); + State BrengRekening(); + } +} diff --git a/Pannenkoekenhuis/State/WaitingState.cs b/Pannenkoekenhuis/State/WaitingState.cs new file mode 100644 index 0000000..7c48a89 --- /dev/null +++ b/Pannenkoekenhuis/State/WaitingState.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.State +{ + class WaitingState : State + { + public State BrengBestelling() + { + return new EatingState(); + } + + public State BrengMenuKaart() + { + return this; + } + + public State BrengRekening() + { + return this; + } + + public State DeelWensMee() + { + return this; + } + + public State Instance() + { + return new WaitingState(); + } + + public override string ToString() + { + return "Waiting"; + } + } +} diff --git a/Pannenkoekenhuis/State/desktop.ini b/Pannenkoekenhuis/State/desktop.ini new file mode 100644 index 0000000..49e4bec --- /dev/null +++ b/Pannenkoekenhuis/State/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=This folder is shared online. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/Pannenkoekenhuis/Strategy/KortingsCalculator.cs b/Pannenkoekenhuis/Strategy/KortingsCalculator.cs new file mode 100644 index 0000000..6a7647c --- /dev/null +++ b/Pannenkoekenhuis/Strategy/KortingsCalculator.cs @@ -0,0 +1,21 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Strategy +{ + public abstract class KortingsCalculator + { + protected Kassabon a; + + public KortingsCalculator(Kassabon a) + { + this.a = a; + } + + public abstract double Korting(); + } +} diff --git a/Pannenkoekenhuis/Strategy/NaturelKorting.cs b/Pannenkoekenhuis/Strategy/NaturelKorting.cs new file mode 100644 index 0000000..d0f7d8c --- /dev/null +++ b/Pannenkoekenhuis/Strategy/NaturelKorting.cs @@ -0,0 +1,32 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Strategy +{ + public class NaturelKorting : KortingsCalculator + { + public NaturelKorting(Kassabon a) : base(a) + { } + + public override double Korting() + { + List pannenkoeken = a.pannenkoeken; + + double korting = 0; + + foreach (Pannenkoek p in pannenkoeken) + { + if (p.Beschrijving == "Naturelpannenkoek") + { + korting += p.Prijs * 0.1; + } + } + + return korting; + } + } +} diff --git a/Pannenkoekenhuis/Strategy/NulKorting.cs b/Pannenkoekenhuis/Strategy/NulKorting.cs new file mode 100644 index 0000000..02fde67 --- /dev/null +++ b/Pannenkoekenhuis/Strategy/NulKorting.cs @@ -0,0 +1,20 @@ +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis.Strategy +{ + public class NulKorting : KortingsCalculator + { + public NulKorting(Kassabon a) : base(a) + { } + + public override double Korting() + { + return 0; + } + } +} diff --git a/Pannenkoekenhuis/Strategy/desktop.ini b/Pannenkoekenhuis/Strategy/desktop.ini new file mode 100644 index 0000000..49e4bec --- /dev/null +++ b/Pannenkoekenhuis/Strategy/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=This folder is shared online. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/Pannenkoekenhuis/TestBuilder.cs b/Pannenkoekenhuis/TestBuilder.cs new file mode 100644 index 0000000..49496d0 --- /dev/null +++ b/Pannenkoekenhuis/TestBuilder.cs @@ -0,0 +1,23 @@ +using Pannenkoekenhuis.Builder; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis +{ + class TestBuilder + { + + public static void TestBuilder1() + { + PannenkoekBuilder builder = new PannenkoekBuilder(); + Pannenkoek p = builder.MaakPannenkoek("Spekpannenkoek", 10) + .MetSpek() + .Formaat(17) + .Build(); + } + + } +} diff --git a/Pannenkoekenhuis/TestFactory.cs b/Pannenkoekenhuis/TestFactory.cs new file mode 100644 index 0000000..98cd9e3 --- /dev/null +++ b/Pannenkoekenhuis/TestFactory.cs @@ -0,0 +1,27 @@ +using Pannenkoekenhuis.Factory; +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis +{ + class TestFactory + { + public static void TestFactory1() + { + PannenkoekenFactory factory = new KaasPannenkoekFactory(); + Pannenkoek kaaspannenkoek = factory.BestelPannenkoek(); + + factory = new StroopPannenkoekFactory(); + Pannenkoek strooppannenkoek = factory.BestelPannenkoek(); + + Console.WriteLine(kaaspannenkoek.Beschrijving); + Console.WriteLine(strooppannenkoek.Beschrijving); + + } + + } +} diff --git a/Pannenkoekenhuis/TestKassabon.cs b/Pannenkoekenhuis/TestKassabon.cs new file mode 100644 index 0000000..3120bfb --- /dev/null +++ b/Pannenkoekenhuis/TestKassabon.cs @@ -0,0 +1,31 @@ +using Pannenkoekenhuis.Decorators; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Strategy_Kassabon +{ + /// + /// Testklasse voor het testen van Kassabon. + /// + class TestKassabon + { + public static void TestKassabon1() + { + Kassabon kassabon = new Kassabon(); + kassabon.VoegToe(new Ui(new Champignon(new Pannenkoek("Kaaspannenkoek", 5.50)))); + kassabon.VoegToe(new Pannenkoek("Naturelpannenkoek", 3.75)); + kassabon.VoegToe(new Suiker(new Honing(new Stroop(new Pannenkoek("Appelpannenkoek", 4.80))))); + kassabon.DrukBonAf(); + } + + public static void TestKassabon2() + { + Kassabon kassabon = new Kassabon(); + kassabon.VoegToe(new Pannenkoek("Kaas-spek-pannenkoek", 6.95)); + kassabon.DrukBonAf(); + } + } +} diff --git a/Pannenkoekenhuis/TestMenu.cs b/Pannenkoekenhuis/TestMenu.cs new file mode 100644 index 0000000..4f1f3a3 --- /dev/null +++ b/Pannenkoekenhuis/TestMenu.cs @@ -0,0 +1,44 @@ +using Pannenkoekenhuis.Composite; +using Pannenkoekenhuis.Decorators; +using Strategy_Kassabon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis +{ + class TestMenu + { + public static void TestMenu1() + { + Menu m = new Menu("Pannenkoeken"); + + Menu kindermenu = new Menu("Kinder Menu"); + Menu snelmenu = new Menu("Snel Menu"); + Menu alles = new Menu("Alles"); + + MenuItem naturelpannenkoek = new MenuItem(new Pannenkoek("Naturel Pannenkoek", 3.00)); + MenuItem champignonpannekoek = new MenuItem(new Champignon(new Ui(new Pannenkoek("Champignon Pannenkoek", 6.00)))); + MenuItem zoetepannenkoek = new MenuItem(new Honing(new Suiker(new Stroop(new Pannenkoek("Zoete Pannenkoek", 10.00))))); + MenuItem strooppannenkoek = new MenuItem(new Stroop(new Pannenkoek("Stroop Pannenkoek", 3.50))); + + snelmenu.VoegToe(naturelpannenkoek); + snelmenu.VoegToe(champignonpannekoek); + + kindermenu.VoegToe(zoetepannenkoek); + kindermenu.VoegToe(strooppannenkoek); + + alles.VoegToe(snelmenu); + alles.VoegToe(kindermenu); + + m.VoegToe(snelmenu); + m.VoegToe(kindermenu); + m.VoegToe(alles); + + Console.WriteLine(m.DrukAf()); + } + + } +} diff --git a/Pannenkoekenhuis/TestSingleton.cs b/Pannenkoekenhuis/TestSingleton.cs new file mode 100644 index 0000000..85e50f9 --- /dev/null +++ b/Pannenkoekenhuis/TestSingleton.cs @@ -0,0 +1,19 @@ +using Pannenkoekenhuis.Factory; +using Pannenkoekenhuis.Singleton; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis +{ + class TestSingleton + { + + public static void TestSingleton1() + { + PannenkoekenFactory f = FactoryFactory.KaasInstance(); + } + } +} diff --git a/Pannenkoekenhuis/TestState.cs b/Pannenkoekenhuis/TestState.cs new file mode 100644 index 0000000..325dffd --- /dev/null +++ b/Pannenkoekenhuis/TestState.cs @@ -0,0 +1,21 @@ +using Pannenkoekenhuis.State; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pannenkoekenhuis +{ + class TestState + { + public static void TestState1() + { + Klant k = new Klant(); + k.BrengMenuKaart(); + k.DeelWensMee(); + k.BrengBestelling(); + k.BrengRekening(); + } + } +}