C# 三层架构之系统的登录验证与添加数据的实现
利用三层架构体系,实现学生管理系统中用户的登录与添加班级信息的功能,一下代码为具体实现步骤的拆分过程:
一、用户登录界面功能的实现
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# 三层架构之系统的登录验证与添加数据的实现的更多相关文章
- 基于Ajax与用户认证系统的登录验证
一.登录页面 from django.contrib import admin from django.urls import path from blog import views urlpatte ...
- 01- ajax, 登录验证,json数据,文件上传
1.ajax简介 1.向服务器发送请求的途径 # 向服务器发送请求的途径 1. 浏览器地址栏,默认get请求 2. form表单: get请求 post请求 3. a标签,默认get请求 4. Aja ...
- 【干货】利用MVC5+EF6搭建博客系统(二)测试添加数据、集成Autofac依赖注入
PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.测试仓储层.业务层是否能实现对数据库表的操作 1.在52MVCBlog.IRepository程序集下创建IsysUserInf ...
- Java 自定义注解在登录验证的应用
java注解 从 JDK 5开始,Java 增加了注解的新功能,注解其实是代码里面的特殊标记,这些标记可以在编译.类加载和运行时被读取,在不改变代码原有逻辑下,给源文件嵌入注解信息.再通过返回获取注解 ...
- 关于对javaUtils封装和三层架构的笔记
1.什么是三层架构: 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer).业务逻辑层(Business ...
- C# Dapper基本三层架构使用 (四、WinForm UI层)
UI层主要功能是显示数据和接受传输用户的数据,可以在为网站的系统运行提供交互式操作界面,表示层的应用方式比较常见,例如Windows窗体和Web页面. 在项目中增加WinForm应用程序,结构如下 添 ...
- winform学习日志(十九)----------真正三层架构之登录
摘要:一:三层构架的基础知识在项目开发的过程中,有时把整个项目分为三层架构,其中包括:表示层(UI).业务逻辑层(BLL)和数据访问层(DAL).三层的作用分别如下: 表示层:为用户提供交互操作界面, ...
- 新闻公布系统 (Asp.net 三层架构 )
2012年度课程设计---新闻公布系统(小结) ...
- c#利用三层架构做一个简单的登录窗体
就个人而言,三层架构有点难理解,不知道该如何下手,各层与各层之间怎么调用 最近一直在研究三层架构,经过网上学习与多方打听写一下自己的心得.有不足之处,可以评论和私聊探讨 言归正传: 三层架构(3-ti ...
随机推荐
- (转)JAVA排序汇总
JAVA排序汇总 package com.softeem.jbs.lesson4; import java.util.Random; /** * 排序测试类 * * 排序算法的分类如下: * 1.插入 ...
- JS组件系列——在ABP中封装BootstrapTable
前言:关于ABP框架,博主关注差不多有两年了吧,一直迟迟没有尝试.一方面博主觉得像这种复杂的开发框架肯定有它的过人之处,系统的稳定性和健壮性比一般的开源框架肯定强很多,可是另一方面每每想到它繁琐的封装 ...
- nopCommerce 3.9 大波浪系列 之 开发支持多店的插件
一.基础介绍 nop支持多店及多语言,本篇结合NivoSlider插件介绍下如何开发支持多商城的小部件. 主要接口如下: ISettingService 接口:设置接口,可实现多店配置. (点击接口介 ...
- Redis-rdb持久化
Redis实现快照的过程 redis调用fork,现在有了子进程和父进程 父进程继续处理client请求,子进程负责将内存内容写入到临时文. 由于os的写时复制机制(copy on write)父子进 ...
- MQ选型对比文档
几种MQ产品说明: ZeroMQ : 扩展性好,开发比较灵活,采用C语言实现,实际上他只是一个socket库的重新封装,如果我们做为消息队列使用,需要开发大量的代码 RabbitMQ ...
- 1 Acid burn ★ Nag,Name/Serial,Serial
无花无壳爆破 仅允许非商业转载,转载请注明出处
- Mybatis Dynamic Query 2.0 入门
简介 2.0 昨天打包好了,主要是整合了tk.mybatis.mapper 到项目中去,所以和1.x比起来主要多了一个通用mapper.因为作者主要是使用springboot 这里讲一下Springb ...
- Windows 2008服务器环境PHP连接SQL Server数据库的配置及连接方法
背景: PHP程序常用的数据库是Mysql数据库,但是由于实际项目需要,要求PHP网站连接SQL Server数据库查询一些必要信息.因此,本文就来给大家介绍一下如何安装及配置PHP扩展,可以实现PH ...
- oracle 基础(上)
sql 语句氛围以下三种类型: dml:Date Manipulation Language 数据操纵语言 DDL:Data Definition Language 数据定义语言 DCL:Data ...
- 简单的用js打印乘法口诀表
<script type="text/javascript"> //乘法口诀表 for (var i = 1; i < 10; i++) { for (var j ...