您的位置:首页 > 运维架构 > 网站架构

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

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

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

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 SqlDat
15dbb
aAdapter(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 }


 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: