• C#--C/S--学员管理系统--3--用户登录逻辑


    以下是学习笔记:

    一,用户登录逻辑实现

    1,添加登录窗体和对应的实体类

     2,用户登录逻辑分析

     3,管理员数据访问类

    namespace DAL
    {
        /// <summary>
        /// 管理员数据访问类
        /// </summary>
        public class SysAdminService
        {
            /// <summary>
            /// 根据登录账号和密码登录
            /// </summary>
            /// <param name="objAdmin">封装了登录账号和密码的管理员对象</param>
            /// <returns>返回包含管理员信息的对象</returns>
            public SysAdmin AdminLogin(SysAdmin objAdmin)//根据经验:返回值为实体类,参数也是实体对象,这样可以简化接口
            {
                //组合SQL语句
                string sql = "select AdminName from Admins where LoginId={0}  and LoginPwd='{1}'";//值类型和字符串,字符串需要加单引号
                sql = string.Format(sql, objAdmin.LoginId, objAdmin.LoginPwd);//解析对象,把对象的属性取出来
                //从数据库中查询
                SqlDataReader objReader = SQLHelper.GetReader(sql);//即使只有一个对象,也要返回一个结果集
                if (objReader.Read())//因为只有返回只有一个对象,所以要用if。用where就太浪费了
                {
                    objAdmin.AdminName = objReader["AdminName"].ToString();
                }
                else
                {
                    objAdmin = null;//如果登录不成功,则将当前对象清空
                }
                objReader.Close();
                //返回结果
                return objAdmin;
            }
        }
    }
    

      4,登录界面:UI部分,点击事件

    登录按钮事件:

            private void btnLogin_Click(object sender, EventArgs e)
            {
                //【1】数据验证
                if (this.txtLoginId.Text.Trim().Length == 0)//一定要用Trim()
                {
                    MessageBox.Show("请输入登录账号!", "登录提示");
                    this.txtLoginId.Focus();
                    return;
                }
                if (this.txtLoginPwd.Text.Trim().Length == 0)
                {
                    MessageBox.Show("请输入登录密码!", "登录提示");
                    this.txtLoginPwd.Focus();
                    return;
                }
                //【2】封装对象(实际封装的是用户登录账号和密码)
                SysAdmin objAdmin = new SysAdmin()//对象初始化器来初始化属性
                {
                    LoginId = Convert.ToInt32(this.txtLoginId.Text.Trim()),
                    LoginPwd = this.txtLoginPwd.Text.Trim()
                };
                //【3】和后台交互,判断登录信息是否正确
                try
                {
                    objAdmin = objAdminService.AdminLogin(objAdmin);//调用 数据访问类对象的方法
                    if (objAdmin != null)//如果登录成功
                    {
                        //保存登录信息
                        Program.objCurrentAdmin = objAdmin;//在Program中创建的全局变量 public static Models.SysAdmin objCurrentAdmin = null;
                        //设置登录窗体的返回值
                        this.DialogResult = DialogResult.OK;
                        //关闭窗体
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("登录账号或密码有误!", "登录提示");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("数据访问出现异常,登录失败!具体原因:" + ex.Message);
                }
    
            }
    

      5,登录成功后,在主界面显示 用户名

     6,登录界面 改善用户体验(焦点切换和回车键自动登录)

            #region 改善用户体验
    
            private void txtLoginId_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyValue == 13)
                {
                    if (this.txtLoginId.Text.Trim().Length != 0)
                    {
                        this.txtLoginPwd.Focus();//将当前的焦点跳转到密码框
                    }                
                }
            }
            private void txtLoginPwd_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyValue == 13)
                {
                    btnLogin_Click(null, null);//直接调用登录按钮的事件
                }
            }
    
            #endregion
    

      

      

  • 相关阅读:
    CSS初识
    HTML 初识
    索引
    表查询前之数据导入
    mysql练习2
    AMP+EPP3.0的开发环境配置
    C++异步编程资料汇集贴
    Windows8中如何打包和安装一个本地的Metro类型应用(转)
    std::string, std::wstring, wchar_t*, Platform::String^ 之间的相互转换
    windows RT开发笔记:WinRT DLL及其调用研究
  • 原文地址:https://www.cnblogs.com/baozi789654/p/13951137.html
Copyright © 2020-2023  润新知