Jump to content

exit program when i press confirm button


Recommended Posts

in my program, at the Register interface, when I fill in all the information, press confirm and it exits the program

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPIFiles.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <GUIConstants.au3>
#include <GDIPlus.au3>
#include <WinAPIGdi.au3>
#include <String.au3>


; File lưu thông tin người dùng
Global $sFilePath = @ScriptDir & "\users.ini"


GUICreate("Đăng nhập", 300, 150)

; Tên đăng nhập
$lblUsernameText = GUICtrlCreateLabel("Tên đăng nhập:", 10, 10, 100, 20)
$inputUsername = GUICtrlCreateInput("", 120, 10, 125, 20, $ES_LEFT)

; Mật khẩu
$lblPasswordText = GUICtrlCreateLabel("Mật khẩu:", 10, 40, 100, 20)

; Ô nhập mật khẩu với viền
$inputPassword = GUICtrlCreateInput("", 120, 40, 125, 20, BitOR($ES_PASSWORD, $WS_BORDER))

; Biểu tượng mắt ẩn hiện mật khẩu
Local $idEye = GUICtrlCreatePic("Hide.bmp", 250, 40, 20, 20), $bHide = True

Local $iDefault = GUICtrlSendMsg($inputPassword, $EM_GETPASSWORDCHAR, 0, 0)



$btnLogin = GUICtrlCreateButton("Login", 10, 80, 130, 30)
$btnRegister = GUICtrlCreateButton("Register", 150, 80, 130, 30)


$lblStatus = GUICtrlCreateLabel("", 10, 120, 270, 20)


; Label ID đăng nhập và nút đăng xuất
$lblUserID = GUICtrlCreateLabel("", 50, 50, 270, 20)
$btnLogout = GUICtrlCreateButton("Đăng xuất", 100, 100, 100, 30)
GUICtrlSetState($btnLogout, $GUI_HIDE) ; Ẩn nút đăng xuất
GUICtrlSetState($lblUserID, $GUI_HIDE)  ; Ẩn label "ID đăng nhập"

; Gán phím Enter cho nút đăng nhập
HotKeySet("{ENTER}", "Login")
GUISetState()
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $btnRegister
            ShowRegisterGUI()
        Case $btnLogin
            Login()
        Case $btnLogout
            Logout()
        Case $idEye ; Chuyển đổi trạng thái hiển thị mật khẩu
            If $bHide Then
                GUICtrlSendMsg($inputPassword, $EM_SETPASSWORDCHAR, 0, 0)
                GUICtrlSetImage($idEye, "Show.bmp")
            Else
                GUICtrlSendMsg($inputPassword, $EM_SETPASSWORDCHAR, $iDefault, 0)
                GUICtrlSetImage($idEye, "Hide.bmp")
            EndIf
            $bHide = Not $bHide
            GUICtrlSetState($inputPassword, $GUI_FOCUS) ; Giữ tiêu điểm ở ô nhập
    EndSwitch
WEnd

