當前位置:
首頁 > 知識 > 學生信息管理系統——終極優化

學生信息管理系統——終極優化

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

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