学生信息管理系统调试分析(学生信息管理系统)

优化一:在登陆界面不允许输入单引号:

今天在优化的时候听齐智说学生的登陆界面不可以输入单引号,于是我就试了试果然只要输入单引号,我们的程序就会出错,但是除了单引号之后的其他符号都可以输入,但是为什么不能输入单引号,最后在师傅的博客中找到了这个错误叫做: sql 注入

防止SQL注入:在用户名前面加上一个 ’ ,就会提示错误,这个错误就是SQL注入。

点击下面的链接可以看:

SQL注入

再解决这个问题之前,先了解一下什么是SQL注入:

但是我们在程序中可以用代码来限制用户输入,不允许用户在文本框中输入单引号具体实现的代码:

解决办法:(就目前水平)限制用户名只能输入数字,大小写字母和删除键,其他输入均被视为无效输入。

Private Sub Text1_KeyPress(KeyAscii As Integer)

Select Case KeyAscii

Case 48 To 57 只能输入数字

Case 65 To 90 只能输入大小写字母

具体的添加方式:

工程—– 部件——- Microsoft Windows Common Controls-2.6.0 → 应用 → 确定

与数据库结合(时间格式):

DTPicker1.CustomFormat = “yyyy.mm.dd”

写入判断条件代码:

检验出生和入校时间的关系

If DTBornData.Value > DTRudate.Value Then

MsgBox "出生日期必须早于入校时间", vbOKCancel vbExclamation, "警告"

Exit Sub

End If

给控件变量赋初值

DTBornData.MaxDate = Date

DTRudate.MaxDate = Date

If DTBornData.MaxDate < DTBornData.Value Then

msgbox "根据您填写的出生日期,您还没有出生!", vbOKOnly vbExclamation, "警告"

Exit Sub

End If

判断时间

If DTRudate.MaxDate < DTRudate.Value Then

msgbox "根据您填写的入校日期,您还没有出生!", vbOKOnly vbExclamation, "警告"

DTRudate.Value = ""

DTRudate.SetFocus

Exit Sub

End If

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

优化三:添加成绩信息窗体———–自动显示姓名

(使得我们的程序用起来更加人性化!)

原本这个窗体的功能是通过选择“班号” ,然后通过“班号”来筛选出对应的“学号”

通过“班号” 筛选中对应的“年级” 最后通过年级筛选出对应的“课程”

具体的过程如下:

Private Sub comboClassno_Click()

Dim mrc As New ADODB.Recordset

Dim txtSQL As String

Dim Msgtext As String

comboSID.Clear

comboCourse.Clear

添加学号

通过班号找到该班学生的学号

txtSQL = "select* from student_info where class_No=" & comboClassno.Text & ""

Set mrc = ExecuteSQL(txtSQL, Msgtext)

While (mrc.EOF = False)

comboSID.AddItem mrc!student_ID

mrc.MoveNext

Wend

mrc.Close

获得年级信息

’通过班号找到对应的年级

txtSQL = "select * from class_info where class_no =" & comboClassno.Text & ""

Set mrc = ExecuteSQL(txtSQL, Msgtext)

Grade = mrc.Fields(1)

mrc.Close

‘获得对应的课程信息:

通过年级找到对应的课程

txtSQL = "select * from gradecourse_info where grade =" & Grade & ""

grade 是gradecourse表中的一个字段

Set mrc = ExecuteSQL(txtSQL, Msgtext)

While (mrc.EOF = False)

comboCourse.AddItem mrc!course_Name

mrc.MoveNext

Wend

mrc.Close

End Sub

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

但是当你运行后你会发现,窗体中的名字还需要我们自己打进入,这个时候我觉得就出现了严重的问题,不但浪费时间,而且很容易把名字打错,因为数据库中的学号是唯一的,所以我们为什么不能根据唯一的学号来筛选出对应的学生姓名?

优化之后添加的具体代码如下:

由于是把学号作为基准,所以我将这些代码添加到了学号的单击事件中:

Private Sub comboSID_Click()

Dim mrc As ADODB.Recordset

Dim txtSQL

Dim Msgtext

通过学号,显示姓名

txtSQL = "select * from student_Info where student_id = " & comboSID.Text & ""

Set mrc = ExecuteSQL(txtSQL, Msgtext)

txtName.Text = mrc!student_name

mrc.Close

End Sub

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这样我们在选择了学号之后名字也就会自动出现!

优化四:添加学生信息时,在姓名的文本框中只能添加汉字:

实现代码:

Private Sub txtSID_KeyPress(KeyAscii As Integer)

Select Case KeyAscii

Case Is < 0, &H20, &H8

Case Else

KeyAscii = 0

MsgBox “姓名只能输入汉子”

End Select

End Sub

优化五:更改数据库的设计结构:

设置电话号的限定长度

在学生系统的添加学生信息中,细心的话你会发现,当你输入电话号的长度多于10位的时候我们的系统就会报错,刚开始我以为是文本框的原因,于是就用

Len(texttell.text) <10 这个语句限定了文本框的输入长度,但是仔细想想发现我们现实中的电话号一般都是11,这个时候一定是数据库中限定了电话字段的长度,

只要我们将电话字段的长度从10 改为11 那么我们的程序就可以正常运行了

具体操作方法:

打开数据库找到student 表 右击 “student_Info”——–点击“设计” ——这个时候就会打开这个设计表的界面

学生信息管理系统调试分析(学生信息管理系统)(1)

仔细观察我画圈的部位,他的长度果然是10 , 所以我们如果将那个10 改为11 那么我们在程序中就可以输入11位的电话号了。

但是这个时候数据库出错了,弹出了提示:

学生信息管理系统调试分析(学生信息管理系统)(2)

如何将数据库的设计改为可以更改?

操作方法:

工具—-选项—–设计器—-将“阻止保存要求重新创建表的更改” 中的勾取消掉

最后保存我们对表结构的设计就可以畅通无阻了

学生信息管理系统调试分析(学生信息管理系统)(3)

优化五: 拒绝重复添加年级的课程

在添加年级课程这个窗体中,当我们点击“设置课程”按钮时候你会发现 我们的“所有课程”列表框中的内容会一直重复添加:

学生信息管理系统调试分析(学生信息管理系统)(4)

只要一句代码就可以让这种现象消失:

在”设置课程” 的点击事件中添加这样一句代码:

listallcourse.Clear 即可

当我们将课程从“所有课程” 向”已经选择课程” 列表框中添加的时候你会发现,可以多次添加一个课程,这样就会让程序混乱,为了让程序看起来更加完美,我们要限定 ”已经选择课程” 列表框中的课程不能同名:

解决办法:

在右箭头的按钮的单击事件中添加代码,实现限定列表框内容:

具体代码:

Private Sub CmdAdd_Click()

Dim b As Integer

Dim s As String

判断数据时候被选中

If listallcourse.ListIndex <> -1 Then

s = listallcourse.List(listallcourse.ListIndex)

判断数据是否唯一

If listselectcourse.ListCount = 0 Then

listselectcourse.AddItem listallcourse.List(listallcourse.ListIndex)

Else

For b = 0 To listselectcourse.ListCount - 1

If listselectcourse.List(b) = s Then

MsgBox "不能重复添加课程"

Exit For

Else

listselectcourse.AddItem listallcourse.List(listallcourse.ListIndex)

End If

Next

End If

End If

End Sub

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。