文档内容
软件设计说明书实例
2026年1月目录
1 引言..................................................................................................................................................2
1.1 编写目的................................................................................................................................2
1.2 项目背景................................................................................................................................2
1.3 定义........................................................................................................................................2
1.4 参考资料................................................................................................................................2
2 总体设计..........................................................................................................................................2
2.1 需求概述................................................................................................................................2
2.2 软件结构................................................................................................................................2
3 程序描述..........................................................................................................................................2
3.1 01登陆模块............................................................................................................................2
3.2 02管理模块............................................................................................................................2
3.3 031图书信息查询模块..........................................................................................................2
3.4 032学生信息查询模块..........................................................................................................2
3.5 021入库管理模块..................................................................................................................2
3.6 022学生借书模块..................................................................................................................2
3.7 023学生还书模块..................................................................................................................2
3.8 024图书注销模块..................................................................................................................2
3.9 接口设计................................................................................................................................2
3.10 测试要点............................................................................................................................2
1/21/2026kk
文档名称: 详细设计规格说明书
项目名称: 图书馆管理系统
项目负责人:陈新光
编写 TEST _____年_____月_____日
校对 所有小组成员 _____年_____月_____日
审核 所有小组成员 _____年_____月_____日
批准 XXX _____年_____月_____日
开发单位__________________________________________
组员: TEST1 TEST2 TEST3
第1页 1/21/2026kk
1 引言
1.1 编写目的
图书管理系统详细设计是设计的第二个阶段,这个阶段的主要任务是在图书管理系统概要设计书基础
上,对概要设计中产生的功能模块进行过程描述,设计功能模块的内部细节,包括算法和详细数据结构,
为编写源代码提供必要的说明。
概要设计解决了软件系统总体结构设计的问题,包括整个软件系统的结构、模块划分、模块功能和模
块间的联系等。详细设计则要解决如何实现各个模块的内部功能,即模块设计。具体的说,模块设计就是
要为已经产生的图书管理各子系统设计详细的算法。但这并不等同于系统实现阶段用具体的语言编码,它
只是对实现细节作精确的描述,这样编码阶段就可以将详细设计中对功能实现的描述,直接翻译、转化为
用某种程序设计语言书写的程序。
1.2 项目背景
根据XX学校希望能够充分利用现代科技来提高图书管理的效率,在原有的办公系统基础上进行扩展,
将一些可以用计算机来管理的都进行计算机化,使得图书馆管理人员工作更加方便,工作效率也更加的高。
1.3 定义
•Mysql:数据库管理软件
•DBMS:数据库管理系统
•Windows 2000/2003/XP:运行环境
•JSP :软件开发语言
•Myeclipse :开发工具
第2页 1/21/2026kk
1.4 参考资料
《软件工程导论——第5版》 张海藩编著 清华大学出版社
《实用软件工程》 Leszek A.Maciaszek Bruc Lee Liong著
机械工业出版社
2 总体设计
2.1 需求概述
按照需求分析文档中的规格要求,使用条形码扫描器进书、借书、还书,使得信息传递准确、流畅。
同时,系统最大限度地实现易安装,易维护性,易操作性,运行稳定,安全可靠。
第3页 1/21/2026kk
2.2 软件结构
第4页 1/21/2026kk
第5页 1/21/2026kk
系统由3大模块,6小模块组成:
序号 编号 名称
1,01 登陆模块
2,02 管理模块
3,031 图书信息查询模块
4,032 学生信息查询模块
5,021 入库管理模块
6,022 学生借书模块
7,023 学生还书模块
8,024 图书注销模块
9,040 基础信息设置
第6页 1/21/2026kk
3 程序描述
3.1 01登陆模块
具体格式见下表:
功能编号 01 功能名称 登陆模块 内容 功能流程图
所属业务 图书馆管理 所属项目 图书馆管理
系统
编写人 陈新光 完成时间 2007-11-26 页码 第5页
3.1.1功能流程图
功能流程图如下图所示。
需要说明的问题:
(1) 录入项检测使用javascript实现(各项必须非空)
(2) 登陆.jsp页面也包含查询按钮,在此的登陆.jsp提交的数据
只是用户名和密码。
3.1.2功能描述
(1) 功能类型:查询数据
(2) 功能描述:提高系统的安全性
第7页 1/21/2026kk
(3) 前提业务:无
(4) 后继业务:02 (管理模块)
(5) 功能约束:权限约束
(6) 约束描述:
(7) 操作权限:图书馆管理员
3.1.3界面设计
(1) 基础信息处理
动作说明:
动作编号 动作名称 动作描述
A01 登陆 点击登陆按钮 提交数据
到登陆数据处理.jsp页面
A02 重至 点击退重至按钮 将当前
信息恢复原先状态
A03 图书信息查询 点击 将页面转至到图书
信息查询.jsp页面
A04 学生信息查询 点击 将页面转至学生信
息查询.jsp页面
A05 基础信息 点击 将显示基础信息
(2) 数据要求
(1) 功能类型:数据查询
(2) 数据描述:
页面显示录入字段如下:
字段名称 长度 录入方式 是否非空项 数据检验 默认显示
管理员ID 10 文本框 Y N
管理员密码 15 password Y N
3.1.4登陆数据处理.jsp的内部逻辑
登陆数据处理:
关键点两点:1,数据库连接;2,记录登陆信息及信息处理;
第8页 1/21/2026kk
1, 数据库连接:
如下:
public class lib_system_Conn extends Object{
public lib_system_Conn(){
}
private Connection conn = null;
private ResultSet rs;
String re = "";
//设置你的数据库ip
String dbip = "127.0.0.1";
//设置你的数据库用户名和密码:
String use = "root";
String pass = "860409";
//设置您的数据库名
String dbName = "lib_system";
public java.sql.Connection getConn(){
try{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://"+dbip+":3306/"+dbName+"?
user="+use+"&password="+pass+"&useUnicode=true&characterEncoding=GBK"
;
conn= DriverManager.getConnection(url);
}
catch(Exception e){
e.printStackTrace();
}
return this.conn ;
}
}
//在Mysql建立lib_system数据库,之后将与数据操作相关数据与该数据库相连;
2, 记录登陆信息及信息处理:
当用户点击“登陆”按钮之后,数据将提交到登陆数据处理.jsp页面。 取得帐
号密码这两个从页面传入的值,然后跟数据库当中管理员表中的账号和密码比
较。如果正确的话,在JSP的SESSION中存入一个标记属性,表示当前已经有
管理员登陆了。处理完毕后,跳转到管理页面,如果失败,则提示登陆失败,
并重新进入到登陆页面。
具体的逻辑如下:
<%
第9页 1/21/2026kk
String username=ParamUtil.getString(request,"admin_ID");
//取得用户名
String password=ParamUtil.getString(request,"admin_password");
//取得密码
String erroMsg="";
//错误码
if(username!=null&&password!=null)
try
{
SkinUtil.login(request,response,admin_ID,admin_password);
//在JSP的session中存如一个标记属性,表示当前已经有管理员登陆了
Session.setAttribute(“admin_ID”,admin_ID);
response.sendRedirect("login_process.jsp");
}
catch(UserNotFoundException e)
{
erroMsg="错误的用户名和密码";
response.sendRedirect("login_process.jsp?"+response.encodeURL(erroMsg));
}
else{
out.println("请填写好你的个人信息!");
}
%>
3.1.5存储分配
管理员表:(admin)
序号 字段名 类型 长度 精度 小数 默认 允许 主键 说明
位数 值 空
第10页 1/21/2026kk
1 (admin_ID)管理员 Int 10 √
ID
2 (admin_password) Char 15
管理员密码
3 (admin_quanxian) Nvarchar 15
权限
3.2 02管理模块
具体格式见下表
功能编号 02 功能名称 管理模块 内容 功能流程图
所属业务 图书馆管理 所属项目 图书馆管理
系统
编写人 陈新光 完成时间 2007-11-26 页码 第8页
3.2.1功能流程图
功能流程图如下所示:
需要说明的问题:
在选择相应的业务时,需要在当前的页面显示;并且在管理页面内,默认
显示图书查询页面。
3.2.2功能描述
(1) 功能类型:其他
第11页 1/21/2026kk
(2) 功能概述:总体归纳图书馆管理功能
(3) 前提业务:登陆模块(01)
(4) 后续业务:021,022,023,024,03
(5) 功能约束:权限约束
(6) 约束描述:
(7) 操作权限:图书馆管理人员
3.2.3界面设计
(1) 基本信息处理
动作说明如下:
动作编号 动作名称 动作描述
A01 入库管理 点击按钮 将页面转至入
库管理.jsp页面
A02 学生借书 点击按钮 将页面转至学
生借书.jsp页面
A03 学生还书 点击按钮 将页面转至学
生还书.jsp页面
A04 图书注销 点击按钮 将页面转至图
书注销.jsp页面
A05 图书查询 点击按钮 将页面转至图
书查询.jsp页面
(2) 数据要求
功能类型:其他
第12页 1/21/2026kk
3.3 031图书信息查询模块
具体格式如下:
功能编号 031 功能名称 图书信息查 内容 功能流程图
询模块
所属业务 图书馆管理 所属项目 图书馆管理
系统
编写人 陈新光 完成时间 2007-11-26 页码 第10页
3.3.1功能流程图
功能流程图如下图:
需要说明的问题:
录入项检测使用javascript来实现(各项非空);
操作权限:面向所有用户
3.3.2功能描述
(1) 功能类型:查询数据
(2) 功能概述:显示查询结果
(3) 前提业务:无
(4) 后继业务:
(5) 功能约束:没有约束;
(6) 约束描述:
(7) 操作权限:面向所有用户
第13页 1/21/2026kk
3.3.3界面设计
(1) 基础信息处理
下表是动作说明:
动作编号 动作名称 动作描述
A01 确定 点击按钮 提交数据到图
书查询数据处理.jsp页面
A02 学生信息查询 点击按钮 将页面转至学
生信息查询.jsp页面
(2) 数据要求
(1) 功能类型:数据查询
(2) 数据描述:
页面显示字段见下表:
字段名称 长度 录入方式 是否非空项 数据检验 默认显示
请选择查询 20 下拉列表 Y N
类型
请输入查询 200 文本框 Y N
内容
(3) 图书信息查询的输出项
书名
图书类型
作者
译者
ISBN
出版社
价格
书架名称
现存量
简介
书名
图书类型
第14页 1/21/2026kk
3.3.4模块内部逻辑
1, Search.jsp用于显示界面的内容,给用户显示一个查询接口
2, Lib_query.jsp用来调度所有的页面,它根据传入的参数来决
定包含哪一个jsp页面来显示内容;
在lib_query.jsp页面中,
它根据传入的参数来决定包含哪一个 jsp 页面来显示内容;则可以通过
”/>,利用jsp:include标签来被动态加载发送到相
应页面;
第15页 1/21/2026kk
3, chuli.jsp 用来处理数据查询和显示查询到的结果列表。
在这个页面中,数据要求是以列表的形式显示到输出页面。
由于查询到的结果可能过多,所以采用分页形式显示;
对于分页功能的内部逻辑:
4, View.jsp用来显示查询到的图书的各项属性。
3.3.5存储分配
图书目录文件(Book):
序号 字段名 类型 长度 精度 小数位数 默认值 允许空 主键 说明
1 (BookID)图书编号 Int 10 1 √ 自动编号
2 (TXM)条形码 nvarchar 20
3 (Title)书名 nvarchar 200
4 (TSLX)图书类型 Nvarchar 50 √
5 (Author)作者 Nvarchar 20 √
6 (Translator)译者 Nvarchar 20 √
7 (ISBN)ISBN Nvarchar 20
8 (CBS)出版社 Nvarchar 30 √
10 (SJMC)书架名称 Nvarchar 20 √
11 (XCL)现存量 Smallint 2 √
12 (KCZL)库存总量 Smallint 2 √
13 (RKSJ)入库时间 Datatime √
14 (CZY)操作员 Nvarchar 10 √
15 (JJ)简介 Nvarchar 200 √
16 (JCCS)借出次数 Smallint 2 √
17 (SFzhuxiao)是否注销 Nvarchar 2 √
18 (BookZT)图书状态 nvarchar 50 √
借书文件表(JSWJB):
序号 字段名 类型 长度 精度 小数 默认 允许 主键 外键 说明
位数 值 空
1 (JYID) Int 10 1 √ 自 动
借阅编号 编号
2 (BookID) Int 10 √
图书编号
3 (StuID)学 Int 10 √
生编号
4 (JYSJ) 借 Datatime 8 √
阅时间
第16页 1/21/2026kk
5 (DQSJ)到 Datatime 8 √
期时间
6 (XJCS)续 Smallint 2 √
借次数
7 (CZY) 操 Nvarchar 10 √
作员
8 (ZT)状态 navarchar 50 √
3.4 032学生信息查询模块
具体格式如下:
功能编号 032 功能名称 学生信息查 内容 功能流程图
询模块
所属业务 图书馆管理 所属项目 图书馆管理
系统
编写人 陈新光 完成时间 2007-11-26 页码 第12页
3.4.1功能流程图
功能流程图如下图:
需要说明的问题:
录入项检测使用javascript来实现(各项非空);
操作权限:面向所有用户
3.4.2功能描述
(8) 功能类型:查询数据
第17页 1/21/2026kk
(9) 功能概述:显示查询结果
(10) 前提业务:无
(11) 后继业务:
(12) 功能约束:没有约束;
(13) 约束描述:
(14) 操作权限:面向所有用户
3.4.3界面设计
(4) 基础信息处理
下表是动作说明:
动作编号 动作名称 动作描述
A01 确定 点击按钮 提交数据到图
书查询数据处理.jsp页面
A02 图书信息查询 点击按钮 将页面转至图
书信息查询.jsp页面
(5) 数据要求
(3) 功能类型:数据查询
(4) 数据描述:
页面显示字段见下表:
字段名称 长度 录入方式 是否非空项 数据检验 默认显示
请输入学号 10 文本框 Y N
(6) 学生信息查询的输出项
学生学号
姓名
性别
生日
证件号码
联系电话
登记日期
有效期至
已借书数
第18页 1/21/2026kk
3.4.4模块内部逻辑
5, Search.jsp用于显示界面的内容,给用户显示一个查询接口
6, Index.jsp用来调度所有的页面,它根据传入的参数来决定
包含哪一个jsp页面来显示内容;
在index.jsp页面中,
它根据传入的参数来决定包含哪一个 jsp 页面来显示内容;则可以通过
”/>,利用jsp:include标签来被动态加载发送到相
应页面;
7, List.jsp 用来显示查询到的结果列表。
8, View.jsp用来显示查询到的学生的各项属性。
★★注释:学生信息查询模块与图书查询模块属于同一类功能。实现可以完全
类似。
3.4.5存储分配
学生文件:
序号 字段 字段名 类型 长度 精度 小数 默认 允许 主键 说明
第19页 1/21/2026kk
位数 值 空
1 XSID 学生编号 Int 10 1 √ 自动
编号
2 Name 姓名 nvarchar 10
3 Sex 性别 nvarchar 2 √
4 ZJH 证件号码 nvarchar 25 √
5 LXDH 联系电话 nvarchar 40 √
6 DJRQ 登记日期 datetime 8 √
7 YXQZ 有效期至 datetime 8 √
8 YJSS 已借书数 smallint 2 √
9 RuleID 学生规则 int 10
ID
10 ZT 是否挂失 nvarchar 2 √
借书文件:
序号 字段名 类型 长度 精度 小数位 默认值 允许空 主键 外键 说明
数
1 借阅编 Int 10 1 √ 自 动
号 编号
2 图书编 Int 10 √
号
3 学生编 Int 10 √
号
4 借阅时 Datatime 8 √
间
5 到期时 Datatime 8 √
间
6 续借次 Smallint 2 √
数
7 操作员 Nvarchar 10 √
8 状态 navarchar 50 √
3.5 021入库管理
具体格式如下:
功能编号 021 功能名称 入库管理模 内容 功能流程图
块
所属业务 图书馆管理 所属项目 图书馆管理
系统
编写人 陈新光 完成时间 2007-11-27 页码 第16页
第20页 1/21/2026kk
3.5.1功能流程图
(1) 执行数据库操作的时候要验证权限
(2) 录入项检验用javascript来实现(选项非空)
3.5.2功能描述
(1) 功能类型:添加数据
(2) 功能描述:增加图书目录文件中的图书信息。
(3) 前提业务:管理模块
(4) 后继业务:无
(5) 功能约束:权限约束
(6) 约束描述:无
(7) 操作权限:图书馆管理人员
3.5.3界面设计
1, 基础信息处理
动作说明如下表:
动作编号 动作名称 动作描述
A01 保存 点击按钮 提交数据到入
库数据处理.jsp页面
第21页 1/21/2026kk
A02 退出 点击按钮 将当前页面关
闭
2, 数据描述
(1)功能类型:数据增加。
(2)数据描述:
页面录入字段见下表:
字段名称 长度 录入方式 是否非空项 数据检验 默认显示
书号 30 文本框 Y N
条形码 20 文本框 Y N
书名 200 文本框 Y N
作者 20 文本框 Y N
出版社 30 文本框 Y N
版次 50 文本框 Y N
图书类别 20 文本框 Y N
单价 8 文本框 Y N
录入时间 默认系统时 年 月 日 只需程序记 显示在入库
间,格式: 录 界面
录入人 默认系统登 只需程序记 显示在入库
陆人员 录 界面
3, 入库数据处理内部逻辑:
图书入库采用表格进行多行添加:
利用javaBean来编写一个BookBean来管理图书。
在BookBean类中增加记录的公共接口来实现入库数据的添加。
具体的类设计如下:
Public int insert (Hashtable hash){
int intID = makeID("Book","BookID","","",true);
Vector vect = new Vector();
vect.add("Book");
vect.add(addVector("BookID",String.valueOf(intID),"NUM"));
vect.add(addVector("Title",ds.toString((String)hash.get("TITLE")),"CHAR"));
第22页 1/21/2026kk
vect.add(addVector("Author",ds.toString((String)hash.get("AUTHOR")),"CHAR"));
vect.add(addVector("ISBN",ds.toString((String)hash.get("ISBN")),"CHAR"));
。。。。。。。。。。。。。。。。。。。。//还有其他选项,同上格式。
return insertRecord(vect);
}
该方法有一个参数,是 java.util.Hashtable 类,在调用该方法前,先用和
hashtable 的 put 方法将字段名和该条记录的值存入 hashtable 中,然后将这个
hashtable作为参数传入insert方法中。
在 insert 方法的最 后,调用 ParentBean 中的 insertRecord 方法,
insertRecord可以根据传入的参数自动的生成增加记录的 SQL语句并通过JDBC
发送到数据库。
正对ParentBean类:主要是实现对数据库的各种操作:如与数据库的连接,
对数据库的操作。
3.5.4存储分配
图书目录文件:
序号 字段名 类型 长度 精度 小数位数 默认值 允许空 主键 说明
1 图书编号 Int 10 1 √ 自动编号
2 条形码 nvarchar 20
3 书名 nvarchar 200
4 图书类型 Nvarchar 50 √
5 作者 Nvarchar 20 √
6 译者 Nvarchar 20 √
7 ISBN Nvarchar 20
8 出版社 Nvarchar 30 √
9 价格 Money 8 √
10 书架名称 Nvarchar 20 √
11 现存量 Smallint 2 √
12 库存总量 Smallint 2 √
13 入库时间 Datatime 8 √
第23页 1/21/2026kk
14 操作员 Nvarchar 10 √
15 简介 Nvarchar 200 √
16 借出次数 Smallint 2 √
17 是否注销 Nvarchar 2 √
18 图书状态 nvarchar 50 √
入库表:
序号 字段名 类型 长度 精度 小数位 默认值 允许空 主键 外键 说明
数
1 书号 Nvarchar 30 1 √ 自 动
编号
2 条形码 Nvarchar 20 √
3 书名 Nvarchar 200 √
4 作者 Nvarchar 20 √
5 出版社 Nvarchar 30 √
6 版次 Nvarchar 50 √
7 图书类 Nvarchar 20 √
别
8 存放位 Nvarchar 20 √
置
9 单价 Money 8 √
10 入库数 Smallint 2 √
量
11 金额 Money 8 √
12 经手人 Nvarchar 10 √
13 票号 Nvarchar 30 √
14 操作员 Nvarchar 10 √
15 日期 Datatime 8 √
注:
3.6 022学生借书模块
具体格式如下:
功能编号 022 功能名称 学生借书模 内容 功能流程图
块
所属业务 图书馆管理 所属项目 图书馆管理
系统
编写人 陈新光 完成时间 2007-11-27 页码 第21页
第24页 1/21/2026kk
3.6.1功能流程图
需要说明的问题:
(1) 在进行借书,修改数据信息时,应先查询学生的欠款信
息,如欠款超额,则利用 javascript实现信息提示,拒绝借书,
如无超额,则接受借书。
(2) 为便于以后的恢复操作,此修改操作只在表中做一个标
志,并不是真正的对其修改;
3.6.2功能描述
(1)功能类型:修改数据和查询数据
(2)功能描述:更新学生借书文件,图书目录文件等中
的信息;
(3)前提业务:管理模块
(4)后继业务:无
(5)功能约束:权限约束
(6)约束描述:
(7)操作权限:图书馆管理人员
第25页 1/21/2026kk
3.6.3界面设计
1,基础信息处理
动作说明如下:
动作编号 动作名称 动作描述
A01 重置 点击按钮 将文本框内的
所有数据清空
A02 提交 点击按钮 将数据提交到
处理学生超额信息页面
A03 取消 将当前页面关闭,并取
消借阅
2,数据描述
(1) 功能类型:修改数据和查询数据
(2) 界面设计:
(3) 数据字段描述:
字段名称 长度 录入方式 是否非空项 数据检验 默认显示
学生证件号 10 文本框 Y N
码
书籍条形码 10 文本框 Y N
号
3,图书借阅数据处理内部逻辑
If(strEdit.equals(“1”)){
第26页 1/21/2026kk
If(学生超额|学生不存在){
ifSuccess=false;
}else{
If(!bb.IsValid(hash)){
//新增操作
Int intdel[]=bb.addBorrow(hash);
If(intdel==null){
ifSuccess=false;
}else{
For(int i=0;i<%
If(intdel[i]!=1)
ifSuccess=false;
}
}
}
}
If(!ifSuccess){
%><%
}else{
%><%
}
}
执行的过程如下:
首先要验证学生信息是否存在和学生的欠款是否超额,也就是说学生是否可以
借书,图书是否在馆等,在 确定合法之后调用 bb.addBorrow(hash)来完成借阅
流程。流程其实就是对几个表进行增改的操作。
第27页 1/21/2026kk
关于addBorrow(hash)的算法:
public int[] addBorrow(Hashtable hash)
{
System.out.println("批量处理新增借阅。。。。。。");
String sql="";
int intID = makeID("JYWJB","JYID","","",true);
String strID=String.valueOf(intID);
String strZJH = ds.toString((String)hash.get("ZJH"));//证件号
String strTXM = ds.toString((String)hash.get("TXM"));//条形码
String strJYSJ = ds.toString((String)hash.get("JYSJ"));//借阅时间
String strXSID = "";//学生ID
String strBOOKID = "";//图书ID
String strDQSJ = "";//到期时间
String strXJCS = "";//续借次数
//根据学生证件号取的学生ID
//根据学生ID取得规则ID,然后取得可以借阅天数,
sql="select Student.RuleID,Student.XSID,Rule.KJYSJ "
+" from Studengt,RULE "
+" where Student.ZJH='"+strZJH+"' and Student.RuleID=Rule.RuleID
";
Hashtable hashReId=(Hashtable)searchOneData(sql);
strXSID=ds.toString((String)hashReId.get("XSID"));
String strKJYSJ=ds.toString((String)hashReId.get("KJYSJ"));
//根据条形码取得图书ID
sql="select BOOKID from Book where TXM='"+strTXM+"'";
Hashtable hashBKID=(Hashtable)searchOneData(sql);
strBOOKID = ds.toString((String)hashBKID.get("BOOKID"));
第28页 1/21/2026kk
//新增操作
createStatement();
clearBatch();
sql=" insert into JSWJB(JYID,XSID,BOOKID,JYSJ,DQSJ,ZT,XJCS) "
+" values("+strID+","+strXSID+","+strBOOKID+",'"+strJYSJ
+"',to_char((to_date('"+strJYSJ+"','yyyy-MM-dd')
+"+strKJYSJ+"),'yyyy-MM-dd')"
+",'"+strZero+"','"+strZero+"')";
addBatch(sql);
sql="update Book set ZT='借出' where BOOKID="+strBOOKID;
addBatch(sql);
sql="update Student set YJSS=YJSS+1 where XSID="+strXSID;
addBatch(sql);
int result[]=executeBatch();
closeStm();
return result;
}
而对于取消按钮事件,由于要实现取消借阅,所以需要调用 delBorrow(String
id)来取消借阅操作;算法如下:
public int[] delBorrow(String id)
{
System.out.println("批量处理取消借阅。。。。。");
String sql="";
sql="select BOOKID from JSWJB where JYID="+id;
Hashtable hash=(Hashtable)searchOneData(sql);
String strBOOKID=(String)hash.get("BOOKID");
createStatement();
第29页 1/21/2026kk
clearBatch();
sql="update JSWJB set ZT='"+strOne+"' where JYID="+id;
addBatch(sql);
sql="update BOOK set ZT='可借' where BOOKID="+strBOOKID;
addBatch(sql);
int result[]=executeBatch();
closeStm();
return result;
}
3.6.4存储分配
借书文件:
序号 字段名 类型 长度 精度 小数位 默认值 允许空 主键 外键 说明
数
1 借阅编 Int 10 1 √ 自 动
号 编号
2 图书编 Int 10 √
号
3 学生编 Int 10 √
号
4 借阅时 Datatime 8 √
间
5 到期时 Datatime 8 √
间
6 续借次 Smallint 2 √
数
7 操作员 Nvarchar 10 √
8 状态 navarchar 50 √
罚款单:
序号 字段名 类型 长度 精度 小数位 默认值 允许空 主键 外键 说明
数
1 借阅编 Int 10 1 √ 自动编
号 号
2 图书编 Int 10 √
号
3 学生编 Int 10 √
号
第30页 1/21/2026kk
4 应罚金 Smallint 3 √
额
5 实收金 Smallint 3 √
额
6 状态 Nvarchar 1 √
7 备注 Nvarchar 200 √
学生文件:
序号 字段 字段名 类型 长度 精度 小数 默认 允许 主键 说明
位数 值 空
1 XSID 学生编号 Int 10 1 √ 自动
编号
2 Name 姓名 nvarchar 10
3 Sex 性别 nvarchar 2 √
4 ZJH 证件号码 nvarchar 25 √
5 LXDH 联系电话 nvarchar 40 √
6 DJRQ 登记日期 datetime 8 √
7 YXQZ 有效期至 datetime 8 √
8 YJSS 已借书数 smallint 2 √
9 RuleID 学生规则 int 10
ID
10 ZT 是否挂失 nvarchar 2 √
3.7 023学生还书
具体格式如下:
功能编号 023 功能名称 学生还模块 内容 功能流程图
所属业务 图书馆管理 所属项目 图书馆管理
系统
编写人 陈新光 完成时间 2007-11-27 页码 第27页
第31页 1/21/2026kk
3.7.1功能流程图
需要说明的问题:
(1) 显示结果可直接在处理结果.jsp中利用 javascript来实现显
示功能!
(2) 处理要包含:对图书状态和借书文件表中信息的修改以及
学生的欠款金额的计算,并更新Publish表。
3.7.2功能描述
(1) 功能类型:修改数据
(2) 功能概述:完成学生的还书业务并计算学生的欠款信息
(3) 前提业务:管理模块
(4) 后继业务:无
(5) 功能约束:权限约束
(6) 约束描述:
(7) 操作权限:图书馆管理人员
3.7.3界面设计
(1) 基础信息处理
动作编号 动作名称 动作描述
A01 重置 点击按钮 将文本框内的
所有数据清空
A02 提交 点击按钮 将数据提交到
第32页 1/21/2026kk
处理还书信息页面
(2) 界面描述:
(3) 数据描述
字段名称 长度 录入方式 是否非空项 数据检验 默认显示
书籍条形码 10 文本框 Y N
号
对于还书业务的处理,实质上与借书业务的实现基本上相同,只是调用了
backBorrow(hash)来实现还书功能;
If(strEdit.equals(“1”)){
Int intdel[]=bb.BackBorrow(hash);
If(intdel==null){
ifSuccess=false;
}else{
For(int i=0;i<%
}else{
%><%
第33页 1/21/2026kk
}
}
针对backBorrow(hash)算法如下:
public int[] backBorrow(String TXM)
{
System.out.println("批量处理还书。。。。。");
String sql="";
String
strBOOKID=ds.toString((String)toName("BOOK","TXM","BOOKID",TXM));
String strNow = ds.getDateTime();
strNow = strNow.substring(0,10);
createStatement();
clearBatch();
sql="update JSWJB set ZT='"+strOne+"',DQSJ='"+strNow+"' where
BOOKID="+strBOOKID+" and ZT='"+strZero+"'";
System.out.println("sql1:"+sql);
addBatch(sql);
sql="update BOOK set ZT='可借' where BOOKID="+strBOOKID;
System.out.println("sql2:"+sql);
addBatch(sql);
int result[]=executeBatch();
closeStm();
return result;
}
第34页 1/21/2026kk
3.7.4存储分配
借书文件:
序号 字段名 类型 长度 精度 小数位 默认值 允许空 主键 外键 说明
数
1 借阅编 Int 10 1 √ 自 动
号 编号
2 图书编 Int 10 √
号
3 学生编 Int 10 √
号
4 借阅时 Datatime 8 √
间
5 到期时 Datatime 8 √
间
6 续借次 Smallint 2 √
数
7 操作员 Nvarchar 10 √
8 状态 navarchar 50 √
学生文件:
序号 字段 字段名 类型 长度 精度 小数 默认 允许 主键 说明
位数 值 空
1 XSID 学生编号 Int 10 1 √ 自动
编号
2 Name 姓名 nvarchar 10
3 Sex 性别 nvarchar 2 √
4 ZJH 证件号码 nvarchar 25 √
5 LXDH 联系电话 nvarchar 40 √
6 DJRQ 登记日期 datetime 8 √
7 YXQZ 有效期至 datetime 8 √
8 YJSS 已借书数 smallint 2 √
9 RuleID 学生规则 int 10
ID
10 ZT 是否挂失 nvarchar 2 √
图书目录文件:
序号 字段名 类型 长度 精度 小数位数 默认值 允许空 主键 说明
1 图书编号 Int 10 1 √ 自动编号
2 条形码 nvarchar 20
3 书名 nvarchar 200
4 图书类型 Nvarchar 50 √
5 作者 Nvarchar 20 √
第35页 1/21/2026kk
6 译者 Nvarchar 20 √
7 ISBN Nvarchar 20
8 出版社 Nvarchar 30 √
9 价格 Money 8 √
10 书架名称 Nvarchar 20 √
11 现存量 Smallint 2 √
12 库存总量 Smallint 2 √
13 入库时间 Datatime 8 √
14 操作员 Nvarchar 10 √
15 简介 Nvarchar 200 √
16 借出次数 Smallint 2 √
17 是否注销 Nvarchar 2 √
18 图书状态 nvarchar 50 √
罚款单;
序号 字段名 类型 长度 精度 小数位 默认值 允许空 主键 外键 说明
数
1 借阅编 Int 10 1 √ 自动编
号 号
2 图书编 Int 10 √
号
3 学生编 Int 10 √
号
4 应罚金 Smallint 3 √
额
5 实收金 Smallint 3 √
额
6 状态 Nvarchar 1 √
7 备注 Nvarchar 200 √
3.8 024图书注销
具体格式如下:
功能编号 024 功能名称 图书注销模 内容 功能流程图
块
所属业务 图书馆管理 所属项目 图书馆管理
系统
编写人 陈新光 完成时间 2007-11-27 页码 第31页
第36页 1/21/2026kk
3.8.1功能流程图
需要说明的问题:
(1) 显示结果可直接在处理结果.jsp中利用 javascript来实现显
示功能!
(2) 在处理图书注销的时候,为了便于以后的恢复操作,此删
除操作只在表中做一标志,并不是真正的删除。
3.8.2功能描述
(1) 功能描述:删除数据
(2) 功能概述:注销图书
(3) 前提业务:管理模块
(4) 后继业务:无
(5) 约束描述:
(6) 操作权限:图书馆管理人员
3.8.3界面设计
(1)基础信息处理
动作说明如下:
动作编号 动作名称 动作描述
A01 重置 点击按钮 将文本框内的
所有数据清空
A02 提交 点击按钮 将数据提交到
第37页 1/21/2026kk
处理还书信息页面
(2)界面描述:
(3)数据描述:
字段名称 长度 录入方式 是否非空项 数据检验 默认显示
书籍条形码 10 文本框 Y N
号
(4)对于图书注销业务的处理
3.8.4存储分配
图书目录文件:
序号 字段名 类型 长度 精度 小数位数 默认值 允许空 主键 说明
1 图书编号 Int 10 1 √ 自动编号
2 条形码 nvarchar 20
3 书名 nvarchar 200
4 图书类型 Nvarchar 50 √
5 作者 Nvarchar 20 √
6 译者 Nvarchar 20 √
7 ISBN Nvarchar 20
8 出版社 Nvarchar 30 √
9 价格 Money 8 √
10 书架名称 Nvarchar 20 √
11 现存量 Smallint 2 √
12 库存总量 Smallint 2 √
13 入库时间 Datatime 8 √
14 操作员 Nvarchar 10 √
15 简介 Nvarchar 200 √
第38页 1/21/2026kk
16 借出次数 Smallint 2 √
17 是否注销 Nvarchar 2 √
18 图书状态 nvarchar 50 √
3.9 025 基础信息设置
3.10 接口设计
(1) 用来查询一条数据的私有接口
该方法有一个参数,参数是一个字符串,表示要向数据库发送一条 SQL语句,
这个SQL只是一个查询语句,方法的返回植是一个 Hashtable,在Hashtable中
以键值对的方式表示了从数据库中选出了第一行记录。用 Hashtable 中的
get(“FieldName”)方法可以得到改行记录的某一个记录的值。
private Hashtable searchOneData(String sql)
{
Hashtable hash = new Hashtable();
ResultSet rs = selectRecord(sql);
Statement stmt = null;
try{
//取得列数和列名
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
if(rs.next())
{
for(int i=1;i<=cols;i++)
{
第39页 1/21/2026kk
String field= ds.toString(rsmd.getColumnName(i)); String value =
ds.toString(rs.getString(i));
hash.put(field,value);
}
}
}catch(Exception e){
System.out.println("运行时出错:"+e);
}
finally{
if(rs!=null)try{
stmt=rs.getStatement(); rs.close();
}
catch(Exception e){
System.out.println("关闭记录集rs时出错"+e);
}
if(stmt!=null)
try{
stmt.close();
}catch(Exception e){
System.out.println("关闭声明时statement出错"+e);
}
return hash;
}
(2) 增加记录的公共接口
该方法有一个参数,是 java.util.Hashtable 类,在调用该方法前,先用和
hashtable 的 put 方法将字段名和该条记录的值存入 hashtable 中,然后将这个
hashtable作为参数传入insert方法中。 在 insert 方法的最后,调用 ParentBean
第40页 1/21/2026kk
中的insertRecord方法,insertRecord可以根据传入的参数自动的生成增加记录
的SQL语句并通过JDBC发送到数据库
Public int insert(Hashtable hash){
Int intID=makeID(“Book”,”BookID”,””,true);
Vector vect=new Vector();
Vect.add(“………….”);
……………………
Return insertRecord(vect);
}
(3) 删除记录的公共接口
该方法有一个参数id,该参数表示的是book表中的ID字段,ID字段是这个表
的主键,用这个主键可以检索到表中的一条唯一的记录,通过这个主键,delete
方法可以生成一条SQL语句,删除这一条记录。
public int delete(String id)
{
String sql="";
sql="delete from Book where BookID="+id;
return deleteRecord(sql);
}
(4) 查询记录的公共接口
Public Vector getData(String sqlwhere, int page){
String sql=””;
Sql=”select * from Book”;
If (!sqlwhere.equals(“”))
Sql+=sqlwhere;
Return getOnePage(sql,page,20);
第41页 1/21/2026kk
}
(5) 修改记录的接口
public int update(Hashtable hash)
{
Vector vect = new Vector();
vect.add("Book");
vect.add(addVector("Title",ds.toString((String)hash.get("TITLE")),"CHAR"));
vect.add(addVector("Author",ds.toString((String)hash.get("AUTHOR")),"CHAR"));
vect.add(addVector("ISBN",ds.toString((String)hash.get("ISBN")),"CHAR"));
……………………
return updateRecord(vect);
}
3.11 测试要点
3.11.1测试范围
测试范围 主要内容 简要说明
系统登陆验证 验证用户身份,进行权限控制 功能性测试
信息检索功能测试 测试数据库检索代码的健壮性 功能性测试
第42页 1/21/2026kk
3.11.2测试方法
功能性测试:黑盒测试
第43页 1/21/2026