在从文本文件数据库创建登录时苦苦挣扎。信息需要在工作之前手动输入到文本文件中...请参阅下面的代码以获取表单。它不会让我登录。
Public Class UserLogin
Private PWD As String
Public User As User
Public Users As List(Of User) = New List(Of User)
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Me.Close()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
If isValidData() Then
If isValidUser() Then
MessageBox.Show("Login Successful")
Form2.Show()
Me.Hide()
Else
MessageBox.Show("Incorrect Username or password")
End If
End If
Catch ex As Exception
MessageBox.Show(ex.Message & vbCrLf & vbCrLf & ex.GetType.ToString & vbCrLf & vbCrLf & ex.StackTrace, "User Does not Exist")
End Try
End Sub
Private Function isValidData() As Boolean
Return Validator.IsPresent(TextBox1, "Username") AndAlso
Validator.IsPresent(TextBox2, "Password")
End Function
Private Function isValidUser() As Boolean
Return UserDB.ValidateUser("Username", "Password")
End Function
Public Sub setPath(cwd As String)
PWD = cwd
End Sub
End Class
以下用户类:
Public Class User
Public Sub New()
End Sub
Public Sub New(Username As String, Password As String)
Me.Username = Username
Me.Password = Password
End Sub
Public Property Username As String
Public Property Password As String
Public Function GetDisplayText(sep As String) As String
Dim text As String = Username & sep & Password
Return text
End Function
End Class
下面的UserDB类
Imports System.IO
Public Class UserDB
Private Const Databasename = "C:\Depreciate\Users.txt"
Public User As New User
Public Shared Users As List(Of User) = New List(Of User)
Public Shared Function GetUsers(Dir As String) As List(Of User)
Dim Users As New List(Of User)
Dim textIn As New StreamReader(
New FileStream(Databasename, FileMode.OpenOrCreate, FileAccess.Read))
Do While textIn.Peek <> -1
Dim row As String = textIn.ReadLine
Dim columns As String() = row.Split(CChar(","))
Dim User As New User
User.Username = columns(0)
User.Password = columns(1)
Users.Add(User)
Loop
textIn.Close()
Return Users
End Function
Public Shared Function ValidateUser(username As String, password As String) As Boolean
Dim Validated = False
For Each userEntry As User In Users
If username = userEntry.Username AndAlso password = userEntry.Password Then
Validated = True
Exit For
End If
Next
Return Validated
End Function
End Class
答案 0 :(得分:0)
看起来像是将所有用户名和密码与字符串进行比较&#34;用户名&#34;和#34;密码&#34;致电:
Return UserDB.ValidateUser("Username", "Password")
在isValidUser
中的。可能你应该更好地传递用户输入的实际用户名和密码?
答案 1 :(得分:0)
您的代码中存在以下几个问题:
首先,我无法看到应该从文件中初始化用户列表的UserDB.GetUsers
调用。但是假设你已经在其他地方进行了调用,那么该方法还有另一个问题。
GetUsers方法中的这一行创建一个List(Of User)类型的新变量,并将其命名为Shared one的同名,有效地隐藏了在全局类级别声明的那个
Dim Users As New List(Of User)
然后您的代码继续并填充名为Users的变量,但此变量不是在类全局级别声明的共享变量。当然,当您在共享变量中搜索用户名和密码时,您找不到任何内容。
只需删除该行,然后调用To GetUsers填充检查中使用的相同变量
(当然我还假设当您调用UserDB.ValidateUser时,您将传递实际的用户名和密码,而不是您在上面的代码中使用的占位符字符串)