从文本框输入看软件的健壮性

本文探讨了软件健壮性的核心概念及其在用户输入、密码控制和小数输入等场景的应用。通过实例展示了如何避免常见错误,如SQL注入、非法字符输入、密码长度限制等问题,并提出了改进方案以提升用户体验和系统稳定性。

         所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。软件健壮性是一个比较模糊的概念,但是却是非常重要的软件外部量度标准。软件设计的健壮与否直接反应了分析设计和编码人员的水平。即所谓的高手写的程序不容易死。 咱虽然不是什么高手,不过从自己刚做的机房收费系统屡屡败倒在文本框输入中,体会还是比较深的。

  • 1、用户名登录。
        既然是登录,肯定要用到了数据库查询,但是查询语句出错了,不仅仅是没有数据,直接的后果就是系统的报错瘫痪,还没登录进去你的系统就不能用了,这肯定不行。所以程序员要事先想到一切可能发生的情况,确保软件的正常使用,也就是说软件的容错性要好,健壮性要强。

       那么结合SQL查询语句,如果避免了“'”和“=”,这些符号会直接造成语句的不正确,提示错误信息。可以实现如下:

Private Sub txtUserName_KeyPress(KeyAscii As Integer)
    If KeyAscii = 39 Or KeyAscii = 61 Then
        KeyAscii = 0
        MsgBox "请不要输入非法字符", vbOKOnly + vbExclamation, "警告"
    End If
End Sub


         不知发现没有,这样确实保证了输入时的避免错误。可是万一用到右键粘贴,这招岂不就是歇菜了。
         改进如下:

Private Sub txtUserName_KeyPress(KeyAscii As Integer)
    Dim s As String
    Dim i As Integer
  
    For i = 1 To Len(txtUserName.Text)
        s = Mid(txtUserName.Text, i, 1)
        If s Like "'" Or s Like "=" Then
            txtUserName = Replace(txtUserName.Text, s, "")
        End If
    Next
end sub


          不过这样也不是万无一失。好多人在用文本框的文本做查询内容的时候都喜欢用Trim()函数,数据传递过程中的空格出现。结果是除了一个Bug,又增加了一个Bug。如果用户在注册的时候就用到了空格,并且数据保存类型是varchar,那么很可能没有匹配内容。解决方案就是要对存储和查询要有一个统一的规范:要么用户名不可以在开头和结尾输入空格,这样就可以继续用trim(),不过这样好像和用户的良好体验有冲突;再有就是不用trim,数据的存储类型要记得为varchar,用char的话不够定义的位数会自动补充空格,会出Bug。

  • 2、密码控制
       除了和用户名的基本限制相同的之外,就是还要考虑不要输入中文,一般都是大小写字母(区别大小写),数字,一些特殊符号。

不过要有位数的限制,这是一个很通有的报错点。数据类型设置的是7位,可是密码就是输入了10位,不出Bug才怪。我们就是要做好提醒并且做好完善的限制工作。

      健壮的软件要经受的起任何变态的操作。

  • 3、小数输入。

       在输入金额的时候,一开始我想限制为只能输入数字吧,可是,钱数不可能都是整数的啊,健壮要是以牺牲良好的用户体验那就得不偿失了,所以这个小数点还是必须的。
不过如何限制比较好呢?小数点之后限输入一位。

法一:

Private Sub txtCash_KeyPress(KeyAscii As Integer)
    Dim s As String
    
    s = InStr(txtCash, ".")
    If s And Len(Mid(txtCash, s + 1)) > 0 Then KeyAscii = 0
End Sub

法二:

Private Sub txtCash_Change()
    Dim S As String
    Dim x() As String
    
    If (IsNumeric(txtCash.Text)) Then
            x = Split(txtCash.Text, ".")
            If (UBound(x) >= 1) Then
                    If (Len(x(UBound(x))) > 1) Then
                            txtCash.Text = S
                            txtCash.SelStart = Len(txtCash.Text)
                    End If
            End If
    End If
    S = txtCash.Text
End Sub

     这两种是我找的,虽然基本实现了功能,可是禁不住测试。法一无法再次修改和输入,因为直接就禁用了键盘。法二在规规矩矩的前提下还可以,可是如果输入两个逗点,就无法限制了。在处理小数点的时候还要考虑鼠标的移动,以及可以修改补写整数部分。

改进代码:


Private Sub txtCash_Change()
    Dim S As String
    Dim i As Integer
    Dim intStart As Integer
    Dim intPos As Integer
    '限制输入数字和小数点
    For i = 1 To Len(txtCash.Text)
        S = Mid(txtCash.Text, i, 1)
        If S Like "[!0-9]" And Not S Like "." Then
        txtCash.Text = Replace(txtCash.Text, S, "")
        End If
    Next i
    '限制位数
    intPos = InStr(txtCash, ".")
    intStart = txtCash.SelStart
    If intPos >= 1 Then
            txtCash = Left(txtCash, intPos + 1)
            If intStart > Len(txtCash) Then
                    txtCash.SelStart = Len(txtCash)
            Else
                    txtCash.SelStart = intStart
            End If
    End If
End Sub

     软件的健壮是我们的追求,同时不能阉割功能减少出错率,毕竟软件是做给用户看得,时刻想着为人民服务,越人性化才能推销出去。所以,我们要时刻多想想,一条条的把bug除掉。












                
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值