學生信息管理系統——終極優化
優化一:在登陸界面不允許輸入單引號:
今天在優化的時候聽齊智說學生的登陸界面不可以輸入單引號,於是我就試了試果然只要輸入單引號,我們的程序就會出錯,但是除了單引號之後的其他符號都可以輸入,但是為什麼不能輸入單引號,最後在師傅的博客中找到了這個錯誤叫做: sql 注入
防止SQL注入:在用戶名前面加上一個 』 ,就會提示錯誤,這個錯誤就是SQL注入。
點擊下面的鏈接可以看:
SQL注入
再解決這個問題之前,先了解一下什麼是SQL注入:
但是我們在程序中可以用代碼來限制用戶輸入,不允許用戶在文本框中輸入單引號具體實現的代碼:
解決辦法:(就目前水平)限制用戶名只能輸入數字,大小寫字母和刪除鍵,其他輸入均被視為無效輸入。
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 48 To 57 "只能輸入數字
Case 65 To 90 "只能輸入大小寫字母
Case 97 To 122 " 只能輸入退格
Case 8 "只能輸入退格
Case Else
KeyAscii = 0
End Select
End Sub
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
優化二: 將」添加窗體」 中表示時間的普通文本控制項變為專門用來表示時間的時間控制項 。
具體的添加方式:
工程—– 部件——- 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」——–點擊「設計」 ——這個時候就會打開這個設計表的界面
仔細觀察我畫圈的部位,他的長度果然是10 , 所以我們如果將那個10 改為11 那麼我們在程序中就可以輸入11位的電話號了。
但是這個時候資料庫出錯了,彈出了提示:
如何將資料庫的設計改為可以更改?
操作方法:
工具—-選項—–設計器—-將「阻止保存要求重新創建表的更改」 中的勾取消掉
最後保存我們對錶結構的設計就可以暢通無阻了
優化五: 拒絕重複添加年級的課程
在添加年級課程這個窗體中,當我們點擊「設置課程」按鈕時候你會發現 我們的「所有課程」列表框中的內容會一直重複添加:
只要一句代碼就可以讓這種現象消失:
在」設置課程」 的點擊事件中添加這樣一句代碼:
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


※jQuery之監聽input、textarea輸入框值變化
※Spring框架自學之路——簡易入門
TAG:程序員小新人學習 |