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

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

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. 使用Fiddler调试手机端页面请求/抓包

    简介 Fiddler作为一个强大的抓包工具,也是非常强大的http(s)协议分析工具,我们通常用它跟踪请求,PC端使用这里暂不做介绍(这里前提是熟悉PC端的使用),使用很简单. 那么我们如何来用它来跟 ...

  2. java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】

    java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-[费元星Q9715234] 说明如下,不懂的问题直接我[费元星Q9715234] 1.反射的意义在于不将xml tag ...

  3. 关于javascript在OJ系统上编程的注意事项

    ① 牛客网输入流: var line=readline().split(' '); ② 赛码网输入流: var line=read_line().split(' '); ③ 输出流: print(); ...

  4. CSS实现横列布局的方法总结

    一.使用float实现横列布局的方法 如下面所示:DIV1和DIV2都可以选择向左或者向右浮动50%来实现展示在同一行 div1 div2 实现下面图片中布局的css样式如下: 分析: 1.第一行第一 ...

  5. iOS多款源码分享

    iOS精选源码 列表联动,Linkage 电商商品详情 AxcUIKit-控件整合框架,快速简单的使用高级控件 GKNavigationBarViewController-导航栏联动 仿京东的加入购物 ...

  6. 调皮的QQ音乐API:修复无法获取歌单

    上一篇完整版:http://www.cnblogs.com/TwilightLemon/p/7076938.html QQ音乐的API真是太调皮了,获取歌单的API又更换了好多次,喵喵喵 旧版API( ...

  7. Python初学时购物车程序练习实例

    不多说了,直接上代码: #Author:Lancy Wu product_list=[ ('Iphone',5800), ('Mac Pro',9800), ('Bike', 800), ('Watc ...

  8. My first_leetcode_Rever Ingeter 数字翻转java实现(办法集合)

    7. Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321  Example2: x = -123, ...

  9. [vijos NOIP模拟题]天神下凡 贪心+搜索

    样例: 考试的时候没时间打了,随便敲了敲就交上去了,没想到竟然编译错误,忘定义n了23333 自己测了测能骗20分hhhh 考虑每个圆对答案的贡献,当一个圆被小圆内切的时候,分成了两半,对答案的贡献就 ...

  10. jQuery.ajax success 与 complete 区别

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 天天用,不知所以然: $.ajax({       type: "post",       u ...