【毕设】班级管理系统——登录模块
【登录模块介绍】
主要是处理用户的登录,赋予不同用户的不同权限。在登录模块中,系统在安全性上还增设了验证码和限制错误登录次数。主要目的是为了缓解服务器压力以及在一定程度上保护用户隐私。
【界面设计】
【登录错误图解】
限制错误登录次数功能说明:每名用户每次登陆初始时均有三次输入机会,一旦连续输错三次,则禁止再次输入,只能访问普通用户功能;若在一次或两次输错后但成功登陆者,输入机会将会再次重置为三次,以此类推。
【程序流程图】
【部分代码详解】
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);//重新生成验证码 }}