Hallo liebe AutiIT Gemeinde,
wollte mir ein einfaches Script schreiben, dass wie folgt funktionieren soll:
Es gibt verschiedene Gutscheine mit verschiendenen Beträgen und Rabatten:
Gutscheinart 1:
Wert 44€, Rabatt 2,64€ = 6%
Wert 20€, Rabatt 1,20€ = 6%
Wert 5€, Rabatt 0,30€ = 6%
Gutscheinart 2:
Wert 80€, Rabatt 5,00€ = 6,25%
Wert 25€, Rabatt 2,00€ = 8%
Wert 10€, Rabatt 0,90€ = 9%
Wert 5,5€, Rabatt 0,50€ = 9,09%
Gutscheinart 3:
Wert 500€, Rabatt 40,00€ = 8%
Wert 100€, Rabatt 8,00€ = 8%
Wert 50€, Rabatt 4,00€ = 8%
Der Startwert wird eingetragen und es wird ermittelt welche Gutscheine am besten verwendet werden, damit der möglichst höchste Rabatt entsteht. In Summe dürfen aber nur 3 Gutscheine verwendet werden.
Aktuell arbeitet mein Script so, dass es möglichst den höchsten Gutschein verwendet solange, bis entweder der Startbetrag möglichst ausgefüllt ist oder 3 Gutscheine verwendet werden.
Nun soll aber auch eine Logik eingebaut werden, die prüft, ob man bspw. 2 x 10 € hernehmen könnte (=9% Rabatt) anstelle eines 20€ Gutscheins (=6% Rabatt)
Ich bekomme die beiden Welten nicht zusammen, sodass einerseits der Betrag möglichst ausgenutzt wird (hohe Gutscheine) und andererseits möglichst die Gutscheine verwendet werden sollen, die mehr Rabatt geben (niedrige Gutscheine) immer mit max. 3 Gutscheinen in Summe.
Am Ende wäre es schön, wenn das Script dann nicht nur den Rabatt und den Endbetrag ausspuckt, sondern auch welche Gutscheine in welcher Menge verwendet wurden.
Ich hoffe ich habe es verständlich erklärt.
Würde mich freuen, wenn mir hier jemand weiterhelfen könnte.
Anbei mein Script, ich habe mir dazu bereits einiges an Gedanken gemacht:
Viele Grüße
Inferior
#include <GUIConstantsEX.au3>
Global $a
Global $gutscheine[10][5] = _
[ _ ; [Gutscheinwert in € | Zähler | Rabatt | Gutscheinart | Rabatt in %]
[500, 0, 40, 3, 8.00], _
[100, 0, 8, 3, 8.00], _
[ 80, 0, 5, 2, 6.25], _
[ 50, 0, 4, 3, 8.00], _
[ 44, 0, 2.64, 1, 6.00], _
[ 25, 0, 2, 2, 8.00], _
[ 20, 0, 1.20, 1, 6.00], _
[ 10, 0, 0.9, 2, 9.00], _
[5.5, 0, 0.5, 2, 9.09], _
[ 5, 0, 0.3, 1, 6.00] _
]
$Main = GUICreate("Main", 260, 135)
GUICtrlCreateLabel("Startbetrag:", 10, 13, 110, 18)
$startbetrag = GUICtrlCreateInput("", 10, 30, 100, 20)
GUICtrlCreateLabel("Rabatt:", 10, 78, 100, 18)
$rabatt = GUICtrlCreateInput("", 10, 95, 100, 20)
GUICtrlCreateLabel("Endbetrag:", 150, 78, 80, 18)
$endbetrag = GUICtrlCreateInput("", 150, 95, 100, 20)
GUISetState()
While 1
If GUICtrlRead($startbetrag) <> $a Then
$a = GUICtrlRead($startbetrag)
$kalk = GUICtrlRead($startbetrag)
$count = 0
For $i = 0 To UBound($gutscheine)-1
If $kalk >= $gutscheine[$i][0] And $count < 3 Then
$gutscheine[$i][1] = Round($kalk / $gutscheine[$i][0] -0.5, 0)
If $gutscheine[$i][1] + $count > 3 Then $gutscheine[$i][1] = 3 - $count
GUICtrlSetData($rabatt, GUICtrlRead($rabatt) + $gutscheine[$i][1] * $gutscheine[$i][2])
$kalk = $kalk - $gutscheine[$i][1] * $gutscheine[$i][0]
$count = $count + $gutscheine[$i][1]
EndIf
Next
GUICtrlSetData($endbetrag, GUICtrlRead($startbetrag) - GUICtrlRead($rabatt))
EndIf
$Main = GUIGetMsg()
Switch $Main
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Alles anzeigen