C# 三层架构之系统的登录验证与添加数据的实现

来源:互联网 发布:linux 内核参数配置 编辑:程序博客网 时间:2024/05/20 18:53

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

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

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 StudentMisDAL11 {12     public class LoginDAL13     {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             //返回ds45             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 StudentMisBLL11 {12     public class LoginBLL13     {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 StudentMisUI14 {15     public partial class LoginUI : Form16     {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             else44             {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             else10             {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 StudentMisUI15 {16     public partial class FrmAddClassesUI : Form17     {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             else47             {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 ClassesMod13     {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 StudentMisDAL12 {13     public class ClassesDAL14     {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 StudentMisBLL11 {12     public class ClassesBLL13     {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 StudentMisUI15 {16     public partial class FrmAddClassesUI : Form17     {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             else47             {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 StudentMisUI12 {13     public partial class FrmMainUI : Form14     {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 }

 

 

 

 
原创粉丝点击