




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.z.VB+Access设计图书管理系统一、需求分析
在进行一个项目的设计之前,先要进行必要的需求分析。
现*图书馆需要管理其各种人员和图书信息,希望实现办公的信息化,通过建立一个图书管理系统来管理图书。其完成的功能如下:
(1)可以实现图书的登记、借阅和赔偿的管理。
(2)可以实现对图书的各种信息的查询,包括逐个浏览,以及对图书信息的增加、删除和编辑操作。另外,可以根据输入的信息来检索*个图书的信息。
(3)可以实现对管理人员的投诉管理。
(4)可以实现对值班人员的管理。
系统的功能模块图如图1所示。
本实例根据上面的设计规划出的实体有图书登记实体、图书借阅实体、图书赔偿实体、查询输出实体、值班管理实体、投诉管理实体。各个实体具体的描述E-R图如下。
图书登记实体E-R图如图2所示。
图书借阅实体E-R图如图3所示。
图1系统的功能模块图
图2图书登记实体E-R图
图3图书借阅实体E-R图
图书赔偿实体E-R图如图4所示。
图4图书赔偿实体E-R图
投诉管理实体E-R图如图5所示。
图5投诉管理实体E-R图
值班管理实体E-R图如图6所示。
图6值班管理实体E-R图
查询输出实体E-R图如图7所示。
图7查询输出实体E-R图二、结构设计
根据上面的需求分析,设计好数据库系统,然后开发应用程序可以考虑的窗体的系统,每一个窗体实现不同的功能,可以设计下面的几个模块。
●图书管理模块:用来实现图书的登记、借阅、赔偿。
●图书资料模块:用来实现图书的查询输出。
●值班管理模块:用来实现管理人员的值班浏览。
●投诉管理模块:用来实现对管理人员的投诉管理。
●系统管理模块:用来实现用户的增加、删除和修改等操作。
三、数据库设计
这里的数据库采用Access,用ADO作为连接数据对象。
1、建立Access数据库
启动Access,建立一个空的数据库book.mdb,如图8所示。
使用程序设计器建立系统需要的表格如下。
图书登记表,如图9所示。
图8建立数据库book.mdb图9图书登记表
图书借阅表,如图10所示。图书赔偿表,如图11所示。
图10图书借阅表图11图书赔偿表
图书资料表,如图12所示。系统管理表,如图13所示。
图12图书资料表图13系统管理表
投诉管理表,如图14所示。
图14投诉管理表
值班管理表,如图15所示。
图15值班管理表
2、连接数据
在VisualBasic环境下,选择“工程”→“引用”命令,在随后出现的对话框中选择“MicrosoftActive*DataObjects2.0Library”,然后单击“确定”按钮,如图16所示。
图16引用ADO连接数据库
在程序设计的公共模块中,先定义ADO连接对象。语句如下:
PublicconnAsNewADODB.Connection'标记连接对象
然后在子程序中,用如下的语句即可打开数据库:
DimconnectionstringAsString
connectionstring="provider=Microsoft.Jet.oledb.4.0;"&_
"datasource=book.mdb"
conn.Openconnectionstring
3、设置ODBC
VB的ADO对象是通过ODBC来访问数据库,所以还要建立ODBC数据引擎接口。
打开控制面板中的“管理工具”→“数据源”(ODBC),出现如图17所示的对话框。
图17ODBC对话框
单击“添加”按钮,出现“创建新数据源”对话框,如图18所示。
图18“创建新数据源”对话框
选择MicrosoftAccessDriver(*.mdb),单击“完成”按钮,出现如图19所示对话框。
图19设置连接数据源
在“数据源名”文本框中添加一个名字,单击“确定”按钮完成系统默认连接设置。然后在ODBC对话框中单击“确定”按钮完成ODBC设置。界面设计
设计好的界面如图20所示。
图20图书管理系统界面
这是一个多文档界面(MDI)应用程序,可以同时显示多个文档,每个文档显示在各自的窗体中。MDI应用程序中常有包含子菜单的“窗体”选项,用于在窗体或文档之间进行切换。
菜单应用程序中,有5个菜单选项,每个选项对应着E-R图的一个子项目。
1、创建主窗体
首先创建一个工程,命名为图书管理系统,选择“工程”→“添加MDI窗体”命令,则在项目中添加了主窗体。该窗体的一些属性如表1所示。
表1主窗体的属性属性值Caption图书管理系统NameMainMenuMainmenu1WindowstateMa*size
Windowstate的值为Ma*size,即程序启动之后自动最大化。
将“菜单”组件从“工具箱”拖到窗体上。创建一个Te*t属性设置为“文件”的顶级菜单项,且带有名为“关闭”的子菜单项。类似地创建一些菜单项,如表2所示。
表2菜单项表菜单名称Te*t属性功能描述MenuItem1图书管理顶级菜单,包含子菜单MenuItem2图书登记调出图书登记窗体MenuItem3图书借阅调出图书借阅窗体MenuItem4图书赔偿调出图书赔偿窗体MenuItem5图书资料顶级菜单,包含子菜单MenuItem6查询输出调出查询输出窗体MenuItem7值班管理顶级菜单,没有子菜单MenuItem8投诉管理顶级菜单,没有子菜单MenuItem9系统管理顶级菜单,包含子菜单MenuItem10增加用户调出用户窗体MenuItem11修改密码调出密码窗体MenuItem12退出系统退出
主窗体如图21所示。
图21主窗体
2、创建各子窗体
选择“工程”→“添加窗体”命令,添加子窗体。
在新建VisualBasic工程时自带的窗体中,将其属性MIDChild改成True,则这个窗体成为MID窗体的子窗体。
在这个项目中,要创建的子窗体如表3所示。
表3所有子窗体子窗体名Te*t图书登记frmdengji图书借阅frmjieyue图书赔偿frmpeichang增加新用户frmadduser查询输出frmfind登录系统frmlogin修改密码frmchangepwd
下面分别给出这些子窗体,以及它们所使用的控件。
(1)图书登记子窗体如图22所示,其控件如表4所示。
图22图书登记子窗体
表4图书登记子窗体控件控件类别控件Name控件Te*tLabelLabel1编号Label2书名Label3类型Label4购买日期Label5定价Te*tBo*Te*t1(空)Te*t2(空)Te*t3(空)Te*t4(空)Te*t5(空)mandButtonmand1增加记录mand2删除记录mand3下一条mand4上一条mand5第一条mand6最后一条mand7退出ADODataAdodc1(空)DataGridDataGrid1(空)
图书借阅和图书赔偿子窗体分别如图23和图24所示,因为它们的控件与图书登记子窗体的雷同,在此不作介绍。
图23图书借阅子窗体
图24图书赔偿子窗体
(2)增加用户子窗体如图25所示,其控件如表5所示。
图25增加用户子窗体
表5增加用户子窗体控件控件类别控件Name控件Te*tLabelLabel1输入用户名Label2输入密码Label3确认密码Label4选择权限Te*tBo*Te*t1(空)Te*t2(空)Te*t3(空)boBo*b1(空)mandButtonmandl确定mand2取消
(3)修改密码子窗体如图26所示。
图26修改密码子窗体
(4)库房管理子窗体如图27所示。
图27库房管理子窗体
其控件如表6所示。
表6库房管理子窗体控件控件类别控件Name控件Te*tTe*tBo*Te*t1(空)boBo*bo1
MSFle*GridMSFle*Grid1
(5)查询子窗体如图28所示,其控件如表7所示。
图28查询子窗体
表7查询子窗体控件控件类别控件Name控件Te*tOptionButtonOption1按编号查询
Option2按购买日期查询LabelLabel1从Label2到Label3从Label4年Label5月Label6日Label7到Label8年Label9月Label10日bo(0)boBo*bo1(空)bo(1)boBo*bo1(空)boy(0)boBo*boy(空)boy(1)boBo*boy(空)bom(0)boBo*bom(空)bom(1)boBo*bom(空)bod(0)boBo*bod(空)bod(1)boBo*bod(空)mandButtonmand1查询mand2取消
(6)用户登录子窗体如图29所示。
(7)值班管理子窗体如图30所示,其控件如表8所示。
图29用户登录子窗体图30值班管理子窗体
(8)投诉管理子窗体如图31所示,其控件如表9所示。
图31投诉管理子窗体
建立公共模块
1、显示目录
建立公共模块可以提高代码的效率,同时使得修改和维护代码都很方便。
创建公共模块的步骤如下:
(1)在菜单中选择“工程”→“添加模块”命令,则出现模块对话框,如图32所示。
(2)选择模块图标后,单击“打开”按钮,则模块已经添加到项目中了。默认情况下名为Module1。
图32模块对话框
(3)在模块中定义整个项目的公共变量。
PublicconnAsNewADODB.Connection'标记连接对象
PublicuserIDAsString'标记当前用户ID
PublicuserpowAsString'标记用户权限
PublicfindAsBoolean'标记查询
PublicsqlfindAsString'查询语句
Publicrs_data1AsNewADODB.Recordset
PublicfindokAsBoolean
PublicfrmdataAsBoolean
PublicConstkeyenter=13'enter键的ASCII码
在主窗体添加完菜单之后,就要为各个子菜单创建事件处理程序。窗体代码
在本项目中,子菜单事件都是Click事件,这里先给出主窗体部分的代码。
下面是响应“增加用户”子菜单Click事件,调出增加用户窗体代码。
PrivateSubadduser_Click()
frmadduser.Show
EndSub
下面是响应“查询输出”子菜单Click事件,调出查询输出窗体代码。
PrivateSubcha*unshuchu_Click()
frmfind.Show
EndSub
下面是响应“退出”子菜单Click事件,调出退出窗体代码。
PrivateSube*it_Click()
UnloadMe
EndSub
下面是响应“图书登记”子菜单Click事件,调出图书登记窗体代码。
PrivateSubcheckin_Click()
frmdengji.Show
EndSub
下面是响应“修改密码”子菜单Click事件,调出修改密码窗体代码。
PrivateSubchangepwd_Click()
frmchangepwd.Show
EndSub
下面是响应“图书借阅”子菜单Click事件,调出图书借阅窗体代码。
PrivateSubborrow_Click()
frmjieyue.Show
EndSub
下面是响应“图书赔偿”子菜单Click事件,调出图书赔偿窗体代码。
PrivateSubtushupeichang_Click()
frmpeichang.Show1
EndSub
下面是响应“值班管理”菜单Click事件,调出值班管理窗体代码。
PrivateSubzhibanguanli_Click()
frmzhiban.Show1
EndSub
下面是响应“投诉管理”子菜单Click事件,调出投诉管理窗体代码。
PrivateSubtousuguanli_Click()
frmtousu.Show1
EndSub
2、各子窗体的代码
在各个子窗体建立好后,就可以根据各个子窗体的功能给它们添加相应代码了。
(1)图书登记子窗体代码
本窗体用来填写图书登记的信息,用ADO来连接数据库,是本窗体的重点。采用MDI的子程序,所以运行后,它出现在主程序的界面下,如图33所示。
图33图书登记子窗体
按钮控件要求先填写基本信息,然后与数据库信息比较。
PrivateSubmand1_Click()
OnErrorGoToadderr
Te*t1.SetFocus
Adodc1.Recordset.AddNew
E*itSub
adderr:
MsgBo*Err.Description
EndSub
PrivateSubmand2_Click()
OnErrorGoTodeleteerr
WithAdodc1.Recordset
IfNot.EOFAndNot.BOFThen
IfMsgBo*("删除当前记录吗"",vbYesNo+vbQuestion)=vbYesThen
.Delete
.MoveNe*t
If.EOFThen.MoveLast
EndIf
EndIf
EndWith
E*itSub
deleteerr:
MsgBo*Err.Description
EndSub
PrivateSubmand3_Click()
Adodc1.Recordset.MoveNe*t
IfAdodc1.Recordset.EOFThen
MsgBo*"这是最后一条记录",vbOKCancel+vbQuestion
Adodc1.Recordset.MoveLast
EndIf
EndSub
PrivateSubmand4_Click()
Adodc1.Recordset.MovePrevious
IfAdodc1.Recordset.BOFThen
MsgBo*"这是第一条记录",vbOKCancel+vbQuestion
Adodc1.Recordset.MoveFirst
EndIf
EndSub
PrivateSubmand5_Click()
IfAdodc1.Recordset.EOFThen
MsgBo*"记录空",vbOKCancel+vbQuestion
End
Else
Adodc1.Recordset.MoveFirst
E*itSub
EndSub
PrivateSubmand6_Click()
IfAdodc1.Recordset.RecordCount=0Then
MsgBo*"空记录",vbOKCancel+vbQuestion
End
Else
Adodc1.Recordset.MoveLast
EndIf
EndSub
PrivateSubmand7_Click()
MDIForm1.Show
frmdengji.Hide
EndSub
图书借阅和图书赔偿子窗体运行后如图34和图35所示,因为它们的代码和图书登记子窗体的代码雷同,在此不做重复。
图34图书借阅子窗体运行效果
图35图书赔偿子窗体运行效果
(2)增加用户子窗体代码
增加用户子窗体是用来增加用户的用户名、密码和权限的。其运行效果如图36所示。
单击“确定”按钮后,还要返回一个信息框,提示成功信息,如图37所示。
图36增加用户子窗体运行效果图37成功信息框
窗体部分代码的思路是,收集输入的表中的字符串,然后与数据库中的系统的用户数据比较,如果不存在,则允许添加。
PrivateSubmand1_Click()
DimsqlAsString
Dimrs_addAsNewADODB.Recordset
IfTrim(Te*t1.Te*t)=""Then
MsgBo*"用户名不能为空",vbOKOnly+vbE*clamation,""
E*itSub
Te*t1.SetFocus
Else
sql="select*from系统管理"
rs_add.Opensql,conn,adOpenKeyset,adLockPessimistic
While(rs_add.EOF=False)
IfTrim(rs_add.Fields(0))=Trim(Te*t1.Te*t)Then
MsgBo*"已有这个用户",vbOKOnly+vbE*clamation,""
Te*t1.SetFocus
Te*t1.Te*t=""
Te*t2.Te*t=""
Te*t3.Te*t=""
bo1.Te*t=""
E*itSub
Else
rs_add.MoveNe*t
EndIf
Wend
IfTrim(Te*t2.Te*t)<>Trim(Te*t3.Te*t)Then
MsgBo*"两次密码不一致",vbOKOnly+vbE*clamation,""
Te*t2.SetFocus
Te*t2.Te*t=""
Te*t3.Te*t=""
E*itSub
ElseIfTrim(bo1.Te*t)<>"system"AndTrim(bo1.Te*t)<>"guest"Then
MsgBo*"请选择正确的用户权限",vbOKOnly+vbE*clamation,""
bo1.SetFocus
bo1.Te*t=""
E*itSub
Else
rs_add.AddNew
rs_add.Fields(0)=Te*t1.Te*t
rs_add.Fields(1)=Te*t2.Te*t
rs_add.Fields(2)=bo1.Te*t
rs_add.Update
rs_add.Close
下面是返回成功信息对话框的代码:
MsgBo*"添加用户成功",vbOKOnly+vbE*clamation,""
UnloadMe
EndIf
EndIf
EndSub
(3)修改密码子窗体代码
修改密码子窗体是用来修改用户密码的。其运行效果如图38所示。
图38修改密码子窗体运行效果
在“确定”按钮的Click事件中添加如下代码:
PrivateSubmand1_Click()
Dimrs_changAsNewADODB.Recordset
DimsqlAsString
IfTrim(Te*t1.Te*t)<>Trim(Te*t2.Te*t)Then
MsgBo*"密码不一致!",vbOKOnly+vbE*clamation,""
Te*t1.SetFocus
Te*t1.Te*t=""
Te*t2.Te*t=""
Else
sql="select*from系统管理where用户名='"&userID&"'"
rs_chang.Opensql,conn,adOpenKeyset,adLockPessimistic
rs_chang.Fields(1)=Te*t1.Te*t
rs_chang.Update
rs_chang.Close
MsgBo*"密码修改成功",vbOKOnly+vbE*clamation,""
UnloadMe
EndIf
EndSub
在上述代码中,首先比较两个表中的数据是否一致,然后用rs_chang.Fields(1)=Te*t1.Te*t语句把代码输入到数据库中。最后,用MsgBo*"密码修改成功",vbOKOnly+vbE*clamation,""语句弹出一个信息框,告诉修改成功,如图39所示。
显示目录
(4)库房管理子窗体代码
库房管理子窗体是用来管理图书资料的。其运行效果如图40所示。
图40库房管理子窗体
实际上,设计库房管理子窗体的程序代码与增加用户子窗体的代码在思路上是完全相同的。就是在DataGrid的文本框中显示图书进出的清单,最后把填写的明细存储到数据库中。
检查代码如下:
OptionE*plicit
Dimrs_data2AsNewADODB.Recordset
Dimselect_rowAsString
Dimshowgrid2AsBoolean
Dimrs_customAsNewADODB.Recordset
DimjinchuAsString'进出库标志
DimmodifyAsBoolean'修改状态标志
PrivateSubcmde*it_Click()
UnloadMe
EndSub
PrivateSubForm_Load()
OnErrorGoToloaderror
DimsqlAsString
sql="select*from图书资料"
rs_custom.CursorLocation=adUseClient
rs_custom.Opensql,conn,adOpenKeyset,adLockPessimistic
WhileNotrs_custom.EOF
bo1.AddItemrs_custom.Fields(0)
rs_custom.MoveNe*t
Wend
findok=True
modify=False'非修改状态
showgrid2=False
displaygrid1'调用显示Datagrid1子程序
loaderror:
IfErr.Number<>0Then
MsgBo*Err.Description
EndIf
EndSub
'显示msfle*grid1子程序
PublicSubdisplaygrid1()
DimiAsInteger
OnErrorGoTodisplayerror
setgrid
setgridhead
MSFle*Grid1.Row=0
IfNotrs_data1.EOFThen
rs_data1.MoveFirst
DoWhileNotrs_data1.EOF
MSFle*Grid1.Row=MSFle*Grid1.Row+1
MSFle*Grid1.Col=0
IfNotIsNull(rs_data1.Fields(0))ThenMSFle*Grid1.Te*t=rs_data1.Fields(0)Else
MSFle*Grid1.Te*t=""
MSFle*Grid1.Col=1
IfNotIsNull(rs_data1.Fields(1))ThenMSFle*Grid1.Te*t=rs_data1.Fields(1)Else
MSFle*Grid1.Te*t=""
MSFle*Grid1.Col=2
IfNotIsNull(rs_data1.Fields(2))ThenMSFle*Grid1.Te*t=rs_data1.Fields(2)Else
MSFle*Grid1.Te*t=""
MSFle*Grid1.Col=3
IfNotIsNull(rs_data1.Fields(3))ThenMSFle*Grid1.Te*t=rs_data1.Fields(3)Else
MSFle*Grid1.Te*t=""
MSFle*Grid1.Col=4
IfNotIsNull(rs_data1.Fields(4))ThenMSFle*Grid1.Te*t=rs_data1.Fields(4)Else
MSFle*Grid1.Te*t=""
MSFle*Grid1.Col=5
IfNotIsNull(rs_data1.Fields(5))ThenMSFle*Grid1.Te*t=rs_data1.Fields(5)Else
MSFle*Grid1.Te*t=""
rs_data1.MoveNe*t
Loop
EndIf
displayerror:
IfErr.Number<>0Then
MsgBo*Err.Description
EndIf
EndSub
PublicSubsetgrid()
DimiAsInteger
OnErrorGoToseterror
WithMSFle*Grid1
.ScrollBars=fle*ScrollBarBoth
.Fi*edCols=0
.Rows=rs_data1.RecordCount+1
.Cols=6
.SelectionMode=fle*SelectionByRow
Fori=0To.Rows-1
.RowHeight(i)=315
Ne*t
Fori=0To.Cols-1
.ColWidth(i)=1300
Ne*ti
EndWith
E*itSub
seterror:
MsgBo*Err.Description
EndSub
PublicSubsetgridhead()
OnErrorGoTosetheaderror
MSFle*Grid1.Row=0
MSFle*Grid1.Col=0
MSFle*Grid1.Te*t="编号"
MSFle*Grid1.Col=1
MSFle*Grid1.Te*t="购买日期"
MSFle*Grid1.Col=2
MSFle*Grid1.Te*t="书名"
MSFle*Grid1.Col=3
MSFle*Grid1.Te*t="类型"
MSFle*Grid1.Col=4
MSFle*Grid1.Te*t="定价"
MSFle*Grid1.Col=5
MSFle*Grid1.Te*t="备注"
E*itSub
setheaderror:
MsgBo*Err.Description
EndSub
PrivateSubForm_Unload(CancelAsInteger)
findok=False
rs_data1.Close
rs_custom.Close
EndSub
PrivateSubMSFle*Grid1_Click()
OnErrorGoTogriderror
DimgetrowAsLong
getrow=MSFle*Grid1.Row
IfMSFle*Grid1.Rows=1Then
MsgBo*"无相关记录",vbOKOnly+vbE*clamation,""
Else
select_row=MSFle*Grid1.Te*tMatri*(getrow,0)
EndIf
griderror:
IfErr.Number<>0Then
MsgBo*Err.Description
EndIf
EndSub
PublicSubshowdata()
WithMSFle*Grid2
.Rows=rs_data2.RecordCount+1
.Row=0
IfNotrs_data2.EOFThen
rs_data2.MoveFirst
DoWhileNotrs_data2.EOF
.Row=.Row+1
.Col=0
IfNotIsNull(rs_data2.Fields(0))Then.Te*t=rs_data2.Fields(0)Else.Te*t=""
.Col=1
IfNotIsNull(rs_data2.Fields(1))Then.Te*t=rs_data2.Fields(1)Else.Te*t=""
.Col=2
IfNotIsNull(rs_data2.Fields(2))Then.Te*t=rs_data2.Fields(2)Else.Te*t=""
.Col=3
IfNotIsNull(rs_data2.Fields(3))Then.Te*t=rs_data2.Fields(3)Else.Te*t=""
.Col=4
IfNotIsNull(rs_data2.Fields(4))AndCDbl(rs_data2.Fields(4))<0Then
.Te*t=-CDbl(rs_data2.Fields(4))
Else
.Te*t=rs_data2.Fields(4)
EndIf
.Col=5
IfNotIsNull(rs_data2.Fields(5))Then.Te*t=rs_data2.Fields(5)Else.Te*t=""
.Col=6
IfNotIsNull(rs_data2.Fields(6))Then.Te*t=rs_data2.Fields(6)Else.Te*t=""
.Col=7
IfNotIsNull(rs_data2.Fields(7))AndCDbl(rs_data2.Fields(4))<0Then
.Te*t=-CDbl(rs_data2.Fields(7))
Else
.Te*t=rs_data2.Fields(7)
EndIf
.Col=8
IfNotIsNull(rs_data2.Fields(8))Then.Te*t=rs_data2.Fields(8)Else.Te*t=""
rs_data2.MoveNe*t
Loop
rs_data2.MoveLast
EndIf
EndWith
EndSub
(5)查询子窗体代码
查询子窗体是用来查询库房中图书资料明细的。其运行效果如图41所示。
图41查询子窗体运行效果
在列表框中给出编号或年月日后,“查询”按钮的Click事件将给出与数据库查找比较的结果。
PrivateSubmand1_Click()
OnErrorGoTocmderror
Dimfind_date1AsString
Dimfind_date2AsString
IfOption1.Value=TrueThen
sqlfind="select*from图书资料where编号between'"&_
bo1(0).Te*t&"'"&"and"&"'"&bo1(1).Te*t&"'"
EndIf
IfOption2.Value=TrueThen
find_date1=Format(CDate(boy(0).Te*t&"-"&_
bom(0).Te*t&"-"&bod(0).Te*t),"yyyy-mm-dd")
find_date2=Format(CDate(boy(1).Te*t&"-"&_
bom(1).Te*t&"-"&bod(1).Te*t),"yyyy-mm-dd")
sqlfind="select*from图书资料where购买日期between*"&_
find_date1&"*"&"and"&"*"&find_date2&"*"
EndIf
rs_data1.Opensqlfind,conn,adOpenKeyset,adLockPessimistic
frmdatamanage.displaygrid1
UnloadMe
cmderror:
IfErr.Number<>0Then
MsgBo*Err.Description
EndIf
EndSub
运行查询子窗体时,组合框中就已经从数据库中提取了货单号和年月日两个待查条件。
DimiAsInteger
DimsqlAsString
Iffindok=TrueThen
rs_data1.Close
EndIf
sql="select*from图书资料orderby编号desc"
rs_find.CursorLocation=adUseClient
rs_find.Opensql,conn,adOpenKeyset,adLockPessimistic
Ifrs_find.EOF=FalseThen'添加编号
Withrs_find
DoWhileNot.EOF
bo1(0).AddItem.Fields(0)
bo1(1).AddItem.Fields(0)
.MoveNe*t
Loop
EndWith
EndIf
Fori=2001To2005'添加年
boy(0).AddItemi
boy(1).AddItemi
Ne*ti
Fori=1To12'添加月
bom(0).AddItemi
bom(1).AddItemi
Ne*ti
Fori=1To31'添加日
bod(0).AddItemi
bod(1).AddItemi
Ne*ti
EndSub
查询完毕后,输出查询结果,如图42所示。
图42查询结果
2006-3116:26:00
显示目录
(6)用户登录子窗体代码
运行的用户登录子窗体如图43所示。
图43运行的用户登录子窗体
在本项目中,用户登录子窗体是运行的第一个界面,它的作用是检查用户名和密码是否正确。由于用户的资料是存放在数据库中,所以在启动该子窗体时,就已经连接了数据库。其代码如下:
PrivateSubForm_Load()
DimconnectionstringAsString
connectionstring="provider=Microsoft.Jet.oledb.4.0;"&_
"datasource=book.mdb"
conn.Openconnectionstring
t=0
EndSub
“确定”按钮的作用是检查输入的数据是否与数据库中的数据一致。
PrivateSubmand1_Click()
DimsqlAsString
Dimrs_loginAsNewADODB.Recordset
IfTrim(t*tuser.Te*t)=""Then'判断输入的用户名是否为空
MsgBo*"没有这个用户",vbOKOnly+vbE*clamation,""
t*tuser.SetFocus
Else
sql="select*from系统管理where用户名='"&t*tuser.Te*t&"'"
rs_login.Opensql,conn,adOpenKeyset,adLockPessimistic
Ifrs_login.EOF=TrueThen
MsgBo*"没有这个用户",vbOKOnly+vbE*clamation,""
t*tuser.SetFocus
Else'检验密码是否正确
用户名和密码通过后,要关闭本窗体并打开主窗体。
IfTrim(rs_login.Fields(1))=Trim(t*tpwd.Te*t)Then
userID=t*tuser.Te*t
userpow=rs_login.Fields(2)
rs_login.Close
UnloadMe
MDIForm1.Show
Else
MsgBo*"密码不正确",vbOKOnly+vbE*clamation,""
t*tpwd.SetFocus
EndIf
EndIf
EndIf
'只能输入3次
t=t+1
Ift=3Then
UnloadMe
EndIf
E*itSub
EndSub(7)值班管理子窗体代码
值班管理子窗体的作用是把值班人员的时间安排形成列表。运行的值班管理子窗体如图44所示。
图44运行的值班管理子窗体
先定义连接数据库的变量:
OptionE*plicit
Dimrs_zhibanAsNewADODB.Recordset
然后列出窗体部分的代码。
PrivateSubcmdadd_Click()
OnErrorGoToadderror
Ifcmdadd.Caption="新增记录"Then'当此按钮的状态为为“增加记录”时
cmdadd.Caption="确定"'按钮名称改“确定”
cmddel.Enabled=False
DataGrid1.AllowAddNew=True
DataGrid1.AllowUpdate=True'设定DataGrid可以增加记录
Else
IfNotIsNull(DataGrid1.Bookmark)Then
IfNotIsDate(Trim(DataGrid1.Columns("值班开始日期").CellTe*t(DataGrid1.Bookmark)))Then
MsgBo*"请按照格式yyyy-mm-dd输入值班开始日期",vbOKOnly+vbE*clamation,""
E*itSub
EndIf
IfNotIsDate(Trim(DataGrid1.Columns("值班开始时间").CellTe*t(DataGrid1.Bookmark)))Then
MsgBo*"请按照格式hh-mm输入值班开始时间",vbOKOnly+vbE*clamation,""
E*itSub
EndIf
IfNotIsDate(Trim(DataGrid1.Columns("值班截止日期").CellTe*t(DataGrid1.Bookmark)))Then
MsgBo*"请按照格式yyyy-mm-dd输入值班截止日期",vbOKOnly+vbE*clamation,""
E*itSub
EndIf
IfNotIsDate(Trim(DataGrid1.Columns("值班截止时间").CellTe*t(DataGrid1.Bookmark)))Then
MsgBo*"请按照格式hh-mm输入值班截止时间",vbOKOnly+vbE*clamation,""
E*itSub
EndIf
IfTrim(DataGrid1.Columns("值班人").CellTe*t(DataGrid1.Bookmark))=""Then
MsgBo*"值班人不能为空!",vbOKOnly+vbE*clamation,""
E*itSub
EndIf
rs_zhiban.Update
MsgBo*"添加信息成功!",vbOKOnly+vbE*clamation,""
DataGrid1.AllowAddNew=False
DataGrid1.AllowUpdate=False
Else
MsgBo*"没有添加信息!",vbOKOnly+vbE*clamation,""
EndIf
cmdadd.Caption="新增记录"
cmddel.Enabled=True
EndIf
adderror:
IfErr.Number<>0Then
MsgBo*Err.Description
EndIf
EndSub
PrivateSubcmdcancel_Click()
UnloadMe
MDIForm1.Show
EndSub
PrivateSubcmddel_Click()
DimanswerAsString
OnErrorGoTodelerror
answer=MsgBo*("确定要删除吗"",vbYesNo,"")
Ifanswer=vbYesThen
DataGrid1.AllowDelete=True
rs_zhiban.Delete
rs_zhiban.Update
DataGrid1.Refresh
MsgBo*"成功删除!",vbOKOnly+vbE*clamation,""
DataGrid1.AllowDelete=Fal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《多位数乘一位数》教学设计-2024-2025学年三年级上册数学人教版
- 三年级品德与社会下册 认识周围的邻居教学实录 未来版
- 2024年福建立兴教育教师招聘笔试真题
- 人教版生物八年级上册5.2.2 先天性行为和学习行为 教学设计
- 2024年五年级数学下册 二 校园艺术节-分数的意义和性质 信息窗1 分数的意义第1课时教学实录 青岛版六三制
- 2024秋三年级英语上册 Unit 4 We love animals课时2 Let's learn-Let's chant教学实录 人教PEP
- 江苏省赣榆县智贤中学高三体育 乒乓球 握拍法 直拍和横拍教学实录
- 2024-2025学年新教材高中物理 第三章 机械波 3 波的反射、折射和衍射教学实录 新人教版选择性必修第一册
- Module 2 Unit 1教学设计- - 2023-2024学年外研版七年级英语下册
- 动物管理员工风采展示
- 2025届江苏苏州市四校高三12月联考语文试题(教师版)
- 93J007-7道路图集(正式版)
- 蔬菜、肉类食材供货服务总体方案
- Flash CC动画设计与制作全书教案
- 2024年03月天津天津银行招考总行部门及分支机构负责人笔试历年参考题库附带答案详解
- 平行线的判定与性质证明题专训30题(人教版)(人教版) 带解析
- 《跟单信用证统一惯例(UCP600)》
- 2024版影视作品授权配音服务合同3篇
- 希沃白板5的使用培训
- 《电机维护保养》课件
- TCUWA40055-2023排水管道工程自密实回填材料应用技术规程
评论
0/150
提交评论