开发实践教程1:试卷生成系统6.1 登录界面(FormLogin)

Posted VB.Net

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发实践教程1:试卷生成系统6.1 登录界面(FormLogin)相关的知识,希望对你有一定的参考价值。

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

需要通过输入账号ID和密码登录,其中需要选择对应账户类型(普通用户还是管理员)进行登录。

窗体设计如下:

 图1-11

在此窗体中有两件重要工作:

1、载入时,设置数据库的连接语句:

databaseConnString = "server=192.168.1.5\\;Database=examination;uid=Exam;pwd=Exam321654;"

连接语句具体参数分别是服务器地址,数据库实例名称,用户账号,登录数据库密码。

更多连接语句信息请参看教程第19.3.5节《连接MsSql》,不用于教程使用”Data Source=“这里使用的是”server=“

为了方便测试,在设计时可以使用以下连接语句:

databaseConnString = "server=192.168.1.5\\;Database=examination;Integrated Security=sspi;"

但在程序发布时,必须使用上面一句。

2、对用户账号和密码进行验证

通常为防止sql注入,采用查询获得用户账户和密码。通过用户登录时输入的密码经MD5加密后,与保存的密码相比较,如果一致,则为正确的用户登录。

具体代码如下:

Imports System.ComponentModel
Imports System.Data.SqlClient


Public Class FormLogin

    Dim connection As SqlConnection


    Private Sub FormLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        databaseConnString = "server=192.168.1.5\\;Database=examination;uid=Exam;pwd=Exam321654;"

        connection = New SqlConnection(databaseConnString)
        connection.Open()

        cbPermissions.SelectedIndex = 0
    End Sub


    Private Function checkData() As String
        Dim specialChars As String = "',"",!,%,^,?, "
        Dim id As Integer
        If txtName.Text.Trim = "" Then
            Return "账号不能为空"
        End If
        If txtPass.Text.Trim = "" Then
            Return "密码不能为空"
        End If

        For i As Integer = 0 To txtName.Text.Trim.Length - 1
            If specialChars.IndexOf(txtName.Text.Trim.Substring(i, 1)) > -1 Then
                Return "不能包含特殊字符"
            End If
        Next
        Return ""
    End Function

    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        Dim errMsg As String
        errMsg = checkData()
        If errMsg <> "" Then
            MessageBox.Show(errMsg, "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If

        Dim inputName As String = txtName.Text.Trim
        Dim inputPass As String = txtPass.Text
        Dim inputPassMd5 As String = clsMd5.toMD5(inputPass)

        Dim command As New SqlCommand()

        If cbPermissions.Text = "普通用户" Then
            command.CommandText = "select 编号,账号,密码 from 用户表 where (账号='" & inputName & "') and (状态='启用')"
        Else
            command.CommandText = "select 编号,账号,密码 from 用户表 where (账号='" & inputName & "') and (状态='管理')"
        End If

        command.Connection = connection

        Dim rdUser As SqlDataReader
        Dim userID As Integer
        Dim userPass As String
        Dim userName As String
        rdUser = command.ExecuteReader(CommandBehavior.SingleRow)
        If rdUser.HasRows = False Then
            rdUser.Close()
            MessageBox.Show(loginError(), "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If

        rdUser.Read()
        userID = rdUser.GetValue(0)
        userName = rdUser.GetValue(1)
        userPass = rdUser.GetValue(2)
        rdUser.Close()

        If userPass <> inputPassMd5 Then
            MessageBox.Show(loginError(), "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If


        If cbPermissions.Text = "普通用户" Then
            permissions = 1
            loginId = userID
            loginName = userName
        Else
            permissions = 0
            loginId = userID
            loginName = userName
        End If

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


    Private Function loginError() As String
        Return "错误原因:" & vbCrLf &
               "1、账号或密码错误;" & vbCrLf &
               "2、账号申请未通过;" & vbCrLf &
               "3、账号已经被停用。"
    End Function

    Private Sub llbRegist_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles llbRegist.LinkClicked
        FormRegist.ShowDialog()
    End Sub

    Private Sub FormLogin_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
        Application.Exit()
    End Sub

    Private Sub llbAbout_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles llbAbout.LinkClicked
        FormAbout.ShowDialog()
    End Sub


End Class

由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供的参考。

学习更多vb.net知识,请参看 vb.net 教程 目录

以上是关于开发实践教程1:试卷生成系统6.1 登录界面(FormLogin)的主要内容,如果未能解决你的问题,请参考以下文章

开发实践教程1:试卷生成系统6.3 主界面(FormMain)

开发实践教程1:试卷生成系统6.2 用户注册界面(FormRegist)

开发实践教程1:试卷生成系统6.12 试卷管理(FormTestPaperManager)

开发实践教程1:试卷生成系统3 系统设计

开发实践教程1:试卷生成系统4 类

开发实践教程1:试卷生成系统6.7 试卷生成(FormTestPaper)