[C#學習筆記29]項目實戰(zhàn)之通用登錄模塊的完整業(yè)務(wù)流程和實現(xiàn)過程詳解
課程管理系統(tǒng)統(tǒng)一通用登錄模塊實現(xiàn)
一、登錄的要求
????用戶輸入賬號和密碼,如有問題系統(tǒng)應(yīng)該提示相關(guān)賬號錯誤,用戶修改后,再次登錄,如果賬號和密碼正確,則顯示主窗體,同時在主窗體右上角顯示當前登錄用戶名。
二、登錄的實現(xiàn)
????1、數(shù)據(jù)訪問方法(用戶登錄)編寫
TeacherService.cs內(nèi)容如下:
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、業(yè)務(wù)邏輯方法
TeacherManage.cs內(nèi)容如下:
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調(diào)用業(yè)務(wù)邏輯(登錄的事件)
FrmAdminLogin.cs文件中內(nèi)容如下:
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:在實際開發(fā)中,可以進一步驗證郵箱格式、密碼長度、非法字符等...
? ? ? ? ? ? //【2】封裝登錄實體信息
? ? ? ? ? ? Teacher teacher = new Teacher()
? ? ? ? ? ? {
? ? ? ? ? ? ? ? LoginAccount = this.txtLoginName.Text.Trim(),
? ? ? ? ? ? ? ? LoginPwd = this.txtLoginPwd.Text.Trim()
? ? ? ? ? ? };
? ? ? ? ? ? //【3】調(diào)用后臺登錄邏輯
? ? ? ? ? ? teacher = teacherManager.TeacherLogin(teacher);
? ? ? ? ? ? //【4】驗證登錄是否成功
? ? ? ? ? ? if(teacher != null)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //若登錄成功,先保存登錄信息(保存到全局變量中,以備后續(xù)使用)
? ? ? ? ? ? ? ? Program.currentTeacher = teacher;
? ? ? ? ? ? ? ? //在實際開發(fā)項目中還需要考慮以下內(nèi)容:
? ? ? ? ? ? ? ? //1、賬號有效性
? ? ? ? ? ? ? ? //2、用戶的權(quán)限
? ? ? ? ? ? ? ? //3、登錄日志保存
? ? ? ? ? ? ? ? //4、是否保存一定時間登錄信息(通過序列化方式完成)
? ? ? ? ? ? ? ? //設(shè)置窗體的返回值
? ? ? ? ? ? ? ? this.DialogResult = DialogResult.OK;
? ? ? ? ? ? ? ? this.Close();
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? MessageBox.Show("登錄賬號或密碼錯誤!","登錄提示");
? ? ? ? ? ? }
? ? ? ? }
? ? }
}