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