简单三层实例

三层的学习很早就完成了 ,但是不知道该写点什么,但当敲了机房收费系统后,才知道自己当时为什么不知道写点什么.

对于什么是三层,为什么要使用三层,相信大家都有了不同程度的认识,在这里我就不累述了。其实也不是所有的程序都适合使用三层,一些简单的程序就可以不用三层。下面我就用三层来实现登录的小例子。例子虽然小主要是为了说明简单三层。

        学习三层的时候在网上查了一些资料,然后敲了例子,关于一个用户登录的.

首先看看我画的关于三层的类图与、包图和序图

类图:



包图:



时序图:


下面展示一下代码:

Model:

namespace Model
{
    public class User     //实体类user
    {
        private string username;  //user的用户名的属性
        public string Username
        {
            get { return username; }
            set { username = value; }
        }

        private string password;  //user类用户名密码的属性
        public string Password
        {
            get { return password; }
            set { password = value; }
        }
    }
}
U层:

using Model;
using BLL;
namespace UI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            //创建一个逻辑变量,初始值为false,用来接收BLogin的值
            bool result = false;  

            if (txtUserName.Text == "")
            {
                MessageBox.Show("用户名不能为空!");
                txtUserName.Focus();
                return;
            }
            if (txtPassWord.Text == "")  //如果密码为空,则提示
            {
                MessageBox.Show("密码不能为空!");
                txtPassWord.Focus();
                return;
            }
            User euser = new User();  //实例化一个user
            euser.Username = txtUserName.Text.Trim();  //为username赋值
            euser.Password = txtPassWord.Text.Trim(); //为password赋值

            LoginBLL blogin = new LoginBLL(); //实例化LoginBLL
            result = blogin.BLogin(euser);   //以euser为参数的实例化对象的值传递给result

            if (result == true)
            {
                MessageBox.Show("登陆成功!");
            }
            else
            {
                MessageBox.Show("登陆失败!");
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}


B层:

using DAL;
using Model;

namespace BLL
{
    public class LoginBLL
    {
        public bool BLogin(User QueryUser) //接收U层的euser参数
        {
            UserDAL duser = new UserDAL();//实例化一个DAL层的UserDAL
            User userlogin = new User();
            //实例化一个userlogin实体,他其实就是U层中对象euser承载的内容一样
            userlogin = duser.DLogin(QueryUser);//将从D层返回的UserloginDAL相比较
            if (userlogin.Password.Trim() == QueryUser.Password.Trim())
            //比较D层传回用户密码和userlogin的密码是否一致
            {
                return true;      //如果相等,BLogin返回true
            }
            else
            {
                return false;  //如果不等,BLogin返回false
            }           
        }

    }
}


D层

using Model;
using System.Data;
using System.Data.SqlClient;
namespace DAL
{
    //连接数据库
    public class UserDAL
    {
        //设置连接字符串
        static string conString = "data source=yingjie-PC;database=Charge;User ID=sa;password=123456";
        SqlConnection cnn = new System.Data.SqlClient.SqlConnection(conString);  
 
        public User DLogin(User QueryUser)
        {      //查询数据库
            string sqlString = "select * from T_User where UserName='" + QueryUser.Username  + "'";
            User userloginDAL = new User(); //创建用户登录对象,用来承载从数据库查询出的用户信息
            SqlCommand cmd=new SqlCommand (sqlString ); //创建SqlCommand类的对象cmd
            cmd.Connection = cnn;    //设置数据命令使用的连接
      
            cnn.Open() ;                                //打开连接
            SqlDataReader read;                    //定义SqlDataReader对象read
            //执行sqlcommand的executereader方法并将结果赋给read对象
            read = cmd.ExecuteReader();
            read.Read();                 //读取信息
          
            //将信息的第二个字段转换成string类型,并复制给userLoginDAL的用户名属性
            userloginDAL.Username = read[1].ToString();
            //将信息的第4个字段转换成string类型,并复制给userLoginDAL的密码属性
            userloginDAL.Password = read[3].ToString();
            return userloginDAL;  //返回useloginDAL
        }
    }
}

    小例子是完成了,其中不乏缺陷.只是将三层简化,更容易理解.我想说一些实体类,实体类在三层中有着重要的地位,它就如同人类的血液一样在各层之间游走.


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值