[C#学习笔记29]项目实战之通用登录模块的完整业务流程和实现过程详解
课程管理系统统一通用登录模块实现
一、登录的要求
用户输入账号和密码,如有问题系统应该提示相关账号错误,用户修改后,再次登录,如果账号和密码正确,则显示主窗体,同时在主窗体右上角显示当前登录用户名。
二、登录的实现
1、数据访问方法(用户登录)编写
TeacherService.cs内容如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using CourseManageModels;
namespace CourseManageDAL
{
/// <summary>
/// 讲师访问类
/// </summary>
public class TeacherService
{
//不懂程序、OOP的人采用的方法
//public bool TeacherLogin(string loginAccount, string pwd)
//{}
/// <summary>
/// 讲师登录
/// </summary>
/// <param name="teacher"></param>
/// <returns></returns>
public Teacher TeacherLogin(Teacher teacher)
{
//【1】封装SQL语句
string sql = $"select TeacherName,TeacherId from Teacher where loginAccount='{teacher.LoginAccount}' and LoginPwd='{teacher.LoginPwd}'";
//【2】提交查询
SqlDataReader reader = SQLHelper.GetReader(sql);
//【3】判断登录是否正确,如果正确就封装ID和Name
if(reader.Read())
{
teacher.TeacherId = (int)reader["TeacherId"];
teacher.TeacherName = reader["TeacherName"].ToString();
}
else
{
teacher = null;//账号或密码不正确
}
return teacher;
}
}
}
2、业务逻辑方法
TeacherManage.cs内容如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using CourseManageModels;
namespace CourseManageDAL
{
/// <summary>
/// 讲师访问类
/// </summary>
public class TeacherService
{
//不懂程序、OOP的人采用的方法
//public bool TeacherLogin(string loginAccount, string pwd)
//{}
/// <summary>
/// 讲师登录
/// </summary>
/// <param name="teacher"></param>
/// <returns></returns>
public Teacher TeacherLogin(Teacher teacher)
{
//【1】封装SQL语句
string sql = $"select TeacherName,TeacherId from Teacher where loginAccount='{teacher.LoginAccount}' and LoginPwd='{teacher.LoginPwd}'";
//【2】提交查询
SqlDataReader reader = SQLHelper.GetReader(sql);
//【3】判断登录是否正确,如果正确就封装ID和Name
if(reader.Read())
{
teacher.TeacherId = (int)reader["TeacherId"];
teacher.TeacherName = reader["TeacherName"].ToString();
}
else
{
teacher = null;//账号或密码不正确
}
return teacher;
}
}
}
3、UI调用业务逻辑(登录的事件)
FrmAdminLogin.cs文件中内容如下:
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 CourseManageModels;
using CourseManageBLL;
namespace CourseManageUI
{
public partial class FrmAdminLogin : Form
{
private TeacherManager teacherManager = new TeacherManager();
public FrmAdminLogin()
{
InitializeComponent();
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
#region 窗体移动
private Point mouseOff;
private bool leftFlag;
private void frmLogin_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseOff = new Point(-e.X, -e.Y);
leftFlag = true;
}
}
private void frmLogin_MouseMove(object sender, MouseEventArgs e)
{
if (leftFlag)
{
Point mouseSet = Control.MousePosition;
mouseSet.Offset(mouseOff.X, mouseOff.Y);
Location=mouseSet;
}
}
private void frmLogin_MouseUp(object sender, MouseEventArgs e)
{
if (leftFlag)
{
leftFlag = false;
}
}
#endregion 窗体移动
//登录按钮
private void btnLogin_Click(object sender, EventArgs e)
{
//【1】输入验证
if(this.txtLoginName.Text.Trim().Length == 0)
{
MessageBox.Show("请输入登录账号!","提示信息");
this.txtLoginName.Focus();
return;
}
if(this.txtLoginPwd.Text.Trim().Length == 0)
{
MessageBox.Show("请输入登录密码","提示信息");
this.txtLoginPwd.Focus();
return;
}
//PS:在实际开发中,可以进一步验证邮箱格式、密码长度、非法字符等...
//【2】封装登录实体信息
Teacher teacher = new Teacher()
{
LoginAccount = this.txtLoginName.Text.Trim(),
LoginPwd = this.txtLoginPwd.Text.Trim()
};
//【3】调用后台登录逻辑
teacher = teacherManager.TeacherLogin(teacher);
//【4】验证登录是否成功
if(teacher != null)
{
//若登录成功,先保存登录信息(保存到全局变量中,以备后续使用)
Program.currentTeacher = teacher;
//在实际开发项目中还需要考虑以下内容:
//1、账号有效性
//2、用户的权限
//3、登录日志保存
//4、是否保存一定时间登录信息(通过序列化方式完成)
//设置窗体的返回值
this.DialogResult = DialogResult.OK;
this.Close();
}
else
{
MessageBox.Show("登录账号或密码错误!","登录提示");
}
}
}
}

