当前位置:首页 >> 其它课程 >> 图书租借系统

图书租借系统


——图书租赁系统 附加实例 2——图书租赁系统 —— 目前租书社与读书社,每天都要处理图书、读书会员、借书、还书等信息,并且需要将 这些记录保存在数据库中。 手动记录这些数据会耗费大量时间, 如果做一个程序通过电脑来 管理会更方便、省时。 本章将详细介绍一个关于图书租赁的信息管理系统,逐步向读者演示如何通过 Visual Basic 实现管理信息系统。 2.1 系统分析 一个完善

的的图书租赁系统应包括除借书、还书外还要对图书信息及会员信息进行管 理。对这些信息的处理操作有添加记录、删除记录、修改记录等。 2.1.1 功能需求分析 根据与图书租赁系统有关操作发生交互对象入手, 可以分析出系统的功能需求有图书租 赁管理、图书管理、会员管理、操作员管理。 1.图书租赁管理 图书租赁管理是本软件最常用的操作,其功能如下。 (1)外借图书: 向外租赁图书给会员,此操作需要记录会员信息、所借图书信息、及借阅时间。 (2)归还图书: 会员来读书社还书,此操作需要记录会员信息、所还图书及还书时间。 (3)租赁记录查询: 对会员所借及所还图书进行查询,此操作需要联合查询会员信息、图书信息、会员租赁 记录,可完成显示全部借阅记录,或未还记录。 (4)租赁数据设定 对每本每天需要的租金进行设定。 2.图书管理 图书是图书租赁系统管理的目标对象, 图书管理应包括查找图书、 添加图书、 删除图书、 修改图书、显示全部图书等。 3.会员管理 会员是图书租赁系统的服务对象,只有对已存在系统中的会员才能提供图书租赁服务。 会员管理功能包括添加会员、 删除会员、 修改会员、 查找会员、 会员充值及会员记录查询等。 4.操作员管理 操作员是本系统的使用者,操作员必须输入用户名与密码才能登录系统进行各种操作, 本功能应包括添加、 删除操作员及密码设置及修改等功能, 本例只有修改管理员密码的功能, 系统中只有一个管理员用户,如果读者对此感受兴趣可自行添加其它功能。 2.1.2 数据需求分析 为了实现图书租赁系统所需要的所有功能, 图书租赁系统由六个表组成。 图书表保存图 书信息,会员表保存会员信息,借书记录保存租赁记录,vipaccount 表保存会员的帐号信息 及现借书数量,loginaccount 保存操作员信息包括操作员用户名和密码,zujin 保存每天每本 书的租金,会员帐号最低余额。 2.2 系统设计 根据前面对系统功能需求及数据需求的分析, 本节对这些功能模块及数据库存设计进行 介绍。 2.2.1 系统功能模块设计 系统功能模块设计

系统功能模块由一个公用模块和若干子模块组成, 公用模块是在其它几个子模块都能用 到的一些功能,放到一个公用的模块中。 1.系统公用模块 . 系统公用模块名为 module1,其中 opendate 过程负责连接数据库。 2.系统各子模块 . 图书租赁管理 图书管理 用户登录 会员管理 操作员管理
图 18-1 系统各子模块的组成

按照各子模块的逻辑组成关系如图 18-1 所示。其中图书租赁管理模块包括借书管理、 还书管理、租赁记录查询及租赁数据设定;图书管理包括图书信息的添加、删除、修改等操 作;会员管理包括会员信息的添加、删除、修改等;操作员管理信息。 2.2.2 系统数据库设计 根据系统数据库需要分析, 下面对我们需要的数据库表的设计进行详细介绍, 我们使用 SQL SERVER 数据库,首先在 SQL SERVER 中使用在前面章节中介绍的方法创建图书租赁 系统数据库,然后建立 6 个表,每个表的属性分别如表 18-1 至 18-6 所示。
表 18-1 图书表属性

字段名 bookno Bookname Booktype Bookpubdate Writer Price Bookintor lended 字段名 Id Name Age Sex Addr Mbphone Tele 字段名 Vipid Bookno

字段说明 图书编号 图书名称 图书类型 出版日期 作者 单价 图书简介 是否被借出 字段说明 会员编号 会员姓名 年龄 性别 联系地址 手机 电话 字段说明 会员编号 图书编号

数据类型 Char Char Char Char Char Money Text Char 数据类型 Char Char Char Char Char Char Char 数据类型 Char Char

字段大小 5 30 10 10 6 8 16 1 字段大小 5 6 3 2 50 11 12 字段大小 5 5

是否允许为空 否 是 是 是 是 是 是 是 是否允许为空 是 是 是 是 是 是 是 是否允许为空 否 否

默认值

0 默认值

表 18-2 会员表属性

表 18-3 借书记录表属性

默认值

Lendeddate Returned returneddate 字段名 Id Pass Account Bkamount 字段名 Users Pass 字段名 Zujin Mini

借出日期 是否归还 归还日期 字段说明 会员编号 密码 帐户余额 借书数量 字段说明 用户 密码 字段说明 每本第天租金 会员账户最低余额

Char Char Char 数据类型 Char Char Money Char 数据类型 Char Char 数据类型 Money Money

10 1 10 字段大小 5 11 8 3 字段大小 11 11 字段大小 8 8

是 是 是 是否允许为空 是 是 是 是 是否允许为空 是 是 是否允许为空 是 是 默认值 1 0 0 默认值 默认值 0

表 18-4 vipaccount 表属性

表 18-5 loginaccount 表属性

表 18-6 zujin 表属性

2.3 系统实现 按照上面的需求分析我们创建了程序所需要的数据库和表, 下面我们来看程序的实现部 分,即如何通过 VB 编程访问上面那些表和实现上面所述的图书租赁系统所需要的功能。 2.3.1 新建工程 打开 Visual Basic 出现 VB 新建工程向导如图 18-2 所示,选择标准 EXE 工程并打开。 进入 IDE 开发环境。

图 18-2 新建工程向导

2.3.2 创建公用模块和登录模块 (1)将默认窗体“form1”改为“frmlogin”。添加一个标准模块 Module1 添加步骤为: 选择【工程】→【添加模块】菜单命令,然后在打开的“添加模块”对话框中单击【打开】 按钮,这时工程资源管理器如图 18-3 所示。

图 18-3 添加标准模导块

(2)添加标准模块代码如下:
Public cn As New ADODB.Connection Public rs As New ADODB.Recordset

Public Sub opendata() cn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;pwd=;Initial Catalog=图书租赁 系统;Data Source=(local)" End Sub

标准模块中定义了 cn(数据库连接)和 rs(记录集)两个公用变量及 opendata 过程。 Opendata 过程用来打开数据库连接。 (3)双击工程资源管理器窗体中的 frmlogin,打开登录窗体,设计登录窗体界面如图 18-4 所示。

图 18-4 登录窗体界面

登录窗体的负责操作员使用本系统时的密码校验,必须输入正确密码才能使用本系统。 管理员帐号保存在 loginaccount 表中,建表时添加一条记录 users 和 pass 的值都为“admin” (4)编写登录窗体代码: 确定按钮代码: 确定按钮代码:
Private Sub Command1_Click() If Len(Text1.Text) > 0 Then Dim sqlstr As String sqlstr = "select * from loginaccount where users='" & Text1.Text & "'" rs.Open sqlstr, cn, adOpenDynamic, adLockOptimistic If rs.RecordCount > 0 Then If Text2.Text = Trim(rs.Fields(1).Value) Then frmmain.Show

Unload Me Else MsgBox ("密码错误") End If Else MsgBox ("没有此用户") End If rs.Close Else MsgBox ("请输入用户") End If End Sub

