三层登陆实例
来源:互联网 发布:舒尔特软件 编辑:程序博客网 时间: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
- .NET三层登陆实例
- 三层架构登陆实例
- 三层登陆实例
- 三层登陆实例
- 【三层架构】登陆实例
- C#三层架构登陆实例
- C#三层架构登陆实例
- C#三层架构登陆实例
- 【VB.NET】三层登陆实例
- 三层架构+反射+配置文件登陆窗体实例
- 三层架构之系统登陆实例
- 剖析三层——登陆实例
- 用三层实现登陆的实例
- 三层实例
- 三层架构登陆
- .NET三层登陆
- 【三层】简单登陆
- 三层学习 之 登陆
- openstack通过qemu-guest-agent在物理机上操作虚拟机
- iOS中的变量以Ref结尾
- mysql root密码丢失
- js 语法
- 第2章 Windows 和 Eclipse的配置
- 三层登陆实例
- matlab图形句柄属性总结
- OC-NSArray和NSMutableArray
- 中位数和顺序统计学之求解顺序统计量
- 欢迎使用CSDN-markdown编辑器
- HDOJ 4135 Co-prime (容斥原理)
- Hadoop之WordCount计数器程序编写并打包
- Web工程中配置文件路径问题
- 学完《软件工程(C编码实践篇)》之后的总结