![f4457dc77d6468df85ae54ee301ee379.png](https://i-blog.csdnimg.cn/blog_migrate/d66aaaa787c67459fb991e8f3024d963.jpeg)
在前文书中,我们介绍了一些前期需要准备的环境及数据结构。
前文回顾:
《小白是这样打造图书管理系统的(一)》
《小白是这样打造图书管理系统的(二)》
手中有粮,心中不慌,我们有了数据库测试数据,接下来就可以稳扎稳打继续下一步的内容啦!
我们说实现程序设计和操作,实际上就是实现对这些数据具体操作的体现。
比如,来了一本新书《网管小贾谈如何成为时间管理大师》。
既然来了,那我们就把它录入到系统中吧,这时系统中就多了一条记录。
还有,有一位小伙伴对《智取天狼星计划》这本小说非常感兴趣,一口气就借了五本。
这时由于读者借阅动作,于是就触发了图书状态(被借阅)的变化。
但是,书被借走了,问题也来了,我们在操作这些数据的时候,如果在客户端工具上直接动手操作SQL语句,那么我可以把手按在圣经上保证,你不是被烦死的,就是被累死的。
有这么可怕喵?
好了,道理大家都懂,那么要怎么解救劳苦大众于水深火热之中呢?
答案很简单哈,我们需要通过一些简便易用的操作界面,给它赋予相应的操作数据的功能,来代替繁冗复杂的数据库后台操作。
这个时候估计会有小伙伴举起了小手,没错,那就是传说中的人与数据交互的应用程序界面了。
第三弹:程序界面设计
使用基于程序界面组件的VB构建界面是非常简单的事。
根据主要实现 CRUD
(增删改查)的功能,可以分别设计各自的界面。
以下简单给出我设计的参考样图,不要嫌丑哦,我相信你的艺术欣赏水平一定比我高那么一点点,肯定能设计出更美的界面。
人要脸,树要皮,我的程序封面也差不离。
图书信息管理界面,以查询表格为主,添加删除等为辅。
图书借阅操作界面,主要用于处理借阅及归还流程操作。
图书借阅记录界面,方便查询、或进一步处理借阅状态数据。
第四弹:程序代码实现
终于来到了我们的重点实验区。
要说界面设计,我们可能天生艺术细胞稀缺,后天有机会再补也行,但功能实现是最最主要要解决的问题,就必须要真正的做好它。
一、前期环境配置
在VB开发环境中,我们需要添加一些 引用
和 部件
。
首先是引用,依次点击菜单 工程(P)
> 引用(N)...
。
需要使用到 Microsoft ActiveX Data Objects 2.5 Library
和 Microsoft Data Formatting Object Library 6.0 (SP6)
。
前者是用来连接 SQL Server
数据库的,后者是用来格式化数据的。
其次是部件,依次点击菜单 工程(P)
> 部件(O)...
。
分别需要用到对话框、数据表格、选项卡等组件。
二、部分代码实现
我们以图书信息的增删改查为例,演示代码实现。
1、增
' ********添加图书,先判断是否已录入,如果已存在,则提示退出,否则添加新记录信息。********strSql = "SELECT TOP 1 book_ID FROM bms4l_Book WHERE book_ID='" & Trim(txtBookID.Text) & "'" Set rst = SelectSQL(strSql, strmsg) ' 如果bookID存在,则刷新使用最新时间做为ID编号 If rst.RecordCount = 0 Then MsgBox "记录已存在!", vbCritical + vbOKOnly, "网管小贾的图书管理系统" Exit Sub End If ' 添加新记录 strSql = "INSERT INTO dbo.bms4l_Book (book_ID,book_Title,book_Volume,book_Press,book_Author,book_ISBN,book_PublishTime,book_Price,book_DateStorage,book_BeLent,book_BeLentCounts,book_Remark)" strSql = strSql & " VALUES('" & Trim(txtBookID.Text) & "','" & Trim(txtBookTitle.Text) & "','" & Trim(txtBookVolume.Text) & "','" & Trim(txtBookPress.Text) & "','" & Trim(txtBookAuthor.Text) & "','" & Trim(txtBookISBN.Text) strSql = strSql & "','" & Trim(txtBookPublishTime.Text) & "','" & Trim(txtBookPrice.Text) & "','" & Trim(txtBookDateStorage.Text) & "','" & Trim(txtBookBeLent.Text) & "','0','" & Trim(txtBookRemark.Text) & "')" Call ExecuteSQL(strSql, strmsg) If InStr(1, strmsg, "执行成功") = 0 Then MsgBox "数据库操作失败!请稍后重试!", vbCritical + vbOKOnly, "网管小贾的图书管理系统" Else MsgBox "添加图书成功!!", vbInformation + vbOKOnly, "网管小贾的图书管理系统" End If
2、删
' ******** 找出ID,删除记录 ********strSql = "SELECT TOP 1 book_Title FROM dbo.bms4l_Book WHERE book_ID='" & tmpMsfgBookText & "'" Set rst = SelectSQL(strSql, msg) If rst.RecordCount > 0 Then '如果选择的是存在的记录,则确认是否删除此记录 If MsgBox("真的要删除该记录吗??", vbQuestion + vbYesNo + vbDefaultButton2, "网管小贾的图书管理系统") = vbYes Then strSql = "DELETE FROM dbo.bms4l_Book WHERE book_ID='" & tmpMsfgBookText & "'" Call ExecuteSQL(strSql, msg) If InStr(1, msg, "执行成功") = 0 Then MsgBox "数据库操作失败!请稍后重试!", vbCritical + vbOKOnly, "网管小贾的图书管理系统" Else MsgBox "指定图书删除成功!!", vbInformation + vbOKOnly, "网管小贾的图书管理系统" End If cmdBookDelete.Enabled = False End If End If
3、改
' ******** 修改记录分两步,一是显示要修改的记录,二才是修改记录后保存。********` 一、选择需要修改的记录,然后显示记录内容 strSql = "SELECT TOP 1 * FROM dbo.bms4l_Book WHERE book_ID='" & tmpMsfgBookText & "'" Set rst = SelectSQL(strSql, msg) If rst.RecordCount > 0 Then '如果选择的是存在的记录,则打开修改窗口 With frmBookModify '加载当前记录到各项目文本框中 .txtBookID.Text = Trim(rst("book_ID").value) .txtBookTitle.Text = Trim(rst("book_Title").value) .txtBookPress.Text = Trim(rst("book_Press").value) .txtBookAuthor.Text = Trim(rst("book_Author").value) .txtBookISBN.Text = Trim(rst("book_ISBN").value) .txtBookPublishTime.Text = Trim(rst("book_PublishTime").value) .txtBookPrice.Text = Trim(rst("book_Price").value) .txtBookDateStorage.Text = Trim(rst("book_DateStorage").value) .txtBookBeLent.Text = Trim(rst("book_BeLent").value) .txtBookBeLentCounts.Text = Trim(rst("book_BeLentCounts").value) .txtBookRemark.Text = Trim(rst("book_Remark").value) .Show vbModal, Me End With End If' 二、修改记录并提交到数据库中 strSql = "UPDATE bms_book " strSql = strSql & "SET book_ & Trim(txtBookTitle) strSql = strSql & "', book_Volume='" & Trim(txtBookVolume) strSql = strSql & "', book_Press='" & Trim(txtBookPress) strSql = strSql & "', book_Author='" & Trim(txtBookAuthor) strSql = strSql & "', book_ISBN='" & Trim(txtBookISBN) strSql = strSql & "', book_PublishTime='" & Trim(txtBookPublishTime) strSql = strSql & "', book_Price='" & Trim(txtBookPrice) strSql = strSql & "', book_Remark='" & Trim(txtBookRemark) strSql = strSql & "' WHERE book_ID='" & Trim(txtBookID.Text) & "'" Call ExecuteSQL(strSql, strmsg) If InStr(1, strmsg, "执行成功") = 0 Then MsgBox "数据库操作失败!请稍后重试!", vbCritical + vbOKOnly, "网管小贾的图书管理系统" Else MsgBox "图书信息更新成功!", vbInformation + vbOKOnly, "网管小贾的图书管理系统" End If
4、查
看似简单,实际还是比较复杂的,因为要构建筛选条件。
利用SQL语句的拼接,把每个需要筛选的条件字段连接起来,最后再拼接到 Where
关键字的后面。
举例:
如果想查询 id
等于 1
,name
等于 sysadm.cc
,time
等于 2020-11-11
的所有记录。
原始SQL语句应该是:SELECT * WHERE id=1 AND name='sysadm.cc'
那么我们参照原始SQL语句构建WHERE后面的条件语句,可以这个样子来做:
' 1.定义一个字符串变量Dim strSql AS String' 2.把每个字段条件写出来,然后依次拼接。' 注意,每一行最前面有个空格,用于拼接分隔的每个字段。' 拼接完成的strSql应该是这个样子滴:' strSql = " id = 1 AND name = 'sysadm.cc' AND time = '2020-11-11'"strSql = strsql & " id = 1"strSql = strsql & " AND name = 'sysadm.cc'"strSql = strsql & " AND time = '2020-11-11'"' 3.最后拼接到 WHERE 关键字后就OK了' 实际完整SQL查询语句:' strSql = "SELECT * FROM table WHERE id = 1 AND name = 'sysadm.cc' AND time = '2020-11-11'"strSql = "SELECT * FROM table WHERE" & strSql
好理解吧?
回到我们的图书管理系统,具体代码可能是这个样子的。
' ******** 构建Where查询条件 ********If chkBookID.value = vbChecked Then If Trim(txtBookQueryBookID.Text) <> "" Then strSql = "book_ID LIKE '%" & Trim(txtBookQueryBookID.Text) & "%'" End If End If If chkBookTitle.value = vbChecked Then If Trim(txtBookTitle.Text) <> "" Then If Trim(strSql) <> "" Then strSql = strSql & " AND book_Title LIKE '%" & Trim(txtBookTitle.Text) & "%'" Else strSql = "book_Title LIKE '%" & Trim(txtBookTitle.Text) & "%'" End If End If End If If chkBookAuthor.value = vbChecked Then If Trim(txtBookAuthor.Text) <> "" Then If Trim(strSql) <> "" Then strSql = strSql & " AND book_Author LIKE '%" & Trim(txtBookAuthor.Text) & "%'" Else strSql = "book_Author LIKE '%" & Trim(txtBookAuthor.Text) & "%'" End If End If End If If chkBookDateStorage.value = vbChecked Then If Trim(txtBookDateStorage(0).Text) = "" Or Trim(txtBookDateStorage(1).Text) = "" Then Else If IsDate(Trim(txtBookDateStorage(0).Text)) And IsDate(Trim(txtBookDateStorage(1).Text)) Then If Trim(strSql) <> "" Then strSql = strSql & " AND book_DateStorage BETWEEN '" & Trim(txtBookDateStorage(0).Text) & "' AND '" & Trim(txtBookDateStorage(1).Text) & "'" Else strSql = " book_DateStorage BETWEEN '" & Trim(txtBookDateStorage(0).Text) & "' AND '" & Trim(txtBookDateStorage(1).Text) & "'" End If Else MsgBox "登记日期格式错误!", vbExclamation + vbOKOnly, "" cmdBookQuery.Enabled = True Exit Sub End If End If End If If chkBookPress.value = vbChecked Then If Trim(txtBookPress.Text) <> "" Then If Trim(strSql) <> "" Then strSql = strSql & " AND book_Press LIKE '%" & Trim(txtBookPress.Text) & "%'" Else strSql = "book_Press LIKE '%" & Trim(txtBookPress.Text) & "%'" End If End If End If If chkBookBeLent.value = vbChecked Then If Trim(cboBookBeLent.Text) <> "" Then If Trim(strSql) <> "" Then strSql = strSql & " AND book_BeLent='" & Trim(cboBookBeLent.Text) & "'" Else strSql = "book_BeLent='" & Trim(cboBookBeLent.Text) & "'" End If End If End If If chkBookBeLentCounts.value = vbChecked Then If Trim(txtBookBeLentCounts(0).Text) <> "" And Trim(txtBookBeLentCounts(1).Text) <> "" Then If IsNumeric(Trim(txtBookBeLentCounts(0).Text)) Or IsNumeric(Trim(txtBookBeLentCounts(1).Text)) Then If Trim(strSql) <> "" Then strSql = strSql & " AND book_BeLentCounts BETWEEN '" & Trim(txtBookBeLentCounts(0).Text) & "' AND '" & Trim(txtBookBeLentCounts(1).Text) & "'" Else strSql = "book_BeLentCounts BETWEEN '" & Trim(txtBookBeLentCounts(0).Text) & "' AND '" & Trim(txtBookBeLentCounts(1).Text) & "'" End If Else MsgBox "借阅次数不是数字!", vbExclamation + vbOKOnly, "" cmdBookQuery.Enabled = True Exit Sub End If End If End If' ******** 筛选条件有了,则构建完整的查询语句 ******** If strSql = "" Then If MsgBox("没有选择任何查询条件。确定要查询所有图书记录吗??", vbQuestion + vbYesNo + vbDefaultButton2, "网管小贾的图书管理系统") = vbNo Then cmdBookQuery.Enabled = True Exit Sub Else strSql = "SELECT TOP 10000 * FROM dbo.bms4l_Book ORDER BY book_ID ASC" End If Else strSql = "SELECT TOP 10000 * FROM dbo.bms4l_Book WHERE " & strSql & " ORDER BY book_ID ASC" End If msfgBook.Redraw = False msfgBook.Tag = "" Call fillGrid_Book(msfgBook, strSql) Call ChangeMsflexGridColor(msfgBook)
基本的操作就这些了,包括读者信息等的操作都是大同小异的。
当然,如果需要实现更加复杂的业务逻辑,那就需要编写更多的代码。
除了这些基本的CRUD以外,在一个相对完整的系统程序中,还有一些相关的功能也是必备的。
例如,信息分类、用户登录或数据备份等等。
实现这些与CRUD数据操作本身关系不大、但又是系统必备的功能,实际上还是离不开我们前面讲到的后台数据、界面设计以及代码实现这几大步骤。
那么对于新手小白来说,这些看似简单其实本质却很虐人的变态功能,可能自己动手做起来非常要命。
好了,不用担心,现在我出现了!
那个...灯光师傅麻烦给这边打个灯光,谢谢!
咳咳...我想说的是,咳...现今流行WEB形式程序,那么以后有机会,我会介绍 PHP+MySql
形式的程序实现。
OK!我要找流浪哥打牌去了,我们下次再见!
欢迎小伙伴们留言给我吧!
前文回顾:
《小白是这样打造图书管理系统的(一)》
《小白是这样打造图书管理系统的(二)》
WeChat @网管小贾 | www.sysadm.cc