C#机房重构登录

当时开始重构的时候看了好多人的机房重构登录,几乎每个人都有一篇总结是关于机房重构登录的,我也纠结了好久,打算把自己的分享出来,如有不对,请纠正。
大部分人的登录都是有两个登录窗口,一般用户一个,操作员管理员一个。我做的就只有一个登录窗口,然后判断他们的权限再弹出来分别对应的功能菜单。

SQLHelper类

这里就不做详细介绍了

Entity层

namespace Entity
{
    
    
    public class UserInfo
    {
    
    
        public int UserName {
    
     get; set; }

        public string PWD {
    
     get; set; }

        public string Level {
    
     get; set; }

        public string UserID {
    
     get; set; }

    }
}

IDAL层

namespace IDAL
{
    
    
   public interface LoginIDAL
    {
    
    
        DataTable SelectUser(Entity.UserInfo userInfo);
    }
}

DAL层

public  class LoginDAL:IDAL.LoginIDAL
    {
    
    
        public DataTable SelectUser(Entity.UserInfo user)
        {
    
    
            //实例化数据操作类,进行数据查询,并获取返回值
            SQLHelper sqlHelper = new SQLHelper();
            SqlParameter[] sqlparams =
            {
    
    
                new SqlParameter("@userid",user.UserID ),
                new SqlParameter("@password",user.PWD)
            };

            //执行数据库的查询查询
            string sql = @"select * from User_Info where UserID=@userid and PWD=@password";
            //执行数据库操作
            DataTable table = sqlHelper.ExecuteQuery(sql, sqlparams, CommandType.Text);
            //返回表到BLL层
            return table;

        }
    }

Factory层

 public class LoginFactory
    {
    
    
        //引用配置文件DB对应的值DAL
        //ConfigurationManager类需要在引用中添加systems.Configuration
        string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
        public IDAL.LoginIDAL CreateUser()
        {
    
    
          //  string ClassName = StrDB + "." + "LoginDAL";
            string ClassName = StrDB + "." + "LoginDAL";
            //Assembly.Load()在给定程序集的情况下,加载该程序集;CreateInstance()方法:
            //使用默认构造函数创建指定类型的实例;
            //使用反射机制也就是将原来实例化的new DAL.LoginDAL这一步交给了外部容器去做,
            //现在需要更改实例化对象时,只需更改配置文件即可。使用更方便灵活
            return (IDAL.LoginIDAL)Assembly.Load(StrDB).CreateInstance(ClassName);
            //将DAL属性的路径改为UI/bin/Debug(否则出现错误)

        }
    }

BLL层

 public class LoginBLL
    {
    
    
        public bool UserBLL(Entity.UserInfo user)
        {
    
    
            //实例化一个工厂
            Factory.LoginFactory fact = new Factory.LoginFactory();
            //调用工厂方法创建接口
            IDAL.LoginIDAL idal = fact.CreateUser();
            //接受D层的返回值
            DataTable table = idal.SelectUser(user);
            //定义一个布尔变量
            bool flag;
            //返回数据表类型,如果行数=0,说明没有符合该账号密码的用户
            if (table.Rows.Count == 0)
            {
    
    
                flag = false;
            }
            else
            {
    
    
                flag = true;
            }
            //返回布尔信息
            return flag;

        }

        public DataTable LevelBLL(Entity .UserInfo userInfo)
        {
    
    
            //实例化工厂
            Factory.LoginFactory fact = new Factory.LoginFactory();

            IDAL.LoginIDAL idal = fact.CreateUser();//直接走登录时的工厂层和IDAL层的方法即可

            DataTable Level = idal.SelectUser(userInfo);//接收D层的返回值

            return Level;
        }
    }

Facade层

a
public class LoginFacade
    {
    
    
        //判断用户值是否存在,并返回一个布尔值
        public Boolean SelectUser(Entity.UserInfo user)
        {
    
    
            bool flag;
            BLL.LoginBLL userBLL = new BLL.LoginBLL();//实例化B层
            flag = userBLL.UserBLL(user);

            return flag;
        }

        public DataTable SelectLevel(Entity .UserInfo Level1)
        {
    
    
            BLL.LoginBLL LevelBLL = new BLL.LoginBLL();//实例化
            DataTable Level = LevelBLL.LevelBLL(Level1);

            return Level;
        }
    }

UI层

a
 public partial class FrmLogin : Form
    {
    
    
        public FrmLogin()
        {
    
    
            InitializeComponent();
        }

        private void btnLogin_Click(object sender, EventArgs e)
        
        
        {
    
    
              //判断账号和密码是否为空
            if (txtUserID .Text==""||txtPassWord.Text =="")
            {
    
    
                MessageBox.Show("账号和密码不能为空!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
    
    
                //实例化一个外观
                Facade.LoginFacade facade = new Facade.LoginFacade();
                //实例化一个用户
                Entity.UserInfo user = new Entity.UserInfo();
                //实例的用户接收信息
                user.UserID= Convert.ToString (txtUserID.Text);
                user.PWD = txtPassWord.Text;
                //调用外观方法
                Boolean flag = false;
                Facade.LoginFacade FLogin = new Facade.LoginFacade();//实例化外观
                flag = FLogin.SelectUser(user);//调用外观的方法,返回给user

                //判断是否登录成功
                if (flag !=false)
                {
    
    

                    //MessageBox.Show("登录成功");
                    this.Hide();//隐藏当前窗体
                    Until.HelpUntil.UserID = this.txtUserID.Text.Trim();  //将账号赋值至一个静态全局变量
                    this.DialogResult = System.Windows.Forms.DialogResult.OK;

                    DataTable Level = FLogin.SelectLevel(user);

                    if (Level.Rows[0][2].ToString().Trim()=="用户")
                    {
    
    
                        FrmMain frmstu = new FrmMain();//实例化窗体
                        frmstu.Show();//显示实例化的学生界面
                    }

                    else if (Level.Rows [0][2].ToString().Trim()=="操作员")
                    {
    
    
                        FrmOpert frmopert = new FrmOpert();
                        frmopert.Show();
                    }
                    else
                    {
    
    
                        FrmAdmin frmadmin = new FrmAdmin();//管理员
                        frmadmin.Show();
                    }


                }
                else
                {
    
    
                    MessageBox.Show("用户名或密码不正确");
                }
                      
            }
          //  DataTable Level = LoginFacade.SelectLevel(user);

        }

猜你喜欢

转载自blog.csdn.net/dingmengwei/article/details/109007481