; Hàm Đăng ký tài khoản
Func ShowRegisterGUI()
    ; Tạo giao diện đăng ký
    Local $hRegisterGUI = GUICreate("Đăng ký tài khoản", 350, 300)

    GUICtrlCreateLabel("ID:", 10, 10, 100, 20)
    Local $inputID = GUICtrlCreateInput("", 120, 10, 200, 20)

    GUICtrlCreateLabel("Mật khẩu:", 10, 40, 100, 20)
    Local $inputPass = GUICtrlCreateInput("", 120, 40, 200, 20, $ES_PASSWORD)

    GUICtrlCreateLabel("Email:", 10, 70, 100, 20)
    Local $inputEmail = GUICtrlCreateInput("", 120, 70, 200, 20)

    GUICtrlCreateLabel("Số điện thoại:", 10, 100, 100, 20)
    Local $inputPhone = GUICtrlCreateInput("", 120, 100, 200, 20)

    GUICtrlCreateLabel("Quốc gia:", 10, 130, 100, 20)
    Local $inputCountry = GUICtrlCreateInput("", 120, 130, 200, 20)

    Local $btnSubmit = GUICtrlCreateButton("Confirm", 50, 200, 100, 30)
    Local $btnCancel = GUICtrlCreateButton("Cancel", 200, 200, 100, 30)

    GUISetState(@SW_SHOW, $hRegisterGUI)

    ; Biến kiểm tra trạng thái
    Local $bFormValid = True
    Local $sFilePath = @ScriptDir & "\users.ini" ; Đường dẫn đến file .ini

    While 1
        Local $nRegisterMsg = GUIGetMsg()
        Switch $nRegisterMsg
            Case $GUI_EVENT_CLOSE
                GUIDelete($hRegisterGUI)
                Return
            Case $btnCancel
                GUIDelete($hRegisterGUI)
                Return
            Case $btnSubmit
                ; Lấy dữ liệu từ các ô nhập
                Local $sID = GUICtrlRead($inputID)
                Local $sPass = GUICtrlRead($inputPass)
                Local $sEmail = GUICtrlRead($inputEmail)
                Local $sPhone = GUICtrlRead($inputPhone)
                Local $sCountry = GUICtrlRead($inputCountry)

                ; Reset lại biến kiểm tra tính hợp lệ
                $bFormValid = True

                ; Kiểm tra ID hợp lệ
                If Not IsValidID($sID) Then
                    MsgBox(16, "Lỗi", "ID không hợp lệ! ID phải có ít nhất 6 ký tự và chỉ chứa chữ và số, không có dấu, khoảng trắng và ký tự đặc biệt.")
                    $bFormValid = False
                EndIf

                ; Kiểm tra mật khẩu hợp lệ
                If Not IsValidPassword($sPass) Then
                    MsgBox(16, "Lỗi", "Mật khẩu không hợp lệ! Mật khẩu không được chứa khoảng trắng hoặc dấu.")
                    $bFormValid = False
                EndIf

                ; Kiểm tra email hợp lệ
                If Not IsValidEmail($sEmail) Then
                    MsgBox(16, "Lỗi", "Email không hợp lệ! Vui lòng nhập email đúng định dạng.")
                    $bFormValid = False
                EndIf

                ; Kiểm tra số điện thoại hợp lệ
                If Not IsValidPhone($sPhone) Then
                    MsgBox(16, "Lỗi", "Số điện thoại không hợp lệ! Vui lòng nhập số điện thoại hợp lệ.")
                    $bFormValid = False
                EndIf

                ; Kiểm tra quốc gia hợp lệ
                If Not IsValidCountry($sCountry) Then
                    MsgBox(16, "Lỗi", "Quốc gia không hợp lệ! Quốc gia chỉ được chứa chữ và khoảng trắng.")
                    $bFormValid = False
                EndIf

                ; Kiểm tra nếu có trường thông tin nào còn trống
                If $sID = "" Or $sPass = "" Or $sEmail = "" Or $sPhone = "" Or $sCountry = "" Then
                    MsgBox(16, "Lỗi", "Vui lòng điền đầy đủ thông tin!")
                    $bFormValid = False
                EndIf

                ; Kiểm tra nếu ID, email hoặc số điện thoại đã tồn tại trong file .ini
                If FileExists($sFilePath) Then
                    ; Kiểm tra ID đã tồn tại chưa
                    Local $sUserData = IniRead($sFilePath, "Users", $sID, "")
                    If $sUserData <> "" Then
                        MsgBox(16, "Lỗi", "ID đã tồn tại! Vui lòng chọn ID khác.")
                        $bFormValid = False
                    EndIf

                    ; Kiểm tra email đã tồn tại chưa
                    Local $sEmailCheck = IniRead($sFilePath, "Emails", $sEmail, "")
                    If $sEmailCheck <> "" Then
                        MsgBox(16, "Lỗi", "Email đã tồn tại! Vui lòng sử dụng email khác.")
                        $bFormValid = False
                    EndIf

                    ; Kiểm tra số điện thoại đã tồn tại chưa
                    Local $sPhoneCheck = IniRead($sFilePath, "PhoneNumbers", $sPhone, "")
                    If $sPhoneCheck <> "" Then
                        MsgBox(16, "Lỗi", "Số điện thoại đã được sử dụng! Vui lòng nhập số khác.")
                        $bFormValid = False
                    EndIf
                Else
                    ; Nếu file không tồn tại, tạo mới file INI
                    IniWrite($sFilePath, "Users", "", "")
                    IniWrite($sFilePath, "Emails", "", "")
                    IniWrite($sFilePath, "PhoneNumbers", "", "")
                EndIf

                ; Kiểm tra nếu thông tin hợp lệ mới tiến hành lưu
                If $bFormValid Then
                    ; Mã hóa mật khẩu
                    Local $sHashedPass = HashPassword($sPass)

                    ; Lưu thông tin vào file .ini
                    IniWrite($sFilePath, "Users", $sID, $sHashedPass & "|" & $sEmail & "|" & $sPhone & "|" & $sCountry)
                    IniWrite($sFilePath, "Emails", $sEmail, $sID) ; Lưu email và ID tương ứng
                    IniWrite($sFilePath, "PhoneNumbers", $sPhone, $sID) ; Lưu số điện thoại và ID tương ứng

                    MsgBox(64, "Thành công", "Đăng ký thành công!")
                    GUIDelete($hRegisterGUI)  ; Đóng GUI khi tất cả hợp lệ
                    Return
                EndIf
        EndSwitch
    WEnd
