资源描述
一、需求分析
1.1.1 概述
当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这使得计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。随着Intranet的飞速发展,移动办公和分布式办公越来越普及,B/S (Browser/Server) 架构应运而生,并得到普遍应用。B/S架构最大的优点就是客户端无需安装任何专用的客户端软件,只需配置浏览器(如Intranet Explorer)即可,这样为程序的安装、调试和维护带来了极大的方便。ASP.NET所开发的应用软件一般都是B/S架构,用户可直接通过浏览器来使用系统,而无需安装软件的客户端。
图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理。根据调查得知,以前对信息管理的主要方式是基于纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。
现今,有很多的图书馆都是开始使用计算机进行信息管理。使图书管理工作进入规范化,系统化,程序化的轨道,同时避免了图书管理的随意性,提高了信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书及用户信息。
1.1.2 发展趋势
处在知识经济形势下的新信息浪潮,是以信息技术的高速发达和全方位应用为特征,以生产科学知识和信息为基础的,它形成了图书管理的新的生存环境——信息和信息技术环境。新的世纪人类社会正面临知识经济和信息社会的急剧变革,世界各个角落的人们都强烈地感受到新时代的冲击与震撼。知识更新经济朝代和网络时代的一些特征,已经深入到人们的社会生活中。知识经济是以知识更新为基础的经济,这各经济直接领带于知识更新和信息的生产、扩散和应用。
面对现代化管理,必须适应信息世界的变化。新型的图书管理软件必须向现代化转变。必须具有信息咨询服务、信息资源数据库服务、网络信息服务等代化服务。
网络飞速发展的环境下,未来的图书管理应该以信息网络为目的加快信息的传播速度,提高信息服务质量.在网络化条件下,图书的借阅主要由计算机流通管理系统或读者在自己的终端上自动完成。在完成方式上,更多地利用电话,移动通讯、电子邮件等来完成;在咨询内容上,更多的是关于信息源查询、信息内容的鉴定等内容。系统基于互动的客户/服务模型,其系统结构包括元数据服务器、WEB应用服务器、对象数据服务器、以及客户端机等。系统应该具备在开放式、异构型环境中的运行能力。
1.2 课题提出
在当今知识大爆炸的时代,图书作为信息的一种载体,仍是人们获得知识的一种重要途径,因而作为图书管理与借阅的图书馆,它的运行情况则关系到知识的传播速度问题。以往旧的图书管理模式完全是手工操作,从新书的购买、编码、入库、上架,到借阅、续借、归还、查询,无一不是人工处理,需要大量的劳动力与工作量,而且由于人为的原因造成一些错误,也是再所难免的。当读者想要借阅一本书时,首先要查询大量的卡片,而且要有一定的图书管理知识,才能很快的查到。自己想要的图书,在借阅过程中还要填写许多相关的卡片,使得图书的管理效率低下,图书流通速度较慢,因而从一定程度上也影响了知识的传播速度。
学校作为教书育人的中坚力量,图书馆的作用更是举足轻重。学校图书馆要做到安全顺畅的运转,为广大同学提供良好的服务,就必须有一套完善健全的运行管理机制。联系实际,考虑各层次学校的情况,软件本身要求易学,界面友好,容易掌握,可以较简单方便的管理各种图书信息;硬件的配置要求不能太高,这样可以很好的适应当前的学校图书馆。系统的总体特点应该是方便、简单、实用。
1.3 处理需求
本系统采用ASP语言实现,开发平台使用Dreamweaver8.0,数据库使用SQL Server 2005。
ASP是一种网络编程技术,能够支持动态网络编程。
Dreamweaver8.0是一种编辑网页的工具,支持ASP、JSP、PHP等基本网络技术及其语言。
SQL Server 2005可以简化基本的数据库操作,通过与 Visual Studio 项目的集成,数据库应用程序的设计和开发也变得更加简单。此外,服务和修补也得到了简化和自动化。用户的需求具体体现在各种对图书馆书籍信息的查询、借阅、归还、续借和资料的修改,这就要求数据库结构能充分满足各种信息的输出和输入。
二、概要设计
概要设计的目的是通过本系统软件,能帮助前台操作人员(读者)利用计算机快速方便的进行图书预定、图书检索等操作。概要设计的任务是根据需求分析得到的用例图确定一个合理的软件系统的体系结构,作为系统的详细设计的基础和准备。
以下内容为读者借阅模块的流程图和结构图:
2.1 系统前台运行(读者借阅模块)流程图
用户登陆
读者
图书检索
图书借阅查询
个人信息查询
密码修改
图2.1系统前台运行流程图
系统运行流程图描绘了读者借阅模块的总体运行情况。浏览此图可对整个基于web的图书馆管理系统的读者借阅模块有一个快速、清晰的认识。上图为基于web的图书馆管理系统的前台运行流程图。
2.2 目标系统体系结构
2.2.1 系统前台运行(读者借阅模块)结构图
读者借阅
模块
个人信息管理
图书检索
图书操作
密码修改
按图书类别
按书名
按作者
按书架
按出版社
图书借阅查询
图书到期查询
个人信息查询
图2.2.1系统前台运行结构图
四、数据库表设计
4.1E-R图设计
读者
图书
借还
属于
角色
学号
用户名
密码
性别
院系
住址
电话
角色标识
出生年月
书号
书名
分类号
作者
出版社
价格
摘要
关键词
图书状态
登记日期
出版日期
角色名称
n
1
m
n
角色标识
属于
图书类型
类型名
类型号
类型描述
n
1
读者:(学号、用户名、密码、读者性别、所在院系、家庭住址、联系电话、出生年月、角色标识)
图书:(书号、图书名称、所属分类号、作者、出版社、价格、出版日期、摘要信息、关键词、图书状态、登记日期)
角色:(角色标识、角色名称)
借阅:(借阅号、学号、书号、借书日期、还书日期、图书的状态(是否借出)、超出天数、罚款金额)
图书类型:(类型号、图书类型名称、图书类型描述)
4.2 数据库结构描述
主要包括各个表结构设计
表4.2.1 User表(系统用户信息数据表)
表4.2.2 Book表(图书信息表)
表4.2.3 BorrowRec表(图书借阅信息表)
表4.2.4 BookType表(图书类型表)
表4.2.5 Role表(角色表)
表之间的关系图:
以下是部分SQL脚本
视图部分:
CREATE VIEW [dbo].[View_4]
AS
SELECT dbo.Reservation.readerID, dbo.Book.bookID, dbo.Reservation.bookID AS Expr1, dbo.BorrowRec.borrowRecID, dbo.BorrowRec.bookID AS Expr2,
dbo.BorrowRec.readerID AS Expr3
FROM dbo.BorrowRec INNER JOIN
dbo.Reservation ON dbo.BorrowRec.readerID = dbo.Reservation.readerID INNER JOIN
dbo.Book ON dbo.BorrowRec.bookID = dbo.Book.bookID
'
GO
CREATE VIEW [dbo].[View_3]
AS
SELECT dbo.Role.roleID, dbo.Users.roleID AS Expr1, dbo.Users.userID
FROM dbo.Users INNER JOIN
dbo.Role ON dbo.Users.roleID = dbo.Role.roleID
'
GO
CREATE VIEW [dbo].[View_2]
AS
SELECT dbo.BorrowRec.borrowRecID, dbo.Book.bookID
FROM dbo.BorrowRec INNER JOIN
dbo.Book ON dbo.BorrowRec.bookID = dbo.Book.bookID
'
GO
CREATE VIEW [dbo].[View_1]
AS
SELECT dbo.BookType.bookTypeID, dbo.Book.bookTypeID AS Expr1
FROM dbo.Book INNER JOIN
dbo.BookType ON dbo.Book.bookTypeID = dbo.BookType.bookTypeID
'
GO
建表部分:(生成脚本)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Users]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Users](
[userID] [nvarchar](50) NOT NULL,
[userName] [nvarchar](50) NULL,
[userPassword] [nvarchar](50) NULL,
[userGender] [bit] NULL,
[userDepartment] [nvarchar](50) NULL,
[userAddress] [nvarchar](50) NULL,
[userPhone] [nvarchar](50) NULL,
[userBirthday] [datetime] NULL,
[roleID] [int] NULL,
CONSTRAINT [PK_Reader] PRIMARY KEY CLUSTERED
(
[userID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Role]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Role](
[roleID] [int] IDENTITY(1,1) NOT NULL,
[roleName] [nvarchar](50) NULL,
CONSTRAINT [PK_Role] PRIMARY KEY CLUSTERED
(
[roleID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Book]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Book](
[bookID] [nvarchar](50) NOT NULL,
[bookName] [nvarchar](50) NULL,
[bookIndex] [nvarchar](50) NULL,
[bookTypeID] [int] NULL,
[author] [nvarchar](50) NULL,
[publish] [nvarchar](50) NULL,
[price] [money] NULL,
[publishDate] [datetime] NULL,
[abstract] [ntext] NULL,
[keyword] [nvarchar](50) NULL,
[status] [int] NULL,
[registeDate] [datetime] NULL,
CONSTRAINT [PK_BookInfo] PRIMARY KEY CLUSTERED
(
[bookID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[BookType]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[BookType](
[bookTypeID] [int] IDENTITY(1,1) NOT NULL,
[bookTypeName] [nvarchar](50) NOT NULL,
[bookTypeDesc] [nvarchar](50) NULL
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[BorrowRec]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[BorrowRec](
[borrowRecID] [int] IDENTITY(1,1) NOT NULL,
[readerID] [nvarchar](50) NOT NULL,
[bookID] [nvarchar](50) NOT NULL,
[beginDate] [datetime] NULL,
[endDate] [datetime] NULL,
[borrowStatus] [bit] NULL,
[overdueDays] [int] NULL,
[penalty] [money] NULL,
CONSTRAINT [PK_BorrowRec_1] PRIMARY KEY CLUSTERED
(
[borrowRecID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
存储过程脚本:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_SearchBook]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[Proc_SearchBook]
(@bookTypeID int,
@queryByCol [varchar](10),
@Content [varchar](50)
)
AS
begin
declare @sql nvarchar(1000) --生成的sql语句
if @bookTypeID=0 --0为“全部”
begin
set @sql=''select * from Book where ''+@queryByCol+'' like ''''%''+@Content+''%''''''
exec sp_executesql @sql
end
else
begin
set @sql=''select * from Book where [bookTypeID]=''+str(@bookTypeID)+'' and ''+@queryByCol+'' like ''''%''+@Content+''%''''''
exec sp_executesql @sql
end
end
'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[proc_InAndOut]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE proc [dbo].[proc_InAndOut]
(
@outParam int output,
@inParam nvarchar(50)
)
as
if exists(select * from [user] where userName=@inParam)
begin
set @outParam=1;
end
else
begin
set @outParam=0;
end
'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_UpdateUserInfo]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROC [dbo].[Proc_UpdateUserInfo]
@userID NVARCHAR(50),……)
AS
UPDATE Users SET userDepartment=@userDepartment,......)
WHERE userID=@userID'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_UsersDetail]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'create PROCEDURE [dbo].[Proc_UsersDetail]
@UserID [varchar](50)
AS SELECT * FROM [dbo].[Users]
WHERE userID=@UserID'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_GetUserInfoByID]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[Proc_GetUserInfoByID]
@userID VARCHAR(50)
AS SELECT *
FROM [dbo].[Users]
WHERE userID=@userID
'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_GetUsers]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[Proc_GetUsers]
AS
SELECT * FROM Users
'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_DeleteUsers]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'Create procedure [dbo].[Proc_DeleteUsers]
@userID nvarchar(50)
AS
DELETE FROM Users where UserID=@userID
'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_UpdateUser]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROC [dbo].[Proc_UpdateUser]
(@userID nvarchar(50),……)
AS
update [Users] set userName=@userName,......
where userID=@userID'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_GetRole]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'create proc [dbo].[Proc_GetRole]
AS
SELECT * FROM [Role]
'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_GetBooks]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'create PROC [dbo].[Proc_GetBooks]
AS
SELECT * FROM Book
'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_DeleteBook]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROC [dbo].[Proc_DeleteBook]
@bookID nvarchar(50)
AS
DELETE FROM Book WHERE bookID=@bookID
'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_GetBookInfoByID]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROC [dbo].[Proc_GetBookInfoByID]
@bookID nvarchar(50)
AS
SELECT * FROM Book WHERE bookID=@bookID
'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_AddBook]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'create PROCEDURE [dbo].[Proc_AddBook]
(
@bookID nvarchar(50),……)
AS INSERT INTO [Book]
(
[bookID],……)
VALUES
(@bookID,……)'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_GetCurrentBorrow]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[Proc_GetCurrentBorrow]
@userID VARCHAR(50)
AS SELECT [dbo].[borrowRec].[readerID],……
FROM [dbo].[borrowRec],
[dbo].[book]
WHERE book.bookID=borrowRec.bookID
AND borrowStatus=''True''
AND readerID=@userID
'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_GetBorrowHistory]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROC [dbo].[Proc_GetBorrowHistory]
@userID NVARCHAR(50)
AS
SELECT * FROM Book WHERE bookID IN(
SELECT bookID FROM BorrowRec WHERE readerID=@userID AND borrowStatus=''False'')'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_UpdateBookByID]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE proc [dbo].[Proc_UpdateBookByID]
@bookID nvarchar(50),……
AS
update Book set bookName=@bookName,..... where bookID=@bookID'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Proc_SelectBookType]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[Proc_SelectBookType]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT BookTypeID,BookTypeName FROM BookType
END,
END
五、 详细设计
5.1系统功能结构
读者
查询个人信息
图书管理系统
操作员
管理员
查询图书信息
查看借阅情况
修改密码
借书处理
查看读者借阅情况
还书处理
读者信息管理
图书信息管理
修改密码
5.2 系统部分功能模块具体分析及实现
5.2.1借书/还书处理功能的实现
借书和还书是图书借阅管理系统的一个最重要也是最基本功能。它在图书
管工作人员的操作下,对本公司(企业)员工的借还书情况进行录入、修改、查询等一系列的过程。在程序中,利用vb script 脚本语言实现画面的控制,利用asp语言来实现对库的操作和算法流程的控制。
借书功能的具体实现
借书是图书管工作人员根据借阅者所借书籍的图书编号(当然这个编号于每一本图书是唯一的)将该图书登入借书表单,并对其借阅时间和借阅数量进行控制的过程。因为该系统是针对公司(企业)的图书馆进行管理的,所以图书借阅也仅对公司内部人员进行开放,所以借阅者必须根据自己的工号(工作证编号)和其它一些在公司的相关信息办理读者证后,工作人员根据借阅者所持读者证的读者证号(该读者的唯一标识)进行查询,如果该读者在读者信息数据库中有记录,则调出该读者个人信息和他(她)已借书籍的信息,如果读者信息数据库中无该读者信息,则此人不能借阅书籍。一般来说,只要该读者信息真实存在,就可以借阅书籍了,但为了有效控制图书的借阅秩序,对于有过期未还书籍的读者和借书数目超过最大限制的读者,不能继续借书,此外,当该读者借阅了一本书后,系统应即时显示他(她)最新的借阅情况,如果借阅数目未满,则可以在原界面继续操作(借书)。
算法描述如下:
首先导入数据库连接,以便对读者信息表和图书基本信息表进行查询和修改,因为借书只能是拥有图书馆工作人员以上的权限的人才能进行的操作,所以在程序开始部份还应先判断一下用户的权限,如果没有工作人员的权限,则要先进行管理员登陆,即转向登陆界面:(此处用到“session“这个物件来[4]存取一个变量记录登陆的用户名,它可以在同一个客户端多个打开的浏览器之间传递变量值,如果用户能过了管理员登陆,则变量值不会为空,相反则为空:
if session("user_name")="" then
导向管理员登陆界面
end if
接下来就
展开阅读全文