武懷生+李秀明
摘 要:本文以學生學籍管理系統(tǒng)為研究對象,提出了一種基于VB+ACCESS模式的學生學籍管理系統(tǒng)。該系統(tǒng)解決了傳統(tǒng)手工管理學生檔案效率低、保密性差、數(shù)據(jù)冗余等問題。系統(tǒng)邏輯結構由前臺應用程序開發(fā)和后臺共享數(shù)據(jù)庫設計兩部分組成。應用程序開發(fā)的窗體模塊和標準模塊通過ADODB組件和標準SQL語句來實現(xiàn)連接和訪問數(shù)據(jù)庫。系統(tǒng)的詳細設計以邏輯結構為框架,闡述了學生學籍信息的添加、查詢和刪除等功能的算法和程序的設計過程。
關鍵詞:Visual Basic;Access;學生學籍管理系統(tǒng)
中圖分類號:TP31 文獻標識碼:A
Abstract:Taking the student status management system as the study object,the paper proposes the system based on the VB+ACCESS model.The system solves the problems of low efficiency,poor security,and data redundancy.The logic structure of the system is composed of both the foreground application development and the background shared database design.The form module and the standard module of application development connect and access to the database through the ADODB components and standard SQL statements.Based on the logical structure,the system detailed design expounds the system design process and the algorithms of student status information adding,searching and deleting.
Keywords:visual basic;access;the student status management system
1 引言(Introduction)
目前,學生學籍管理系統(tǒng)已經是教育機構的重要應用平臺,學籍管理系統(tǒng)的出現(xiàn)將學校教務工作人員從繁雜的手工勞動中解放出來,系統(tǒng)為用戶提供充足的信息和快捷的查詢手段及高效率、強保密性、低冗余、低錯誤率等特點是傳統(tǒng)人工檔案管理模式無法比擬和超越的[1]。基于Visual Basic+Access的學生學籍管理系統(tǒng)是信息管理的子系統(tǒng),其內容主要包括前臺應用程序的開發(fā)和后臺數(shù)據(jù)庫的設計兩個方面。根據(jù)學籍管理系統(tǒng)的結構和功能進行數(shù)據(jù)庫的設計,數(shù)據(jù)庫的連接使用開源的第三方數(shù)據(jù)庫框架ADODB進行數(shù)據(jù)的存取,可以批量導入和導出相關數(shù)據(jù)[2,3]。利用面向對象及模塊獨立的Visual Basic進行程序設計為系統(tǒng)后期擴展與維護提供了技術保障。
2 學生學籍管理系統(tǒng)的設計思想(The design idea of
student status management system)
本系統(tǒng)由Visual Basic語言開發(fā),由五個窗體模塊和一個標準模塊構成,分別承擔不同的功能,由于標準模塊內部存放部分其他窗體模塊所需的公共代碼,并不能獨立運行,所以用帶箭頭虛線表示其他窗體模塊對標準模塊中公共代碼的調用,如圖1所示。
(1)模塊Module1,該模塊用來存放工程所用的公用信息,如程序與數(shù)據(jù)源的連接信息,系統(tǒng)的全局變量和函數(shù)等。
(2)窗體FrmLogin,該窗體作為登錄窗體,通過ADO控件的RecordSource屬性,指定通過窗體上的被綁定的相關控件訪問的記錄的來源,通過相關的SQL命令將輸入的信息與數(shù)據(jù)表中預設的用戶名與密碼做比較,判斷是否是合法用戶。
(3)窗體FrmMain,該窗體作為主窗體,用以實現(xiàn)與各窗體之間的連接。另外,由于數(shù)據(jù)庫在使用一段時間后,因數(shù)據(jù)刪除而造成數(shù)據(jù)庫中部分空間不可用的情況,這時就需要壓縮數(shù)據(jù)庫。因此,主窗體也添加了壓縮和清空數(shù)據(jù)庫的功能。
(4)窗體FrmTSL,該窗體為學籍管理窗體,通過各控件的DataSource屬性和DataFiled屬性,實現(xiàn)與數(shù)據(jù)源的綁定,并通過ADO控件中Recordset對象的一些屬性和方法,實現(xiàn)學生學籍記錄的查看、添加、保存、刪除、修改等功能。該窗體是整個程序的核心,如圖2所示。
(5)窗體FrmFind,該窗體為數(shù)據(jù)查詢窗體,通過SQL命令實現(xiàn)數(shù)據(jù)庫查詢功能,并將查詢結果根據(jù)具體需要按照一定的順序通過DataGrid控件顯示出來。
(6)窗體FrmAdmin,該窗體為管理員信息窗體,通過ADO控件中Validate事件的各Action參數(shù)實現(xiàn)對數(shù)據(jù)庫的操作,并通過DataGrid對象將查詢,以及修改管理員信息。
3 軟件設計的流程結構與技術實現(xiàn)(The process
structure and technical implementation of the
software design)
3.1 工程與主窗體
(1)創(chuàng)建窗體模塊
新建工程及窗體,設置窗體屬性。名稱:FrmMain,并設置其他位置和外觀屬性;添加如下菜單:學籍管理(MnuHjgl)、學籍查詢(MnuCs)、操作員管理(MnuYhGl)、二級菜單:操作員管理(MnuYhxxbj);切換操作員(MnuChyh)。數(shù)據(jù)庫維護(MnuMdbGl)、二級菜單:壓縮數(shù)據(jù)庫(MnuMdbYs);清空數(shù)據(jù)庫(MnuMdbClear)、關于(MnuAbout)、退出(MnuExit)。并在代碼中完成菜單對象的事件內容。
(2)壓縮數(shù)據(jù)庫源代碼。
Sub CompactData():Dim src As String,dst As String:src=App.Path &”\TelDb.mdb":dst=App.Path &”\abbc2.mdb":If Dir(dst) <>““Then Kill dst:Set jro=CreateObject("JRO.JetEngine"):jro.CompactDatabase”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“&src,_"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“&dst&”;Jet OLEDB:Engine Type=4":Set jro=Nothing:Kill src:Name dst As src:End Sub
以上代碼由MnuMdbYs_Click()事件發(fā)生后調用,作用是先檢測臨時文件“abbc2.mdb”是否存在,如存在則刪除,然后將數(shù)據(jù)庫文件“TelDb.mdb”壓縮到臨時文件中,接著將原數(shù)據(jù)庫文件刪除,最后將臨時文件再重命名為原數(shù)據(jù)庫文件名,以達到壓縮數(shù)據(jù)庫的目的[1]。
(3)清空數(shù)據(jù)庫源代碼,其中調用了壓縮數(shù)據(jù)庫函數(shù)CompactData()
Private Sub MnuMdbClear_Click():Dim sSQL As String,db:Set db=CreateObject("ADODB.Connection"):db.Open”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“&App.Path&”\TelDb.mdb":sSQL="DELETE*FROM telbook":db.Execute sSQL,dbFailOnError:db.Close:Call CompactData:MsgBox”數(shù)據(jù)庫已清空!",
vbInformation,”提示"Set db=Nothing:End Sub
此段代碼的功能是刪除數(shù)據(jù)庫文件“TelDb.mdb”中的表“telbook”,以達到清空數(shù)據(jù)庫的目的。數(shù)據(jù)庫的建立將在后面闡述。
3.2 數(shù)據(jù)庫設計
(1)創(chuàng)建建數(shù)據(jù)庫(TelDb.mdb),設計兩個表MMK、telbook
MMK(管理員表)結構包含2個字段:字段名稱(UserName,PassWord);數(shù)據(jù)類型(文本,文本)。
Telbook(學生信息表)結構包含13個字段:字段名稱(name,sex,minzhu,date,id,grade,xibie,class,huji,zhengzhi,address,tel,pic);數(shù)據(jù)類型:date為日期/時間,pic為OLE對象,其他都為文本。
(2)連接數(shù)據(jù)庫
為了保證程序將強的移植性,數(shù)據(jù)庫采用字符串的連接方式,同時將相關代碼寫成函數(shù)放入標準模塊,保證其他窗體模塊調用方便。函數(shù)代碼如下:
Public Function OpenMDb(DataControl As Adodc,TabelName As String):Dim FileName As String:FileName=App.Path&”\teldb.mdb":DataControl.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“&FileName&”;Jet OLEDB:Database Password=;Persist Security Info=False;":DataControl.RecordSource=TabelName:DataControl.Refresh:End Function
此段代碼用于檢測數(shù)據(jù)庫文件是否存在,避免程序發(fā)生錯誤,并將ADO控件與數(shù)據(jù)庫文件“teldb.mdb”連接。
3.3 登錄窗體(FrmLogin)
新建窗體(FrmLogin),包含對象為ComboBox控件(Combo1)、TxetBox控件(Text1)、Image控件(Image1,確定)、Image控件(Image2,取消)、ADO控件(Data1)。窗體FrmLogin是用來做登錄界面的窗體,程序將ADO控件與數(shù)據(jù)庫文件中用于存儲用戶名和密碼的表“MMk”進行連接,使用SQL中的Select命令做遍歷查詢記錄,并將數(shù)據(jù)庫記錄與控件進行綁定,然后與管理員輸入的用戶名和密碼在進行比對,具體代碼就不一一闡述。
3.4 添加學籍窗體(FrmTSL)
(1)創(chuàng)建窗體模塊(圖2)
①添加窗體,名稱:FrmTSL;②添加一組Label控件,名稱為“l(fā)blLabels”,Index從0到12,設置Caption屬性來顯示窗體上的文本提示,如學號,姓名等;③添加一組Label控件,名稱為“LbButton”,Index從0到7,設置Caption屬性用來顯示記錄操作向導,如上一記錄、下一記錄等;④添加一組TextBox對象,名稱為“txtFields”,Index從0到11,不包含1。DataSource屬性設置為adodc1,DataFiled屬性,根據(jù)Index從0到11(不包含1),屬性設置為Telbook中的字段值,如name、minzhu等,用于將每個TextBox控件與數(shù)據(jù)庫中相應的字段綁定;⑤添加一個Image對象,名稱為“Image1”,DataSource屬性設為adodc1,DataFiled屬性設置為“pic”,將此對象與數(shù)據(jù)庫中的以長二進制數(shù)據(jù)類型保存的字段“pic”綁定。
(2)記錄的訪問,添加和刪除等源代碼
Private Sub LbButton_Click(Index As Integer):With Data1.Recordset:On Error Resume Next:Select Case Index:Case 0:.MovePrevious:Case1:.MoveNext:Case2:.MoveFirst:Case3:.MoveLast:Case4:.AddNew:Case5:.Delete:.MoveNext:Case 6:Image1.DataChanged=True:adodc1.Recordset.Update:LbMsg="保存完畢!":Exit Sub:Case 7:Unload Me::End Select:If.BOF Then.MoveFirst:If.EOF Then.MoveLast:End With:Label1.Caption="記錄:”&Data1.Recordset.AbsolutePosition:End Sub
中間還用到了Bof和Eof屬性。進行刪除操作后,如果Bof屬性為Ture,則表示記錄指針當前位置位于首記錄之前,此時調用MoveFirst方法將指針移動到首記錄;如果Eof屬性為Ture,則表示記錄指針當前位置位于末記錄之后,此時調用MoveLast方法將指針移動到末記錄。Bof和Eof屬性,避免了刪除操作后程序出錯。
(3)檢驗數(shù)據(jù)源代碼
Function Test()As Boolean:Dim ErrMsg As String:If Not (IsNumeric(txtFields(4)) And IsNumeric(txtFields(5)) And IsNumeric(txtFields(11)))Then:MsgBox”學號、年級、電話必須為數(shù)字!",vbCritical,”出錯提示":Exit Function:End If:If IsDate(txtFields(3))=False Then:MsgBox”出生日期必須符合日期格式(2009-5-1)!", vbCritical,”出錯提示":Exit Function:End If
If txtFields(0)="“Or txtFields(2)="“Or txtFields(6)="“Or txtFields(9)="“Or txtFields(7)="“Or txtFields(8)="“Or txtFields(10)="“Then:MsgBox”相關欄目不能為空!", vbCritical,”出錯提示":Exit Function:End If:Test=True:End Function
此段代碼主要是為了檢驗數(shù)據(jù)有效性,并彈出相應的提示窗口。單擊“保存”按鈕后此段代碼將被調用,檢查學號、年級、電話是否為數(shù)字;出生日期是否符合日期格式;以及相關欄目是否為空。
(4)添加圖片源代碼
Private Sub Command1_Click():Dim oDLG:Set oDLG=CreateObject("MSComDlg.CommonDialog"):With oDLG:.DialogTitle="打開文件":.Filter="所有圖片文件|*.jpg;*.jpeg;*.bmp;*.gif|JPG文件|*.jpg;*.jpeg|BMP文件|*.bmp|GIF文件|*.gif":.FilterIndex=1:.MaxFileSize=1255:.ShowOpen:If.FileName<>""Then:Image1.Picture=LoadPicture(.FileName):End If:End With:Set oDLG=Nothing:End Sub[4]
此段代碼在單擊“瀏覽”按鈕后被調用,通過CreateObject函數(shù)引用CommonDialog控件。CommonDialog控件能提供一組標準的操作對話框,在此段代碼中用來運行打開文件的操作。然后通過代碼將圖片傳遞給控件Image1,控件Image1已通過DataSource屬性和DataFiled屬性與數(shù)據(jù)庫中表”telbook”里的”pic”字段綁定。其中:.Filter="所有圖片文件|*.jpg;*.jpeg;*.bmp;*.gif|JPG文件|*.jpg;*.jpeg|BMP文件|*.bmp|GIF文件|*.gif”這一段代碼用以約束打開文件的格式。
3.5 數(shù)據(jù)查詢窗體(FrmFind)
(1)創(chuàng)建窗體模塊
(1)添加窗體,名稱:FrmFind;(2)添加對象,DataGrid對象,名稱:DBGrid1”,DataSource:adodc1;Frame對象,名稱:Frame1”在Frame對象內部添加一組CheckBox對象,名稱:Check1”,Index從0到11,Caption設置為具體學生信,如姓名、性別等;兩個ComboBox對象,名稱:Combo1、Combo2,Text:姓名;兩個CommandButton對象,名稱:Command1、Command2,Caption:查詢、退出。
(2)ComboBox控件連接數(shù)據(jù)庫,獲取List
Private Sub Form_Load():Dim i As Integer:OpenMDb Data1,”telbook":SetTitle:For i=0 To Check1.UBound:Combo1.AddItem Check1(i).Caption:Combo2.AddItem Check1(i).Caption:Next:Combo1.ListIndex=0:Combo2.ListIndex=0:End Sub
此段代碼用于打開數(shù)據(jù)庫,并通過For循環(huán)使兩個ComboBox控件依次獲取添加項Check1(i)的標題,其中UBound為Check1控件數(shù)組的上界。
(3)SQL命令
Private Sub Command1_Click():Dim i As Integer,strsql As String:strsql="select”:For i=Check1.LBound To Check1.UBound:If Check1(i).Value=1 Then:strsql=strsql+"“+Check1(i).Tag &”,":End If:Next:If strsql="select”Then:strsql="select *":Else:strsql=Left(strsql, Len(strsql)-1):End If:strsql=strsql+”from telbook where”+Check1.Item(Combo2.ListIndex).Tag:If Option1(0).Value=True Then:strsql=strsql+"='":strsql=strsql+Text1.Text+"'":Else:strsql=strsql+”like*":strsql=strsql+Text1.Text+"*'":End If:strsql=strsql+”order by”+Check1.Item(Combo1.ListIndex).Tag:Data1.RecordSource=strsql:Data1.Refresh:End Sub
此段代碼用于構造SQL語句,通過For循環(huán)與IF語句的嵌套,遍歷并挑選被勾選的Check1對象,然后查詢被選中的字段,并將結果顯示出來。最后通過Call命令調用子程序約束DataGrid控件的顯示條件。有關約束DataGrid對象的顯示條件需要通過For循環(huán)與If語句的嵌套,遍歷并挑選被勾選的Check1對象,將該控件的標題傳遞給DBGrid1對象,以此約束DBGrid1對象顯示的項。同時獲取該被勾選的Check1控件的字節(jié)數(shù),并與數(shù)據(jù)庫內對應項的字節(jié)數(shù)相比較,最終DBGrid1控件上該項的長度將取決于兩者之間較大的那一個。
4 結論(Conclusion)
Visual Basic的面向對象程序設計思想和可視化編程環(huán)境贏得了廣泛的市場應用,同時也是一個功能強大的數(shù)據(jù)庫開發(fā)平臺,為開發(fā)數(shù)據(jù)庫前臺應用程序提供了專門的控件,ACCESS是由微軟發(fā)布的關聯(lián)式數(shù)據(jù)庫管理系統(tǒng),結合了Microsoft Jet Database Engine和圖形用戶界面兩項特點,兩者的結合較適合編寫中小型的數(shù)據(jù)庫管理系統(tǒng)[5,6]。通過本系統(tǒng)的開發(fā)及相關文獻的研究,證明Visual Basic+Access是中小型管理信息系統(tǒng)開發(fā)最優(yōu)化組合。程序中五個窗體模塊,集成了整個學籍管理系統(tǒng),因為模塊獨立,對特定模塊的修改不會影響系統(tǒng)中其他模塊的正常工作。標準模塊和數(shù)據(jù)庫的開發(fā)更是體現(xiàn)了“一次編程,處處使用”的面向對象編程思想,為后續(xù)的擴展和維護提供了良好的技術支持。
參考文獻(References)
[1] 張玉清.HTML5新特性安全研究綜述[J].計算機研究與發(fā)展,2016(10):2163-2172.
[2] 梁合蘭,等.基于協(xié)同進化的松弛時序約束多服務流程優(yōu)化[J].計算機集成制造系統(tǒng),2015(08):2213-2227.
[3] 苗東菁,等.概率數(shù)據(jù)庫中近似函數(shù)依賴挖掘算法[J].計算機研究與發(fā)展,2015(12):2857-2865.
[4] 潘春花,等.基于Android的漢字聽寫比賽系統(tǒng)的設計與實現(xiàn)[J].軟件工程,2016(07):38-39;21.
[5] 段秀娟.智能化考試狀態(tài)識別監(jiān)控方法研究與仿真[J].計算機仿真,2014(01):209-210.
[6] 武懷生.基于VB&ACCESS的考試系統(tǒng)中生成不重復隨機試題的算法及程序設計[J].自動化與儀器儀表,2015(10):132-134.
作者簡介:
武懷生(1977-),男,碩士生,副教授.究領域:軟件工程.
李秀明(1978-),女,博士生,講師.究領域:計算機網路與遠程教育.本文通訊作者.