Sql 变量为字符串型变量,用来保存 SQL 语句。 “&”为字符串连接符。rs 的 open 方法 返回一个记录集,这个记录集保存在 rs 中,open 方法的用法请参考前面章节的内容介绍。 Frmmain.show 调用主窗体。unload 语句可以将窗体或控件从内存中卸载,恢复内存空间, me 是指自己也就是登录窗体。 取消按钮代码: 取消按钮代码:
Private Sub Command2_Click() End End Sub

用户单击取消按钮时会结束程序运行。 窗体加载时代码: 窗体加载时代码:
Private Sub Form_Load() rs.CursorLocation = adUseClient rs.CursorType = adOpenStatic opendata End Sub

窗体加载时打开数据连接,CursorLocation 定义定义游标类型为客户端型,CursorType 指示当从指定的查询中打开一个结果集时所使用的游标缺省类型 adOpenStatic 为只读。 2.3.3 创建主窗体 frmmain.frm 选择【工程】→【添加窗体】菜单命令,打开“添加窗体”对话框,如图 18-5 所示。

图 18-5“添加窗体”对话框

直接单击对话框中的【打开】按钮,创建了一个窗白窗体,由于程序使用了 SSTAB 控 件。首先引入此控件,此控件的文件名为 TABCTL32.OCX。选择【工程】→【部件】菜单 命令,打开“部件”对话框,如图 18-6 所示。有时系统中找不到此文件,本例提供了此文 件,位于“光盘\chap18\”文件夹中,单击图 18-6 中的【浏览】按钮,找到该文件夹选中 “TABCTL32.OCX” ,单击【打开】按钮,返回到“部件”对话框,单击【确定】按钮,此 时工具箱中添加了 SSTab 控件,图标为“ ” 。

图 18-6 添加 SStab 控件到工具箱

在新建窗体中放置一个 Sstab 控件,如图 18-7 所示。

图 18-7 在窗体中添加 SSTab 控件

在此控件上单击右键将打开一个菜单,在打开的菜单上左键单击【属性】菜单命令后打 开如图 18-8 所示的属性页

图 18-8 SSTab 控件的属性页

将 Tab Count(页面个数)和 TabsPerRow(每行页数)都设为 4 并单击【应用】按钮, 然后单击 Current Tab 后面的“< >”两个按钮,可在 0 至 3 之间前后翻页。从第一个到第四 个依次改变它们的 TabCaption 属性值为“图书租赁管理” 、“图书管理”、“会员管理”、 “操作员管理”设计完如图 18-9 所示。

图 18-9 SSTab 控件设置完后界面

添加主窗体菜单,按 Ctrl+E 快捷键打开“菜单编辑器”对话框,如图 18-10 所示。

图 18-10 “菜单编辑器”对话框

主窗体菜单属性如表 18-7 所示。
表 18-7 主窗体菜单属性表

标 题 图书租赁系统 借书管理 还书管理 租赁记录查询 租赁数据设定 图书管理 查找图书 添加图书 删除图书 编辑图书 显示全部数据 会员管理 添加 删除 编辑 查找会员 会员充值 修改密码 显示全部 操作员管理 修改管理员密码 关于 Mzl Mlend Mreturn Mseek Minfo Mbk Mbkseek Mbkadd Mbkdel Mbkedit

名 称 主菜单

属 性 一级子菜单 一级子菜单 一级子菜单 一级子菜单 主菜单 一级子菜单 一级子菜单 一级子菜单 一级子菜单 一级子菜单 主菜单 一级子菜单 一级子菜单 一级子菜单 一级子菜单 一级子菜单 一级子菜单 一级子菜单 主菜单 一级子菜单 主菜单

Mshowallbk Mvip Mvipadd Mvipdel Mvipedit Mvipseek Mvipincharge Mchgpass Mshowallvip Mop Mchgadminpass Mabout

2.3.4 创建图书租赁模块 图书租赁模块是本系统中使用最频繁的模块,具体的创建步骤如下: (1) SSTab 控件第一页添加四个命令按钮, 在 分别命名为 cmdlend、 cmdreturn、 cmdseek、 cmdinfo,对应的 caption 属性分别为借书管理、还书管理、租赁记录查询、租赁数据设定, 如图 18-11 所示。

图 18-11 图书租赁管理模块

(2)编写【辑借书管理】按钮代码如下:
Private Sub cmdlend_Click() frmlend.Show End Sub

Frmlend.show 命令可以打开借书管理窗体(frmlend.frm) 。 (3)创建借书管理窗体。 选择 【工程】 【添加窗体】 → 菜单命令打开“添加窗体”对话框, 单击该对话框中的 【打 开】按钮添加一个新窗体,将其名称改为“frmlend” 。在借书管理窗体中放置数个标签、文 本框和按钮,设计的界面如图 18-12 所示。

图 18-12 借书管理窗体

借书管理窗体主要控件的属性设置如表 18-8 所示。
表 18-8 借书管理窗体主要控件属性

对象 Form

属性 名称 Caption 名称 名称 名称

值 Frmmain 借书管理系统 Txtvipid Txtvipname Txtbkamount Txtbkno Txtbkname Txtbktype Txtpubdate Cmdlend 借出 Cmdrelend 重借 Cmdend 退出

说明 窗体名称 窗体标题 会员编号 会员姓名 已借图收量 图书编号 图书名称 图书类型 出版日期 按钮名称 按钮标题 按钮名称 按钮标题 按钮名称 按钮标题

Text

名称 名称 名称 名称 名称 Caption 名称 Caption 名称 Caption

CommandButton

(4)编写借书管理窗体代码: 借出命令按钮代码

Private Sub cmdlend_Click() If txtvipid.Text = "" Or txtbkno.Text = "" Then ‘判断会员编号和图书编号是否为空 MsgBox ("请填写完整信息") txtvipid.SetFocus Else If MsgBox("信息无误,同意借出吗?", vbYesNo) = vbYes Then Set rs = Nothing rs.CursorLocation = adUseClient rs.Open "select * from 图 书 表 adLockOptimistic If rs.Fields!lended = "1" Then txtbkno.Text = "" txtbkname.Text = "" txtbktype.Text = "" txtpubdate.Text = "" MsgBox ("此书已借出!!") ! txtbkno.SetFocus Exit Sub End If where bookno='" & txtbkno.Text & "'", cn, adOpenDynamic,

Set rs = Nothing rs.Open "select * from vipaccount where id='" & txtvipid.Text & "'", cn, adOpenDynamic, adLockOptimistic If Trim(rs.Fields!pass) <> Trim(InputBox("请输入读者的会员密码:")) Then MsgBox ("读者的密码有误,对不起不能借给读者书") Exit Sub End If

Set rs = Nothing sqlstr = "update vipaccount set bkamount=bkamount+1 rs.Open sqlstr, cn, adOpenDynamic, adLockOptimistic Set rs = Nothing rs.Open "update 图书表 set lended='1' where bookno='" & txtbkno.Text & "'", cn, adOpenDynamic, adLockOptimistic where id='" & txtvipid.Text & "'"

Set rs = Nothing sqlstr = "insert into 借书记录 (vipid,bookno,lendeddate) values ('" & txtvipid.Text & "','" & txtbkno.Text & "','" & Date & "')" rs.Open sqlstr, cn, adOpenDynamic, adLockOptimistic MsgBox ("借出成功!") Unload Me End If End If End Sub

