三层登陆实例

来源:互联网 发布:舒尔特软件 编辑:程序博客网 时间:2024/06/05 16:01

一.概述  

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

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

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 PropertyEnd 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 ClassPublic 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 PropertyEnd 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 FunctionEnd 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 SubEnd Class</span>


0 0