- 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