zoukankan      html  css  js  c++  java
  • C# 三层架构之系统的登录验证与添加数据的实现

    利用三层架构体系,实现学生管理系统中用户的登录与添加班级信息的功能,一下代码为具体实现步骤的拆分过程:

    一、用户登录界面功能的实现

    1、在数据访问层(LoginDAL)进行对数据库中数据的访问操作

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 //引入命名空间
     7 using System.Data;
     8 using System.Data.SqlClient;
     9 
    10 namespace StudentMisDAL
    11 {
    12     public class LoginDAL
    13     {
    14         /// <summary>
    15         /// 创建返回值类型为DataSet的有参构造函数
    16         /// </summary>
    17         /// <param name="name"></param>
    18         /// <param name="pwd"></param>
    19         /// <returns></returns>
    20         public DataSet DoLogin(string name,string pwd)
    21         {
    22             string connstring = "server=.;database=StudentMISDB;uid=sa;pwd=123456";
    23             SqlConnection conn = new SqlConnection(connstring);
    24             //执行参数化的sql查询语句
    25             string sql = @"select * from Login where LoginName=@LoginName and pwd=@pwd";
    26             SqlCommand cmd = new SqlCommand(sql, conn);
    27             //定义参数
    28             SqlParameter[] parameter = new SqlParameter[]{
    29                 new SqlParameter("@LoginName",SqlDbType.VarChar,32),
    30                 new SqlParameter("@pwd",SqlDbType.VarChar,16)
    31             };
    32             //给参数赋值
    33             parameter[0].Value = name;
    34             parameter[1].Value = pwd;
    35             //将参数添加到命令对象中
    36             cmd.Parameters.AddRange(parameter);
    37             //创建适配器
    38             SqlDataAdapter da = new SqlDataAdapter(cmd);
    39             //创建缓冲区
    40             DataSet ds = new DataSet();
    41             conn.Open();
    42             da.Fill(ds);
    43             conn.Close();
    44             //返回ds
    45             return ds;
    46         }
    47     }
    48 }
    View Code

     2、在业务逻辑层(LoginBLL)对数据访问层中获取到的数据进行逻辑判断分析

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 //引入命名空间
     7 using System.Data;
     8 using StudentMisDAL;
     9 
    10 namespace StudentMisBLL
    11 {
    12     public class LoginBLL
    13     {
    14         /// <summary>
    15         /// 创建一个返回值类型为bool型的有参构造函数
    16         /// </summary>
    17         /// <param name="name"></param>
    18         /// <param name="pwd"></param>
    19         /// <returns></returns>
    20         public bool GetMisUI(string name,string pwd){
    21             //实例化类LoginDAL(数据访问层)
    22             LoginDAL ld = new LoginDAL();
    23             //调用方法并接收返回值
    24             DataSet ds=ld.DoLogin(name,pwd);
    25             //根据返回值:受影响的行数,来进行判断
    26             if (ds.Tables[0].Rows.Count<1)
    27             {
    28                 return false;
    29             }
    30             //防SQL注入
    31             //获取到数据库中对应的第一张表中的第一行(也可以传入下标值)的列名叫做LoginName和pwd的值
    32             string Name = ds.Tables[0].Rows[0]["LoginName"].ToString();
    33             string PWD = ds.Tables[0].Rows[0]["pwd"].ToString();
    34             if (name==Name&&pwd==PWD)
    35             {
    36                 return true;
    37             }
    38             return false;
    39         }
    40     }
    41 }
    View Code

    3、在表示层(LoginUI)对业务逻辑层(LoginBLL)中的分析与判断进行调用和可视化

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Threading.Tasks;
     9 using System.Windows.Forms;
    10 //引入命名空间
    11 using StudentMisBLL;
    12 
    13 namespace StudentMisUI
    14 {
    15     public partial class LoginUI : Form
    16     {
    17         public LoginUI()
    18         {
    19             InitializeComponent();
    20         }
    21         /// <summary>
    22         /// 为登录按钮添加点击事件
    23         /// </summary>
    24         /// <param name="sender"></param>
    25         /// <param name="e"></param>
    26         private void button1_Click(object sender, EventArgs e)
    27         {
    28             //获取到文本框中输入的值
    29             string name = this.txtLoginName.Text.Trim();
    30             string pwd = this.txtPwd.Text.Trim();
    31             //将LoginBLL类(逻辑层)进行实例化
    32             LoginBLL lb = new LoginBLL();
    33             //调用方法
    34             bool bo=lb.GetMisUI(name,pwd);
    35             if (bo==true)
    36             {
    37                 MessageBox.Show("登陆成功!");
    38                 //跳转至主窗体
    39                 FrmMainUI frmMain = new FrmMainUI();
    40                 frmMain.Show();
    41                 this.Hide();
    42             }
    43             else
    44             {
    45                 MessageBox.Show("登陆失败,登录名或密码错误!");
    46                 //清空输入框
    47                 this.txtLoginName.Text = "";
    48                 this.txtPwd.Text = "";
    49             }
    50         }
    51     }
    52 }
    View Code

    二、添加班级信息功能的实现

    1、在表示层(LoginUI)中进行操作:将LoginUI窗体进行隐藏,将主窗体(FrmMainUI)进行展示

    代码如下:

     1 if (bo==true)
     2             {
     3                 MessageBox.Show("登陆成功!");
     4                 //跳转至主窗体
     5                 FrmMainUI frmMain = new FrmMainUI();
     6                 frmMain.Show();
     7                 this.Hide();
     8             }
     9             else
    10             {
    11                 MessageBox.Show("登陆失败,登录名或密码错误!");
    12                 //清空输入框
    13                 this.txtLoginName.Text = "";
    14                 this.txtPwd.Text = "";
    15             }

    2、在表示层(StudentMisUI)创建主窗体(FrmMainUI)

    3、位子菜单的“添加班级”菜单创建一个窗体

    5、为“添加”按钮添加点击事件

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Threading.Tasks;
     9 using System.Windows.Forms;
    10 //引入命名空间
    11 using StudentMisModel;
    12 using StudentMisBLL;
    13 
    14 namespace StudentMisUI
    15 {
    16     public partial class FrmAddClassesUI : Form
    17     {
    18         public FrmAddClassesUI()
    19         {
    20             InitializeComponent();
    21         }
    22         /// <summary>
    23         /// 为‘添加班级’窗体中的‘添加按钮’添加点击事件
    24         /// </summary>
    25         /// <param name="sender"></param>
    26         /// <param name="e"></param>
    27         private void btnAdd_Click(object sender, EventArgs e)
    28         {
    29             //实例化‘添加班机’实体类
    30             ClassesMod classes = new ClassesMod();
    31             //给实体类赋值
    32             classes.ClassesNo = this.txtClassesNo.Text.Trim();
    33             classes.ByName = this.txtByName.Text.Trim();
    34             classes.Name = this.txtClassesName.Text.Trim();
    35             //实例化ClassesBLL类(逻辑层)
    36             ClassesBLL cb = new ClassesBLL();
    37             bool bo = cb.AddClassesInfor(classes);
    38             if (bo==true)
    39             {
    40                 MessageBox.Show("添加成功!");
    41                 //添加成功后清空输入框
    42                 this.txtClassesNo.Text = "";
    43                 this.txtByName.Text = "";
    44                 this.txtClassesName.Text = "";
    45             }
    46             else
    47             {
    48                 MessageBox.Show("添加失败!");
    49             }
    50         }
    51 
    52        
    53     }
    54 }
    View Code

    4、为该系统结构添加实体类(ClassesMod)(序号顺序写反了,但是没有写错)

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace StudentMisModel
     8 {
     9     /// <summary>
    10     /// 为‘添加班级’创建实体类
    11     /// </summary>
    12     public class ClassesMod
    13     {
    14         //创建班级ID属性
    15         public int ClassId { get; set; }  
    16         //创建班级名称属性
    17         public string Name { get; set; }
    18         //创建班级别名属性
    19         public string ByName { get; set; }
    20         //创建班级编号属性
    21         public string ClassesNo { get; set; }
    22     }
    23 }

    6、在数据访问层(ClassesDAL)进行数据访问

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 //引入命名空间
     7 using StudentMisModel;
     8 using System.Data;
     9 using System.Data.SqlClient;
    10 
    11 namespace StudentMisDAL
    12 {
    13     public class ClassesDAL
    14     {
    15         public int AddClasses(ClassesMod classes)
    16         {
    17             //建立连接数据库的字符串
    18             string connString = "server=.;database=StudentMISDB;uid=sa;pwd=123456";
    19             //创建连接对象
    20             SqlConnection conn = new SqlConnection(connString);
    21             //参数化的查询语句
    22             string sql = "insert into Classes Values(@Name,@ByName,@ClassesNo)";
    23             //执行查询命令
    24             SqlCommand cmd = new SqlCommand(sql,conn);
    25             //定义参数
    26             SqlParameter[] parameters = new SqlParameter[]{
    27                 new SqlParameter("@Name",SqlDbType.NVarChar,16),
    28                 new SqlParameter("@ByName",SqlDbType.NVarChar,32),
    29                 new SqlParameter("@ClassesNo",SqlDbType.VarChar,16)
    30             };
    31             //给参数赋值
    32             parameters[0].Value = classes.Name;
    33             parameters[1].Value = classes.ByName;
    34             parameters[2].Value = classes.ClassesNo;
    35             //将参数添加到命令对象
    36             cmd.Parameters.AddRange(parameters);
    37             conn.Open();
    38             //返回插入后影响的行数
    39             int i = cmd.ExecuteNonQuery();
    40             conn.Close();
    41             //返回行数
    42             return i;
    43         }
    44     }
    45 }
    View Code

    7、在业务逻辑层(ClassesBLL)进行逻辑判断分析

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 //引入命名空间
     7 using StudentMisDAL;
     8 using StudentMisModel;
     9 
    10 namespace StudentMisBLL
    11 {
    12     public class ClassesBLL
    13     {
    14         public bool AddClassesInfor(ClassesMod classes)
    15         {
    16             //实例化ClassesDAL类(数据访问层)
    17             ClassesDAL cd = new ClassesDAL();
    18             //调用类中的方法并接受
    19             int i = cd.AddClasses(classes);
    20             //返回一个布尔值
    21             return i > 0;      
    22         }
    23     }
    24 }
    View Code

    8、再次回到表示层(FrmAddClassesUI)。将业务逻辑层中的方法和分析进行调用,并在表示层进行可视化

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Threading.Tasks;
     9 using System.Windows.Forms;
    10 //引入命名空间
    11 using StudentMisModel;
    12 using StudentMisBLL;
    13 
    14 namespace StudentMisUI
    15 {
    16     public partial class FrmAddClassesUI : Form
    17     {
    18         public FrmAddClassesUI()
    19         {
    20             InitializeComponent();
    21         }
    22         /// <summary>
    23         /// 为‘添加班级’窗体中的‘添加按钮’添加点击事件
    24         /// </summary>
    25         /// <param name="sender"></param>
    26         /// <param name="e"></param>
    27         private void btnAdd_Click(object sender, EventArgs e)
    28         {
    29             //实例化‘添加班机’实体类
    30             ClassesMod classes = new ClassesMod();
    31             //给实体类赋值
    32             classes.ClassesNo = this.txtClassesNo.Text.Trim();
    33             classes.ByName = this.txtByName.Text.Trim();
    34             classes.Name = this.txtClassesName.Text.Trim();
    35             //实例化ClassesBLL类(逻辑层)
    36             ClassesBLL cb = new ClassesBLL();
    37             bool bo = cb.AddClassesInfor(classes);
    38             if (bo==true)
    39             {
    40                 MessageBox.Show("添加成功!");
    41                 //添加成功后清空输入框
    42                 this.txtClassesNo.Text = "";
    43                 this.txtByName.Text = "";
    44                 this.txtClassesName.Text = "";
    45             }
    46             else
    47             {
    48                 MessageBox.Show("添加失败!");
    49             }
    50         }
    51 
    52        
    53     }
    54 }
    View Code

    9、实现点击“添加”按钮后让子窗体(FrmAddClassesUI)在父窗体(FrmMainUI)中进行显示。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Threading.Tasks;
     9 using System.Windows.Forms;
    10 
    11 namespace StudentMisUI
    12 {
    13     public partial class FrmMainUI : Form
    14     {
    15         public FrmMainUI()
    16         {
    17             InitializeComponent();
    18         }
    19         /// <summary>
    20         /// 为‘添加班级’菜单添加点击事件
    21         /// 弹出‘添加班级’窗体
    22         /// </summary>
    23         /// <param name="sender"></param>
    24         /// <param name="e"></param>
    25         private void AddClassesToolStripMenuItem_Click(object sender, EventArgs e)
    26         {
    27             //实例化‘添加班级’类
    28             FrmAddClassesUI frmAL = new FrmAddClassesUI();
    29             //指定其父窗体
    30             frmAL.MdiParent = this;
    31             //显示子窗体
    32             frmAL.Show();
    33         }
    34     }
    35 }
     
  • 相关阅读:
    20145335 《信息安全系统设计基础》第十四周学习总结
    20145335 《信息安全系统设计基础》第十三周学习总结
    使用MarkdonPad2学习心得
    《信息安全系统设计基础》实验三实验报告
    很久没发博客了
    20145334《信息安全系统设计基础》课程总结
    20145334 《信息安全系统设计基础》第十四周学习总结
    20145334《信息安全系统设计基础》第十三周学习总结
    信息安全系统设计基础实验五实验报告
    《信息安全系统设计基础》实验一 开发环境的熟悉
  • 原文地址:https://www.cnblogs.com/pang951189/p/7487673.html
Copyright © 2011-2022 走看看