Setfocus 方法设定哪个控件具有焦点。VbYesNo 定义消息框显示的提示按钮为“是”和 “否” 。Set rs=nothing 语句将 rs 变量从内存中卸载,同时关闭以前打开的记录集。 rs.fields!lended 引用 lended 字段返回 lended 字段的值, lended 字段值为 1 时说明此书已借 若 出,退出过程,停止借出,如果为 0 继续借出,借出前要求会员输入密码,会员密码保存在 vipaccount 表中,密码不正确时退出过程,如果密码校验成功则更新 vipaccount 表中的 bkamount 字段,即会员未还图书的数量加 1,并将图书表中借出图书的 lended 字段的值更 新为 1,同时在借书记录表中插入一条借书记录。 重借按钮代码: 重借按钮代码:
Private Sub cmdrelend_Click() txtvipid.Text = "" txtvipname.Text = "" txtbkamount.Text = "" txtbkno.Text = "" txtbkname.Text = "" txtbktype.Text = "" txtpubdate.Text = "" txtvipid.SetFocus End Sub

此过程负责清空填写的所有信息,并使 txtvip 获得焦点。 退出按钮代码: 退出按钮代码:
Private Sub cmdend_Click() Unload Me End Sub

此过程很简单调用 unload 语句卸载借书管理窗体,me 代表当前窗体。 (5)编写图 18-11 中的【还书管理】按钮代码如下:
Private Sub txtreturn_Click() frmreturn.Show End Sub

Frmreturn.show 命令可以打开还书管理窗体(frmreturn.frm) 。 (6)创建归还图书窗体。 选择【工程】→【添加窗体】菜单命令将打开“添加窗体”对话框,直接单击该对话框 中的【确定】按钮后,添加一个新窗体,将其名称改为“frmreturn” ,在窗体中放置数个文 本标签、文本框和按钮,如图 18-13 所示。窗体中主要控件的属性设置如表 18-9 所示。

图 18-13 归还图书窗体 表 18-9 归还图书窗体的主要控件属性表

对象 Form

属性 名称 Caption 名称 名称 名称

值 Frmreturn 归还图书 Txtvipid Txtvipname Txtbkamount Txtbkno Txtbkname Txtbktype Txtbkpubdate Cmdreturn 归还 Cmdrereturn 续还 Cmdexit 退出

说明 窗体名称 窗体标题 会员号 会员姓名 已借图书量 图书编号 图书名称 图书类型 出版日期 按钮名称 按钮标题 按钮名称 按钮标题 按钮名称 按钮标题

Text

名称 名称 名称 名称 名称 Caption Name Caption Nam Caption

CommandButton

(7)编写归还窗体代码: 归还按钮代码: 归还按钮代码:
Private Sub cmdreturn_Click() Dim days As Integer Dim money As Single If txtvipid.Text = "" Or txtbkno.Text = "" Then MsgBox ("请填写完整信息") txtvipid.SetFocus Else

Set rs = Nothing rs.CursorLocation = adUseClient sqlstr = "select * from 借书记录 where vipid='" & txtvipid.Text & "' and bookno='" & txtbkno.Text & "'

and returned= '0' " rs.Open sqlstr, cn, adOpenDynamic, adLockOptimistic If rs.RecordCount > 0 Then days = Date - CDate(rs.Fields!lendeddate) If days = 0 Then days = 1 Set rs = Nothing rs.Open "select * from zujin", cn, adOpenDynamic, adLockOptimistic money = days * rs.Fields(0).Value If MsgBox("信息无误,同意借出吗?", vbYesNo) = vbYes Then Set rs = Nothing rs.Open "update 图书表 set lended='0' where bookno='" & txtbkno.Text & "'", cn, adOpenDynamic, adLockOptimistic Set rs = Nothing rs.Open "update vipaccount set bkamount=bkamount-1,account=account-" & money & " id='" & txtvipid.Text & "'", cn, adOpenDynamic, adLockOptimistic Set rs = Nothing rs.Open "update 借 书 记 录 set returned='1' ,returneddate='" & Date & "' where vipid='" & txtvipid.Text & "' and bookno='" & txtbkno.Text & "' and returned='0'", cn, adOpenDynamic, adLockOptimistic Unload Me End If Else MsgBox "读者没有借此书或此书已经归还" End If where

End If End Sub

此过程中,声明了两个变量,days 保存图书借阅的天数。money 用来保存借书的应付 的租金。days = Date - CDate(rs.Fields!lendeddate)计算出借阅的天数,date 函数返回当天的日 期,Cdate 是一个转换函数,将字符型变量转换为日期型,lendeddate 是借书时的日期。 Rs.fields(0).value 表示 zujin 表中第一个字段即每天每本的租金。 信息输入完毕无误后开始更 新数据表, 所做更新有: 图书表中此书的 lended 字段更新为 0 此书处于可借状态, vipaccount 表中 bkamount 字段值减 1 即未还图书量减 1;account(帐号现金)减去 money 变量的值,借 书记录表中更新此书的 returned 为 1 即已经归还;returneddate 归还日期。 续还按钮代码: 续还按钮代码:
Private Sub cmdrereturn_Click() txtvipid.Text = "" txtvipname.Text = "" txtbkamount.Text = "" txtbkno.Text = "" txtbkname.Text = "" txtbktype.Text = "" txtpubdate.Text = "" txtvipid.SetFocus

End Sub

清空所有填写信息,以便继续还书。 退出按钮代码: 退出按钮代码:
Private Sub cmdexit_Click() Unload Me End Sub

(8)编写图 18-11 中的租赁记录查询按钮代码如下:
Private Sub cmdrecseek_Click() frmrecseek.Show End Sub

frmrecseek.Show 可以打开租赁记录查询窗体(frmrecseek.frm) 。 (9)创建租赁记录查询窗体。 选择【工程】→【添加窗体】菜单命令,打开“添加窗体” 对话框,单击该对话框中 的【打开】按钮后添加了一个新窗体,将其名称改为 frmrecseek,在窗体中放置一标签、一 个文本框、一个按钮、一个 datagrid 控件两个单选按钮控件,如图 18-14 所示。

图 18-14 租赁记录查询窗体

租赁记录查询窗体的主要控件的属性设置,如表 18-10 所示。
表 18-10 租赁记录查询窗体主要控件属性

对象 Text CommandButton Datagrid

属性 名称 text 名称 Caption 名称 名称 Caption 名称 Caption

值 Text1 空 Command1 开始查询 Datagrd optionButton1 所有图书 optionButton2 未还图书

optionButton

(10)编写租赁记录查询窗体代码: 开始查询按钮代码: 开始查询按钮代码:
Private Sub Command1_Click() Dim sqlstr As String Set rs = Nothing rs.CursorLocation = adUseClient sqlstr = "select a.*,b.* ,c.id,c.name from 借 书 记 录 as a, 图 书 表 as b , 会 员 表 as c where a.bookno=b.bookno and a.vipid=c.id and a.vipid='" & Text1.Text & "'" rs.Open sqlstr, cn, adOpenDynamic, adLockOptimistic Set datagrd.DataSource = rs Option1.Value = True End Sub

a、b、c 分别为借书记录、图书表、会员表的别名,筛选符合条件的借书记录和图书表 中所有字段及会员表中的 id 和 name 字段。Set datagrd.DataSource = rs 将查询到的记录集赋 给 datagrd 的 datasource 属性,显示查询数据。 所有图书单选按钮代码: 所有图书单选按钮代码:
Private Sub Option1_Click() Dim sqlstr As String Set rs = Nothing rs.CursorLocation = adUseClient sqlstr = "select a.*,b.* ,c.id,c.name from 借 书 记 录 as a, 图 书 表 as b , 会 员 表 as c where a.bookno=b.bookno and a.vipid=c.id and a.vipid='" & Text1.Text & "'" rs.Open sqlstr, cn, adOpenDynamic, adLockOptimistic Set datagrd.DataSource = rs End Sub

