三层登陆实例

三层登陆实例三层登陆实例

大家好,又见面了,我是你们的朋友全栈君。

一.概述  

    学完了三层,便开始利用三层的思想开始重构,代码并不重要,核心是需要了解三层之间的调用关系,信息是如何在三层之间传输的。

用三层来实现登录,主要思路是:

1.相应的创建LoginUI Windows窗体应用程序,LoginBLL、LoginDAL类库。

2.为了实现信息、数据的传输,需要在相应的类库中声明具有可以实现相应功能的类。

3.在类中又有实现对应功能的方法。

简单的说就是各层中的类下面的方法的调用。

三层登陆实例

从上图可以看出

1. 三层都需要引用实体层,在各层之间传递实体,根据需要返回相应的信息,可以是实体,可以是布尔值,还可以是其他信息。

2. 实线箭头的方向就代表了信息的传递

   首先通过U层的一些事件调用B层的LoginManager类中的UserLogin方法

   其次B层中的UserLogin方法调用D层下的LoginDAO类中的SelectUser方法。

   最后所需要的信息原路返回。

   上面这张图只是个人的理解思路。其实只要画出了顺序图,就已经可以根据顺序图写出代码了。

登录的顺序图:

三层登陆实例

二.实例

C#版

实体层

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace Login.Model
{
     public class userInfo       //userInfo类中封装了一些属性,用来在三层之间传数据
    {
        public int ID { get; set; }            //get读,set写
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Email{get ;set ;}
    }
}  </span>

D层

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace Login.DAL
{
    class DbUtil              //连接数据库的类
    {
        public static string ConnString = @"Server=Jemis-dell;Database=Login;User ID = sa;Password=1";  //链接数据库的字符串
    }

    public class UserDAO      //声明UserDAOI类
    {
        public Login .Model .userInfo  SelectUser(string userName, string password)   //声明引用了Model层的userInfo类的SelectUser方法
        {
            using (SqlConnection conn=new SqlConnection (DbUtil .ConnString))         //引用连接数据库的字符串,连接数据库
            {
                SqlCommand cmd=conn .CreateCommand ();                                //定义命令语句
                cmd .CommandText =@"SELECT ID,UserName,Password,Email
                                    FROM USERS WHERE UserName=@UserName AND Password=@Password";
                cmd .CommandType =CommandType .Text ;
                cmd .Parameters .Add (new SqlParameter ("@UserName",userName ));      //为参数@UserName赋值
                cmd .Parameters .Add (new SqlParameter ("@Password",password ));

                conn.Open();       //打开数据库

                SqlDataReader reader=cmd .ExecuteReader ();     //读取数据

                Login .Model .userInfo user=null ;
                while (reader .Read ())
                {
                    if (user ==null )
                    {
                        user =new Login .Model .userInfo ();
                    }
                    user .ID =reader .GetInt32 (0);             //给实体层的属性写入数据
                    user .UserName =reader .GetString (1);
                    user .Password =reader .GetString (2);
                    if (!reader .IsDBNull (3))
                    {
                        user .Email =reader .GetString (3);
                    }
                }

                return user ;            //将实体user返回到B层

            }

        }
    }
}</span>

B层

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace Login.BLL
{
    public class LoginManager
    {
        public Login .Model .userInfo  UserLogin(string userName,string password)
        {
            Login .DAL .UserDAO uDao=new Login .DAL .UserDAO ();                //引用D层的UserDAO类
            Login .Model.userInfo user=uDao.SelectUser (userName ,password );   //引用实体层的SelectUser方法
            
            if ( user != null )
            {
                return user ;                  //将实体user返回到U层
            }
            else 
            {
                throw new Exception ("登录失败。");
            }
        }
    }
}</span>

U层

<span style="font-family:KaiTi_GB2312;font-size:18px;">private void btnLogin_Click(object sender, EventArgs e)
{
      string userName = txtUserName.Text.Trim();    //向实体层的属性中写入数据
      string password = txtPassword.Text;
      Login.BLL.LoginManager agr = new Login.BLL.LoginManager();            //引用
      Login.Model.userInfo user = agr.UserLogin(userName, password);

      MessageBox.Show("登录用户:" + user.UserName);

}</span>


.NET 版

实体层

