- Offizieller Beitrag
Hi,
ich hab mich auch mal dran gemacht. ![]()
Beim Betrachten der Aufgabe denkt man schon, das ist doch Pillepalle. Na gut, der Algorithmus ist nicht schwierig.
Wie üblich liegen 90 % der Arbeit darin alle möglichen (und unmöglichen) Eigaben und Fehler abzufangen. ![]()
Um das Endprodukt DAU-sicher zu machen, ist es doch viel umfangreicher geworden als ich dachte. ![]()
Man könnte natürlich noch die verschiedenen Gewinnkategorien in unterschiedlichen Farben darstellen - aber das war mir dann doch zuviel.
EDIT: Hab noch eine Fehlermöglichkeit abgefangen (Eintrag löschen bei aktiver Ergebnisliste). Und noch 'ne Fehlerquelle abgefangen (Löschen bei leerer Liste).
Spoiler anzeigen
#include <GUIConstants.au3>
#include <GuiListView.au3>
Opt("GUIOnEventMode", 1)
Dim $arAlleSN, $arTreffer[1], $Fehler = 0, $SN
Dim $alleRichtig = 0, $dreiRichtig = 0, $zweiRichtig = 0, $einRichtig = 0, $lastEntry, $new = 0
Dim $rot = 0xFF0000
$arAlleSN = IniReadSection(@ScriptDir & "\SN10Euro.INI", "serien")
$arTreffer[0] = 0
If @error = 1 Then $Fehler = 1
$Form1 = GUICreate("100.000 für 10", 636, 344, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")
$ListView1 = GUICtrlCreateListView("Seriennummern", 17, 19, 353, 305)
_GUICtrlListViewSetColumnWidth(-1, 0, 349)
$Group0 = GUICtrlCreateGroup(" Modus ", 384, 17, 240, 40)
$Radio1 = GUICtrlCreateRadio("Erfassen", 400, 30, 80)
GUICtrlSetOnEvent(-1, "RadioErfassen")
$Radio2 = GUICtrlCreateRadio("Vergleichen", 520, 30, 80)
GUICtrlSetOnEvent(-1, "RadioVergleichen")
GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group1 = GUICtrlCreateGroup(" Seriennummer ", 384, 59, 240, 57)
$Input1 = GUICtrlCreateInput("", 395, 81, 220, 21, $ES_UPPERCASE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Vergleichen", 384, 128, 70, 21, 0)
GUICtrlSetOnEvent(-1, "Vergleichen")
$Group2 = GUICtrlCreateGroup(" Ergebnis ", 384, 158, 240, 167)
$Label0 = GUICtrlCreateLabel("Hauptgewinn", 465, 180, 90, 17)
GUICtrlSetColor($Label0, $rot)
GUICtrlSetStyle(-1, $WS_DISABLED)
$Label1 = GUICtrlCreateLabel("letzte 3 Ziffern richtig", 396, 214, 102, 17)
GUICtrlSetStyle(-1, $WS_DISABLED)
$Label2 = GUICtrlCreateLabel("letzte 2 Ziffern richtig", 396, 252, 102, 17)
GUICtrlSetStyle(-1, $WS_DISABLED)
$Label3 = GUICtrlCreateLabel("letzte Ziffer richtig", 396, 290, 87, 17)
GUICtrlSetStyle(-1, $WS_DISABLED)
$Input2 = GUICtrlCreateInput("", 550, 211, 45, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL,$ES_READONLY))
$Input3 = GUICtrlCreateInput("", 550, 249, 45, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL,$ES_READONLY))
$Input4 = GUICtrlCreateInput("", 550, 287, 45, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL,$ES_READONLY))
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button2 = GUICtrlCreateButton("Ende", 554, 128, 70, 21, 0)
GUICtrlSetOnEvent(-1, "Ende")
$Button3 = GUICtrlCreateButton("Löschen", 469, 128, 70, 21, 0)
GUICtrlSetOnEvent(-1, "DeleteSN")
If $Fehler = 1 Then
$lastEntry = 0
Else
$lastEntry = StringTrimLeft($arAlleSN[$arAlleSN[0][0]][1], 2)
_ListAllSN()
EndIf
If Not FileExists(@ScriptDir & "\SN10Euro.INI") Then
GUICtrlSetState($Button3, $GUI_DISABLE)
Else
GUICtrlSetState($Button3, $GUI_ENABLE)
EndIf
GUISetState(@SW_SHOW)
ControlFocus("", "", $Input1)
While 1
Sleep(100)
WEnd
Func _ListAllSN()
If IsArray($arAlleSN) Then
For $i = 1 To $arAlleSN[0][0]
_GUICtrlListViewInsertItem($ListView1, -1, $arAlleSN[$i][1])
Next
EndIf
EndFunc
Func RadioErfassen()
GUICtrlSetData($Button1, "Erfassen")
If Not FileExists(@ScriptDir & "\SN10Euro.INI") Then
GUICtrlSetState($Button3, $GUI_DISABLE)
Else
GUICtrlSetState($Button3, $GUI_ENABLE)
EndIf
GUICtrlSetStyle($Label0, $WS_DISABLED)
GUICtrlSetStyle($Label1, $WS_DISABLED)
GUICtrlSetStyle($Label2, $WS_DISABLED)
GUICtrlSetStyle($Label3, $WS_DISABLED)
_GUICtrlListViewDeleteAllItems($ListView1)
If $Fehler = 0 Then _ListAllSN()
ControlFocus("", "", $Input1)
GUICtrlSetData($Input2, "")
GUICtrlSetData($Input3, "")
GUICtrlSetData($Input4, "")
EndFunc
Func RadioVergleichen()
GUICtrlSetData($Button1, "Vergleichen")
ControlFocus("", "", $Input1)
EndFunc
Func Vergleichen()
If GUICtrlRead($Radio2) = 1 Then ; vergleichen
If $Fehler = 1 Then
MsgBox(48, 'ACHTUNG', "Es sind noch keine Seriennummern zum Vergleich hinterlegt!")
Return
EndIf
_vergleich()
_GUICtrlListViewDeleteAllItems($ListView1)
_treffer()
Else ; erfassen
$SN = GUICtrlRead($Input1)
If $SN <> "" Then
_GUICtrlListViewInsertItem($ListView1, -1, $SN)
IniWrite(@ScriptDir & "\SN10Euro.INI", "serien", "sn" & $lastEntry +1, $SN)
$lastEntry += 1
$Fehler = 0
$new = 1
GUICtrlSetState($Button3, $GUI_ENABLE)
Else
MsgBox(0, 'ACHTUNG!', "Bitte eine Seriennummer für Vergleich eingeben!")
EndIf
EndIf
ControlFocus("", "", $Input1)
EndFunc
Func DeleteSN()
Dim $tmp
If $new = 1 Then $arAlleSN = IniReadSection(@ScriptDir & "\SN10Euro.INI", "serien")
$tmp = _GUICtrlListViewGetItemText($ListView1)
If $tmp <> "" And MsgBox(292,"Löschen","Soll die Seriennummer:" & @LF & $tmp & @LF & "wirklich gelöscht werden?") = 6 Then
For $i = 1 To $arAlleSN[0][0]
If $arAlleSN[$i][1] = $tmp Then
$arAlleSN[$i][1] = ""
ExitLoop
EndIf
Next
FileDelete(@ScriptDir & "\SN10Euro.INI")
$lastEntry = 0
For $i = 1 To $arAlleSN[0][0]
If $arAlleSN[$i][1] <> "" Then
IniWrite(@ScriptDir & "\SN10Euro.INI", "serien", "sn" & $lastEntry +1, $arAlleSN[$i][1])
$lastEntry += 1
$Fehler = 0
EndIf
Next
_GUICtrlListViewDeleteAllItems($ListView1)
$arAlleSN = IniReadSection(@ScriptDir & "\SN10Euro.INI", "serien")
_ListAllSN()
If Not FileExists(@ScriptDir & "\SN10Euro.INI") Then GUICtrlSetState($Button3, $GUI_DISABLE)
EndIf
EndFunc
Func _vergleich()
$SN = GUICtrlRead($Input1)
If $new = 1 Then $arAlleSN = IniReadSection(@ScriptDir & "\SN10Euro.INI", "serien")
For $i = 1 To $arAlleSN[0][0]
If $arAlleSN[$i][1] = $SN Then
$alleRichtig += 1
_ArrayAdd($arTreffer, $arAlleSN[$i][1] & " / Volltreffer = 100.000 €")
$arTreffer[0] += 1
ElseIf StringRight($arAlleSN[$i][1], 3) = StringRight($SN, 3) Then
$dreiRichtig += 1
_ArrayAdd($arTreffer, $arAlleSN[$i][1] & " / 3 R = 10.000 €")
$arTreffer[0] += 1
ElseIf StringRight($arAlleSN[$i][1], 2) = StringRight($SN, 2) Then
$zweiRichtig += 1
_ArrayAdd($arTreffer, $arAlleSN[$i][1] & " / 2 R = 1.000 €")
$arTreffer[0] += 1
ElseIf StringRight($arAlleSN[$i][1], 1) = StringRight($SN, 1) Then
$einRichtig += 1
_ArrayAdd($arTreffer, $arAlleSN[$i][1] & " / 1 R = 100 €")
$arTreffer[0] += 1
EndIf
Next
EndFunc
Func _treffer()
For $i = 1 To $arTreffer[0]
_GUICtrlListViewInsertItem($ListView1, -1, $arTreffer[$i])
Next
If $alleRichtig = 1 Then GUICtrlSetStyle($Label0, $GUI_SS_DEFAULT_LABEL)
GUICtrlSetState($Button3, $GUI_DISABLE)
GUICtrlSetStyle($Label1, $GUI_SS_DEFAULT_LABEL)
GUICtrlSetStyle($Label2, $GUI_SS_DEFAULT_LABEL)
GUICtrlSetStyle($Label3, $GUI_SS_DEFAULT_LABEL)
GUICtrlSetData($Input2, $dreiRichtig)
GUICtrlSetData($Input3, $zweiRichtig)
GUICtrlSetData($Input4, $einRichtig)
ReDim $arTreffer[1]
$arTreffer[0] = 0
$dreiRichtig = 0
$zweiRichtig = 0
$einRichtig = 0
EndFunc
Func Ende()
Exit
EndFunc