优化内容
首先,从整个系统上来说,几乎每个窗体都需要重复做一些简单的优化工作,比如说添加用户使用的界面背景、调整用户使用窗体的大小、子窗体位于主窗体上的相对位置、子窗体是否可移出主窗体、调整界面字体字号、用户输入所使用的文本框字符类型的限制、文本框字符长度的限制、按钮键盘功能的设置、Tab键控制文本框的顺序、控件名称的一致性等内容,通过简单的代码或者对象的属性设置,来满足用户使用的基本需求。
其次,对于系统里面某一块功能的优化。以用户实际使用情况为基础,以满足用户的实际需求为导向,通过严谨的逻辑推理、结构分析,使用相应的代码片段实现相应的功能。
1、登录窗体
A、登录界面——系统的首界面只能是登录界面,即在系统开始运行的时候将登录窗体设置成模式窗体,模式窗体时在一个界面只能存在着一个窗体,如果想加载别的窗体则应先下载这个窗体,就像我们登录的钉钉界面,在未成功登录钉钉之前是进入不了钉钉主界面的。这个功能是由模块中的sub main函数来实现的:
Sub Main()
Dim fLogin As New frmLogin
fLogin.Show vbModal '显示登录窗体
'判断是否授权用户
If Not fLogin.OK Then
'Login Failed so exit app
End
End If
Unload fLogin
'判断是否将进入系统
Set fMainForm = New FrmMain '显示主窗体实例
fMainForm.Show
End Sub
B、判断用户名——判断用户名有两层判断,一是判断用户名是否为空,一是判断用户名是否存在数据库中。这里就用到了if函数的嵌套。
判断是否为空:
If Trim(txtUserName.Text = "") Then '1、如果用户名为空,则弹出提示框
MsgBox "用户名不能为空,请您重新输入用户名!", vbOKOnly + vbExclamation, "警告"
txtUserName.SetFocus '用户名文本框获得焦点
Else '2、如果用户名不为空
txtSQL = "select * from user_info where user_ID= '" & txtUserName.Text & "'" '查询指定用户名的记录
Set mrc = ExecuteSQL(txtSQL, MsgText) '执行查询语句
'判断指定用户表里是否有所输入的用户信息
If mrc.EOF = True Then '如果记录集搜索到了最后一条信息,没有找到该用户信息,则弹出提示框
MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
txtUserName.Text = "" '将所输入的用户名清空
txtPassword.Text = "" '将所输入的密码清空
txtUserName.SetFocus '用户名文本框获得焦点
Else '若有该用户信息,则进行判断密码是否正确一步
C、判断密码是否正确
'判断输入密码是否正确
If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then '将所输入的密码和数据库中记录信息进行对比
'若密码正确
OK = True
mrc.Close '记录集关闭
Me.Hide '登录窗体隐藏
UserName = Trim(txtUserName.Text)
FrmMain.Show 'FrmMain窗体显示出来
Else
'否则,密码不正确
MsgBox "输入密码不正确,请重新输入!", vbOKOnly + vbExclamation, "警告" '弹出提示信息
txtPassword.Text = "" '密码文本框清空
txtPassword.SetFocus '密码文本框获得焦点
End If
D、保护用户信息安全性——限制登录次数
为保障系统用户的安全性,需要限制登陆次数,用户不能无限的登录系统,这个实现的方式是定义一个变量来记录登录次数:
定义变量:Dim miCount As Integer '记录确定次数
'记载输入密码次数
miCount = miCount + 1 '密码次数累加1,进行新的次数赋值
If miCount = 3 Then '若密码输入三次,第三次仍是错误的,会弹出密码错误提醒
End '结束程序
End If
注意:在加载登录窗体时,需要将记录输入密码次数的变量设置初始值:miCount = 0 '输入密码次数初始值为0
2、修改密码窗体
从安全性的角度来看,源代码中给出的修改密码步骤是不严谨的,用户的信息安全没有得到很好地保证,所以,我在源代码实现修改密码的功能基础之上,又添加了一步原密码的验证,并且成功修改密码后,用户需返回到系统登录界面重新登录系统。
填写完密码单击确定按钮后,首先判断原密码输入框与用户在登录窗体输入的密码是否一致,此时会有两种情况,一是两者不一致,二是两者一致。当第一种情况出现时弹出提示框提示用户;当第二种情况出现,再判断新设置的密码和原密码是否相同,这时又会有两种情况,一是新密码与原密码相同,弹出提示框提示用户,二是新密码与原密码不同,当这种情况出现时,最后再判断两次新密码输入是否相同。实现这个功能的代码如下:
'单击确定按钮
Private Sub cmdOK_Click()
'定义变量
Dim txtSQL, MsgText As String
Dim mrc As ADODB.Recordset
' 判断原密码输入框与登录窗体输入的密码是否一致
If Trim(txtold.Text) <> Trim(frmLogin.txtPassword.Text) Then '1.若两者不一致,则弹出提示框
MsgBox "原密码输入不正确!", vbOKOnly + vbExclamation, "警告" '提示用户原密码输入与登录时密码不一致
txtold.SetFocus '原密码文本框获得焦点
txtold.Text = "" '文本框清空
txtPassWord1.Text = ""
txtPassWord2.Text = ""
Exit Sub
Else '2.若两者一致
'判断新密码是否与原密码相同
If Trim(txtPassWord1.Text) = Trim(txtold.Text) Then '1.若新密码与原密码相同,弹出提示框
MsgBox "与原密码相同" '提示用户新密码与原密码相同
txtPassWord1.Text = "" '新密码文本框清空
txtPassWord2.Text = ""
Exit Sub
Else '2.若新密码与原密码不相同
'判断新密码输入是否相同
If Trim(txtPassWord1.Text) <> Trim(txtPassWord2.Text) Then '1.若两次输入的新密码不相同
MsgBox "密码输入不正确!", vbOKOnly + vbExclamation, "警告" '弹出提示框 提示用户两次输入的密码不一致
txtPassWord1.SetFocus '新密码文本框获得焦点
txtPassWord1.Text = "" '新密码文本框清空
txtPassWord2.Text = ""
Else '2.若两次输入的新密码相同
txtSQL = "select * from user_info where user_ID = '" & UserName & "'" '查询记录集中的该用户信息
Set mrc = ExecuteSQL(txtSQL, MsgText) '执行查询语句
mrc.Fields(1) = txtPassWord1.Text '将新设置的密码赋给记录集
mrc.Update '更新数据库
mrc.Close '关闭数据集对象
MsgBox "密码修改成功!", vbOKOnly + vbInformation, "修改密码" '提示用户修改密码成功
'文本框清空
txtold.Text = ""
txtPassWord1.Text = ""
txtPassWord2.Text = ""
Me.Hide '隐藏该窗体
FrmMain.Hide '隐藏主窗体
End If
End If
End If
frmLogin.Show '显示登录窗体,用修改后的密码重新登录系统
End Sub