码迷,mamicode.com
首页 > 其他好文 > 详细

【机房收费系统个人版】三层登陆

时间:2015-05-18 09:12:09      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:vb.net   数据库   

     机房收费个人版这个项目,很早就开始进行了,但是直到现在还没有完成。。原因有两方面,首先是自身的个人管理不到位。做事拖拖拉拉,没有很好的节制自身的不良习惯;其次是思想价值观极端化。世界上没有谁能将所有事情都做得完美无瑕,追求完美是一个美好的过程,但最终还是需要一个结果的。当鱼和熊掌不能兼得时,那么就要放弃,选择最重要的坚持下去!不要去纠结,会让你发疯。。

     下面这张导图是我对三层的理解以及敲代码的指导方针。

技术分享

     首先,三层登陆由四部分组成。分别是UI层、BLL层、DAL层和Models实体。UI层的作用是接收用户输入的数据,显示用户查询的数据,为用户提供一种交互式操作界面;BLL层是起到数据的承上启下作用,对数据进行业务逻辑处理;DAL层的作用是具体操作数据库,如连接、查询、更改、删除等;Models层的作用是抽象数据库对象,如表实体、视图实体、存储过程实体等。将一个系统分为三层,会增强系统的逻辑性,使其结构清晰明了。

     其次,四部分的关系非常明了。第一,UI、BLL和DAL都会引用Models实体层;第二,UI引用BLL,BLL引用DAL,很有顺序性;第三,当查到最终想要的结果后,会有一个逆向的反馈,其形式是Models,就好比导图中的users

     最后,实践是检验真理的唯一标准。纸上谈兵是不行滴,还得看实战能力,下面就是我的三层登陆代码:

UI层

<pre name="code" class="vb"><span style="font-family:SimSun;font-size:18px;">Public Class frmLogin

    Private Sub btnConfirm_Click(sender As Object, e As EventArgs) Handles btnConfirm.Click

        '实例化业务逻辑层LoginBLL类
        Dim NewLoginBLL As New BLL.LoginBLL
        '实例化实体类UserEntity
        Dim user As New Models.UserEntity
        '实例化实体类UserEntity,user用于BLL层的方法UserLogin()返回的数据类型(实体类型)
        Dim users As Models.UserEntity

        '界面业务逻辑:判断用户名和密码不能为空
        If txtUserName.Text = "" Then
            MessageBox.Show("用户名不能为空")
            Return
        End If

        If txtPassword.Text = "" Then
            MessageBox.Show("密码不能为空")
            Return
        End If

        '将界面中的数据传入给实体中UserEntity类的属性值
        user.UserID = txtUserName.Text.Trim()
        user.Password = txtPassword.Text.Trim()

        Try
            '引用BLL层,执行用户登陆业务逻辑
            users = NewLoginBLL.UserLoginBLL(user)
            If (users.UserID Is Nothing And users.Password Is Nothing) Then
                MessageBox.Show("登录失败,用户名和密码不匹配")
                Return
            Else
                MessageBox.Show("登陆成功!登录用户:" + user.UserID)
            End If
       '返回错误信息
        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString())
        End Try

    End Sub

End Class</span>




BLL层

