C#机房重构登录

这篇博客分享了一个在机房重构登录时的实践,采用单一登录窗口,通过判断用户权限来展示不同功能菜单。文章详细介绍了从SQLHelper到DAL、BLL、Factory和UI层的代码实现,涉及用户信息实体、接口设计、数据库操作以及工厂模式的应用,展示了如何通过配置文件动态实例化DAL层对象。
部署运行你感兴趣的模型镜像

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

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);

        }

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

【Koopman】遍历论、动态模态分解和库普曼算子谱特性的计算研究(Matlab代码实现)内容概要:本文围绕【Koopman】遍历论、动态模态分解和库普曼算子谱特性的计算研究展开,重点介绍基于Matlab的代码实现方法。文章系统阐述了遍历理论的基本概念、动态模态分解(DMD)的数学原理及其与库普曼算子谱特性之间的内在联系,展示了如何通过数值计算手段分析非线性动力系统的演化行为。文中提供了完整的Matlab代码示例,涵盖数据驱动的模态分解、谱分析及可视化过程,帮助读者理解并复现相关算法。同时,文档还列举了多个相关的科研方向和技术应用场景,体现出该方法在复杂系统建模与分析中的广泛适用性。; 适合人群:具备一定动力系统、线性代数与数值分析基础,熟悉Matlab编程,从事控制理论、流体力学、信号处理或数据驱动建模等领域研究的研究生、博士生及科研人员。; 使用场景及目标:①深入理解库普曼算子理论及其在非线性系统分析中的应用;②掌握动态模态分解(DMD)算法的实现与优化;③应用于流体动力学、气候建模、生物系统、电力系统等领域的时空模态提取与预测;④支撑高水平论文复现与科研项目开发。; 阅读建议:建议读者结合Matlab代码逐段调试运行,对照理论推导加深理解;推荐参考文中提及的相关研究方向拓展应用场景;鼓励在实际数据上验证算法性能,并尝试改进与扩展算法功能。
评论 20
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值