七层登录上机

举报
Laura_张 发表于 2022/08/27 01:09:34 2022/08/27
【摘要】 文章目录 【前言】 【正文】 UI层IBLL层BLL层IDAL层DAL层SqlHelperFactory层七层登录的包图 【前言】 经过人事系统的编写,对于七层登录有了...


【前言】

经过人事系统的编写,对于七层登录有了更多的了解,下面就简单记录一下。

【正文】

UI层

 private void btnOK_Click(object sender, EventArgs e)
        {
            //判断账号和密码是否为空
            if (txtCardNo.Text == "" || txtPassword.Text == "")
            {
                MessageBox.Show("账号或密码不能为空!", "温馨提示",
                MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                try
                {
                    //实例化一个用户
                    Entity.UserInfo user = new Entity.UserInfo();

                    //实例的用户接受信息
                    user.UserId = txtCardNo.Text.Trim();
                    user.PassWord = txtPassword.Text.Trim();

                    //调用工厂方法来实例化B层的接口
                    IBLL.LoginIBLL loginibll = AbstractFactory.Factory.CreateConcreteClass(Encapsulation.BLL, Encapsulation.LoginBLL);
                    //调用B层接口中的方法
                    loginibll.SelectUser(user.UserId,user.PassWord);

                    //将登录信息添加到正在上机表
                    //实例化
                    Entity.OnLineInfo onlineInfo = new Entity.OnLineInfo();
                    onlineInfo.UserId = txtCardNo.Text.Trim();
                    onlineInfo.PassWord = txtPassword.Text.Trim();
                    //调用B层
                    IBLL.IOnLineBLL onlineIBLL = AbstractFactory.Factory.CreateConcreteClass(Encapsulation.BLL, Encapsulation.OnLineBLL);
                    onlineIBLL.InsertOnLine(onlineInfo.UserId,onlineInfo.PassWord);

                    frmMain frmmain = new frmMain();
                    frmmain.Text = onlineInfo.UserId;
                    frmmain.Show();
                    this.Hide();
                  
                } 
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);    //抓取B层中的判断异常进行提示
                    txtCardNo.Text = "";
                    txtPassword.Text = "";//清空文本框重新输入
                    this.Show();
                }
            }
        }

IBLL层

/// <summary>
///根据账号和密码来查询用户表
///登录功能
/// </summary>
/// <param name="userId"></param>
/// <param name="passWord"></param>
/// <returns></returns>
List<dynamic> SelectUser(string userId, string passWord);

/// <summary>
/// 插入正在上机表
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
List<dynamic> InsertOnLine(string userId, string passWord);

BLL层

/// <summary>
/// 根据账号和密码来查询用户表
/// 登录功能
/// </summary>
/// <param name="userId"></param>
/// <param name="passWord"></param>
/// <returns></returns>
public List<dynamic> SelectUser(string userId, string passWord)
{
    //实例化一个实体类
    Entity.UserInfo user = new Entity.UserInfo();
    //传参数
    user.UserId = userId;
    user.PassWord = passWord;

    //调用工厂方法创建接口
    IDAL.LoginIDAL loginidal = AbstractFactory.Factory.CreateConcreteClass(Encapsulation.DAL, Encapsulation.LoginDAL);
    //接受D层的返回值
    List<dynamic> list = loginidal.SelectUser(userId, passWord);

    if (list.Count > 0)//返回数据表类型,如果行数=0;说明没有符合该账号密码的用户
    {
        if (list[0].State == Encapsulation.Zaizhi)
        {
            return list;
        }
        else
        {
            throw new Exception("此用户已经离职或者退休");
        }
    }
    else
    {
        throw new Exception("账号或密码不正确,请重新输入");
    }
}
	//将登录账号存储进入正在上机表
    public List<dynamic> InsertOnLine(string userId, string passWord)
    {
        //实例化
        Entity.OnLineInfo online = new Entity.OnLineInfo();
        //传参数
        online.UserId = userId;
        online.PassWord = passWord;
        //调用工厂方法创建接口
        IDAL.IOnLineDAL onlineIDAL = AbstractFactory.Factory.CreateConcreteClass(Encapsulation.DAL, Encapsulation.OnLineDAL);

        List<dynamic> list = onlineIDAL.InsertOnLine(userId, passWord);

        if (list.Count > 0)//返回数据表类型
        {
            throw new Exception("插入正在上机表失败");

        }
        else
        {
            return list;
        }
	}

IDAL层

//接口函数,判断要登录的用户名和密码是否在数据表中存在
List<dynamic> SelectUser(string userId, string passWord);

  	/// <summary>
    /// 将登录账号存储进入正在上机表
    /// </summary>
    /// <param name="userId"></param>
    /// <returns></returns>
    List<dynamic> InsertOnLine(string userId, string passWord);