未还图书单选按钮代码: 未还图书单选按钮代码:
Private Sub Option2_Click() Dim sqlstr As String Set rs = Nothing rs.CursorLocation = adUseClient sqlstr = "select a.*,b.* ,c.id,c.name from 借 书 记 录 as a, 图 书 表 as b , 会 员 表 as c where a.bookno=b.bookno and a.vipid=c.id and a.vipid='" & Text1.Text & "' and a.returned='0'" rs.Open sqlstr, cn, adOpenDynamic, adLockOptimistic Set datagrd.DataSource = rs End Sub

查询 returned 字段值为 0 的记录即未还记录。 (11)编写图 18-11 中租赁数据设定按钮代码如下:
Private Sub Command6_Click() frminitdata.Show End Sub

Frminitdata.show 命令可以打开期初数据设定窗口 (12)创建期初数据设定窗体。 选择【工程】菜单→【添加窗体】菜单命令,打开“添加窗体” 对话框,单击该对话 框中的【确定】按钮后添加一个新窗体,将其名称改为 frminitdata,在窗体中放置两个标签、

两个文本框和两个按钮。设计的界面如图 18-15 所示。

18-15 期初数据设定窗体界面

窗体中主要控件的属性设置如表 18-11 所示。
表 18-11 期初数据设定窗体控件属性表

对象

属性 名称 Text 名称 Text 名称 Caption 名称 Caption

值 Text1 空 Text2 空 Command1 确定 Command2 取消

Text

CommandButton

(13)编写期初数据窗体代码: 确定按钮代码: 确定按钮代码:
Private Sub Command1_Click() Set rs = Nothing If Len(Text1.Text) > 0 Then rs.Open "update zujin set zujin='" & CSng(Text1.Text) & "'", cnm, adOpenDynamic, adLockOptimistic If Len(Text2.Text) > 0 Then rs.Open "update zujin set mini='" & CSng(Text2.Text) & "'", cn, adOpenDynamic, adLockOptimistic End Sub

取消按钮代码: 取消按钮代码:
Private Sub Command2_Click() Unload Me End Sub

2.3.5 创建图书管理模块 图书信息是租赁操作的对象, 在租赁工作前必须先通过图书管理添加图书。 图书管理橡 块的创建步骤如下: (1)由于此模块用到 ADO 对象和 DataGrid 控件,而这些对象不是 VB 工具箱中默认 的控件,所以先添加此控件,方法是:选择【工程】→【部件】菜单命令,在打开的“部件” 对话框中勾选 “Microsfot ADO Data Control 6.0 (sp6)(OLE DB)”“Microsoft DataGrid Control 和 6.0 (sp6) (OLE DB)” ,单击【确定】按钮,如图 18-16 所示。

图 18-16 “部件”对话框

(2)单击 SSTab 控件的第二个属性页即图书管理选项卡,在空白属性中放置一个 datagrid 控件,一个 ADO 对象,五个按钮在界面中的位置如图所示 18-17 所示。

图 18-17 图书管理模块界面

此模块的主要控件属性如表 18-12 所示。
表 18-12 图书管界面主要按件属性

对象 Datagrid

属性 名称 datasource 名称 Connectionstring Recordsource visible 名称 Caption 名称 Caption

值 Dtgrdbk adodcbk Adodcbk DSN=图书租赁系统 图书表 False Cmdseekbk 查找图书 Cmdaddbk 添加新书

ADODC

CommandButton

名称 Caption 名称 Caption 名称 Caption

Cmddelbk 删除图书 Cmdeditbk 编辑图书 Cmdshowallbk 显示全部数据

在 dtgrdbk 上单击右键在打开菜单上单击【编辑】 ,这时此控件处于编辑状态。再单击 右键这时多出【插入】菜单,单击【插入】菜单,每次添加一列,重复几次使用表格中共有 七列。最后在此控件上单击右键,在打开菜单中单击【属性】菜单,打开“属性页”对话框, 单击【列】选项卡如图 18-18 所示。单击列后面的下拉列表框可列出 Column0 至 Column6, 将它们的标题与数据字段设置如表 18-13 所示。

图 18-18 “属性页”对话框 表 18-13 dtgrdbk 各列属性设置

列 Column0 Column1 Column2 Column3 Column4 Column5 Column6 (4)编写查找图书按钮代码:
Private Sub cmdseekbk_Click() frmseekbk.Show End Sub

标题 图书编号 图书名称 图书类型 出版日期 作者 单价 图书简介

数据字段 Bookno Bookname Booktype Bookpubdate Writer Price Bookintro

Frmseekbk.show 命令可以打开图书查询窗体(frmseekbk.frm) 。 (5)创建图书查询窗体: 选择【工程】→【添加窗体】菜单命令,打开“添加窗体”对话框,单击噶对话框中的 【打开】按钮后添加了一个新窗体,将其名称改为 frmseekbk,在窗体中放置四个标签、四 个下拉列表框、四个文本框和两个按钮,设计的界面如图 18-19 所示。 图书查询窗体中主要控件的属性设置如表 18-14 所示。

18-19 图书查询窗体界面 表 18-14 图书查询窗体主要控件的属性表

对象 Combo

属性 名称 List 名称 List

值 Combo1 包含 等于 Combo2 等于 大于 小于 Combo3 等于 包含 Combo4 包含 Txtbkname 空 Txtpubdate 空 Txtwriter 空 Txtbkintro 空 Command1 确定 Command2 取消

Combobox 名称 List 名称 List 名称 Text 名称 Text Text 名称 Text 名称 Text 名称 CommandButton caption 名称 caption (6)编写图书查询窗体代码。 窗体加载代码如下: 窗体加载代码如下:
Private Sub Form_Load() Combo1.Text = "等于" Combo2.Text = "等于" Combo3.Text = "等于"

Combo4.Text = "包含" End Sub

窗体加载时,设置几个下拉列表框最初的显示内容。 查询按钮代码如下: 查询按钮代码如下:
Private Sub Command1_Click() Dim sqlstr As String Dim sqlstrlen As Integer sqlstr = "select * from 图书表 where" sqlstrlen = Len(sqlstr)

If Len(txtbkname.Text) > 0 Then If Trim(Combo1.Text) = "等于" Then sqlstr = sqlstr & " bookname='" & txtbkname.Text & "'" If Trim(Combo1.Text) = "包含" Then sqlstr = sqlstr & " bookname like '%" & txtbkname.Text & "%'" End If

If Len(txtbkpubdate.Text) > 0 Then If Len(sqlstr) > sqlstrlen Then '注意紧跟“sqlstr=sqlstr & “”后面有个空格下同 If Combo2.Text = "等于" Then sqlstr = sqlstr & " and bookpubdate=" & txtbkpubdate.Text & "" If Combo2.Text = "大于" Then sqlstr = sqlstr & " and bookpubdate>" & txtbkpubdate.Text & "" If Combo2.Text = "小于" Then sqlstr = sqlstr & " and bookpubdate<" & txtbkpubdate.Text & "" Else If Combo2.Text = "等于" Then sqlstr = sqlstr & " bookpubdate=" & txtbkpubdate.Text & "" If Combo2.Text = "大于" Then sqlstr = sqlstr & " bookpubdate>" & txtbkpubdate.Text & "" If Combo2.Text = "小于" Then sqlstr = sqlstr & " bookpubdate<" & txtbkpubdate.Text & "" End If End If

