BACalculator (Alkoholrechner)

  • Sorry für die hässliche GUI, ich hatte nicht viel Zeit.

    Der BACalculator errechnet auf Grund von vorher eingegebenen Daten die maximale Blutalkoholkonzentration in Promille. Dazu werden Formeln von Widmark, Watson und Eicker benutzt. Aufgrund einer Ungenauigkeit in der Eicker-Formel ist die Berechnung bei Frauen weniger genau als bei Männern.

    Die GUI sollte selbsterklärend sein...

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $iAlcMasse = 0

    [/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("BACalculator", 291, 443, 192, 124)
    GUICtrlCreateLabel("Masse in kg:", 1, 10)
    $masseInput = GUICtrlCreateInput("60", 65, 8, 50, Default, $ES_NUMBER)
    GUICtrlCreateUpdown($masseInput)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Alter in Jahren:", 120, 10)
    $alterInput = GUICtrlCreateInput("20", 200, 8, 50, Default, $ES_NUMBER)
    GUICtrlCreateUpdown($alterInput)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Größe in cm:", 1, 40)
    $groesseInput = GUICtrlCreateInput("160", 65, 38, 50, Default, $ES_NUMBER)
    GUICtrlCreateUpdown($groesseInput)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Geschlecht:", 120, 40)
    $geschlechtCombo = GUICtrlCreateCombo("männlich", 200, 38, 80, Default, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "weiblich")

    [/autoit] [autoit][/autoit] [autoit]

    $promilleLabel = GUICtrlCreateLabel("0,00‰", 168, 384, 116, 50)
    GUICtrlSetFont(-1, 30, 400, 0, "Arial Narrow")
    GUICtrlSetColor(-1, 0x000000)
    $listeLabel = GUICtrlCreateLabel("Liste:", 0, 96, 285, 273)
    $iInput = GUICtrlCreateInput("1", 8, 72, 41, 21, $ES_NUMBER)
    GUICtrlCreateUpdown($iInput)
    $mengeCombo = GUICtrlCreateCombo("", 72, 72, 113, 25)
    $volProzInput = GUICtrlCreateInput("5%", 192, 72, 57, 21)
    $addButton = GUICtrlCreateButton("+", 256, 72, 25, 25)

    [/autoit] [autoit][/autoit] [autoit]

    $neuButton=GUICtrlCreateButton("Neu anfangen",10,384,148,50)
    GUICtrlSetState($neuButton,$GUI_HIDE)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($mengeCombo, "1 cl")
    GUICtrlSetData($mengeCombo, "2 cl")
    GUICtrlSetData($mengeCombo, "4 cl")
    GUICtrlSetData($mengeCombo, "10 cl")
    GUICtrlSetData($mengeCombo, "20 cl")
    GUICtrlSetData($mengeCombo, "30 cl")
    GUICtrlSetData($mengeCombo, "50 cl")
    GUICtrlSetData($mengeCombo, "100 cl")
    GUICtrlSetData($mengeCombo, "200 cl", "1 cl")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $addButton
    _add()
    Case $neuButton
    _clear()
    EndSwitch
    WEnd
    Func _add()
    $iAnzahl = GUICtrlRead($iInput)
    $sMenge = GUICtrlRead($mengeCombo)
    $sVolProz = GUICtrlRead($volProzInput)
    If $iAnzahl <= 0 Then Return _setDefault()
    ;Menge korrigieren:
    $sMenge = StringStripWS($sMenge, 8)
    $sMenge = StringReplace($sMenge, ",", ".")
    If StringRight($sMenge, 2) = "cl" Then $sMenge = StringTrimRight($sMenge, 2)
    $iMenge = Number($sMenge)
    If $iMenge = 0 Then Return _setDefault()
    ;VolProz korrigieren:
    $sVolProz = StringStripWS($sVolProz, 8)
    $sVolProz = StringReplace($sVolProz, ",", ".")
    If StringRight($sVolProz, 1) = "%" Then $sVolProz = StringTrimRight($sVolProz, 1)
    $iVolProz = Number($sVolProz)
    If $iVolProz = 0 Then Return _setDefault()
    ; zur Liste hinzufügen:
    GUICtrlSetData($listeLabel, GUICtrlRead($listeLabel) & @CRLF & $iAnzahl & "x " & $iMenge & " cl mit " & $iVolProz & "%")
    ;Alkoholmasse berechnen:
    $iAlcMasse += (($iAnzahl * $iMenge) / 10) * $iVolProz * 0.8
    _recalculate()
    EndFunc ;==>_add
    Func _setDefault()
    GUICtrlSetData($iInput, 1)
    GUICtrlSetData($mengeCombo, "")
    GUICtrlSetData($volProzInput, "5%")
    EndFunc ;==>_setDefault
    Func _recalculate()
    If GUICtrlRead($geschlechtCombo) = "männlich" Then
    $GWK = 2.447 - 0.09516 * GUICtrlRead($alterInput) + 0.1074 * GUICtrlRead($groesseInput) + 0.3362 * GUICtrlRead($masseInput)
    Else
    $GWK = 0.203 - 0.07 * GUICtrlRead($alterInput) + 0.1069 * GUICtrlRead($groesseInput) + 0.2466 * GUICtrlRead($masseInput)
    EndIf
    $r = (1.055 * $GWK) / (0.8 * GUICtrlRead($masseInput))
    $c = $iAlcMasse / (GUICtrlRead($masseInput) * $r)
    GUICtrlSetData($promilleLabel,StringReplace(Round($c,2),".",",") & "‰")
    GUICtrlSetState($neuButton,$GUI_SHOW)
    EndFunc
    Func _clear()
    $iAlcMasse = 0
    GUICtrlSetData($promilleLabel,"0,00‰")
    GUICtrlSetData($listeLabel,"Liste:" & @CRLF)
    GUICtrlSetState($neuButton,$GUI_HIDE)
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Aber bitte niemals als Berechnungsgrundlage verwenden (wann bin ich wieder fahrtüchtig)!
    Allen Berechnungsverfahren ist eines gemeinsam: Es sind gemittelte Werte die die Individualität des Einzelnen außen vorlassen.
    Leicht geänderte Körpertemperatur, bestimmte aufgenommene Nahrung, Stoffwechselbesonderheiten etc. pp. können das Ergebnis extrem beeinflussen.

  • Richtig! Deshalb: Immer noch was draufrechnen!

    Dieses Tool dient lediglich der Unterhaltung. Es werden zwar wissenschaftliche Formeln verwendet, eine genaue Bestimmung des BAC erfordert jedoch eine Messung.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.