首页 > 代码库 > 【毕设】班级管理系统——登录模块

【毕设】班级管理系统——登录模块

【登录模块介绍】

主要是处理用户的登录,赋予不同用户的不同权限。在登录模块中,系统在安全性上还增设了验证码和限制错误登录次数。主要目的是为了缓解服务器压力以及在一定程度上保护用户隐私。

【界面设计】

【登录错误图解】

限制错误登录次数功能说明:每名用户每次登陆初始时均有三次输入机会,一旦连续输错三次,则禁止再次输入,只能访问普通用户功能;若在一次或两次输错后但成功登陆者,输入机会将会再次重置为三次,以此类推。

 

【程序流程图】

【部分代码详解】

private string UserA, PwA; //用户名,密码
private static bool checkAvailabled=true;//记录是否可登录
static private int checkTimes=0;//记录错误次数
bool haveuser = true; //用来判断用户名是否存在

private void btnLogin_Click(object sender, EventArgs e)
{
   if (flagSecurityCode) //如果验证码正确
   {
     if (checkAvailabled == true)//如果用户可登录
       {
       //如果登录次数达到3次,则不允许再次登录
           if (checkTimes == 3)                                                    {    checkAvailabled = false;    }
            else
            {
          SqlConnection conCon = new SqlConnection(strCon);
          string cmd = "select Luser,Lpassword from LoginInfo";
          try
          {   conCon.Open();
              SqlCommand sc = new SqlCommand(cmd, conCon);
              SqlDataReader reader = sc.ExecuteReader();
              while (reader.Read())//从数据库中读取用户信息
              {    UserA = reader["Luser"].ToString();//读取用户名
                   PwA= reader["Lpassword"].ToString();//读取密码
                   if (UserA.Trim() == txtUser.Text & PwA.Trim() == txtKey.Text)//如果登录成功
                  {MainFrm.islogin = true;//将主界面登录标识记为true
                   MainFrm.useName = txtUser.Text;//显示主界面用户名
                   username = txtUser.Text;//记录用户名
                   checkTimes = 0;//将错误次数重置为0
                   haveuser = true;//数据库中有该用户名
                   break;}
                   else if (User == txtUser.Text)//如果仅密码错误
                   {   MessageBox.Show("密码错误!", "提示");
                       MainFrm.islogin = false;
                       txtKey.Text = "";
                       txtKey.Focus();
                       txtSecurityCode.Text = "验证码";
                  txtSecurityCode.ForeColor = SystemColors.ScrollBar;
                  LoginFrm_Load(sender, e);//重新生成验证码
                  checkTimes++;//错误次数加1
                  haveuser = true;//数据库中有该用户名
                  break;}
                  else
                  {    haveuser = false;   }//数据库中无该用户名
              }
              if (MainFrm.islogin == true)
              {  this.Close();}//如果登陆成功,则关闭登录窗体
              if (haveuser==false)//如果用户名错误                                             {   MessageBox.Show("用户名错误!", "提示");
                  MainFrm.islogin = false;
                 txtUser.Text = "";
                 txtKey.Text = "请输入密码";
                 txtKey.ForeColor = SystemColors.ScrollBar;
                 txtKey.UseSystemPasswordChar = false;
                 txtSecurityCode.Text = "验证码";
                 txtSecurityCode.ForeColor = SystemColors.ScrollBar;
                 LoginFrm_Load(sender, e); //重新生成验证码
                 txtUser.Focus();
                 checkTimes++;
                  }reader.Close();
           }
           catch (Exception ex)
           {    MessageBox.Show(ex.Message, "操作数据库出错!");  }
           finally
           {   conCon.Close();   }//断开数据库连接
      }
      switch (checkTimes) //依据不同登错次数显示相应出错图标
      {   case 0: pictureBox2.Visible = false;break;
          case 1: pictureBox2.Visible = true;
                  pictureBox2.Image = Image.FromFile(_path + errorImage[0]);
                  MainFrm.str = "您已连续输错一次";  break;
         case 2: pictureBox2.Visible = true;
                 pictureBox2.Image = Image.FromFile(_path + errorImage[1]);
                 MainFrm.str = "您已连续输错两次";  break;
         case 3: pictureBox2.Visible = true;
                 pictureBox2.Image = Image.FromFile(_path + errorImage[2]);
                 MainFrm.str = "您已连续输错三次不可再输入";
                 MessageBox.Show("您已连续输错三次不可再输入", "提示");  break;
     }}}else
     {     MessageBox.Show("验证码错误!", "提示");
           txtSecurityCode.Text = "";
           LoginFrm_Load(sender, e);//重新生成验证码  
}}