EndFunc




; Hàm mã hóa mật khẩu bằng SHA256
Func HashPassword($sPass)
    Return _Crypto_Hash($sPass, $CALG_SHA_256)
EndFunc

; Hàm kiểm tra ID hợp lệ (Ít nhất 6 ký tự, không có dấu, khoảng trắng và ký tự đặc biệt)
Func IsValidID($sID)
    Local $sPattern = "^[a-zA-Z0-9]{6,}$"  ; ID phải có ít nhất 6 ký tự và chỉ chứa chữ và số
    Return StringRegExp($sID, $sPattern)
EndFunc

; Hàm kiểm tra mật khẩu hợp lệ (Không chứa khoảng trắng và dấu)
Func IsValidPassword($sPass)
    Local $sPattern = "^[^\x20\x21\x23-\x2B\x2D\x2E\x2F\x3A-\x3B\x3C\x3D\x3F\x5C\x5E\x5F\x60\x7B\x7C\x7D\x7E\x22\x27]+$"
    Return StringRegExp($sPass, $sPattern)
EndFunc

; Hàm kiểm tra email hợp lệ
Func IsValidEmail($sEmail)
    Local $sPattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
    Return StringRegExp($sEmail, $sPattern)
EndFunc

; Hàm kiểm tra số điện thoại hợp lệ
Func IsValidPhone($sPhone)
    Local $sPattern = "^\+?\d{10,15}$"
    Return StringRegExp($sPhone, $sPattern)
EndFunc

; Hàm kiểm tra quốc gia hợp lệ
Func IsValidCountry($sCountry)
    Local $sPattern = "^[a-zA-Z\s]+$"
    Return StringRegExp($sCountry, $sPattern)
EndFunc


; Hàm Đăng nhập
Func Login()
    Local $sUsername = GUICtrlRead($inputUsername)
    Local $sPassword = GUICtrlRead($inputPassword)

    ; Kiểm tra thông tin đăng nhập
    If FileExists($sFilePath) Then
        Local $sUserData = IniRead($sFilePath, "Users", $sUsername, "")
        If $sUserData <> "" Then
            Local $aUserInfo = StringSplit($sUserData, "|")
            If $aUserInfo[1] = $sPassword Then
                MsgBox(64, "Đăng nhập thành công", "Chào mừng, " & $sUsername)
                
                ; Hiển thị ID người dùng đã đăng nhập
                GUICtrlSetState($lblUserID, $GUI_SHOW)
                GUICtrlSetData($lblUserID, "ID: " & $sUsername)
                
                ; Ẩn các trường nhập liệu và nút đăng nhập, đăng ký
                GUICtrlSetState($inputUsername, $GUI_HIDE)
                GUICtrlSetState($inputPassword, $GUI_HIDE)
                GUICtrlSetState($btnLogin, $GUI_HIDE)
                GUICtrlSetState($btnRegister, $GUI_HIDE)
                GUICtrlSetState($idEye, $GUI_HIDE)
                
                ; Ẩn các label "Tên đăng nhập" và "Mật khẩu"
                GUICtrlSetState($lblUsernameText, $GUI_HIDE)
                GUICtrlSetState($lblPasswordText, $GUI_HIDE)

                ; Hiển thị nút đăng xuất
                GUICtrlSetState($btnLogout, $GUI_SHOW)
            Else
                MsgBox(16, "Đăng nhập thất bại", "Mật khẩu sai.")
            EndIf
        Else
            MsgBox(16, "Đăng nhập thất bại", "Tên đăng nhập không tồn tại.")
        EndIf
    EndIf
EndFunc



; Hàm Đăng xuất
Func Logout()
    GUICtrlSetState($inputUsername, $GUI_SHOW)
    GUICtrlSetState($inputPassword, $GUI_SHOW)
    GUICtrlSetState($btnLogin, $GUI_SHOW)
    GUICtrlSetState($btnRegister, $GUI_SHOW)
    GUICtrlSetState($idEye, $GUI_SHOW)

    GUICtrlSetState($lblUsernameText, $GUI_SHOW)
    GUICtrlSetState($lblPasswordText, $GUI_SHOW)

    GUICtrlSetState($lblUserID, $GUI_HIDE)
    GUICtrlSetState($btnLogout, $GUI_HIDE)
EndFunc

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...