If Len(txtwriter.Text) > 0 Then If Len(sqlstr) > sqlstrlen Then If Combo3.Text = "等于" Then sqlstr = sqlstr & " and writer='" & txtwriter.Text & "'" If Combo3.Text = "包含" Then sqlstr = sqlstr & " and writer like '%" & txtwriter.Text & "%'" Else If Combo3.Text = "等于" Then sqlstr = sqlstr & " writer='" & txtwriter.Text & "'" If Combo3.Text = "包含" Then sqlstr = sqlstr & " writer like '%" & txtwriter.Text & "%'" End If End If

If Len(txtbkintro.Text) > 0 Then If Len(sqlstr) > sqlstrlen Then If Combo4.Text = "等于" Then sqlstr = sqlstr & " and bookintro=" & txtblomtro.Text & "'" If Combo4.Text = "包含" Then sqlstr = sqlstr & " and bookintro like '%" & txtbkintro.Text & "%'" Else If Combo4.Text = "等于" Then sqlstr = sqlstr & " bookintro=" & txtblomtro.Text & "'"

If Combo4.Text = "包含" Then sqlstr = sqlstr & " bookintro like '%" & txtbkintro.Text & "%'" End If End If

If Len(sqlstr) = sqlstrlen Then MsgBox ("至少输入一个条件!") Else If rs.State = adStateOpen Then rs.Close rs.Open sqlstr, cn, adOpenDynamic, adLockOptimistic Set frmmain.dtgrdbk.DataSource = rs Unload Me End If End Sub

该过程声明了 sqlstr 和 sqlstrlen 两个变量, sqlstr 用来保存 SQL 语句, sqlstrlen 保存"select * from 图书表 where"字符串的长度,过程中通过比较 sqlstrlen 与 sqlstr 字符串的长度来判 断 txtname 中的条件是否添加到 sqlstr 字符串中,如果是那么连接其它条件时得用“and”来连 接, 否则直接和 sqlstr 字符串连接起来。 最后打开查询前首先用“if len(sqlstr)=sqlstrlen then…” 条件来判断是否添加了查询条件, 如果没有一个完整的查询条件打开提示消息框, 反之则开 始执行查询。If rs.state=adStateOpen 条件判断 rs 是否已经打开,如要打开在查询前应先关闭 以前的查询。 取消按钮代码: 取消按钮代码:
Private Sub Command2_Click() Unload Me End Sub

(7)编写图 18-17 中添加新书按钮代码如下:
Private Sub cmdaddbk_Click() frmaddbk.Show End Sub

Frmaddbk.show 命令可以打开添加新书窗口 (8)创建添加新书窗体 选择【工程】→【添加窗体】命令,打开“添加窗体”对话框,在对话框中单击【打开】 按钮后添加了一个新窗体,将其名称改为 frmaddbk,在窗体中放置数个标签、文本框和按 钮,设计添加新书窗体的界面如图 18-20 所示。

图 18-20 添加新书窗体界面

添加新书窗体的主要控件的属性设置如表 18-15 所示。
表 18-15 添加新书窗体的主要控件属性表

对象

属性 名称 名称 名称

值 Txtbkno Txtbkname Txtbkpubdate Txtbkwriter Txtbktype Txtbkprice Txtbkintro Command1 确定 Command2 取消关闭

Text

名称 名称 名称 名称 名称 caption 名称 caption

Commandbuton

(9)编写图书添加窗体代码: 编写窗体加载事件代码: 编写窗体加载事件代码:
Private Sub Form_Load() Set rs = Nothing rs.Open "select bookno from 图书表", cn, 1, 1 If rs.RecordCount > 0 Then rs.MoveLast txtbkno.Text = Right("0000" + CStr(Val(rs.Fields(0).Value) + 1), 5) Else txtbkno.Text = "00001" End If End Sub

窗体加载时自动计算添加新书的图书编号为最后一条记录编号加 1, 如果没有记录时图 书编号赋值为“00001” 【确定】按钮代码: 确定】 代码: 确定 按钮代码
Private Sub Command1_Click()

Dim sqlstr As String If Not IsDate(txtbkpubdate.Text) Then MsgBox ("读者输入日期格式不对") Exit Sub End If Set rs = Nothing sqlstr = "insert into 图书表(bookno,bookname,bookpubdate,writer,booktype,price,bookintro) values('" & txtbkno.Text & "','" & txtbkname.Text & "'," & CDate(txtbkpubdate.Text) & ",'" & _ txtwriter.Text & "','" & txtbktype.Text & "'," & CCur(txtprice.Text) & ",'" & txtbkintro.Text & _ "')" rs.Open sqlstr, cn, adOpenDynamic, adLockOptimistic frmmain.adodcbk.Refresh Unload Me End Sub

IsDate( 字 符 串 表 达 式 ) 函 数 是 检 测 字 符 串 表 达 式 是 否 为 日 期 格 式 , frmmain.adodcbk.refresh 是在添加新书后让 adodcbk 控件刷新能看到新记录。 取消】按钮代码: 【取消】按钮代码:
Private Sub Command3_Click() Unload Me End Sub

(10)编写图 18-17 窗体中的【删除图书】按钮代码:
Private Sub cmddelbk_Click() If adodcbk.Recordset.RecordCount > 0 Then If MsgBox("读者确实要删除编号为" & dtgrdbk.Columns(0).Text & "的图书记录吗?", vbYesNo) = vbYes Then rs.Open "delete from 图书表 where bookno='" & dtgrdbk.Columns(0).Text & "'" adodcbk.Refresh End If Else MsgBox ("表中没有图书记录不能执行此操作!") End If End Sub

删除前首先用 recordset.recordcount 属性来判断表中记录个数如果没有记录用 msgbox 消 息提示框提示用户“表中没有图书记录不能执行此操作!”,如果有记录先提示用户确实要删 除某个编号的记录吗?用户单击是同意后才执行删除操作。 (11)编写图 18-17 界面中的【编辑图书】按钮代码如下:
Private Sub cmdeditbk_Click() If adodcbk.Recordset.RecordCount > 0 Then With frmeditbk .txtbkno.Text = dtgrdbk.Columns(0).Text .txtbkname.Text = dtgrdbk.Columns(1).Text .txtbktype.Text = dtgrdbk.Columns(2).Text .txtbkpubdate.Text = dtgrdbk.Columns(3).Text .txtwriter.Text = dtgrdbk.Columns(4).Text

.txtprice.Text = dtgrdbk.Columns(5).Text .txtbkintro.Text = dtgrdbk.Columns(6).Text .Show End With Else MsgBox ("表中没有图书记录不能执行此操作!") End If End Sub

With 表示在一个单一对象或一个用户定义类型上执行一系列的语句。过程中在 frmeditbk 窗体对象上执行一系列的语句,如过程中.show 其实和没有使用 with 时的 frmeditbk.show 意思相同, 此过程主要负责打开 frmeditbk 窗体, 并将图书管理窗体中 datagrid 控件的每列的值分别赋给 frmeditbk 窗体中的所有文本框。 (12)创建图书编辑窗体(frmeditbk.frm) 选择【工程】→【添加窗体】菜单命令,打开“添加窗体”对话框,单击对话框中的【确 定】按钮后添加一个新窗体,将其名称改为 frmeditbk,在窗体中放置数个标签、文本和按 钮,如图所示。 图书编辑窗体主要控件的属性设置如表 18-16 所示。

图 18-21 图书编辑窗体界面 表 18-16 图书编辑窗体主要控件的属性表

对象

属性 名称 名称 名称

值 Txtbkno Txtbkname Txtbkpubdate Txtbkwriter Txtbktype Txtbkprice Txtbkintro Command1 确定 Command2 取消

text

名称 名称 名称 名称 名称 Caption 名称 Caption

