摘 要
《网上图书预约系统的设计》是以为读者提供便利为前提而开发的一个信息管理系统,它不仅要求建立数据的一致性和完整性,而且还需要应用程序功能的完备、易用等特点。系统主要采用VB.NET作为前端的应用开发工具,利用SQL Server2000数据库作为后台的数据库,利用WINDOWS XP作为系统平台,采用VB.NET的ADO.NET数据访问规范来访问和操作数据库进行开发的供用户管理和操作图书的桌面数据库系统。它的主要功能是实现用户在网上进行图书的预约以及管理员对图书和用户的管理。系统的使用对象可以是高校或者其他单位的图书馆的读者和管理人员。
本文主要讲述了VB.NET的基本概述及设计方法,紧接着以此系统为例,逐一介绍系统的设计开发,系统分为六个模块:用户身份验证模块、用户个人信息管理模块、图书查询预约模块、信息发布模块、图书管理模块、系统管理模块。在系统分析中先后用系统的功能结构图、数据库的E-R图、数据库表分析了系统所需的各种数据。在系统的设计中,详细的展现了系统的各个功能模块及核心代码。
关键词:图书;预约;VB.NET;数据库
3.1 功能设计
通过对用户需求调研及分析,确定系统应具备的功能,包括:安全管理,用户个人信息管理,图书查询及预约,信息发布,图书信息管理,用户信息管理,用户角色权限管理。其具体功能设计如下:
1、安全管理
提供用户登录、注销以及修改密码等功能。
2、用户个人信息管理
每个用户可以对自己的信息进行查看以及修改密码等操作,还可以查看和删除自己的预约信息。
3、图书查询及预约
根据一定的条件对图书进行查询,并可以查看图书的详细信息。用户登录后可以对查询到的图书进行预约操作。
4、信息发布
用户可以查看当前最新图书信息以及当前预约信息和历史预约信息。
5、图书信息管理
图书管理员可以对图书进行添加、更新及删除操作。在图书管理员录入图书信息时,需要输入图书名称、图书作者、出版社及价格等信息,同时还需要选择图书状态。对于已存在的图书信息同样可以对其进行修改和删除操作。
6、用户信息管理
系统管理员可以添加新用户,并对用户的信息进行修改更新操作。在用户编辑修改页面,可以更改用户类别和用户状态等,但不可以对用户的ID进行修改。
7、系统角色权限管理
系统管理员可以添加、修改和删除某一角色。对应于某一种角色,有类别名称、是否允许预约、是否允许管理图书信息、是否允许管理系统等参数。
3.2 系统功能结构图
图2 系统功能结构图
4.3 用户个人信息模块
4.3.1 功能描述
在用户个人信息管理模块里主要包括了用户信息页面和个人预约信息页面。用户信息页面包括用户的用户名、姓名、性别、E-Mail、单位、电话、当前状态、是否为图书管理员或系统管理员等信息;个人预约信息页面做成加载控件的形式,通过传递参数在ListContent.aspx页面动态加载控件。
4.3.2 个人预约信息控件BookingList.ascx的设计
个人预约信息控件中,Page_Load()函数在首次加载页面时绑定DataGrid,通过加载控件后显示图书的相关信息及预约时间、到书时间、是否到书的通知、预约状态等信息,并且根据参数不同进行相应的删除预约信息等操作。其主要后台处理代码如下:
Private Sub Page_Load (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
BindDBGrid ()
End If
End Sub
Private Sub BindDBGrid ()
Dim sqlstr As String = String.Empty
sqlstr += "select b.BookID, b.BookName, b.BookAuthor,"
sqlstr += " b.ISBN, b.SearchNO, a.BookingDate, returnDate = case b.isBorrow"
sqlstr += " when 0 then b.UploadDate"
sqlstr += " when 1 then dbo.f_GetReturnDate (a.BookID) end ,"
sqlstr += " stateMsg = case a.State when 1 then '有效' when 2 then '已过期' end,"
sqlstr += " isReturned = dbo.f_GetIsReturned (a.BookID, getDate ())"
sqlstr += " from BookingInfo a inner join BookInfo b"
sqlstr += " on a.BookID = b.BookID where a.State <> 0 and a.UserID = '" + Session ("UserID").ToString () + "'"
Dim obj As DBController = New DBController
obj.BindDBGrd (sqlstr, BookingGrid)
End Sub
4.3.3 个人预约信息的主界面图
图8 个人预约信息界面
4.4 图书查询预约模块的设计
4.4.1 功能描述
图书查询模块主要包含了简单查询页面(SimpleSearch.aspx)、普通查询页面(NormalSearch.aspx)和高级查询页面(AdvSearch.aspx)。特别要注意的是,用户预约成功的书在登录后不能查询出来。
4.4.2 预约流程图
图9 预约流程图
4.4.3 简单查询页面SimpleSearch.aspx的设计
在Page_Load()函数中,首先判断用户是否允许预约,如果不允许预约操作,则隐藏预约按钮。
MisBtn_Click()函数处理“模糊查询”按钮的单击事件,获取查询条件,组成查询的SQL语句,然后进行数据绑定,其主要处理代码如下:
Private Sub MisBtn_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MisBtn.Click
QuerySql ()
If txtContent.Text.ToString.Trim <> "" Then
Dim str As String = txtContent.Text.ToString.Trim
sqlstr += " where a.BookAuthor like '%" + str + "%' or a.Subject like '%" + str + "%' or a.BookName like '%" + str + "%'"
End If
Session ("sqlstr") = sqlstr
BindGrid ()
End Sub
BookingBtn_Click()函数处理“预约”按钮单击事件,其处理函数首先获取所有被选中的图书ID,然后组成SQL语句插入到预约信息表中。如果用户预约成功后,则弹出“预约成功”的提示框。其主要处理代码如下:
Private Sub BookingBtn_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BookingBtn.Click
Dim i As Integer
Dim userID As String = Session ("UserID")
Dim str As String = ""
Dim myCheckBox As CheckBox
For i = 0 To ResultGrid.Items.Count - 1
myCheckBox = CType (ResultGrid.Items (i).FindControl ("ChckBox"), CheckBox)
If myCheckBox.Checked = True Then
str += "if(not exists(select 1 from BookingInfo where bookid=" + ResultGrid.Items(i).Cells(6).Text + " and userid='" + userID + "')) insert into BookingInfo (UserID,BookID,BookingDate,BookingState) values('" + userID + "'," + ResultGrid.Items(i).Cells(6).Text + ",getdate(),0)"
End If
Next
Dim obj As DBController = New DBController
obj.ExecNonSql (str)
Response.Write("<script>javascript:alert('预约成功!!!');</script>")
End Sub
4.4.4 普通查询页面和高级查询页面的设计
这两个页面与简单查询页面的设计只是其查询的条件有所不同。
4.4.5 简单查询页面的主界面图
图10 简单查询界面
4.5 信息发布模块的设计
4.5.1 功能描述
信息发布模块包括查看最近上架的图书信息页面(NewBook.aspx)、当前预约信息控件(BookingIn.ascx)和历史预约信息控件(HisBooking.ascx)通过MsgContainer.aspx页面加载。
4.5.2 新书查询页面NewBook.aspx的设计
在该页面中,只需添加一个下拉框,让用户在下拉框中选择时间,提供查询按钮,在Datagram中显示出来,对DataGrid进行数据绑定函数以提供调用,在此DataGrid中实现分页、排序、查看图书信息等功能。SearchBtn_Click()函数处理“查询”按钮单击事件,获取查询条件,其中需要对时间进行特别的处理。
4.5.4 控件加载页面MsgContainer.aspx的设计
控件加载页面中通过table的单元格来控制控件的加载,在<TD>中加runat="server",并为其添加ID。在Page_Load()函数中通过识别type传递参数来加载不同控件,1表示加载当前预约信息控件,2表示加载历史预约信息控件。
当前预约信息控件(BookingIn.ascx)主要用来显示用户的有效预约信息。通过对DataGrid进行数据绑定,显示有效预约状态的用户的用户名、姓名及单位,有效预约的图书的书名、著者、预约时间及到书时间和当前预约状态。其主要处理代码如下:
Private Sub Page_Load (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
Dim sqlstr As String = String.Empty
sqlstr += "update BookingInfo set State = 2 where State = 1 and dateadd (day, 2, dbo.f_GetBookingDate (BookID, BookingDate)) < getDate ()”
sqlstr += "select a.UserID, a.UserName, a.Unit, b.BookingDate,"
sqlstr += "c.BookName, c.BookAuthor, returnDate = case c.isBorrow "
sqlstr += "when 0 then c.UploadDate "
sqlstr += "when 1 then dbo.f_GetReturnDate (c.BookID) end,"
sqlstr += "State = case b.State when 0 then '失效' when 1 then '有效' when 2 then '已过期' end "
sqlstr += "from UserInfo a inner join BookingInfo b on a.UserID=b.UserID inner join BookInfo c "
sqlstr += "on b.BookID = c.BookID where b.State <> 0 order by b.State desc "
Dim obj As DBController = New DBController
obj.BindDBGrd (sqlstr, BookingGrid)
End If
End Sub
历史预约信息控件(HisBooking.ascx)主要用来显示用户的失效和过期预约信息。通过对DataGrid进行数据绑定,显示失效和过期预约状态的用户的用户名、姓名及单位、历史预约的图书的书名、著者及预约时间和当前预约状态。用户在规定时间内去借阅已经预约成功的图书后,其预约状态将修改为“失效”;反之,如果用户没有在规定时间内去借阅已经预约成功的图书,则他的预约状态将修改为“过期”。
4.5.5 当前预约信息的主界面图
图11 当前预约信息界面
4.5.6 历史预约信息的主界面图
图12 历史预约信息界面
4.6 图书管理模块的设计
4.6.1 功能描述
图书管理模块主要实现对图书信息的管理,包括了图书添加页面(AddBook.aspx)和图书编辑页面(EditBook.aspx)。 添加图书页面主要是在AddBtn_Click()函数处理用户单击“添加”按钮事件,将用户输入的图书信息组成SQL语句,然后插入数据库中;图书编辑页面将该页面左侧的ListBox控件跟数据库进行绑定,用以显示所有图书列表,当用户单击某一图书后,自动将图书信息填充到右边的图书信息明细中,用户可对其进行更新和删除操作。在该模块中,图书管理员还能够根据用户名和图书条码号对图书进行借、还操作,对于某用户预约成功的图书进行借阅后,该用户的预约状态将修改为“失效”。
4.6.2 图书编辑页面的主界面图
图13 图书编辑界面