欢迎光临散文网 会员登陆 & 注册

[C#学习笔记29]项目实战之通用登录模块的完整业务流程和实现过程详解

2020-10-26 10:30 作者:技术龙的传人  | 我要投稿

课程管理系统统一通用登录模块实现

一、登录的要求

    用户输入账号和密码,如有问题系统应该提示相关账号错误,用户修改后,再次登录,如果账号和密码正确,则显示主窗体,同时在主窗体右上角显示当前登录用户名。

二、登录的实现

    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("登录账号或密码错误!","登录提示");

            }

        }

    }

}



[C#学习笔记29]项目实战之通用登录模块的完整业务流程和实现过程详解的评论 (共 条)

分享到微博请遵守国家法律