Commandbuton

(15)编写图书编辑窗体代码 确定】按钮: 【确定】按钮:
Private Sub Command1_Click() Dim sqlstr As String Set rs = Nothing sqlstr = "update 图 书 表 set bookno='" & txtbkno.Text & "',bookname='" & txtbkname.Text & "',bookpubdate=" & CDate(txtbkpubdate.Text) & ",writer='" & txtwriter.Text & "',booktype='" & txtbktype.Text & "',price=" & CCur(txtprice.Text) & ",bookintro='" & txtbkintro.Text & "'where bookno='" & txtbkno.Text & "'" rs.Open sqlstr, cn, adOpenDynamic, adLockOptimistic frmmain.adodcbk.Refresh Unload Me End Sub

【关闭】按钮代码: 关闭】按钮代码
Private Sub Command3_Click() Unload Me End Sub

(13)编写图书管理窗体界面中的【显示全部数据】按钮代码如下:
Private Sub cmdshowallbk_Click() Set dtgrdbk.DataSource = adodcbk End Sub

2.3.6 创建会员管理模块 会员是本系统的服务的对象,会员管理模块创建的具体步骤如下: (1)单击 SSTab 控件的第三个属性页会员管理选项卡,在属性页上放置一个 DataGrid 控件、一个 ADODC 控件,和数个命令按钮的设计界面如图 18-22 所示。

18-22 会员管理模块界面

用 18.3.5 中的方法为 Datagrid 控件添加列,列的属性如表 18-17 所示。
表 18-17DataGrid 控件列的属性

列 Column0 Column1 Column2 Column3 Column4 Column5 Column6

标题 会员编号 会员名称 年龄 性别 手机 电话 联系地址

数据字段 Id Name Age Sex Mbphone Tele Addr

会员管理窗体的主要控件属性设置如表 18-18 所示。
表 18-18 会员管理窗体的主要控件属性表

对象 ADODC

属性 名称 Connectionstring Recordsource 名称 Datasource 名称 Caption 名称 Caption 名称 Caption 名称 Caption 名称 Caption 名称 Caption

值 Adodcvip DSN=图书租赁系统 会员表 Dtgrdvip Adodcvip Cmdaddvip 添加 Cmddelvip 删除 Cmdeditvip 编辑 Cmdseekvip 查找会员 cmdincharge 会员充值 Cmdchpass 修改密码

CommandButton

(2)编辑添加按钮代码:
Private Sub cmdaddvip_Click() frmaddvip.Show End Sub

Frmaddvip.show 命令可以打开添加会员窗体(frmaddvip.frm) (3) 创建添加会员窗体 选择【工程】→【添加窗体】菜单命令,打开“添加窗体” 对话框,单击对话框中的 【打开】按钮后添加了一个新窗体,将其名称改为 frmaddvip,在窗体中放置数个标签、文 本框和命令按钮的设计界面如图 18-23 所示。

图 18-23 添加会员窗体

添加会员窗体的主要控件属性设置如表 18-19 所示。
表 18-19 添加会员窗体主要控件属性

对象

属性 名称 Text Enabled 名称 Text 名称 Text 名称

值 Txtid 空 False Txtname 空 Txtsex 空 Txtmbphone 空 Txttele 空 Txtage 空 Txtpass 空 txtaddr 空 Command1 确定 Command2 取消

Text

Text 名称 Text 名称 Text 名称 Text 名称 Text 名称 Caption 名称 Caption

Commandbutton

(4)编写添加会员窗体代码: 窗体加载代码: 窗体加载代码:
Private Sub Form_Load() Set rs = Nothing rs.Open "select id from 会员表", cn, 1, 1 If rs.RecordCount > 0 Then rs.MoveLast txtid.Text = Right("0000" + CStr(Val(rs.Fields(0).Value) + 1), 5) Else

txtid.Text = "00001" End If End Sub

窗体加载时自动计算会员编号,为最后一个会员编号加 1,并将其值赋给 txtid。 确定按钮代码: 确定按钮代码:
Private Sub Command1_Click() Dim sqlstr As String Set rs = Nothing sqlstr = "insert into 会 员 表 (id,name,age,sex,addr,mbphone,tele) values('" & txtid.Text & "','" & txtname.Text & "','" & txtage.Text & "','" & _ txtsex.Text & "','" & txtaddr.Text & "','" & txtmbphone.Text & "','" & txttele.Text & "')" rs.Open sqlstr, cn, adOpenDynamic, adLockOptimistic frmmain.Adodcvip.Refresh Set rs = Nothing rs.Open "insert into vipaccount(id,pass) values ('" & txtid.Text & "','" & txtpass.Text & "')", cn, adOpenDynamic, adLockOptimistic Unload Me End Sub

Insert into 语句向表中插入记录,语法格式为: Insert into 表名 (字段 1,字段 2,……) values (值 1,值 2,……) 此过程向会员表和 vipaccount 表中添加记录。 取消按钮代码: 取消按钮代码:
Private Sub Command2_Click() Unload Me End Sub

(5)编写会员管理模块的删除按钮代码:
Private Sub cmddelvip_Click() If Adodcvip.Recordset.RecordCount > 0 Then If MsgBox("此操作会影响到数个表,读者确实要删除编号为" & dtgrdvip.Columns(0).Text & "的会员记 录吗?", vbYesNo) = vbYes Then rs.Open "delete from 会员表 where id='" & dtgrdvip.Columns(0).Text & "'" rs.Open "delete from vipaccount where id='" & dtgrdvip.Columns(0).Text & "'" rs.Open "delete from 借书记录 where vipid='" & dtgrdvip.Columns(0).Text & "'" Adodcvip.Refresh End If Else MsgBox ("表中没有会员记录不能执行此操作!") End If End Sub

Dtgrdvip.columns(0).text 返回当前记录会员编号的值,删除时影响到会员表、借书记录 和 vipaccount 三个表,要将这三个表中有关此会员的记录全部删掉,不然其中一个不删除表 中有多余的记录会浪费空间。

(6)编写会员管理模块的编辑按钮代码如下:
Private Sub cmdeditvip_Click() If Adodcvip.Recordset.RecordCount > 0 Then With frmeditvip .txtid.Text = dtgrdvip.Columns(0).Text .txtname.Text = dtgrdvip.Columns(1).Text .txtage.Text = dtgrdvip.Columns(2).Text .txtsex.Text = dtgrdvip.Columns(3).Text .txtmbphone.Text = dtgrdvip.Columns(4).Text .txttele.Text = dtgrdvip.Columns(5).Text .txtaddr.Text = dtgrdvip.Columns(6).Text .Show End With Else MsgBox ("表中没有会员记录不能执行此操作!") End If End Sub

Frmeditvip 是编辑会员窗体的名称,编辑按钮命令首先将 dtgrdvip 中每列的的值分别传 给编辑会员窗体的 txtid、txtname、txtage 等文本框,然后调用 frmeditvip 的 show 方法打开 编辑会员窗体。 (7)创建会员编辑窗体。 选择【工程】菜单→【添加窗体】菜单命令,打开“添加窗体” 对话框,单击对话框 中的【打开】按钮后添加了一个新窗体,将其名称改为 frmaddvip,在窗体中放置数个标签、 文本框和按钮设计界面如图 18-24 所示。

18-24 编辑会员窗体界面

会员窗体主要控件的属性设置如表 18-20 所示。
表 18-20 会员窗体主要控件的属性

对象 名称 Text text 名称 text

属性 Txtid 空 Txtname 空