<div style="line-height: 21px;"><span style="color: rgb(0, 128, 0);"><span style="font-family:SimSun;font-size:18px;">''' <span style="color: rgb(128, 128, 128);"><summary></span></span></span></div><div style="line-height: 21px;"><span style="color: rgb(0, 128, 0);"><span style="font-family:SimSun;font-size:18px;">''' 创建登陆类,实现登录过程的逻辑处理</span></span></div><div style="line-height: 21px;"><span style="color: rgb(0, 128, 0);"><span style="font-family:SimSun;font-size:18px;">''' <span style="color: rgb(128, 128, 128);"></summary></span></span></span></div><div style="line-height: 21px;"><span style="color: rgb(0, 128, 0);"><span style="font-family:SimSun;font-size:18px;">''' <span style="color: rgb(128, 128, 128);"><remarks></remarks></span></span></span></div><div style="line-height: 21px;"><span style="color: rgb(0, 0, 255);"><span style="font-family:SimSun;font-size:18px;">Public<span style="color: windowtext;"> </span>Class<span style="color: windowtext;"> <span style="color: rgb(43, 145, 175);">LoginBLL</span></span></span></span></div><div style="line-height: 21px;"><span style="color: rgb(0, 0, 255);"><span style="color: windowtext;"><span style="color: rgb(43, 145, 175);"><span style="font-family:SimSun;font-size:18px;">
</span></span></span></span></div><div style="line-height: 21px;"></div><div style="line-height: 21px;"><span style="color: windowtext;"><span style="font-family:SimSun;font-size:18px;">    <span style="color: rgb(0, 128, 0);">'定义登陆函数,验证用户名和密码是否正确</span></span></span></div><div style="line-height: 21px;"><span style="font-family:SimSun;font-size:18px;"><span style="color: windowtext;">    <span style="color: rgb(0, 0, 255);">Function</span> </span><span style="line-height: 18px;">UserLoginBLL</span><span style="color: windowtext;">(<span style="color: rgb(0, 0, 255);">ByVal</span> user <span style="color: rgb(0, 0, 255);">As</span> Models.<span style="color: rgb(43, 145, 175);">UserEntity</span>) <span style="color: rgb(0, 0, 255);">As</span> Models.<span style="color: rgb(43, 145, 175);">UserEntity</span></span></span></div><div style="line-height: 21px;"><span style="color: windowtext;"><span style="color: rgb(43, 145, 175);"><span style="font-family:SimSun;font-size:18px;">
</span></span></span></div><div style="line-height: 21px;"></div><div style="line-height: 21px;"><span style="color: windowtext;"><span style="font-family:SimSun;font-size:18px;">        <span style="color: rgb(0, 128, 0);">'引用DAL层,声明必要类</span></span></span></div><div style="line-height: 21px;"><span style="color: windowtext;"><span style="font-family:SimSun;font-size:18px;">        <span style="color: rgb(0, 0, 255);">Dim</span> NewUserDAL <span style="color: rgb(0, 0, 255);">As</span> <span style="color: rgb(0, 0, 255);">New</span> DAL.<span style="color: rgb(43, 145, 175);">UserDAL</span></span></span></div><div style="line-height: 21px;"><span style="color: windowtext;"><span style="font-family:SimSun;font-size:18px;">        <span style="color: rgb(0, 128, 0);">'引用Models层,实例化UserEntity类</span></span></span></div><div style="line-height: 21px;"><span style="color: windowtext;"><span style="font-family:SimSun;font-size:18px;">        <span style="color: rgb(0, 0, 255);">Dim</span> users <span style="color: rgb(0, 0, 255);">As</span> Models.<span style="color: rgb(43, 145, 175);">UserEntity</span></span></span></div><div style="line-height: 21px;"><span style="color: windowtext;"><span style="color: rgb(43, 145, 175);"><span style="font-family:SimSun;font-size:18px;">
</span></span></span></div><div style="line-height: 21px;"><span style="font-family:SimSun;font-size:18px;"><span style="color:rgba(0, 0, 0, 0);">        </span><span data-wiz-span="data-wiz-span"><span style="color:#009300;">'引用DAL层</span></span></span></div><div style="line-height: 21px;"></div><div style="line-height: 21px;"><span style="font-family:SimSun;font-size:18px;"><span style="color: windowtext;">        users = </span><span style="line-height: 18px;">NewUserDAL</span><span style="color: windowtext;">.UserLoginDAl(user)</span></span></div><div style="line-height: 21px;"><span style="color: windowtext;"><span style="font-family:SimSun;font-size:18px;">        <span style="color: rgb(0, 0, 255);">Return</span> users</span></span></div><div style="line-height: 21px;"><span style="color: windowtext;"><span style="font-family:SimSun;font-size:18px;">
</span></span></div><div style="line-height: 21px;"></div><div style="line-height: 21px;"><span style="color: windowtext;"><span style="font-family:SimSun;font-size:18px;">    <span style="color: rgb(0, 0, 255);">End</span> <span style="color: rgb(0, 0, 255);">Function</span></span></span></div><div style="line-height: 21px;"><span style="color: windowtext;"><span style="color: rgb(0, 0, 255);"><span style="font-family:SimSun;font-size:18px;">
</span></span></span></div><div style="line-height: 21px;"></div><div style="line-height: 21px;"><span style="color: rgb(0, 0, 255);"><span style="font-family:SimSun;font-size:18px;">End<span style="color: windowtext;"> </span>Class</span></span></div>

