武懷生+李秀明
摘 要:本文以學(xué)生學(xué)籍管理系統(tǒng)為研究對(duì)象,提出了一種基于VB+ACCESS模式的學(xué)生學(xué)籍管理系統(tǒng)。該系統(tǒng)解決了傳統(tǒng)手工管理學(xué)生檔案效率低、保密性差、數(shù)據(jù)冗余等問(wèn)題。系統(tǒng)邏輯結(jié)構(gòu)由前臺(tái)應(yīng)用程序開(kāi)發(fā)和后臺(tái)共享數(shù)據(jù)庫(kù)設(shè)計(jì)兩部分組成。應(yīng)用程序開(kāi)發(fā)的窗體模塊和標(biāo)準(zhǔn)模塊通過(guò)ADODB組件和標(biāo)準(zhǔn)SQL語(yǔ)句來(lái)實(shí)現(xiàn)連接和訪問(wèn)數(shù)據(jù)庫(kù)。系統(tǒng)的詳細(xì)設(shè)計(jì)以邏輯結(jié)構(gòu)為框架,闡述了學(xué)生學(xué)籍信息的添加、查詢和刪除等功能的算法和程序的設(shè)計(jì)過(guò)程。
關(guān)鍵詞:Visual Basic;Access;學(xué)生學(xué)籍管理系統(tǒng)
中圖分類號(hào):TP31 文獻(xiàn)標(biāo)識(shí)碼: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)
目前,學(xué)生學(xué)籍管理系統(tǒng)已經(jīng)是教育機(jī)構(gòu)的重要應(yīng)用平臺(tái),學(xué)籍管理系統(tǒng)的出現(xiàn)將學(xué)校教務(wù)工作人員從繁雜的手工勞動(dòng)中解放出來(lái),系統(tǒng)為用戶提供充足的信息和快捷的查詢手段及高效率、強(qiáng)保密性、低冗余、低錯(cuò)誤率等特點(diǎn)是傳統(tǒng)人工檔案管理模式無(wú)法比擬和超越的[1]。基于Visual Basic+Access的學(xué)生學(xué)籍管理系統(tǒng)是信息管理的子系統(tǒng),其內(nèi)容主要包括前臺(tái)應(yīng)用程序的開(kāi)發(fā)和后臺(tái)數(shù)據(jù)庫(kù)的設(shè)計(jì)兩個(gè)方面。根據(jù)學(xué)籍管理系統(tǒng)的結(jié)構(gòu)和功能進(jìn)行數(shù)據(jù)庫(kù)的設(shè)計(jì),數(shù)據(jù)庫(kù)的連接使用開(kāi)源的第三方數(shù)據(jù)庫(kù)框架ADODB進(jìn)行數(shù)據(jù)的存取,可以批量導(dǎo)入和導(dǎo)出相關(guān)數(shù)據(jù)[2,3]。利用面向?qū)ο蠹澳K獨(dú)立的Visual Basic進(jìn)行程序設(shè)計(jì)為系統(tǒng)后期擴(kuò)展與維護(hù)提供了技術(shù)保障。
2 學(xué)生學(xué)籍管理系統(tǒng)的設(shè)計(jì)思想(The design idea of
student status management system)
本系統(tǒng)由Visual Basic語(yǔ)言開(kāi)發(fā),由五個(gè)窗體模塊和一個(gè)標(biāo)準(zhǔn)模塊構(gòu)成,分別承擔(dān)不同的功能,由于標(biāo)準(zhǔn)模塊內(nèi)部存放部分其他窗體模塊所需的公共代碼,并不能獨(dú)立運(yùn)行,所以用帶箭頭虛線表示其他窗體模塊對(duì)標(biāo)準(zhǔn)模塊中公共代碼的調(diào)用,如圖1所示。
(1)模塊Module1,該模塊用來(lái)存放工程所用的公用信息,如程序與數(shù)據(jù)源的連接信息,系統(tǒng)的全局變量和函數(shù)等。
(2)窗體FrmLogin,該窗體作為登錄窗體,通過(guò)ADO控件的RecordSource屬性,指定通過(guò)窗體上的被綁定的相關(guān)控件訪問(wèn)的記錄的來(lái)源,通過(guò)相關(guān)的SQL命令將輸入的信息與數(shù)據(jù)表中預(yù)設(shè)的用戶名與密碼做比較,判斷是否是合法用戶。
(3)窗體FrmMain,該窗體作為主窗體,用以實(shí)現(xiàn)與各窗體之間的連接。另外,由于數(shù)據(jù)庫(kù)在使用一段時(shí)間后,因數(shù)據(jù)刪除而造成數(shù)據(jù)庫(kù)中部分空間不可用的情況,這時(shí)就需要壓縮數(shù)據(jù)庫(kù)。因此,主窗體也添加了壓縮和清空數(shù)據(jù)庫(kù)的功能。
(4)窗體FrmTSL,該窗體為學(xué)籍管理窗體,通過(guò)各控件的DataSource屬性和DataFiled屬性,實(shí)現(xiàn)與數(shù)據(jù)源的綁定,并通過(guò)ADO控件中Recordset對(duì)象的一些屬性和方法,實(shí)現(xiàn)學(xué)生學(xué)籍記錄的查看、添加、保存、刪除、修改等功能。該窗體是整個(gè)程序的核心,如圖2所示。
(5)窗體FrmFind,該窗體為數(shù)據(jù)查詢窗體,通過(guò)SQL命令實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢功能,并將查詢結(jié)果根據(jù)具體需要按照一定的順序通過(guò)DataGrid控件顯示出來(lái)。
(6)窗體FrmAdmin,該窗體為管理員信息窗體,通過(guò)ADO控件中Validate事件的各Action參數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作,并通過(guò)DataGrid對(duì)象將查詢,以及修改管理員信息。
3 軟件設(shè)計(jì)的流程結(jié)構(gòu)與技術(shù)實(shí)現(xiàn)(The process
structure and technical implementation of the
software design)
3.1 工程與主窗體
(1)創(chuàng)建窗體模塊
新建工程及窗體,設(shè)置窗體屬性。名稱:FrmMain,并設(shè)置其他位置和外觀屬性;添加如下菜單:學(xué)籍管理(MnuHjgl)、學(xué)籍查詢(MnuCs)、操作員管理(MnuYhGl)、二級(jí)菜單:操作員管理(MnuYhxxbj);切換操作員(MnuChyh)。數(shù)據(jù)庫(kù)維護(hù)(MnuMdbGl)、二級(jí)菜單:壓縮數(shù)據(jù)庫(kù)(MnuMdbYs);清空數(shù)據(jù)庫(kù)(MnuMdbClear)、關(guān)于(MnuAbout)、退出(MnuExit)。并在代碼中完成菜單對(duì)象的事件內(nèi)容。
(2)壓縮數(shù)據(jù)庫(kù)源代碼。
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”P(pán)rovider=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ā)生后調(diào)用,作用是先檢測(cè)臨時(shí)文件“abbc2.mdb”是否存在,如存在則刪除,然后將數(shù)據(jù)庫(kù)文件“TelDb.mdb”壓縮到臨時(shí)文件中,接著將原數(shù)據(jù)庫(kù)文件刪除,最后將臨時(shí)文件再重命名為原數(shù)據(jù)庫(kù)文件名,以達(dá)到壓縮數(shù)據(jù)庫(kù)的目的[1]。
(3)清空數(shù)據(jù)庫(kù)源代碼,其中調(diào)用了壓縮數(shù)據(jù)庫(kù)函數(shù)CompactData()
Private Sub MnuMdbClear_Click():Dim sSQL As String,db:Set db=CreateObject("ADODB.Connection"):db.Open”P(pán)rovider=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ù)庫(kù)已清空!",
vbInformation,”提示"Set db=Nothing:End Sub
此段代碼的功能是刪除數(shù)據(jù)庫(kù)文件“TelDb.mdb”中的表“telbook”,以達(dá)到清空數(shù)據(jù)庫(kù)的目的。數(shù)據(jù)庫(kù)的建立將在后面闡述。
3.2 數(shù)據(jù)庫(kù)設(shè)計(jì)
(1)創(chuàng)建建數(shù)據(jù)庫(kù)(TelDb.mdb),設(shè)計(jì)兩個(gè)表MMK、telbook
MMK(管理員表)結(jié)構(gòu)包含2個(gè)字段:字段名稱(UserName,PassWord);數(shù)據(jù)類型(文本,文本)。
Telbook(學(xué)生信息表)結(jié)構(gòu)包含13個(gè)字段:字段名稱(name,sex,minzhu,date,id,grade,xibie,class,huji,zhengzhi,address,tel,pic);數(shù)據(jù)類型:date為日期/時(shí)間,pic為OLE對(duì)象,其他都為文本。
(2)連接數(shù)據(jù)庫(kù)
為了保證程序?qū)?qiáng)的移植性,數(shù)據(jù)庫(kù)采用字符串的連接方式,同時(shí)將相關(guān)代碼寫(xiě)成函數(shù)放入標(biāo)準(zhǔn)模塊,保證其他窗體模塊調(diào)用方便。函數(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
此段代碼用于檢測(cè)數(shù)據(jù)庫(kù)文件是否存在,避免程序發(fā)生錯(cuò)誤,并將ADO控件與數(shù)據(jù)庫(kù)文件“teldb.mdb”連接。
3.3 登錄窗體(FrmLogin)
新建窗體(FrmLogin),包含對(duì)象為ComboBox控件(Combo1)、TxetBox控件(Text1)、Image控件(Image1,確定)、Image控件(Image2,取消)、ADO控件(Data1)。窗體FrmLogin是用來(lái)做登錄界面的窗體,程序?qū)DO控件與數(shù)據(jù)庫(kù)文件中用于存儲(chǔ)用戶名和密碼的表“MMk”進(jìn)行連接,使用SQL中的Select命令做遍歷查詢記錄,并將數(shù)據(jù)庫(kù)記錄與控件進(jìn)行綁定,然后與管理員輸入的用戶名和密碼在進(jìn)行比對(duì),具體代碼就不一一闡述。
3.4 添加學(xué)籍窗體(FrmTSL)
(1)創(chuàng)建窗體模塊(圖2)
①添加窗體,名稱:FrmTSL;②添加一組Label控件,名稱為“l(fā)blLabels”,Index從0到12,設(shè)置Caption屬性來(lái)顯示窗體上的文本提示,如學(xué)號(hào),姓名等;③添加一組Label控件,名稱為“LbButton”,Index從0到7,設(shè)置Caption屬性用來(lái)顯示記錄操作向?qū)?,如上一記錄、下一記錄等;④添加一組TextBox對(duì)象,名稱為“txtFields”,Index從0到11,不包含1。DataSource屬性設(shè)置為adodc1,DataFiled屬性,根據(jù)Index從0到11(不包含1),屬性設(shè)置為T(mén)elbook中的字段值,如name、minzhu等,用于將每個(gè)TextBox控件與數(shù)據(jù)庫(kù)中相應(yīng)的字段綁定;⑤添加一個(gè)Image對(duì)象,名稱為“Image1”,DataSource屬性設(shè)為adodc1,DataFiled屬性設(shè)置為“pic”,將此對(duì)象與數(shù)據(jù)庫(kù)中的以長(zhǎng)二進(jìn)制數(shù)據(jù)類型保存的字段“pic”綁定。
(2)記錄的訪問(wèn),添加和刪除等源代碼
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屬性。進(jìn)行刪除操作后,如果Bof屬性為T(mén)ure,則表示記錄指針當(dāng)前位置位于首記錄之前,此時(shí)調(diào)用MoveFirst方法將指針移動(dòng)到首記錄;如果Eof屬性為T(mén)ure,則表示記錄指針當(dāng)前位置位于末記錄之后,此時(shí)調(diào)用MoveLast方法將指針移動(dòng)到末記錄。Bof和Eof屬性,避免了刪除操作后程序出錯(cuò)。
(3)檢驗(yàn)數(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”學(xué)號(hào)、年級(jí)、電話必須為數(shù)字!",vbCritical,”出錯(cuò)提示":Exit Function:End If:If IsDate(txtFields(3))=False Then:MsgBox”出生日期必須符合日期格式(2009-5-1)!", vbCritical,”出錯(cuò)提示":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”相關(guān)欄目不能為空!", vbCritical,”出錯(cuò)提示":Exit Function:End If:Test=True:End Function
此段代碼主要是為了檢驗(yàn)數(shù)據(jù)有效性,并彈出相應(yīng)的提示窗口。單擊“保存”按鈕后此段代碼將被調(diào)用,檢查學(xué)號(hào)、年級(jí)、電話是否為數(shù)字;出生日期是否符合日期格式;以及相關(guān)欄目是否為空。
(4)添加圖片源代碼
Private Sub Command1_Click():Dim oDLG:Set oDLG=CreateObject("MSComDlg.CommonDialog"):With oDLG:.DialogTitle="打開(kāi)文件":.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]
此段代碼在單擊“瀏覽”按鈕后被調(diào)用,通過(guò)CreateObject函數(shù)引用CommonDialog控件。CommonDialog控件能提供一組標(biāo)準(zhǔn)的操作對(duì)話框,在此段代碼中用來(lái)運(yùn)行打開(kāi)文件的操作。然后通過(guò)代碼將圖片傳遞給控件Image1,控件Image1已通過(guò)DataSource屬性和DataFiled屬性與數(shù)據(jù)庫(kù)中表”telbook”里的”pic”字段綁定。其中:.Filter="所有圖片文件|*.jpg;*.jpeg;*.bmp;*.gif|JPG文件|*.jpg;*.jpeg|BMP文件|*.bmp|GIF文件|*.gif”這一段代碼用以約束打開(kāi)文件的格式。
3.5 數(shù)據(jù)查詢窗體(FrmFind)
(1)創(chuàng)建窗體模塊
(1)添加窗體,名稱:FrmFind;(2)添加對(duì)象,DataGrid對(duì)象,名稱:DBGrid1”,DataSource:adodc1;Frame對(duì)象,名稱:Frame1”在Frame對(duì)象內(nèi)部添加一組CheckBox對(duì)象,名稱:Check1”,Index從0到11,Caption設(shè)置為具體學(xué)生信,如姓名、性別等;兩個(gè)ComboBox對(duì)象,名稱:Combo1、Combo2,Text:姓名;兩個(gè)CommandButton對(duì)象,名稱:Command1、Command2,Caption:查詢、退出。
(2)ComboBox控件連接數(shù)據(jù)庫(kù),獲取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
此段代碼用于打開(kāi)數(shù)據(jù)庫(kù),并通過(guò)For循環(huán)使兩個(gè)ComboBox控件依次獲取添加項(xiàng)Check1(i)的標(biāo)題,其中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
此段代碼用于構(gòu)造SQL語(yǔ)句,通過(guò)For循環(huán)與IF語(yǔ)句的嵌套,遍歷并挑選被勾選的Check1對(duì)象,然后查詢被選中的字段,并將結(jié)果顯示出來(lái)。最后通過(guò)Call命令調(diào)用子程序約束DataGrid控件的顯示條件。有關(guān)約束DataGrid對(duì)象的顯示條件需要通過(guò)For循環(huán)與If語(yǔ)句的嵌套,遍歷并挑選被勾選的Check1對(duì)象,將該控件的標(biāo)題傳遞給DBGrid1對(duì)象,以此約束DBGrid1對(duì)象顯示的項(xiàng)。同時(shí)獲取該被勾選的Check1控件的字節(jié)數(shù),并與數(shù)據(jù)庫(kù)內(nèi)對(duì)應(yīng)項(xiàng)的字節(jié)數(shù)相比較,最終DBGrid1控件上該項(xiàng)的長(zhǎng)度將取決于兩者之間較大的那一個(gè)。
4 結(jié)論(Conclusion)
Visual Basic的面向?qū)ο蟪绦蛟O(shè)計(jì)思想和可視化編程環(huán)境贏得了廣泛的市場(chǎng)應(yīng)用,同時(shí)也是一個(gè)功能強(qiáng)大的數(shù)據(jù)庫(kù)開(kāi)發(fā)平臺(tái),為開(kāi)發(fā)數(shù)據(jù)庫(kù)前臺(tái)應(yīng)用程序提供了專門(mén)的控件,ACCESS是由微軟發(fā)布的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),結(jié)合了Microsoft Jet Database Engine和圖形用戶界面兩項(xiàng)特點(diǎn),兩者的結(jié)合較適合編寫(xiě)中小型的數(shù)據(jù)庫(kù)管理系統(tǒng)[5,6]。通過(guò)本系統(tǒng)的開(kāi)發(fā)及相關(guān)文獻(xiàn)的研究,證明Visual Basic+Access是中小型管理信息系統(tǒng)開(kāi)發(fā)最優(yōu)化組合。程序中五個(gè)窗體模塊,集成了整個(gè)學(xué)籍管理系統(tǒng),因?yàn)槟K獨(dú)立,對(duì)特定模塊的修改不會(huì)影響系統(tǒng)中其他模塊的正常工作。標(biāo)準(zhǔn)模塊和數(shù)據(jù)庫(kù)的開(kāi)發(fā)更是體現(xiàn)了“一次編程,處處使用”的面向?qū)ο缶幊趟枷?,為后續(xù)的擴(kuò)展和維護(hù)提供了良好的技術(shù)支持。
參考文獻(xiàn)(References)
[1] 張玉清.HTML5新特性安全研究綜述[J].計(jì)算機(jī)研究與發(fā)展,2016(10):2163-2172.
[2] 梁合蘭,等.基于協(xié)同進(jìn)化的松弛時(shí)序約束多服務(wù)流程優(yōu)化[J].計(jì)算機(jī)集成制造系統(tǒng),2015(08):2213-2227.
[3] 苗東菁,等.概率數(shù)據(jù)庫(kù)中近似函數(shù)依賴挖掘算法[J].計(jì)算機(jī)研究與發(fā)展,2015(12):2857-2865.
[4] 潘春花,等.基于Android的漢字聽(tīng)寫(xiě)比賽系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].軟件工程,2016(07):38-39;21.
[5] 段秀娟.智能化考試狀態(tài)識(shí)別監(jiān)控方法研究與仿真[J].計(jì)算機(jī)仿真,2014(01):209-210.
[6] 武懷生.基于VB&ACCESS的考試系統(tǒng)中生成不重復(fù)隨機(jī)試題的算法及程序設(shè)計(jì)[J].自動(dòng)化與儀器儀表,2015(10):132-134.
作者簡(jiǎn)介:
武懷生(1977-),男,碩士生,副教授.究領(lǐng)域:軟件工程.
李秀明(1978-),女,博士生,講師.究領(lǐng)域:計(jì)算機(jī)網(wǎng)路與遠(yuǎn)程教育.本文通訊作者.