名称 text 名称 text 名称 text 名称 text 名称 text 名称 Commandbutton caption 名称 Caption (8)编写会员窗体代码: 确定按钮代码: 确定按钮代码:
Private Sub Command1_Click() Dim sqlstr As String Set rs = Nothing

Txtsex 空 Txtmbphone 空 Txttele 空 Txtage 空 Txtaddr 空 Command1 确定 Command2 取消

sqlstr = "update 会员表 set id='" & txtid.Text & "',name='" & txtname.Text & "',age='" & txtage.Text & "',addr='" & txtaddr.Text & "',mbphone='" & txtmbphone.Text & "',tele='" & txttele.Text & "',sex='" & txtsex.Text & "'where id='" & txtid.Text & "'" rs.Open sqlstr, cn, adOpenDynamic, adLockOptimistic frmmain.Adodcvip.Refresh Unload Me End Sub

取消按钮代: 取消按钮代:
Private Sub Command2_Click() Unload Me End Sub

(9)编写图 18-22 界面中查找会员代码如下:
Private Sub cmdseekvip_Click() frmseekvip.Show End Sub

Frmseekvip.show 命令可以打开查找会员窗体。 (10)创建查找会员窗体。 选择【工程】菜单→【添加窗体】菜单命令,打开“添加窗体” 对话框,单击对话框 中的【打开】按钮后添加了一个新窗体,将其名称改为 frmaddvip,在窗体中放置一个下拉 列表框、一个文本框、一个标签和两个命令按钮,设计界面如图 18-25 所示。 查找会员窗体的主要控件属性设置如表 18-21 所示。

图 18-25 查找会员窗体界面 表 18-21 查找会员窗体的主要控件属性表

对象

属性 名称 Caption 名称 Caption 名称 Caption

值 Command1 确定 Command2 取消 Label1 =

Commandbutton

Label (11)编写查找会员窗体代码 窗体加载事件代码: 窗体加载事件代码:
Private Sub Form_Load() Combo1.Clear Combo1.AddItem ("会员编号") Combo1.AddItem ("会员名称") Combo1.Text = "会员编号" End Sub

窗体加载时为 combobox 项目列表赋值 确定按钮代码: 确定按钮代码:
Private Sub Command1_Click() rs.CursorLocation = adUseClient If rs.State = adStateOpen Then rs.Close If Trim(Combo1.Text) = "会员编号" Then rs.Open "select * from 会员表 where id='" & Text1.Text & "'", cn, adOpenDynamic, adLockOptimistic If Trim(Combo1.Text) = "会员名称" Then rs.Open "select * from 会员表 where name='" & Text1.Text & "'", cn, adOpenDynamic, adLockOptimistic If rs.RecordCount > 0 Then Set frmmain.dtgrdvip.DataSource = rs Else MsgBox ("没有此会员") End If Unload Me End Sub

查找会员时可通过会员编号及会员名称查询。 取消按钮代码:
Private Sub Command2_Click() Unload Me

End Sub

取消按钮代码,卸载自身窗体,恢复内存空间。 (12)编写图 18-22 会员管理模块界面中的会员充值按钮代码:
Private Sub cmdincharge_Click() frmvipincharge.Show End Sub

Frmvipincharge.show 命令可以打开会员充值窗体(frmvipincharge.frm) (13)创建会员充值窗体。 选择【工程】菜单→【添加窗体】菜单命令,打开“添加窗体” 对话框,单击对话框 中的【确定】按钮后添加一个新窗体,将其名称改为 frmincharge,在窗体中放置两个 frame 控件、数个标签、文本框和命令按钮控件,设计界面如图 18-26 所示。

18-26 会员充值窗体界面

会员充值窗体主要控件的属性设置如表 18-22 所示。
表 18-22 会员充值窗体主要控件属性设置

对象

属性 名称 Caption 名称 Caption 名称 Caption 名称 Caption 名称 Caption 名称 Caption 名称 Caption

值 Cmdconfirmid 确定 Cmdconfirmcharge 确认充值 Command3 取消 Txtid 空 Txtpass 空 Txtaccount 空 Txtm 空

CommandButton

Text

(14)编写会员充值窗体代码 确认帐号按钮代码: 确认帐号按钮代码:
Private Sub cmdconfirmid_Click() Set rs = Nothing rs.CursorLocation = adUseClient

rs.Open "select id,pass,account from vipaccount where id='" & txtid.Text & "'", cn, adOpenDynamic, adLockOptimistic If rs.RecordCount > 0 Then If txtpass.Text = Trim(rs.Fields(1).Value) Then txtaccount.Text = Trim(rs.Fields(2).Value) Set rs = Nothing rs.Open "select id,name from 会 员 表 where id='" & txtid.Text & "'", cn, adOpenDynamic, adLockOptimistic lbname.Caption = "尊敬的会员 " & rs.Fields(1).Value & " 读者好" Else MsgBox ("密码不正确!") End If Else MsgBox ("没有此会员号!") End If End sub

充值前通过会员编号和密码校验正确后,才能充值,同时在 txtaccount 文本框显示帐号 余额。 确认充值按钮代码: 确认充值按钮代码:
Private Sub cmdconfirmcharge_Click() Dim m As Single If MsgBox("读者的本次充值金额为" & txtm.Text & "确认充值吗?", vbYesNo) = vbYes Then m = Val(txtaccount.Text) + Val(txtm.Text) Set rs = Nothing rs.Open "update vipaccount set account=" & m, cn, adOpenDynamic, adLockOptimistic MsgBox ("充值成功!") Unload Me End If End Sub

变量 m 保存充值后总的帐号金额,它的值是把帐号余额与本次充值金额相加得到的。 Val 函数是将字符串型转换为数值型。 取消按钮代码: 取消按钮代码:
Private Sub Command3_Click() Unload Me End Sub

(15)编写图 18-22 会员管理模块界面中修改密码按钮代码如下:
Private Sub cmdchpass_Click() frmchpass.Show End Sub

Frmchpass.show 命令可以打开密码修改窗体(frmchpass) (16)创建密码修改窗体。 选择【工程】菜单→【添加窗体】菜单命令,打开“添加窗体” 对话框,单击对话框 中的【打开】按钮后添加了一个新窗体,将其名称改为 frminchpass,在窗体中放置数个标 签、文本框和命令按钮控件,设计界面如图 18-27 所示。

图 18-27 密码修改窗体界面

密码修改窗体主要控件的属性设置如表 18-23 所示
表 18-23 密码修改窗体主要控件属性

对象

属性 名称 caption 名称 caption

值 Cmdchang 确定 Cmdcancel 取消

CommandButton

(17)编写密码修改窗体代码 确定按钮代码
Private Sub cmdchang_Click() Set rs = Nothing rs.CursorLocation = adUseClient rs.Open "select id,pass from vipaccount where id='" & Text1.Text & "'", cn, adOpenDynamic, adLockOptimistic If rs.RecordCount > 0 Then If Text2.Text = Trim(rs.Fields(1).Value) Then If Text3.Text = Text4.Text Then Set rs = Nothing rs.Open "update vipaccount set pass='" & Text4.Text & "'", cn, adOpenDynamic, adLockOptimistic MsgBox "修改成功" Else MsgBox "两次新密码不一致" End If Else MsgBox "原始密码不正确!" End If Else MsgBox "会员号不存在!" End If End Sub

密码修改时首先判断用户编号是否存在,若存在要求输入原始密码,和两次新密码,校 验通过才能执行修改密码操作。

取消按钮代码“ 取消按钮代码“
Private Sub cmdcancel_Click() Unload Me End Sub

18)编写图 18-22 会员管理模块界面中显示所有数据按钮代码
Private Sub cmdshowallvip_Click() Set dtgrdvip.DataSource = Adodcvip End Sub

