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

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

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. (转)HTTP 协议详解(基础)

    HTTP 协议详解 作者: 小坦克  来源: 博客园  发布时间: 2012-02-14 13:32  阅读: 95523 次  推荐: 99   原文链接   [收藏]   相关文章:HTTP 协议 ...

  2. 【PHP】打印输出var_dump+echo+print_r

    var_dump 判断一个变量的类型与长度如:<?$a = 1;$b = 't';echo var_dump($ta,$tb); // 结果为 int(123) string(3) " ...

  3. Java并发编程——线程安全及解决机制简介

    简介: 本文主要介绍了Java多线程环境下,可能会出现的问题(线程不安全)以及相应的解决措施.通过本文,你将学习到如下几块知识: 1. 为什么需要多线程(多线程的优势) 1. 多线程带来的问题—线程安 ...

  4. centos7下安装PHP swoole扩展

    PHP的异步.并行.高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列, ...

  5. Python网络数据采集4-POST提交与Cookie的处理

    Python网络数据采集4-POST提交与Cookie的处理 POST提交 之前访问页面都是用的get提交方式,有些网页需要登录才能访问,此时需要提交参数.虽然在一些网页,get方式也能提交参.比如h ...

  6. webpack学习--创建一个webpack打包流程

    创建一个webpack打包流程 首先安装webpack插件 mkdir webpack-demo && cd webpack-demo npm init -y npm install ...

  7. Sublime Text3快捷键

    Ctrl+D 选词 (反复按快捷键,即可继续向下同时选中下一个相同的文本进行同时编辑)Ctrl+G 跳转到相应的行Ctrl+J 合并行(已选择需要合并的多行时)Ctrl+L 选择整行(按住-继续选择下 ...

  8. Modelsimse10.1如何编译altera库文件以支持IP仿真

    前言 se版本默认没有ip之类的库支持,如果你用到了pll之类的ip,仿真前就得把库编译好. 流程 本例用的是altera的verilog库. 1.首先在modelsim安装目录下新建altera文件 ...

  9. C#+HtmlAgilityPack—>糗事百科桌面版V2.0

    最近在浏览以前自己上传的源码,发现在糗事百科桌面端源码评论区中,有人说现在程序不能用了.查看了一下源码运行情况,发现是正则表达式解析问题.由于糗百的网页版链接和网页格式稍有变化,导致解释失败.虽然可以 ...

  10. IPython使用学习笔记

    学习<利用python进行数据分析>第三章 IPython:一种交互式计算和开发环境的笔记,共享给大家,同时为自己作为备忘用. 安装ipython用pip即可.ps.博主用的是win7系统 ...