tft每日頭條

 > 科技

 > 學生信息管理系統調試分析

學生信息管理系統調試分析

科技 更新时间:2024-11-23 22:23:16

  優化一:在登陸界面不允許輸入單引号:

  今天在優化的時候聽齊智說學生的登陸界面不可以輸入單引号,于是我就試了試果然隻要輸入單引号,我們的程序就會出錯,但是除了單引号之後的其他符号都可以輸入,但是為什麼不能輸入單引号,最後在師傅的博客中找到了這個錯誤叫做: 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

  12345678910111213141516171819202122 優化三:添加成績信息窗體———–自動顯示姓名

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

  原本這個窗體的功能是通過選擇“班号” ,然後通過“班号”來篩選出對應的“學号”

  通過“班号” 篩選中對應的“年級” 最後通過年級篩選出對應的“課程”

  具體的過程如下:

  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

  123456789101112131415161718192021222324252627282930313233343536 但是當你運行後你會發現,窗體中的名字還需要我們自己打進入,這個時候我覺得就出現了嚴重的問題,不但浪費時間,而且很容易把名字打錯,因為數據庫中的學号是唯一的,所以我們為什麼不能根據唯一的學号來篩選出對應的學生姓名?

  優化之後添加的具體代碼如下:

  由于是把學号作為基準,所以我将這些代碼添加到了學号的單擊事件中:

  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

  123456789101112 這樣我們在選擇了學号之後名字也就會自動出現!

  優化四:添加學生信息時,在姓名的文本框中隻能添加漢字:

  實現代碼:

  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)

  優化五: 拒絕重複添加年級的課程

  在添加年級課程這個窗體中,當我們點擊“設置課程”按鈕時候你會發現 我們的“所有課程”列表框中的内容會一直重複添加:

  

  隻要一句代碼就可以讓這種現象消失:

  在”設置課程” 的點擊事件中添加這樣一句代碼:

  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

  ,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved