机房重构(C#)--七层登录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aimin_com/article/details/82314685

前言

如果你想重命名类,最好的办法就是删除后重新建立。 接下来是按照计算机需要走的过程。

各层引用关系

这里写图片描述

各层的巡走过程

实体层:所有的定义需要放在这里,并且设定的传参也需要放在这里。

public class UserInfo
    {
        //分别定义用户:ID字段、用户名字段、密码字段、等级字段、状态字段。
        public string  UserID { set; get; }
        public string UserName { get; set; }
        public string PassWord { set; get; }
        public string Level { set; get; }
        public string Head { set; get; }
    }

D层:主要查询数据库操作,我认为命名:哪层+操作+数据库+条件(最好参照命名规则)

using System.Configuration;
using System.Data;
using System.Data.SqlClient;//操作SQL server数据库需要引用

/// <summary>
        /// 查询: 登录
        /// </summary>
        /// <param name="user"></param>
        /// <returns> 
        /// 返回DataTable
        /// </returns>
        public DataTable selectUser(Entity.UserInfo user)
        {
            SQLHelper sqlHelperLogin = new SQLHelper(); //实例化一个SQLHelper


            //定义需要传递的参数
            SqlParameter[] sqlParamsLogin = { 
            new SqlParameter("@UserID", user.UserID), 
            new SqlParameter("@PassWord", user.PassWord) };   //@后面是实体名        

            string sqlLogin = @"SELECT * FROM UserInfo WHERE UserID=@UserID AND PassWord=@PassWord";


            DataTable table = sqlHelperLogin.ExecuteQuery(sqlLogin, sqlParamsLogin, CommandType.Text);
            return table;
        }

I层(接口层):用于调取D层,命名需要和D层的方法命名保持一致。

using System.Data;

 //仅用于查登陆
        DataTable selectUser(Entity.UserInfo UserInfo); //用于查询

Factory(工厂层),一开始写即可,并且一个类中只写一个即可,让他们直接调用。详情请参照三种书写

using System.Configuration;
using System.Reflection;

 //接收来自配置文件的数据    
        string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];

        public IDAL.IUser CreateUser()
        {
            //DAL层的类名    
            string ClassName = StrDB + "." + "SqlServerUser";
            //反射加工厂的应用     
            return (IDAL.IUser)Assembly.Load(StrDB).CreateInstance(ClassName);
        }

B层:逻辑转换,所有的int、Boolean、DataTable、list等的转换需要在这里。

using DAL;
using System.Data;
using Entity;

 public DataTable  Userbll(Entity.UserInfo user)
        {
            Factory.UserFactory fact = new Factory.UserFactory();//实例化工厂
            IDAL.IUser select = fact.CreateUser();       //调用工厂方法创建接口  
            DataTable table =select.selectUser(user);    //接收IDAL层的返回值

            return table  ;
        }

Facade(外观层):接收来自B层的值,为子系统中的一组接口提供一个一致的界面。

using BLL;
using System.Data;

/// <summary>
        /// 仅用于登录判断是否正确,返回是否
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public DataTable  SelectUser(Entity.UserInfo user)
        {
            //实例化B层
            UserBLL userBLL = new UserBLL(); //实例化B层
            DataTable flag = userBLL.Userbll(user);      
            return flag; //返回
        }

U层:主要的逻辑操作:

 private void lblLogin_Click(object sender, EventArgs e)
        {

            if (txtUserID.Text.Trim()=="")
            {
                MessageBox.Show("请输入用户名!", "HERRY提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (txtPWD.Text=="")
            {
                MessageBox.Show("用户名或密码错误,请重新输入!", "HENRRY提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                return;
            }


                //实例化登录外观将参数传递给外观层               
                Entity.UserInfo user = new Entity.UserInfo();
                user.UserID = txtUserID.Text.Trim(); 
                user.PassWord = txtPWD.Text;

                //实例化外观
                Facade.UserFacade FLogin = new Facade.UserFacade();                                DataTable level = FLogin.SelectUser(user);

                if (level.Rows .Count !=0 )
                {

                    this.Hide(); //隐藏当前窗体                    
                    this.DialogResult = System.Windows.Forms.DialogResult.OK;


                    if (level.Rows[0][3].ToString().Trim() == "学生") //3表示第四列
                    {

                       //实例化窗体
                        frmStu frmStudent = new frmStu();
                       //显示实例化的学生界面
                        frmStudent.Show();

                        }

                    }
                    else if (level.Rows[0][3].ToString().Trim()=="操作员")
                    {
                      frmOpert frmopert = new frmOpert();
                      frmopert.Show();
                    }

                    else 
                    {
                       frmAdmin frmadmin = new frmAdmin();
                       frmadmin.Show(); 
                    }

                }
                else
                {
                    MessageBox.Show("密码或者用户名错误");
                    txtPWD.Text = "";
                    this.txtPWD.Focus();//光标位置。                   
                }             
        }

        private void lblCancel_Click(object sender, EventArgs e)
        {
          System.Environment.Exit(0); //彻底退出,不管什么线程都会强制退出,非常干净。
        }   

后记

这个是按照数据库建立的类,并且所有的上机都放在了User表里面,从此没有Card表,谢谢观看哦。

猜你喜欢

转载自blog.csdn.net/aimin_com/article/details/82314685
今日推荐