DAL层

	/// <summary>
    /// 根据账号和密码来查询用户表
    /// 登录功能
    /// </summary>
    /// <param name="userId"></param>
    /// <param name="passWord"></param>
    /// <returns></returns>
    public List<dynamic> SelectUser(string userId, string passWord)
    {
        //实例化操作类,进行数据查询,并获取返回值
        SqlHelper sqlHelper = new SqlHelper();

        //执行数据库的查询
        string sql = "SELECT * FROM T_User WHERE userId=@userId AND PassWord=@passWord";//构造语句,匹配数据库表
        SqlParameter[] sqlParameter =
        {
                new SqlParameter("@userId",userId),
                new SqlParameter ("@passWord",passWord)
            };
        DataTable dt = SqlHelper.GetDataTable(sql, sqlParameter);
        List<dynamic> list = new List<dynamic>();
        foreach (DataRow row in dt.Rows) //遍历读取dt里面的数据,并添加到list集合中
        {
            list.Add(new UserInfo()
            {
                UserId = Convert.ToString(row["userId"]),
                UserName = Convert.ToString(row["userName"]),
                PassWord = Convert.ToString(row["passWord"]),
                State = Convert.ToString(row["state"])

            });
        }

        //返回表到到BLL层
        return list;
	}
	/// <summary>
    /// 添加登录账号到正在上机表
    /// </summary>
    /// <param name="userName"></param>
    /// <returns></returns>
    public List<dynamic> InsertOnLine(string userId, string passWord)
    {
        OnLineInfo onlineInfo = new OnLineInfo();//实例化正在上机的实体类
                                                 //执行数据库的查询
        string sql = "insert  into T_OnLine(userId,passWord)values (@userId,@passWord)";//构造语句,匹配数据库表
        SqlParameter[] sqlParameter =
         {
                new SqlParameter("@userId",userId),
                new SqlParameter("@passWord",passWord)
            };
        DataTable dt = SqlHelper.GetDataTable(sql, sqlParameter);
        List<dynamic> list = new List<dynamic>();
        foreach (DataRow row in dt.Rows) //遍历读取dt里面的数据,并添加到list集合中
        {
            list.Add(new OnLineInfo()
            {
                UserId = Convert.ToString(row["userId"]),
                UserName = Convert.ToString(row["userName"]),
                PassWord = Convert.ToString(row["passWord"])
            });
        }

        //返回表到到BLL层
        return list;

    }

SqlHelper

   /// <summary>
    /// 数据操作类
    /// </summary>
    public class SqlHelper
    {

        private static readonly string connStr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;

        //1.ExecuteNonQuery(); ://执行命令的方法,insert update delete
        //它的返回值类型为int型。多用于执行增加,删除,修改数据,返回受影响的行数。当select操作时,返回-1。
        //ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,
        //其方法返回值意义:对于 Update, Insert, Delete 语句 执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,
        //params是关键字:是可变参数的意思,目的是省略手动构造数组的过程,直接指定对象编译器会帮助我们构造数组,并将对象加入数组中传递过来
        public static int ExcuteNonQuery(string sql, params SqlParameter[] paras)
        {
            using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象
            {
                SqlCommand cmd = new SqlCommand(sql, conn);  //创建Command链接
                cmd.Parameters.AddRange(paras);//添加参数
                conn.Open();//打开连接
                int n = cmd.ExecuteNonQuery();//执行命令兵返回受影响的行数
                cmd.Parameters.Clear();
                return n;
            }
        }

        //ExecuteScaler(); 获取首行首列的方法
        //它的返回值类型多位int类型。它返回的多为执行select查询。得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。
        //ExecuteScalar()方法也用来执行SQL语句,但是ExecuteScalar()执行SQL语句后的返回值与ExecuteNonQuery()并不相同,
        //ExecuteScalar()方法的返回值的数据类型是Object类型。
        //如果执行的SQL语句是一个查询语句(SELECT),则返回结果是查询后的第一行的第一列,
        //如果执行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型转换来显示,

        public static Object ExecuteScalar(string sql, params SqlParameter[] paras)
        {
            using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象
            {
                SqlCommand cmd = new SqlCommand(sql, conn);//创建Command连接对象
                cmd.Parameters.AddRange(paras);//添加参数
                conn.Open();
                object o = cmd.ExecuteScalar();//执行命令,获取查询结构中的首行首列的值
                cmd.Parameters.Clear();
                return o;
            }
        }

        //获取结果集
        public static DataTable GetDataTable(string sql, params SqlParameter[] paras)
        {
            using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象
            {
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);//创建适配器对象
                DataTable dt = new DataTable(); //构造数据表用于接收查询结果
                adapter.SelectCommand.Parameters.AddRange(paras);//添加参数
                adapter.Fill(dt);//执行结果,fill方法内部自动打开链接,不需要conn.Open();
                adapter.SelectCommand.Parameters.Clear();//清空集合
                return dt;//返回结果集
            }
        }
    }

Factory层

   	/// <summary>
    /// 抽象工厂
    /// </summary>
    /// <param name="layer"></param>
    /// <param name="T_table"></param>
    /// <returns></returns>
    public static dynamic CreateConcreteClass(string layer, string T_table)
    {
        //读取配置文件section配置节中的内容。
        string StrUB = ConfigurationManager.AppSettings[layer];
        string className = StrUB + '.' + ConfigurationManager.AppSettings[T_table];
        //实例化具体的类,并传出
        return (dynamic)Assembly.Load(StrUB).CreateInstance(className);
    }

七层登录的包图

在这里插入图片描述

文章来源: blog.csdn.net,作者:张艳伟_Laura,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/Laura__zhang/article/details/119903989

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。