创建工作登录表单时遇到问题(对于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我是否完全以错误的方式登录?我理解安全问题,但此时此刻我只想让系统正常工作,因为它仍然是原型。谢谢你的反馈。