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 [email protected] and [email protected]";
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 }

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 }

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 }

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

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 }

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 }

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 }

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 }

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 }
时间: 2024-10-24 23:05:40

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

jmeter登录后循环添加数据

这篇博客时的背景: 做测试环境的配置初始化操作,系统不支持导入功能,只能通过接口去添加数据,测试环境添加的规则比较多一条一条的手动添加  嫌麻烦 操作步骤 1.准备规则数据(使用的cvs文件) 2.通过浏览器抓取添加规则请求数据包,得到请求接口 3.jmeter中线程下添加 循环控制器(循环次数为cvs文件中数据条数) 4.循环控制器 下添加 CSV Data Set Config 5.设置 CSV Data Set Config:Filename设置为cvs文件绝对路径,变量设置(在cvs文件

登录验证后端添加过滤器

public class Filter implements javax.servlet.Filter {?? public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {?????? //强制转换???? HttpServletRequest request = (HttpServletRequest) req;??

JavaWeb体系的MVC与三层架构有什么区别

首先,声明一下,三层是三层,MVC是MVC,这俩是毫无关系的. 三层是从整个应用程序架构的角度来分的三层(如果程序需要,还可以分多层). 三层架构通常包括表示层,业务逻辑层以及数据访问层.虽然三层架构将系统在逻辑上分成了三层,但是它并不是物理上的分层.也就是说,对不同层的代码而言,经历编译.打包.部署后,所有的代码最终还是运行在同一个进程中. MVC是一种设计模式,一种思想,是存在于应用程序(B/S结构:又称之浏览器/服务器)的视图层划分出来的不同功能的几个模块. MVC主要是为了解决应用程序用

温故而知新---浅析三层架构(一个超简单的系统登录三层架构实例)

刚开始接触三层架构是在快两个月前,那时候找了好多例子感觉也都看不怎么懂,今天闲着没事,就把以前学的东西翻出来,算是温习温习.由于本人也接触时间不长,所以以下言论有不正确之处,多多海涵. 首先我们先要知道什么是三层架构,个人理解的三层架构就是将业务分为界面层(UI层),业务逻辑层(BLL层)和数据访问层(DAL层),各层之间各司其职,层层传递信息. 优点是可以达到高内聚,低耦合,修改起来比较容易:缺点是会降低系统性能. UI层:就是面向用户的一层,直接与用户交互. BLL层:用于实现业务逻辑,在U

ASP.NET典型三层架构企业级医药行业ERP系统实战

我这里有一套课程和大家分享,我的qq是2059055336,   课程说明: 国内首部完整讲述ERP系统架构.业务逻辑.开发的项目实战课程.考虑到本系统的庞大及复杂性.本课程原价购买学员每人赠送一个U盾设备,U盾可插在任意电脑上进行学习,使用方便,学习灵活!可永久学习! 项目由来: 此项目是讲师亲自参与构架及参与开发的大型ERP项目,此项目已被太阳石药业,九芝堂药业,拜欧药业等多家大中型企业使用,为其创造巨大经济价值.整个项目由10多个研发人员全程打造,项目总价值接近3000万,给企业创造的价值

新闻公布系统 (Asp.net 三层架构 )

2012年度课程设计---新闻公布系统(小结) -----Presented By [email protected] Tips:因本课程设计大部分代码皆有本人短时间仓促码成,界面恶心,代码丑陋.唯一长处便是:        所有代码都已贴上,而且所有都已凝视.另外与Asp.net教程结合恰当,通俗易懂,easy上手. 需求 新闻公布系统需求III NewsPublish(简称NP) 功能说明 本项目用于对新闻公布进行管理. 1.查看新闻 全部新闻按时间按降序排列: 用户登录后在自己主页能够查看

三层架构在登录窗体中的实现

    刚刚学习了三层的内容,初接触三层,一头的雾水,原来在一个界面上自己还玩不转呢,现在又加了两层,于是自己看过了三层的视频之后就有种置身迷宫中的感觉,身陷重重围墙之中足足转了一周多的时间(当然有效时间没有那么多喽O(∩_∩)O~),今天,自己总算是找到了点感觉,现总结如下,望大家多多指教! 从不同的角度区划分,三层有不同的诠释.从物理角度区划分,三层包括显示层.业务层.数据层:从逻辑角度划分,三层包括用户层.业务逻辑层.数据访问层.接下来我将从逻辑角度给大家做一个详细的介绍: **用户层(U

两天完成一个小型工程报价系统(三层架构)

花了两天,整理了一下三层架构,顺便练了一个小型三层架构——工程报价系统. 功能很简单,完成基本的增删改查 搭建项目三层结构 界面的设计以及美化 分层代码的设计与实现 模型层:由于表设计时存在主外键关系,故把表映射成对象时添加一个外键对象来保存外键那张表的相关数据. // 外键实体 private Product _product; private Project _project; public Project _Project { get { return _project; } set {

传参数与传实体、返回实体与返表——三层架构登录实例

在用三层做窗体登录实例的时候,暂时没有加设计模式和反射配置,与以前做的<机房收费系统>相比,除了引入分层的理念外,最大的改观就是数据的传递由传参升级成了传实体. 先看下用传参数方式的登录按钮click事件 通过参数传递乍看起来清晰易读,但是这样的程序耦合度太高,会为以后的数据变动和维护埋下隐患.例如,需要传递的数据增加了一个ID,user=mgr.SelectUserLogin(userName,password)行代码就要修改一次,如果再增加一个Level呢?难道需求每变动一次,就要改动一次