利用三层架构体系,实现学生管理系统中用户的登录与添加班级信息的功能,一下代码为具体实现步骤的拆分过程:
一、用户登录界面功能的实现
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 LoginName=@LoginName and pwd=@pwd";
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 }
View Code
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 }
View Code
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 }
View Code
二、添加班级信息功能的实现
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 }
View Code
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 }
View Code
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 }
View Code
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 }
View Code
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 }
存在的就是合理的,总有问题要解决!