学生信息系统——优化总结(干货篇一)
?
?
?
引言
我在做學生系統的時候其實很多時候都是暈的,剛開始覺得特別的復雜;但是等我做完的時候發現這里面很多的都是重復的,不光代碼重復,思路、窗體間結構都是重復的。一句話總結:其實學生信息系統就是增、刪、改、查、刪......這樣一說是不是簡單多了。
?
?結構圖
總結
一、建立學生系統主窗體(工程項目(是用來建造應用程序的文件的集合)—創建主窗體(MDI多文檔界面,這樣可以讓程序更加美觀,整齊有序)—創建主窗體菜單—創建公用模塊(它可以用來存放整個工程項目的公用的函數、全局變量,這樣可以極大的提高代碼的效率))
1、由于系統中各個功能模塊都將頻繁使用數據庫中的各個數據,因此需要一個公共的數據操作函數
Public Function ExecuteSQL(ByVal SQL As String, MsgString as String) As ADODB.Recordset
'傳遞參數SQL傳遞查詢語句,MsgString傳遞查詢信息,自身以一個數據集對象的形式返回
?
???On Error GoTo ExecuteSQL_Error??????????? '異常處理
??? sTokens = Split(SQL)??????????????????????????????????'用Split函數產生一個包含各個子串的數組
??? Set cnn = New ADODB.Connection???????? '創建連接
??? cnn.OpenConnectString??????????????????????????'打開連接
?
IfInStr("INSERTE,DELETE,UPDATE", UCase$(sTokens(0))) Then
?????????????????????????????????????????????????????????????????????????'判斷字符串中是否含有指定內容
??????? cnn.Execute SQL???????????????????????????????????'執行查詢語句
??????? MsgString = sTokens(0) &"query successful"
????????????????????????????????????????????????????????????????????????'返回查詢信息
??? Else
???????
??????? Set rst = NewADODB.Recordset???????'創建數據集對象
??????? rst.Open Trim$(SQL), cnn, adOpenKeyset,adLockOptimistic
????????????????????????????????????????????????????????????????????????'返回查詢結果
??????? Set ExecuteSQL =rst???????????????????????????'返回記錄集對象
??????? MsgString = "查詢到" & rst.RecordCount & _
??????????? "條記錄"
??? End If
ExecuteSQL_Exit:????????????????????????????? '清空數據集對象
??? Set rst = Nothing
??? Set cnn = Nothing
??? Exit Function
???
ExecuteSQL_Error:???????????????????????????? '錯誤類型判斷
??? MsgString = "查詢錯誤:" & _
??????? Err.Description
??? Resume ExecuteSQL_Exit
?
Endfunction
?
ExecuteSQL函數有兩個參數:SQL和MsgString。其中SQL用來存放需要執行的SQL語句,MsgString用來返回執行的提示信息。函數執行時,首先判斷SQL語句中包含的內容:當執行操作時,ExecuteSQL函數將返回一個與函數同名的記錄集對象(Recordset),所有滿足條件的記錄包含在對象中;當執行如刪除、更新、添加、等操作時,不放回記錄集對象。
?
2、ExecuteSQL函數使用了ConnectString函數,這個函數使用來連接數據庫的;代碼:
Public FunctionConnectString() As String
??? ConnectString ="FileDSN=student.dsn;UID=sa;PWD=123456"??????'返回一個數據庫連接
End Function
?
3、上面的ExecuteSQL函數和ConnectString函數將在后面頻繁使用,因為他們對任何數據庫連接都是有效的,由于在后面將在程序中需要頻繁的檢查各種文本框的內容是否為空,這里定義了testtxt函數,代碼:
Public FunctionTesttxt(txt As String) As Boolean
??? If Trim(txt) ="" Then??????????????????? '判斷輸入內容是否為空(如果文本框內容為空,函數將返回True,否則將返回False)
??????? Testtxt = False
??? Else
??????? Testtxt = True
??? End If
End Function
?
4、學生系統啟動后,需要對用戶進行判斷,如果登陸者是授權用戶,將進入系統,否則將停止程序的執行(這個判斷需要在系統運行初進行,因此代碼需要放在模塊中。代碼:
Sub Main()
??? Dim fLogin As New frmLogin
??? fLogin.Show vbModal????????????????????? '顯示登錄窗體
??? If Not fLogin.OK Then??????????????????? '判斷是否授權用戶
??????? End
??? End If
??? Unload fLogin
??? 'Set fMainForm = New frmMain????????????? '判斷是,將進入系統
??? 'fMainForm.Show
End Sub
?
二、系統用戶模塊的創建:(用戶登錄—添加用戶—修改用戶密碼)
1、為窗體定義全局變量OK用來判斷燈籠褲是否成功;定義miCount,用來記載密碼的次數,并且在載入窗體時初始化這兩個全局變量。
?
2、當用戶輸入完用戶名和密碼,單擊cmdOK按鈕將對用戶信息進行判斷,用戶單擊該按鈕將觸發Click事件;如果用戶沒有輸入用戶名和密碼,將出現消息框給予提示,如果輸入的用戶名在用戶表格中沒有找到,將提示重新輸入,文本框txtPassword將重新獲得輸入焦點。用戶登錄成功全局變量OK將被賦值為True,一旦三次輸入密碼不正確,全局變量OK將被賦值為False。公用模塊中的Main過程將根據OK的值決定是退出系統還是進入系統
?
三、學籍管理模塊的建立(添加學籍—修改學籍—查詢學籍)
1、添加:(重點事項)
(1)判斷是否為空
If NotTesttxt(cboClassNo.Text)Then
??????MsgBox"請輸入班號!", vbOKOnly + vbExclamation, "警告"
??????cboClassNo.SetFocus
??????cboClassNo.Text= ""
??????ExitSub
??End If
?
(2)判斷是否重復?
txtSQL ="select * from class_Info where class_No='" &Trim(cboClassNo.Text) & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
If?Not (mrc.EOF And mrc.BOF)Then???????????????????????'確保輸入的班號不存在
??????MsgBox"請重新輸入班號!", vbOKOnly + vbExclamation, "警告"
??????cboClassNo.SetFocus
??????mrc.Close
Else
……
?
(3)有日期的判斷的判斷日期的格式
??????IsDate(txtBorndate.Text)?? '判斷數據是否日期格式
??????IsDate(txtRudate.Text)?????? '判斷數據是否日期格式
(4)判斷該輸入數字的地方是否為數字
If Not IsNumeric(Trim(txtSID.Text)) Then??????????????????????????'判斷輸入學號是否數字
??????? MsgBox "請輸入數字!", vbOKOnly + vbExclamation, "警告"
??????? Exit Sub
??????? txtSID.SetFocus
??? End If
?
(5)添加記錄成功
??????txtSQL = "select * from class_Info" ??????Set mrc = ExecuteSQL(txtSQL, MsgText) ??????mrc.AddNew ??????mrc.Fields(0) = Trim(cboClassNo.Text) ??????mrc.Fields(1) = Trim(cboGrade.Text) ??????mrc.Fields(2) = Trim(txtDirector.Text) ??????mrc.Fields(3) = Trim(cboClassNo.Text) ??????mrc.Update ??????mrc.Close ??????Me.Hide ??????MsgBox "班級信息添加成功!", vbOKOnly + vbExclamation, "添加班級信息" End If |
?
?
2、修改:(重點事項)
(1)、點擊修改時各個文本框將有效,移動記錄的按鈕將失效
PrivateSub editCommand_Click()???????????? '單擊“修改記錄”按鈕,將進入到修改狀態,各個文本框將有效,這是移動記錄的按鈕將失效,可以避免誤操作
??? mcclean = False
??? Frame2.Enabled = False
??????????????????????????????????????????? '使移動記錄按鈕失效
??? firstCommand.Enabled = False
??? previousCommand.Enabled = False
??? nextCommand.Enabled = False
??? lastCommand.Enabled = False
??????????????????????????????????????????? '使各個文本框有效
??? txtSID.Enabled = True
??? txtName.Enabled = True
??? comboSex.Enabled = True
??? txtBorndate.Enabled = True
??? comboClassNo.Enabled = True
??? txtRudate.Enabled = True
??? txtTel.Enabled = True
??? txtAddress.Enabled = True
??? txtComment.Enabled = True
???
??? myBookmark = mrc.Bookmark?????????????? '記下當前記錄位置
End Sub
?
(2)、不可重復
<spanstyle="font-size:18px;">mrc.AddNew
mrc.Fields(0) =Trim(comboClassNo.Text)
mrc.Fields(1) =Trim(comboGrade.Text)
mrc.Fields(2) =Trim(txtDirector.Text)
mrc.Fields(3) =Trim(txtClassroom.Text)
mrc.Update
MsgBox"班級信息修改成功!", vbOKOnly + vbExclamation, "警告"
mrc.Bookmark =mybookmark
CallviewData</span>
?
(3)、點擊取消修改后,各個按鈕將有效,文本框將失效
PrivateSub cancelCommand_Click()?????????? '單擊“取消修改”按鈕時,將取消所做的修改
??? If Not mcclean Then???????????????????? '判斷是否處于修改狀態
??????????????????????????????????????????? '使各個按鈕有效
??????? Frame2.Enabled = True
??????? firstCommand.Enabled = True
??????? previousCommand.Enabled = True
??????? nextCommand.Enabled = True
??????? lastCommand.Enabled = True
??????????????????????????????????????????? '使各個文本框失效
??????? txtSID.Enabled = False
??????? txtName.Enabled = False
??????? comboSex.Enabled = False
??????? txtBorndate.Enabled = False
??????? comboClassNo.Enabled = False
??????? txtRudate.Enabled = False
??????? txtTel.Enabled = False
??????? txtAddress.Enabled = False
??????? txtComment.Enabled = False
???????
??????? mrc.Bookmark = myBookmark?????????? '回到開始記錄位置
??????? Call viewData
??? Else
??????? MsgBox "什么都沒有修改,有什么好取消的!", vbOKOnly + vbExclamation,"警告"
??? End If
End Sub
?
3、查詢有兩種方法
(1)點擊各個按鈕進行查詢(此方法使用記錄少的,單個查詢)
<span style="font-size:18px;">Private Sub cmdFirst_Click()??????????????????????????????????? '記錄集移動到第一條 ????mrc.MoveFirst ????Call viewData End Sub ? Private Sub cmdLast_Click()???????????????????????????????????? '記錄集移動到最后一條 ????mrc.MoveLast ????Call viewData End Sub ?? Private Sub cmdNext_Click()???????????????????????????????????? '記錄集移動到下一條 ????mrc.MoveNext ????If mrc.EOF Then ????????mrc.MoveFirst ????End If ????Call viewData End Sub ?? Private Sub cmdPrevious_Click()???????????????????????????????? '記錄集移動到上一條 ????mrc.MovePrevious ????If mrc.BOF Then ????????mrc.MoveLast ????End If ???Call viewData End Sub</span> |
?
(2)按條件進行查詢,直接顯示在MSHFexGrid控件中按順序顯示
?
4、刪除:(重點事項)
(1)、提示是否刪除的語句
str2$= MsgBox("是否刪除當前記錄?", vbOKCancel, "刪除當前記錄")
(2)如果刪除:
If str2$ = vbOK Then <span style="white-space:pre">??? </span>mrc.MoveNext ????????If mrc.EOF Then????????? ????????<span style="white-space:pre">??? </span>mrc.MoveFirst ????????????????myBookmark = mrc.Bookmark ????????????????mrc.MoveLast ????????????????mrc.Delete ????????????????mrc.Bookmark = myBookmark ????????????????Call viewData ????????Else ????????????????myBookmark = mrc.Bookmark ????????????????mrc.MovePrevious ????????????????mrc.Delete???????? ????????????????mrc.Bookmark = myBookmark ????????????????Call viewData ????????End If |
?
(3)如果不刪除:
<pre name="code" class="vb">Else
????mrc.Bookmark=mybookmark
????CallviewData
End If
?
(4)這里的viewData函數是用來把臨時表中的當前記錄賦值給各個文本框
?
四、班級管理模塊的建立(添加班級—修改班級);由于班級的管理模塊和學籍管理模塊差不多,上面已經詳細闡述,本處不詳細總結
?
五、課程和成績的管理模塊也都類似,重點參照學籍模塊。
?
附錄:(出現頻率高,而且比較重要的)
1、Option Explicit是用來規定所有變量使用前必須定義。這樣可以避免由于輸入的錯誤而產生的新變量。
?
2、Me是VB中的一個常用的對象,用來指代當前對象本身。
?
3、IsDate(txtBorndate.Text)??'判斷數據是否日期格式
??????IsDate(txtRudate.Text)?????? '判斷數據是否日期格式
?
4、myBookmark用來記錄數據集中當前記錄的位置
??mcclean作為一個標志記錄是否修改記錄
?
5、定義函數viewData可以解決程序中各處需要顯示數據的問題
?
6、mrc.Delete???'判斷是否有重復記錄
?
7、mrc.Bookmark =myBookmark?????????? '回到開始記錄位置
????????myBookmark = mrc.Bookmark?????????????? '記下當前記錄位置
?
8、列表框的ListIndex屬性用來指示當前選中項,-1說明沒有被選中的數據項
PrivateSub cmdAdd_Click()????????????????? '單擊“添加”按鈕,可以將添加課程
??? If listAllcourse.ListIndex <> -1 Then??'判斷是否有內容被選中
??????? listSelectcourse.AddItemlistAllcourse.list(listAllcourse.ListIndex)
??? End If
??? If listAllcourse.ListIndex <> -1 Then
??????? Call addlist(listSelectcourse,listAllcourse.ListIndex)
?
?
??? End If
End Sub
?
進步
??????????我其實通過這樣的總結發現,自己對學生信息管理系統又有了新的認識,至少沒有之前那么暈了。它的結構框架和部分思路漸漸的清晰,當然還是有很多的地方不是很清楚;我相信,只要我不斷的總結,它總有一天會被我全部搞清楚的。
?
總結
以上是生活随笔為你收集整理的学生信息系统——优化总结(干货篇一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hongyang 生命不息,奋斗不止,万
- 下一篇: 编写程序输出某月某日是某一年中的第几天