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

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

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//引入命名空间
using System.Data;
using System.Data.SqlClient; namespace StudentMisDAL
{
public class LoginDAL
{
/// <summary>
/// 创建返回值类型为DataSet的有参构造函数
/// </summary>
/// <param name="name"></param>
/// <param name="pwd"></param>
/// <returns></returns>
public DataSet DoLogin(string name,string pwd)
{
string connstring = "server=.;database=StudentMISDB;uid=sa;pwd=123456";
SqlConnection conn = new SqlConnection(connstring);
//执行参数化的sql查询语句
string sql = @"select * from Login where LoginName=@LoginName and pwd=@pwd";
SqlCommand cmd = new SqlCommand(sql, conn);
//定义参数
SqlParameter[] parameter = new SqlParameter[]{
new SqlParameter("@LoginName",SqlDbType.VarChar,),
new SqlParameter("@pwd",SqlDbType.VarChar,)
};
//给参数赋值
parameter[].Value = name;
parameter[].Value = pwd;
//将参数添加到命令对象中
cmd.Parameters.AddRange(parameter);
//创建适配器
SqlDataAdapter da = new SqlDataAdapter(cmd);
//创建缓冲区
DataSet ds = new DataSet();
conn.Open();
da.Fill(ds);
conn.Close();
//返回ds
return ds;
}
}
}

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//引入命名空间
using System.Data;
using StudentMisDAL; namespace StudentMisBLL
{
public class LoginBLL
{
/// <summary>
/// 创建一个返回值类型为bool型的有参构造函数
/// </summary>
/// <param name="name"></param>
/// <param name="pwd"></param>
/// <returns></returns>
public bool GetMisUI(string name,string pwd){
//实例化类LoginDAL(数据访问层)
LoginDAL ld = new LoginDAL();
//调用方法并接收返回值
DataSet ds=ld.DoLogin(name,pwd);
//根据返回值:受影响的行数,来进行判断
if (ds.Tables[].Rows.Count<)
{
return false;
}
//防SQL注入
//获取到数据库中对应的第一张表中的第一行(也可以传入下标值)的列名叫做LoginName和pwd的值
string Name = ds.Tables[].Rows[]["LoginName"].ToString();
string PWD = ds.Tables[].Rows[]["pwd"].ToString();
if (name==Name&&pwd==PWD)
{
return true;
}
return false;
}
}
}

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

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//引入命名空间
using StudentMisBLL; namespace StudentMisUI
{
public partial class LoginUI : Form
{
public LoginUI()
{
InitializeComponent();
}
/// <summary>
/// 为登录按钮添加点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
//获取到文本框中输入的值
string name = this.txtLoginName.Text.Trim();
string pwd = this.txtPwd.Text.Trim();
//将LoginBLL类(逻辑层)进行实例化
LoginBLL lb = new LoginBLL();
//调用方法
bool bo=lb.GetMisUI(name,pwd);
if (bo==true)
{
MessageBox.Show("登陆成功!");
//跳转至主窗体
FrmMainUI frmMain = new FrmMainUI();
frmMain.Show();
this.Hide();
}
else
{
MessageBox.Show("登陆失败,登录名或密码错误!");
//清空输入框
this.txtLoginName.Text = "";
this.txtPwd.Text = "";
}
}
}
}

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

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

