Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建工作登录表单时遇到问题(对于vb.net来说是相当新的)_Vb.net - Fatal编程技术网

创建工作登录表单时遇到问题(对于vb.net来说是相当新的)

创建工作登录表单时遇到问题(对于vb.net来说是相当新的),vb.net,Vb.net,看看我的代码,我认为一切都很好,只是点击子问题 Public Class Login Dim strUserAttepmt As String Dim strPassAttepmt As String Dim ReadUsername As String Dim ReadPassword As String Dim ReadIdentifier As String Dim TeacherLogins(2) As Details Stru

看看我的代码,我认为一切都很好,只是点击子问题

Public Class Login

    Dim strUserAttepmt As String
    Dim strPassAttepmt As String
    Dim ReadUsername As String
    Dim ReadPassword As String
    Dim ReadIdentifier As String
    Dim TeacherLogins(2) As Details

    Structure Details
        Dim identifier As Char
        Dim username As String
        Dim password As String
    End Structure



    Sub LoadTeacherLogins(ByRef Logins() As Details)

        Dim tblLogins As String = "\\Sjcdom01\mstudent\LHeywood\documents\A2\Computing\Comp 4 - Smail\Project\Text Files\Official Teacher Logins.txt"
        Dim TextLine As String = ""
        Dim ArrayCounter As Integer = 2
        Dim objReader As New System.IO.StreamReader(tblLogins)

        'loop through text file and load all logins
        Do While objReader.Peek() <> -1

            'read next line from file
            TextLine = TextLine & objReader.ReadLine() & vbNewLine

            'declare an array and use it to split line from file
            Dim TempArray() As String = Split(TextLine, ",")

            'transfer each array element into the appropriate part of the student structure
            Logins(ArrayCounter).identifier = TempArray(0)
            Logins(ArrayCounter).username = TempArray(1)
            Logins(ArrayCounter).password = TempArray(2)

            'empty string before reading next line
            TextLine = ""
            ArrayCounter = ArrayCounter + 1




        Loop

        ReadIdentifier = Logins(ArrayCounter).identifier
        ReadUsername = Logins(ArrayCounter).username
        ReadPassword = Logins(ArrayCounter).password

        LoadTeacherLogins(TeacherLogins)
    End Sub

    Private Sub InputUsername_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InputUsername.TextChanged
        strUserAttepmt = InputUsername.Text
    End Sub

    Private Sub InputPassword_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InputPassword.TextChanged
        strPassAttepmt = InputPassword.Text
    End Sub
    Private Sub ButLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButLogin.Click

        Do


            If strUserAttepmt = ReadUsername And strPassAttepmt = ReadPassword Then
                Me.Hide()
                Homepage.Show()
            Else : MessageBox.Show("Invalid Username and Password combination")
            End If

        Loop Until ReadIdentifier = Nothing

        Me.Hide()
        Homepage.Show()
    End Sub

End Class

我希望验证用户输入是否与相应文本文件中的任何行匹配。

您遇到的问题比您想象的要多

循环直到ReadIdentifier=Nothing 您从未更改ReadIdentifier的值,因此它将永远不会为空,或者,如果它已经为空,则主页将立即显示

根据我们看到的代码,ReadIdentifier值将始终由文件中的最后一行设置。如果您认为您正在搜索文件的每一行,那么您不是,您只是在检查用户名和密码是否与最后一个文件条目匹配

Dim tblLogins As String=\\Sjcdom01\mstudent\LHeywood\documents\A2\Computing\Comp 4-Smail\Project\Text Files\Official Teacher Logins.txt 如果您的程序可以访问此共享,那么用户也可以访问。对某人来说,打开该文件并查看所有登录信息太容易了

LoadTeacherLoginsTeacherLogins 您正在创建无限递归,该递归将生成堆栈溢出异常。您只需通过教师登录,这在Sub中是永远不会改变的,一次又一次


要开始修复这些问题,请选择所有代码,然后按Delete和Google以了解如何在WinForms中进行身份验证。

将代码分层永远不会太早。下面是一个例子:

TeacherApp类是一个包含用户名文本框、密码文本框和登录按钮的表单

如果文件较大,TeacherDataSource类将使用LINQ表达式在字典中实际查找该文件

TeacherInfo类是您的数据对象

通过保持整洁,您的代码将易于理解和维护

Public Class TeacherApp
    Private Teachers As New TeacherDataSource("\\Sjcdom01\mstudent\LHeywood\documents\A2\Computing\Comp 4 - Smail\Project\Text Files\Official Teacher Logins.txt")
    Private CurrentTeacher As TeacherInfo

    Private Sub LoginButton_Click(sender As Object, e As EventArgs) Handles LoginButton.Click
        CurrentTeacher = Teachers.Lookup(UserName.Text, Password.Text)

        If CurrentTeacher IsNot Nothing Then
            MessageBox.Show("Welcome, " + CurrentTeacher.Name)
        Else
            MessageBox.Show("Account Not Found")
        End If
    End Sub
End Class

Public Class TeacherDataSource
    Private Accounts As Dictionary(Of String, TeacherInfo)

    Public Sub New(filePath As String)
        Accounts = (From record In IO.File.ReadAllLines(filePath)
                    Select Terms = record.Split(",")
                    Where Terms.Count = 3
                    Select New TeacherInfo With {.Identifier = Terms(0), .Name = Terms(1), .Password = Terms(2)}) _
                    .ToDictionary(Function(x) x.Name)
    End Sub

    Public Function Lookup(name As String, password As String) As TeacherInfo
        Return If(Accounts.ContainsKey(name) AndAlso Accounts(name).Password = password, Accounts(name), Nothing)
    End Function 
End Class

Public Class TeacherInfo
    Public Property Identifier As Char
    Public Property Name As String
    Public Property Password As String
End Class

那么,你的问题是什么?发生了什么?打算发生什么?基本上,我想看看strusatempt和strpassatempt是否匹配相应文件中的任何登录详细信息。ReadUsername和ReadPassword我是否完全以错误的方式登录?我理解安全问题,但此时此刻我只想让系统正常工作,因为它仍然是原型。谢谢你的反馈。