界面设计 设计好的界面如图20所示。

图20 图书管理系统界面
这是一个多文档界面(MDI)应用程序,可以同时显示多个文档,每个文档显示在各自的窗体中。MDI 应用程序中常有包含子菜单的“窗体”选项,用于在窗体或文档之间进行切换。
菜单应用程序中,有5个菜单选项,每个选项对应着E-R图的一个子项目。
1、创建主窗体
首先创建一个工程,命名为图书管理系统,选择“工程”→“添加MDI窗体”命令,则在项目中添加了主窗体。该窗体的一些属性如表1所示。
表1 主窗体的属性
属 |
性值 |
Caption |
图书管理系统 |
Name |
Main |
Menu |
Mainmenu1 |
Windowstate |
Maxsize |
Windowstate的值为Maxsize,即程序启动之后自动最大化。
将“菜单”组件从“工具箱”拖到窗体上。创建一个 Text 属性设置为“文件”的顶级菜单项,且带有名为“关闭”的子菜单项。类似地创建一些菜单项,如表2所示。
表2 菜 单 项 表
菜 单 名 称 |
Text属性 |
功 能 描 述 |
MenuItem1 |
图书管理 |
顶级菜单,包含子菜单 |
MenuItem2 |
图书登记 |
调出图书登记窗体 |
MenuItem3 |
图书借阅 |
调出图书借阅窗体 |
MenuItem4 |
图书赔偿 |
调出图书赔偿窗体 |
MenuItem5 |
图书资料 |
顶级菜单,包含子菜单 |
MenuItem6 |
查询输出 |
调出查询输出窗体 |
MenuItem7 |
值班管理 |
顶级菜单,没有子菜单 |
MenuItem8 |
投诉管理 |
顶级菜单,没有子菜单 |
MenuItem9 |
系统管理 |
顶级菜单,包含子菜单 |
MenuItem10 |
增加用户 |
调出用户窗体 |
MenuItem11 |
修改密码 |
调出密码窗体 |
MenuItem12 |
退出 |
系统退出 |
主窗体如图21所示。

图21 主窗体
2、创建各子窗体
选择“工程”→“添加窗体”命令,添加子窗体。
在新建Visual Basic工程时自带的窗体中,将其属性MIDChild改成True,则这个窗体成为MID窗体的子窗体。
在这个项目中,要创建的子窗体如表3所示。
表3 所有子窗体
子 窗 体 名 |
Text |
图书登记 |
frmdengji |
图书借阅 |
frmjieyue |
图书赔偿 |
frmpeichang |
增加新用户 |
frmadduser |
查询输出 |
frmfind |
登录系统 |
frmlogin |
修改密码 |
frmchangepwd |
下面分别给出这些子窗体,以及它们所使用的控件。
(1) 图书登记子窗体如图22所示,其控件如表4所示。

图22 图书登记子窗体
表4 图书登记子窗体控件
控 件 类 别 |
控件Name |
控件Text |
Label |
Label1 |
编号 |
Label2 |
书名 |
Label3 |
类型 |
Label4 |
购买日期 |
Label5 |
定价 |
TextBox |
Text1 |
(空) |
Text2 |
(空) |
Text3 |
(空) |
Text4 |
(空) |
Text5 |
(空) |
CommandButton |
Command1 |
增加记录 |
Command2 |
删除记录 |
Command3 |
下一条 |
Command4 |
上一条 |
Command5 |
第一条 |
Command6 |
最后一条 |
Command7 |
退出 |
ADO |
DataAdodc1 |
(空) |
DataGrid |
DataGrid1 |
(空) |
图书借阅和图书赔偿子窗体分别如图23和图24所示,因为它们的控件与图书登记子窗体的雷同,在此不作介绍。

图23 图书借阅子窗体

图24 图书赔偿子窗体
(2) 增加用户子窗体如图25所示,其控件如表5所示。

图25 增加用户子窗体
表5 增加用户子窗体控件
控 件 类 别 |
控件Name |
控件Text |
Label |
Label1 |
输入用户名 |
Label2 |
输入密码 |
Label3 |
确认密码 |
Label4 |
选择权限 |
TextBox |
Text1 |
(空) |
Text2 |
(空) |
Text3 |
(空) |
ComboBox |
Comb1 |
(空) |
CommandButton |
Commandl |
确定 |
Command2 |
取消 |
(3) 修改密码子窗体如图26所示。

图26 修改密码子窗体
(4) 库房管理子窗体如图27所示。

图27 库房管理子窗体
其控件如表6所示。
表6 库房管理子窗体控件
控 件 类 别 |
控件Name |
控件Text |
TextBox |
Text1 |
(空) |
ComboBox |
Combo1 |
|
MSFlexGrid |
MSFlexGrid1 |
|
(5) 查询子窗体如图28所示,其控件如表7所示。

图28 查询子窗体
表7 查询子窗体控件
控 件 类 别 |
控件Name |
控件Text |
OptionButton |
Option1 |
按编号查询 |
|
Option2 |
按购买日期查询 |
Label |
Label1 |
从 |
Label2 |
到 |
Label3 |
从 |
Label4 |
年 |
Label5 |
月 |
Label6 |
日 |
Label7 |
到 |
Label8 |
年 |
Label9 |
月 |
Label10 |
日 |
Combo(0) ComboBox |
Combo1 |
(空) |
Combo(1) ComboBox |
Combo1 |
(空) |
Comboy(0) ComboBox |
Comboy |
(空) |
Comboy(1) ComboBox |
Comboy |
(空) |
Combom(0) ComboBox |
Combom |
(空) |
Combom(1) ComboBox |
Combom |
(空) |
Combod(0) ComboBox |
Combod |
(空) |
Combod(1) ComboBox |
Combod |
(空) |
CommandButton |
Command1 |
查询 |
Command2 |
取消 |
(6) 用户登录子窗体如图29所示。
(7) 值班管理子窗体如图30所示,其控件如表8所示。

图29 用户登录子窗体 图30 值班管理子窗体
(8) 投诉管理子窗体如图31所示,其控件如表9所示。

图31 投诉管理子窗体
建立公共模块 1、显示目录
建立公共模块可以提高代码的效率,同时使得修改和维护代码都很方便。
创建公共模块的步骤如下:
(1) 在菜单中选择“工程”→“添加模块”命令,则出现模块对话框,如图32所示。
(2) 选择模块图标后,单击“打开”按钮,则模块已经添加到项目中了。默认情况下名为Module1。

图32 模块对话框
(3) 在模块中定义整个项目的公共变量。
Public conn As New ADODB.Connection ' 标记连接对象
Public userID As String ' 标记当前用户ID
Public userpow As String ' 标记用户权限
Public find As Boolean ' 标记查询
Public sqlfind As String ' 查询语句
Public rs_data1 As New ADODB.Recordset
Public findok As Boolean
Public frmdata As Boolean
Public Const keyenter = 13 ' enter键的ASCII码
在主窗体添加完菜单之后,就要为各个子菜单创建事件处理程序。