因为查询后,只显示符合条件的记录,那么我们需要显示所有记录时,可单击此按钮, 代码中通过设置 datgrdvip 的 DataSource 属性为 adodcvip 控件来实现。 2.3.7 创建操作员管理模块 操作员是指使用本系统的人员,此模块比较简单,只有一个操作密码修改的功能。其它 功能如果感兴趣,可自行添加。其创建过程如下: (1)单击 Sstab 控件第四个属性页,操作员管理选项卡,在属性页中放置一个命令按 钮,修改其按钮的 caption 属性为“修改管理员密码”设计界面如图 18-28 所示。

图 18-28 操作员管理模块界面

(2)双击修改管理员密码按钮,打开代码窗口,编写其代码如下:
Private Sub Command5_Click() frmchgloginpass.Show End Sub

Frmchgloginpass.show 可以打开修改管理员密码窗体(frmchgloginpass.frm) (3)创建密码修改窗体 选择【工程】→【添加窗体】菜单命令,打开“添加窗体” 对话框,单击对话框中的 【打开】按钮后添加了一个新窗体,将其名称改为 frminchgloginpass,在窗体中放置数个标 签、文本框和命令按钮控件,设计的界面如图 18-29 所示。

图 18-29 密码修改窗体界面

2.3.8 编写主窗体菜单代码 (1)编写图书租赁管理模块菜单代码 主菜单代码: 主菜单代码:
Private Sub mzl_click() sstab.Tab = 0 End Sub

借书管理菜单代码: 借书管理菜单代码:
Private Sub mlend_Click() frmlend.Show End Sub

还书管理菜单代码: 还书管理菜单代码:
Private Sub mreturn_Click() frmreturn.Show End Sub

记录查询菜单代码: 记录查询菜单代码:
Private Sub mseek_Click() frmrecseek.Show End Sub

租赁数据设定菜单代码: 租赁数据设定菜单代码:
Private Sub minfo_Click() frminitdata.Show End Sub

(2)编写图书管理模块菜单代码 主菜单代码: 主菜单代码:
Private Sub mbk_click() sstab.Tab = 1 End Sub

查找图书菜单代码: 查找图书菜单代码:
Private Sub mbkseek_Click() frmseekbk.Show End Sub

添加新书菜单代码: 添加新书菜单代码:
Private Sub mbkadd_Click()

frmaddbk.Show End Sub

删除图书代码: 删除图书代码:
Private Sub mbkdel_Click() cmddelbk_Click End Sub

编辑图书菜单代码: 编辑图书菜单代码:
Private Sub mbkedit_Click() cmdeditbk_Click End Sub

显示全部数据菜单代码: 显示全部数据菜单代码:
Private Sub mshowallbk_Click() cmdshowallbk_Click End Sub

(3)编写会员管理模块菜单代码 主菜单代码: 主菜单代码:
Private Sub mvip_click() sstab.Tab = 2 End Sub

添加菜单代码: 添加菜单代码:
Private Sub mvipadd_Click() frmaddvip.Show End Sub

删除菜单代码: 删除菜单代码:
Private Sub mvipdel_Click() cmddelvip_Click End Sub

编辑菜单代码: 编辑菜单代码:
Private Sub mvipedit_Click() cmdeditvip End Sub

查找会员菜单代码
Private Sub mvipseek_Click() frmseekvip.Show End Sub

会员充值菜单代码: 会员充值菜单代码:
Private Sub mvipincharge_Click() frmvipincharge.Show End Sub

密码修改菜单代码: 密码修改菜单代码:
Private Sub mchgpass_Click() frmchpass.Show

End Sub

显示全部菜单代码: 显示全部菜单代码:
Private Sub mshowallvip_Click() cmdshowallvip_Click End Sub

(4)编写操作员管理模块菜单代码。 修改管理员密码菜单代码: 修改管理员密码菜单代码:
Private Sub mchgadminpass_Click() frmchgloginpass.Show End Sub

关于菜单代码: 关于菜单代码:
Private Sub mabout_Click() frmabout.Show End Sub

2.3.9 创建关于窗体 单击【工程】菜单→【添加窗体】菜单命令,打开“添加窗体向导”对话框,单击向导 中的【打开】按钮后添加了一个新窗体,将其名称改为 frmabout。在窗体中放置两个标签, 设置标签的 caption 属性,如图 18-30 所示。

图 18-30 “添加窗体”对话框和设计的“关于”窗体界面

具体的代码部分,读者可以自己编写完成。在此不再介绍。 2.4 小结 在本章的内容中, 介绍了一个简单的图书租赁系统的编写过程。 该系统可用于读书社等 有关于图书租赁的地方,本章系统地说明了此系统的开发过程,使大家能够举一反三,在开 发其它功能完善的系统时,需要进行的准备、分析、实现等工作。通过本章实例编程进一步 了解了数据库编程的方法,为以后的实际编程工作打下一定的基础。


更多相关文档:

图书馆书籍租借管理系统

图书馆书籍租借管理系统_计算机软件及应用_IT/计算机_专业资料。数据库 图书馆书籍租借管理系统 小组成员:史珺姝 20131003524 谭凯妍 20131003517 班级:计算机 1302 班...

图书租借管理系统毕业设计说明书

图书租借管理系统毕业设计说明书_IT/计算机_专业资料。适用于计算机专业学生毕业设计时作参考。今日推荐 88份文档 2014全国高考状元联手分享状元笔记 ...

图书租赁系统

图书租赁系统 “学院书屋”是一个以图书租赁为主要业务的个体单位。 其图书按租价不同分为三类:1:普通图书;2:计算机图书;3:新书。不同 类别图书的租赁规则不同...

在线图书租赁管理系统的设计与实现

在线图书租赁管理系统的设计与实现_计算机软件及应用_IT/计算机_专业资料。毕业设计论文 本科毕业论文(设计) 题 目 在线图书租赁管理系统的设计与实现 信息工程学院 ...

图书租赁系统报告

随着经济的快 步发展, 企业或行业越来越注重效率和效益问题,此时管理信息系统的重要性逐渐显 现, 但通过市场调查发现目前决大多数的图书租赁商店还是采用的人工手写...

图书租借系统

——图书租赁系统 附加实例 2——图书租赁系统 —— 目前租书社与读书社,每天都要处理图书、读书会员、借书、还书等信息,并且需要将 这些记录保存在数据库中。 ...

图书租借系统实例

9.2 一个完整的管理信息系统实例使用 Access 作为开发工具,开发图书租借系统。体会系统的数据库,以及基于数据 库的程序设计。 9.2.1 数据分析并创建表书店的业务...

书店图书租赁管理系统的设计与开发

书店图书租赁管理系统的设计与开发 [摘要] 随着书店图书租赁业务的不断发展与扩大,为了能适应市场经济的发展,节约人力成本,并能为客户提供更加快捷方便的服务, 书店...

图书租赁管理信息系统

(编号,图书编号,图书数量) 管理(编号,会员编号,是否超期) 2.3 物理结构设计 图书租赁管理信息系统是一个多用户共享系统, 对同一个关系要 建立多条存取路径才能...

公共图书馆租借管理系统需求分析

公共图书馆租借管理系统需求分析_销售/营销_经管营销_专业资料。公共图书馆租借管理系统需求分析 摘要: 本文介绍了公共图书馆当中的图书租借系统,并介绍了这一系统的...
更多相关标签:
图书租赁管理系统 | 图书管理系统 | 图书馆管理系统 | java图书租赁系统 | 美萍图书馆管理系统 | 图书租赁系统代码 | 图书租赁系统测试 | 在线图书租赁系统 |
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com