摘要:本文以学生学籍管理系统为研究对象,提出了一种基于VB+ACCESS模式的学生学籍管理系统。该系统解决了传统手工管理学生档案效率低、保密性差、数据冗余等问题。系统逻辑结构由前台应用程序开发和后台共享数据库设计两部分组成。应用程序开发的窗体模块和标准模块通过ADODB组件和标准SQL语句来实现连接和访问数据库。系统的详细设计以逻辑结构为框架,阐述了学生学籍信息的添加、查询和删除等功能的算法和程序的设计过程。
关键词:Visual Basic; Access; 学生学籍管理系统;
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.
Keyword:visual basic; access; the student status management system;
1、引言(Introduction)
目前,学生学籍管理系统已经是教育机构的重要应用平台,学籍管理系统的出现将学校教务工作人员从繁杂的手工劳动中解放出来,系统为用户提供充足的信息和快捷的查询手段及高效率、强保密性、低冗余、低错误率等特点是传统人工档案管理模式无法比拟和超越的[1]。基于Visual Basic+Access的学生学籍管理系统是信息管理的子系统,其内容主要包括前台应用程序的开发和后台数据库的设计两个方面。根据学籍管理系统的结构和功能进行数据库的设计,数据库的连接使用开源的第三方数据库框架ADODB进行数据的存取,可以批量导入和导出相关数据[2,3]。利用面向对象及模块独立的Visual Basic进行程序设计为系统后期扩展与维护提供了技术保障。
2、学生学籍管理系统的设计思想(The design idea of student status management system)
本系统由Visual Basic语言开发,由五个窗体模块和一个标准模块构成,分别承担不同的功能,由于标准模块内部存放部分其他窗体模块所需的公共代码,并不能独立运行,所以用带箭头虚线表示其他窗体模块对标准模块中公共代码的调用,如图1所示。
图1 学生学籍管理系统拓扑结构图
(1)模块Module1,该模块用来存放工程所用的公用信息,如程序与数据源的连接信息,系统的全局变量和函数等。
(2)窗体Frm Login,该窗体作为登录窗体,通过ADO控件的Record Source属性,指定通过窗体上的被绑定的相关控件访问的记录的来源,通过相关的SQL命令将输入的信息与数据表中预设的用户名与密码做比较,判断是否是合法用户。
(3)窗体Frm Main,该窗体作为主窗体,用以实现与各窗体之间的连接。另外,由于数据库在使用一段时间后,因数据删除而造成数据库中部分空间不可用的情况,这时就需要压缩数据库。因此,主窗体也添加了压缩和清空数据库的功能。
(4)窗体Frm TSL,该窗体为学籍管理窗体,通过各控件的Data Source属性和Data Filed属性,实现与数据源的绑定,并通过ADO控件中Recordset对象的一些属性和方法,实现学生学籍记录的查看、添加、保存、删除、修改等功能。该窗体是整个程序的核心,如图2所示。
图2 窗体
(5)窗体Frm Find,该窗体为数据查询窗体,通过SQL命令实现数据库查询功能,并将查询结果根据具体需要按照一定的顺序通过Data Grid控件显示出来。
(6)窗体Frm Admin,该窗体为管理员信息窗体,通过ADO控件中Validate事件的各Action参数实现对数据库的操作,并通过Data Grid对象将查询,以及修改管理员信息。
3、软件设计的流程结构与技术实现(The processstructure and technical implementation of the software design)
3.1、工程与主窗体
(1)创建窗体模块
新建工程及窗体,设置窗体属性。名称:Frm Main,并设置其他位置和外观属性;添加如下菜单:学籍管理(Mnu Hjgl)、学籍查询(Mnu Cs)、操作员管理(Mnu Yh Gl)、二级菜单:操作员管理(M n u Y h x x b j);切换操作员(Mnu Chyh)。数据库维护(Mnu Mdb Gl)、二级菜单:压缩数据库(Mnu Mdb Ys);清空数据库(Mnu Mdb Clear)、关于(Mnu About)、退出(Mnu Exit)。并在代码中完成菜单对象的事件内容。
(2)压缩数据库源代码。
Sub Compact Data():Dim src As String,dst As String:src=App.Path&”\Tel Db.mdb":dst=App.Path&”\abbc2.mdb":If Dir(dst)<>““Then Kill dst:Set jro=Create Object("JRO.Jet Engine"):jro.Compact Datab ase”Provider=Microsoft.Jet.OLEDB.4.0;Data Sourc e=“&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
以上代码由Mnu Mdb Ys_Click()事件发生后调用,作用是先检测临时文件“abbc2.mdb”是否存在,如存在则删除,然后将数据库文件“Tel Db.mdb”压缩到临时文件中,接着将原数据库文件删除,最后将临时文件再重命名为原数据库文件名,以达到压缩数据库的目的[1]。
(3)清空数据库源代码,其中调用了压缩数据库函数Compact Data()
Private Sub Mnu Mdb Clear_Click():Dim s SQL As String,db:Set db=Create Object("ADODB.Connection"):db.Open”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“&App.Path&”\Tel Db.m d b":s S Q L="D E L E T E*F R O M t e l b o o k":d b.E x e c u t e s S Q L,d b F a i l O n E r r o r:d b.C l o s e:C a l l C o m p a c t D a t a:M s g B o x”数据库已清空!",vb Information,”提示"Set db=Nothing:End Sub
此段代码的功能是删除数据库文件“Tel Db.mdb”中的表“telbook”,以达到清空数据库的目的。数据库的建立将在后面阐述。
3.2、数据库设计
(1)创建建数据库(Tel Db.mdb),设计两个表MMK、telbook
M M K(管理员表)结构包含2个字段:字段名称(User Name,Pass Word);数据类型(文本,文本)。
Telbook(学生信息表)结构包含13个字段:字段名称(name,sex,minzhu,date,id,grade,xibie,class,huji,zhengzhi,address,tel,pic);数据类型:date为日期/时间,pic为OLE对象,其他都为文本。
(2)连接数据库
为了保证程序将强的移植性,数据库采用字符串的连接方式,同时将相关代码写成函数放入标准模块,保证其他窗体模块调用方便。函数代码如下:
Public Function Open MDb(Data Control As A dodc,T ab e l N ame A s Strin g):D im Fi le N am e A s S t r i n g:F i l e N a m e=A p p.P a t h&”\t e l d b.mdb":Data Control.Connection String="Provider=Micro soft.Jet.OLEDB.4.0;Data Source=“&File Name&”;Jet OLEDB:Database Password=;Persist Security Info=False;":Data Control.Record Source=Tabel Name:Data Control.Refresh:End Function
此段代码用于检测数据库文件是否存在,避免程序发生错误,并将ADO控件与数据库文件“teldb.mdb”连接。
3.3、登录窗体(Frm Login)
新建窗体(Frm Login),包含对象为Combo Box控件(Combo1)、Txet Box控件(Text1)、Image控件(Image1,确定)、Image控件(Image2,取消)、ADO控件(Data1)。窗体Frm Login是用来做登录界面的窗体,程序将ADO控件与数据库文件中用于存储用户名和密码的表“MMk”进行连接,使用SQL中的Select命令做遍历查询记录,并将数据库记录与控件进行绑定,然后与管理员输入的用户名和密码在进行比对,具体代码就不一一阐述。
3.4、添加学籍窗体(Frm TSL)
(1)创建窗体模块(图2)
(1)添加窗体,名称:Frm TSL;(2)添加一组Label控件,名称为“lbl Labels”,Index从0到12,设置Caption属性来显示窗体上的文本提示,如学号,姓名等;(3)添加一组Label控件,名称为“Lb Button”,Index从0到7,设置Caption属性用来显示记录操作向导,如上一记录、下一记录等;(4)添加一组Text Box对象,名称为“txt Fields”,Index从0到11,不包含1。Data Source属性设置为adodc1,Data Filed属性,根据Index从0到11(不包含1),属性设置为Telbook中的字段值,如name、minzhu等,用于将每个Text Box控件与数据库中相应的字段绑定;(5)添加一个Image对象,名称为“Image1”,Data Source属性设为adodc1,Data Filed属性设置为“pic”,将此对象与数据库中的以长二进制数据类型保存的字段“pic”绑定。
(2)记录的访问,添加和删除等源代码
P r i v a t e S u b L b B u t t o n_C l i c k(I n d e x A s Integer):With Data1.Recordset:On Error Resume Next:Select Case Index:Case 0:.Move Previous:Case1:.Move Next:Case2:.Move First:Case3:.Move Last:Case4:.Add New:Case5:.Delete:.Move Next:Case 6:Image1.Data Changed=True:adodc1.Recordset.Update:Lb Msg="保存完毕!":Exit Sub:Case 7:Unload Me::End Select:If.BOF Then.Move First:If.EOF Then.Move Last:End With:Label1.Caption="记录:”&Data1.Recordset.Absolute Position:End Sub
中间还用到了Bof和Eof属性。进行删除操作后,如果Bof属性为Ture,则表示记录指针当前位置位于首记录之前,此时调用Move First方法将指针移动到首记录;如果Eof属性为Ture,则表示记录指针当前位置位于末记录之后,此时调用Move Last方法将指针移动到末记录。Bof和Eof属性,避免了删除操作后程序出错。
(3)检验数据源代码
Function Test()As Boolean:Dim Err Msg As String:If Not(Is Numeric(txt Fields(4))And Is Numeric(txt Fields(5))And Is Numeric(txt Fields(11)))Then:Msg Box”学号、年级、电话必须为数字!",vb Critical,”出错提示":Exit Function:End If:If Is Date(txt Fields(3))=False Then:Msg Box”出生日期必须符合日期格式(2009-5-1)!",vb Critical,”出错提示":Exit Function:End If
I f t x t F i e l d s(0)="“O r t x t F i e l d s(2)="“O r txt Fields(6)="“Or txt Fields(9)="“Or txt Fields(7)="“Or txt Fields(8)="“Or txt Fields(10)="“Then:Msg Box”相关栏目不能为空!",vb Critical,”出错提示":Exit Function:End If:Test=True:End Function
此段代码主要是为了检验数据有效性,并弹出相应的提示窗口。单击“保存”按钮后此段代码将被调用,检查学号、年级、电话是否为数字;出生日期是否符合日期格式;以及相关栏目是否为空。
(4)添加图片源代码
Private Sub Command1_Click():Dim o DLG:Set o DLG=Create Object("MSCom Dlg.Common Dialog"):With o D L G:.D i a l o g T i t l e="打开文件":.F i l t e r="所有图片文件|*.j p g;*.j p e g;*.b m p;*.g i f|J P G文件|*.jpg;*.jpeg|BMP文件|*.bmp|GIF文件|*.gif":.Filter Index=1:.Max File Size=1255:.Show Open:If.File Name<>""Then:Image1.Picture=Load Picture(.File Name):End If:End With:Set o DLG=Nothing:End Sub[4]
此段代码在单击“浏览”按钮后被调用,通过Create Object函数引用Common Dialog控件。Common Dialog控件能提供一组标准的操作对话框,在此段代码中用来运行打开文件的操作。然后通过代码将图片传递给控件Image1,控件Image1已通过Data Source属性和Data Filed属性与数据库中表”telbook”里的”pic”字段绑定。其中:.Filter="所有图片文件|*.jpg;*.jpeg;*.bmp;*.gif|JPG文件|*.jpg;*.jpeg|BMP文件|*.bmp|GIF文件|*.gif”这一段代码用以约束打开文件的格式。
3.5、数据查询窗体(Frm Find)
(1)创建窗体模块
(1)添加窗体,名称:Frm Find;(2)添加对象,Data Grid对象,名称:DBGrid1”,Data Source:adodc1;Frame对象,名称:Frame1”在Frame对象内部添加一组Check Box对象,名称:Check1”,Index从0到11,Caption设置为具体学生信,如姓名、性别等;两个Combo Box对象,名称:Combo1、Combo2,Text:姓名;两个Command Button对象,名称:Command1、Command2,Caption:查询、退出。
(2)Combo Box控件连接数据库,获取List
Private Sub Form_Load():Dim i As Integer:Open MDb Data1,”telbook":Set Title:For i=0 To Check1.UBound:Combo1.Add Item Check1(i).Caption:Combo2.AddItemCheck1(i).Caption:Next:Combo1.List Index=0:Combo2.List Index=0:End Sub
此段代码用于打开数据库,并通过For循环使两个Combo Box控件依次获取添加项Check1(i)的标题,其中UBound为Check1控件数组的上界。
(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.I t e m(C o m b o 2.L i s t I n d e x).T a g:I f O p t i o n 1(0).Value=True Then:strsql=strsql+"='":strsql=strsql+T ext1.Text+"'":Else:strsql=strsql+”like’*":strsql=s trsql+Text1.Text+"*'":End If:strsql=strsql+”order by”+Check1.Item(Combo1.List Index).Tag:Data1.Record Source=strsql:Data1.Refresh:End Sub
此段代码用于构造SQL语句,通过For循环与IF语句的嵌套,遍历并挑选被勾选的Check1对象,然后查询被选中的字段,并将结果显示出来。最后通过Call命令调用子程序约束Data Grid控件的显示条件。有关约束Data Grid对象的显示条件需要通过For循环与If语句的嵌套,遍历并挑选被勾选的Check1对象,将该控件的标题传递给DBGrid1对象,以此约束DBGrid1对象显示的项。同时获取该被勾选的Check1控件的字节数,并与数据库内对应项的字节数相比较,最终DBGrid1控件上该项的长度将取决于两者之间较大的那一个。
4、结论(Conclusion)
Visual Basic的面向对象程序设计思想和可视化编程环境赢得了广泛的市场应用,同时也是一个功能强大的数据库开发平台,为开发数据库前台应用程序提供了专门的控件,ACCESS是由微软发布的关联式数据库管理系统,结合了Microsoft Jet Database Engine和图形用户界面两项特点,两者的结合较适合编写中小型的数据库管理系统[5,6]。通过本系统的开发及相关文献的研究,证明Visual Basic+Access是中小型管理信息系统开发最优化组合。程序中五个窗体模块,集成了整个学籍管理系统,因为模块独立,对特定模块的修改不会影响系统中其他模块的正常工作。标准模块和数据库的开发更是体现了“一次编程,处处使用”的面向对象编程思想,为后续的扩展和维护提供了良好的技术支持。
参考文献
[1]张玉清.HTML5新特性安全研究综述[J].计算机研究与发展,2016(10):2163-2172.
[2]梁合兰,等.基于协同进化的松弛时序约束多服务流程优化[J].计算机集成制造系统,2015(08):2213-2227.
[3]苗东菁,等.概率数据库中近似函数依赖挖掘算法[J].计算机研究与发展,2015(12):2857-2865.
[4]潘春花,等.基于Android的汉字听写比赛系统的设计与实现[J].软件工程,2016(07):38-39;21.
[5]段秀娟.智能化考试状态识别监控方法研究与仿真[J].计算机仿真,2014(01):209-210.
[6]武怀生.基于VB&ACCESS的考试系统中生成不重复随机试题的算法及程序设计[J].自动化与仪器仪表,2015(10):132-134.