<span style="font-family:KaiTi_GB2312;font-size:18px;">Public Class userInfo
    '定义实体类userInfo
    Private _userID As String
    '声明数据库中字段信息
    Public Property UserID As String
        '读数据
        Get
            Return _userID
        End Get
        '写数据
        Set(value As String)
            _userID = value
        End Set
    End Property

    Private _userPassword As String

    Public Property UserPassword As String
        Get
            Return _userPassword
        End Get
        Set(value As String)
            _userPassword = value
        End Set
    End Property
End Class</span>

D层

<span style="font-family:KaiTi_GB2312;font-size:18px;">'定义连接数据库类
Public Class DbUtil
    '定义数据库连接字符串
    Public connstring As String = "Server=Jemis-dell;Database=myCharge;User ID = sa;Password=1"
End Class
Public Class userInfo
    '定义实体类userInfo
    Private _userID As String
    '声明数据库中字段信息
    Public Property UserID As String
        '读数据
        Get
            Return _userID
        End Get
        '写数据
        Set(value As String)
            _userID = value
        End Set
    End Property

    Private _userPassword As String

    Public Property UserPassword As String
        Get
            Return _userPassword
        End Get
        Set(value As String)
            _userPassword = value
        End Set
    End Property
End Class</span>

B层

<span style="font-family:KaiTi_GB2312;font-size:18px;">Public Class LoginManager

    Public Function UserLogin(ByVal user As userInfo) As Boolean
        Dim mUser As New userInfo
        Dim dUser As New UserDAO

        '实例化userInfo
        Dim loginUser As New userInfo

        '调用D层的SelectUser方法
        loginUser = dUser.SelectUser(user)

        Dim flag As Boolean
        '判断数据库中是否存在登录用户
        If (loginUser Is Nothing) Then
            flag = False
        Else
            flag = True
        End If

        '将flag返回到U层
        Return flag

    End Function
End Class</span>

U层

<span style="font-family:KaiTi_GB2312;font-size:18px;">Public Class frmLogin

    Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
        Dim user As New userInfo
        Dim bUser As New LoginManager
        Dim flag As Boolean

        If txtUserID.Text = "" Then
            MsgBox("用户名不能为空")
            txtUserID.Focus()
            Return
        End If

        If txtPWD.Text = "" Then
            MsgBox("密码不能为空")
            txtPWD.Focus()
            Return
        End If
        ’向实体层写入数据
        user.UserID = txtUserID.Text.Trim()
        user.UserPassword = txtPWD.Text()

        flag = bUser.UserLogin(user)


        If (flag = True) Then
            frmMain.Show()
            Me.Hide()
            Exit Sub
        Else
            MessageBox.Show("登录失败")
        End If
    End Sub
End Class</span>



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105768.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Thinkpad x201i 拆机清理风扇「建议收藏」

    Thinkpad x201i 拆机清理风扇「建议收藏」Thinkpadx201i拆机清理风扇教程笔记本散热风扇使用时间长了就累积很多灰尘,堵塞出风口,从而大幅降低散热效果。因此有必要对其清理。要彻底清理风扇灰尘,需要拆机方可。首先要把笔记本的电池取下。电池取下后,我们就可以开始拆卸内存了,首先要把内存外壳拆下。拆下内存盖后,我们只要把两边的卡扣松动,轻轻一拔即可把内存取下。这款笔记本的硬盘仓很隐蔽,不过在D面还是有明显的图标提示,拧下螺丝和卡扣,即可看到硬盘。硬盘盖拆下来之后,只需用力的拔出黑带即可把硬盘取下。…

  • URL Escape Codes 方便日后查询

    URL Escape Codes 方便日后查询

  • intellij idea2021激活码(JetBrains全家桶)[通俗易懂]

    (intellij idea2021激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlBCEBXQ3A4G-eyJsa…

  • Faster R-CNN算法

    Faster R-CNN算法  FasterR-CNN算法是作者RossGirshick对FastR-CNN算法的一种改进。FastR-CNN在速度和精度上都有了不错的结果,但仍有一些不足之处。FasterR-CNN算法同样使用VGG-16网络结构,检测速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在ILSVRC和COCO2015竞赛中获得多个项目的第一名。在FasterR-CNN中提出了区域生成网络(RegionProposalNetwork,RPN),将候选区域的提取和FastR-C

  • 用ajax写注册页面_jquery的ajax请求写法

    用ajax写注册页面_jquery的ajax请求写法<!DOCTYPEhtml><htmllang=”zh-CN”xmlns:th=”http://www.thymeleaf.org”><head><metacharset=”utf-8″/><title>XXXX</title><metaname=”viewport”co…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号