代码如下:

 if (bo==true)
{
MessageBox.Show("登陆成功!");
//跳转至主窗体
FrmMainUI frmMain = new FrmMainUI();
frmMain.Show();
this.Hide();
}
else
{
MessageBox.Show("登陆失败,登录名或密码错误!");
//清空输入框
this.txtLoginName.Text = "";
this.txtPwd.Text = "";
}

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

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

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

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//引入命名空间
using StudentMisModel;
using StudentMisBLL; namespace StudentMisUI
{
public partial class FrmAddClassesUI : Form
{
public FrmAddClassesUI()
{
InitializeComponent();
}
/// <summary>
/// 为‘添加班级’窗体中的‘添加按钮’添加点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAdd_Click(object sender, EventArgs e)
{
//实例化‘添加班机’实体类
ClassesMod classes = new ClassesMod();
//给实体类赋值
classes.ClassesNo = this.txtClassesNo.Text.Trim();
classes.ByName = this.txtByName.Text.Trim();
classes.Name = this.txtClassesName.Text.Trim();
//实例化ClassesBLL类(逻辑层)
ClassesBLL cb = new ClassesBLL();
bool bo = cb.AddClassesInfor(classes);
if (bo==true)
{
MessageBox.Show("添加成功!");
//添加成功后清空输入框
this.txtClassesNo.Text = "";
this.txtByName.Text = "";
this.txtClassesName.Text = "";
}
else
{
MessageBox.Show("添加失败!");
}
} }
}

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace StudentMisModel
{
/// <summary>
/// 为‘添加班级’创建实体类
/// </summary>
public class ClassesMod
{
//创建班级ID属性
public int ClassId { get; set; }
//创建班级名称属性
public string Name { get; set; }
//创建班级别名属性
public string ByName { get; set; }
//创建班级编号属性
public string ClassesNo { get; set; }
}
}

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//引入命名空间
using StudentMisModel;
using System.Data;
using System.Data.SqlClient; namespace StudentMisDAL
{
public class ClassesDAL
{
public int AddClasses(ClassesMod classes)
{
//建立连接数据库的字符串
string connString = "server=.;database=StudentMISDB;uid=sa;pwd=123456";
//创建连接对象
SqlConnection conn = new SqlConnection(connString);
//参数化的查询语句
string sql = "insert into Classes Values(@Name,@ByName,@ClassesNo)";
//执行查询命令
SqlCommand cmd = new SqlCommand(sql,conn);
//定义参数
SqlParameter[] parameters = new SqlParameter[]{
new SqlParameter("@Name",SqlDbType.NVarChar,),
new SqlParameter("@ByName",SqlDbType.NVarChar,),
new SqlParameter("@ClassesNo",SqlDbType.VarChar,)
};
//给参数赋值
parameters[].Value = classes.Name;
parameters[].Value = classes.ByName;
parameters[].Value = classes.ClassesNo;
//将参数添加到命令对象
cmd.Parameters.AddRange(parameters);
conn.Open();
//返回插入后影响的行数
int i = cmd.ExecuteNonQuery();
conn.Close();
//返回行数
return i;
}
}
}

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//引入命名空间
using StudentMisDAL;
using StudentMisModel; namespace StudentMisBLL
{
public class ClassesBLL
{
public bool AddClassesInfor(ClassesMod classes)
{
//实例化ClassesDAL类(数据访问层)
ClassesDAL cd = new ClassesDAL();
//调用类中的方法并接受
int i = cd.AddClasses(classes);
//返回一个布尔值
return i > ;
}
}
}

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

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//引入命名空间
using StudentMisModel;
using StudentMisBLL; namespace StudentMisUI
{
public partial class FrmAddClassesUI : Form
{
public FrmAddClassesUI()
{
InitializeComponent();
}
/// <summary>
/// 为‘添加班级’窗体中的‘添加按钮’添加点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAdd_Click(object sender, EventArgs e)
{
//实例化‘添加班机’实体类
ClassesMod classes = new ClassesMod();
//给实体类赋值
classes.ClassesNo = this.txtClassesNo.Text.Trim();
classes.ByName = this.txtByName.Text.Trim();
classes.Name = this.txtClassesName.Text.Trim();
//实例化ClassesBLL类(逻辑层)
ClassesBLL cb = new ClassesBLL();
bool bo = cb.AddClassesInfor(classes);
if (bo==true)
{
MessageBox.Show("添加成功!");
//添加成功后清空输入框
this.txtClassesNo.Text = "";
this.txtByName.Text = "";
this.txtClassesName.Text = "";
}
else
{
MessageBox.Show("添加失败!");
}
} }
}

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

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace StudentMisUI
{
public partial class FrmMainUI : Form
{
public FrmMainUI()
{
InitializeComponent();
}
/// <summary>
/// 为‘添加班级’菜单添加点击事件
/// 弹出‘添加班级’窗体
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AddClassesToolStripMenuItem_Click(object sender, EventArgs e)
{
//实例化‘添加班级’类
FrmAddClassesUI frmAL = new FrmAddClassesUI();
//指定其父窗体
frmAL.MdiParent = this;
//显示子窗体
frmAL.Show();
}
}
}
 

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

  1. 基于Ajax与用户认证系统的登录验证

    一.登录页面 from django.contrib import admin from django.urls import path from blog import views urlpatte ...

  2. 01- ajax, 登录验证,json数据,文件上传

    1.ajax简介 1.向服务器发送请求的途径 # 向服务器发送请求的途径 1. 浏览器地址栏,默认get请求 2. form表单: get请求 post请求 3. a标签,默认get请求 4. Aja ...

  3. 【干货】利用MVC5+EF6搭建博客系统(二)测试添加数据、集成Autofac依赖注入

    PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.测试仓储层.业务层是否能实现对数据库表的操作 1.在52MVCBlog.IRepository程序集下创建IsysUserInf ...

  4. Java 自定义注解在登录验证的应用

    java注解 从 JDK 5开始,Java 增加了注解的新功能,注解其实是代码里面的特殊标记,这些标记可以在编译.类加载和运行时被读取,在不改变代码原有逻辑下,给源文件嵌入注解信息.再通过返回获取注解 ...

  5. 关于对javaUtils封装和三层架构的笔记

    1.什么是三层架构: 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer).业务逻辑层(Business ...

  6. C# Dapper基本三层架构使用 (四、WinForm UI层)

    UI层主要功能是显示数据和接受传输用户的数据,可以在为网站的系统运行提供交互式操作界面,表示层的应用方式比较常见,例如Windows窗体和Web页面. 在项目中增加WinForm应用程序,结构如下 添 ...

  7. winform学习日志(十九)----------真正三层架构之登录

    摘要:一:三层构架的基础知识在项目开发的过程中,有时把整个项目分为三层架构,其中包括:表示层(UI).业务逻辑层(BLL)和数据访问层(DAL).三层的作用分别如下: 表示层:为用户提供交互操作界面, ...

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

    2012年度课程设计---新闻公布系统(小结)                                                                             ...

  9. c#利用三层架构做一个简单的登录窗体

    就个人而言,三层架构有点难理解,不知道该如何下手,各层与各层之间怎么调用 最近一直在研究三层架构,经过网上学习与多方打听写一下自己的心得.有不足之处,可以评论和私聊探讨 言归正传: 三层架构(3-ti ...

随机推荐

  1. Kotlin + Spring Boot 请求参数验证

    编写 Web 应用程序的时候,经常要做的事就是要对前端传回的数据进行简单的验证,比如是否非空.字符长度是否满足要求,邮箱格式是否正确等等.在 Spring Boot 中,可以使用 Bean Valid ...

  2. Install and Run NATS Streaming Server

    NATS是一个开源的.轻量级的.高性能的分布式消息通信系统,使用的公司有百度.西门子.VMware.HTC和爱立信.NATS Streaming是以NATS为动力的数据流系统,是用go语言写的,NAT ...

  3. Ant 之bulid.xml详解

    ANT build.xml文件详解(一) Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道 make这个命令.当编译Linux内核及一些软件的 ...

  4. nodeJS之crypto加密

    前面的话 加密模块提供了 HTTP 或 HTTPS 连接过程中封装安全凭证的方法.也提供了 OpenSSL 的哈希,hmac, 加密(cipher), 解密(decipher), 签名(sign) 和 ...

  5. zabbix前台jsrpc注入

    zabbix是一个开源的企业级性能监控解决方案. 官方网站:http://www.zabbix.com zabbix的jsrpc的profileIdx2参数存在insert方式的SQL注入漏洞,攻击者 ...

  6. 使用Mapper专用的MyBatis Generator插件

    使用Maven执行MBG 这里有一个完整的例子,Mybatis-Spring,下面讲解的内容出自这个例子. 使用Maven插件的一个好处是可以将Maven中的属性使用${property}形式在gen ...

  7. LVS-负载均衡集群部署

    简介:LVS是一种集群技术,采用IP负载均衡技术和基于内容请求分发技术,调度器具有很好的吞吐量,将请求均衡的转移到不同服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能,高可 ...

  8. netstat命令---输出网络相关的信息

    简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Member ...

  9. 从JSON数据源导入数据(未完)

  10. pip&easy_install使用

    pip install ... easy_install ... ******************************************************************* ...