DAL层

1、链接数据库

<span style="font-family:SimSun;font-size:18px;">''' <summary>
''' 创建连接数据库类DbConnectionString,方便之后各类连接数据库调用,对今后更新数据库提供方便
''' </summary>
''' <remarks></remarks>
Public Class DbConnectionString

    '定义连接数据库过程
    Public Shared Function connstring() As String
        connstring = "Server=192.168.24.101;Database=Library Charge System Personal Edition;User ID=sa;Password=muchen920227"
    End Function

End Class </span>

2、创建数据访问对象,访问数据表,返回符合条件的数据

<span style="font-family:SimSun;font-size:18px;">''SQL Server的.NET Framework数据提供程序描述了一个类集合,访问托管空间中的数据库,用于查询和更新数据库
Imports System.Data.SqlClient
''提供对表示ADO.NET结构的类的访问,通过ADO.NET可以生成一些组件,用于有效管理多个数据源的数据
Imports System.Data

''' <summary>
''' 创建数据访问对象User.DAL,访问表T_User,返回符合条件调用
''' </summary>
''' <remarks></remarks>
Public Class UserDAL

    '定义选择用户函数,按传入参数返回T_User表中的指定记录
    Function UserLoginDAL(ByVal user As Models.UserEntity) As Models.UserEntity

        ''创建连接对象
        Dim conn As New SqlConnection
        ''创建命令对象
        Dim cmd As New SqlCommand
        ''连接数据库
        conn = New SqlConnection(DbConnectionString.connstring())
        cmd.Connection = conn

        '根据实体中的用户名和密码选中记录内容
        ''定义SQL语句
        cmd.CommandText = "Select UserID,Password from T_User Where UserID=@UserID and PassWord=@Password"

        '添加命令参数
        cmd.Parameters.Add(New SqlParameter("@UserID", user.UserID))
        cmd.Parameters.Add(New SqlParameter("@Password", user.Password))
        cmd.CommandType = CommandType.Text
        '打开连接
        conn.Open()

        '执行调查,SqlDataReader提供一种从 SQL Server 数据库读取行的只进流的方式。若要创建 SqlDataReader,必须调用 SqlCommand 对象的 ExecuteReader 方法,而不要直接使用构造函数。
        Dim reader As SqlClient.SqlDataReader
        reader = cmd.ExecuteReader()
        Dim users As New Models.UserEntity
        '读取字段
        While (reader.Read())
            If users Is Nothing Then
                users = New Models.UserEntity
            End If
            users.UserID = reader.GetString(reader.GetOrdinal("UserID"))
            users.Password = reader.GetString(reader.GetOrdinal("Password"))
        End While

        conn.Close()
        ''返回查询结果
        Return users
    End Function

End Class</span>
<span style="font-family:SimSun;font-size:18px;">
</span>

Models层

Public Class UserEntity
    '声明属性
    Private _userID As String

    '用户ID
    Public Property UserID() As String
        Get
            Return _userID
        End Get
        Set(value As String)
            _userID = value
        End Set
    End Property  


总结

     敲三层登陆是一个很好的入门手段,它让我更形象、具体的理解三层的内涵和结构,至于机房收费的其他功能,就更像是换汤不换药,万变不离其宗啦!我的三层登陆还有许多不足,我只是将其核心敲出来了,没有太多的细节,这是我需要进一步完善的。。希望大牛们给我提出宝贵意见,交流让我们的世界更加宽广。。下一篇博客《【机房收费个人版】七层登陆》


【机房收费系统个人版】三层登陆

标签:vb.net   数据库   

原文地址:http://blog.csdn.net/xiada_you_comeon/article/details/45795089

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!