1 .......................................................................................................................................... 2 1.1 编写目的 ......................................................................................................................... 2
1.2 项目背景 ......................................................................................................................... 2
1.3 定义 ................................................................................................................................. 2 1.4 参考资料 ......................................................................................................................... 3
2 .................................................................................................................................. 3 2.1 需求概述 ......................................................................................................................... 3
2.2 软件结构 ......................................................................................................................... 4
3 .................................................................................................................................. 6 3.1 01登陆模块 .................................................................................................................... 6
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 接口
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
....................................................................................... 2 3.10 测试要点 ................................................................................................................... 43
7/10/2009
kk
文档名称: 详细设计规格说明书
项目名称: 图书馆管理系统
项目负责人:陈新光
编写 TEST _____年_____月_____日
校对 所有小组成员 _____年_____月_____日
审核 所有小组成员 _____年_____月_____日
批准 XXX _____年_____月_____日
开发单位__________________________________________
组员: TEST1 TEST2 TEST3
第1页 7/10/2009
kk
1 引言
1.1 编写目的
图书管理系统详细设计是设计的第二个阶段,这个阶段的主要任务是在图书管理系统概要设计书基础
上,对概要设计中产生的功能模块进行过程描述,设计功能模块的内部细节,包括算法和详细数据结构,
为编写源代码提供必要的说明。
概要设计解决了软件系统总体结构设计的问题,包括整个软件系统的结构、模块划分、模块功能和模
块间的联系等。详细设计则要解决如何实现各个模块的内部功能,即模块设计。具体的说,模块设计就是
要为已经产生的图书管理各子系统设计详细的算法。但这并不等同于系统实现阶段用具体的语言编码,它
只是对实现细节作精确的描述,这样编码阶段就可以将详细设计中对功能实现的描述,直接翻译、转化为
用某种程序设计语言书写的程序。 1.2 项目背景
根据XX学校希望能够充分利用现代科技来提高图书管理的效率,在原有的办公系统基础上进行扩展,
将一些可以用计算机来管理的都进行计算机化,使得图书馆管理人员工作更加方便,工作效率也更加的高。
1.3 定义
•Mysql:数据库管理软件
•DBMS:数据库管理系统
•Windows 2000/2003/XP:运行环境
•JSP :软件开发语言
•Myeclipse :开发工具
第2页 7/10/2009
kk
1.4 参考资料
《软件工程导论——第5版》 张海藩编著 清华大学出版社
《实用软件工程》 Leszek A.Maciaszek Bruc Lee Liong著
机械工业出版社
2 总体设计
2.1 需求概述
按照需求分析文档中的规格要求,使用条形码扫描器进书、借书、还书,使得信息传递准确、流畅。
同时,系统最大限度地实现易安装,易维护性,易操作性,运行稳定,安全可靠。
第3页 7/10/2009
kk
2.2 软件结构
图书馆信息
系统参数设置
基础信息设置
管理员设置
书架设置
图书词库设置
系统登陆
新书购入
学生借书管理子系统
学生还书图书馆管理系统
图书注销
学生信息查询
查询子系统
图书信息查询
36
第4页 7/10/2009
kk
1, 01 登陆模块
2, 02 管理模块
3, 031 图书信息查询模块 4, 032 学生信息查询模块 5, 021 入库管理模块 6, 022 学生借书模块 7, 023 学生还书模块 8, 024 图书注销模块 9, 040 基础信息设置
第5页 7/10/2009
kk
3 程序描述
3.1 01登陆模块
具体格式见下表:
01
图书馆管理 所属项目 图书馆管理
系统
2007-11-26 陈新光 完成时间 页码 第5页
3.1.1 功能流程图
功能流程图如下图所示。
失败
录入项检验登陆.jsp提交所填内容成功登陆数据处理.jsp执行数据库操作是否成功成功管理.jsp(非空)
失败
需要说明的问题:
(1) 录入项检测使用javascript实现(各项必须非空) (2) 登陆.jsp页面也包含查询按钮,在此的登陆.jsp提交的数据只是用户
名和密码。
3.1.2 功能描述
(1) 功能类型:查询数据
(2) 功能描述:提高系统的安全性
(3) 前提业务:无
(4) 后继业务:02 (管理模块)
(5) 功能约束:权限约束
第6页 7/10/2009
kk
(6) 约束描述:
(7) 操作权限:图书馆管理员
3.1.3 界面设计
(1) 基础信息处理
动作说明:
A01 登陆 点击登陆按钮 提交数据
到登陆数据处理.jsp页面 A02 重至 点击退重至按钮 将当前
信息恢复原先状态 A03 图书信息查询 点击 将页面转至到图书
信息查询.jsp页面 A04 学生信息查询 点击 将页面转至学生信
息查询.jsp页面 A05 基础信息 点击 将显示基础信息
(2) 数据要求
(1) 功能类型:数据查询
(2) 数据描述:
页面显示录入字段如下:
10 Y N ID 文本框
15 password Y N
3.1.4 登陆数据处理.jsp的内部逻辑
登陆数据处理:
关键点两点:1,数据库连接;2,
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
登陆信息及信息处理; 1, 数据库连接:
第7页 7/10/2009
kk
如下:
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中存入一个标记属性,表示当前已经有管理员登陆了。处理完毕后,跳转到管理页面,如果失败,则提示登陆失败,并
重新进入到登陆页面。
具体的逻辑如下:
<%
第8页 7/10/2009
kk
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)
第9页 7/10/2009
kk
(admin_ID)管理员Int 10 ?
ID
(admin_password)Char 15
管理员密码
(admin_quanxian)Nvarchar 15
权限
3.2 02管理模块
具体格式见下表
02
图书馆管理 所属项目 图书馆管理
系统
2007-11-26 陈新光 完成时间 页码 第8页
3.2.1 功能流程图
功能流程图如下所示:
管理.jsp
查询.jsp入库管理.jsp学生借书.jsp学生还书.jsp图书注销.jsp需要说明的问题:
在选择相应的业务时,需要在当前的页面显示;并且在管理页面内,默认显
示图书查询页面。
第10页 7/10/2009
kk
3.2.2 功能描述
(1) 功能类型:其他
(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) 数据要求
功能类型:其他
第11页 7/10/2009
kk
3.3 031图书信息查询模块
具体格式如下:
031
图书馆管理 所属项目 图书馆管理
系统
2007-11-26 陈新光 完成时间 页码 第10页
3.3.1 功能流程图
功能流程图如下图:
失败
录入项检验图书查询数据处图书查询.jsp提交所填内容成功执行数据库操作是否成功成功查询结果.jsp(非空)理.jsp
失败
需要说明的问题:
录入项检测使用javascript来实现(各项非空);
操作权限:面向所有用户
3.3.2 功能描述
(1) 功能类型:查询数据
(2) 功能概述:显示查询结果
(3) 前提业务:无
第12页 7/10/2009
kk
(4) 后继业务:
(5) 功能约束:没有约束;
(6) 约束描述:
(7) 操作权限:面向所有用户
3.3.3 界面设计
(1) 基础信息处理
下表是动作说明:
A01 确定 点击按钮 提交数据到图
书查询数据处理.jsp页面 A02 学生信息查询 点击按钮 将页面转至学
生信息查询.jsp页面
(2) 数据要求
(1) 功能类型:数据查询
(2) 数据描述:
页面显示字段见下表:
20 Y N 下拉列表
200 Y N 文本框
(3) 图书信息查询的输出项
书名
图书类型
作者
译者
ISBN
出版社
第13页 7/10/2009
kk
价格
书架名称
现存量
简介
书名
图书类型
3.3.4 模块内部逻辑
Search.jsp
Lib_query.jsp
Chuli.jspView.jsp
1, Search.jsp用于显示界面的内容,给用户显示一个查询接口
2, Lib_query.jsp用来调度所有的页面,它根据传入的参数来决定包
含哪一个jsp页面来显示内容;
在lib_query.jsp页面中,
它根据传入的参数来决定包含哪一个jsp页面来显示内容;则可
以通过
”/>,利用jsp:include标签来
第14页 7/10/2009
kk
被动态加载发送到相应页面;
3, chuli.jsp 用来处理数据查询和显示查询到的结果列表。
在这个页面中,数据要求是以列表的形式显示到输出页面。
由于查询到的结果可能过多,所以采用分页形式显示;
对于分页功能的内部逻辑:
4, View.jsp用来显示查询到的图书的各项属性。 3.3.5 存储分配
图书目录文件(Book):
Int 10 1 1 (BookID)图书编号 ? 自动编号
20 2 (TXM)条形码 nvarchar
200 3 (Title)书名 nvarchar
50 4 (TSLX)图书类型 Nvarchar ?
20 5 (Author)作者 Nvarchar ?
20 6 (Translator)译者 Nvarchar ?
(ISBN)ISBN 20 7 Nvarchar
30 8 (CBS)出版社 Nvarchar ?
20 10 (SJMC)书架名称 Nvarchar ?
Smallint 2 11 (XCL)现存量 ?
Smallint 2 12 (KCZL)库存总量 ?
Datatime 13 (RKSJ)入库时间 ?
10 14 (CZY)操作员 Nvarchar ?
200 15 (JJ)简介 Nvarchar ?
Smallint 2 16 (JCCS)借出次数 ?
2 17 (SFzhuxiao)是否注销 Nvarchar ?
50 18 (BookZT)图书状态 nvarchar ?
借书文件表(JSWJB):
Int 10 1 1 (JYID)? 自动
第15页 7/10/2009
kk
借阅编号 编号
(BookID)Int 10 2 ?
图书编号
Int 10 3 (StuID)学?
生编号
Datatime 8 4 (JYSJ)借?
阅时间
Datatime 8 5 (DQSJ)到?
期时间
Smallint 2 6 (XJCS)续?
借次数
Nvarchar 10 7 (CZY)操?
作员
navarchar 50 8 (ZT)状态 ?
3.4 032学生信息查询模块
具体格式如下:
032
图书馆管理 所属项目 图书馆管理
系统
2007-11-26 陈新光 完成时间 页码 第12页
3.4.1 功能流程图
功能流程图如下图:
失败
录入项检验学生信息查询数据学生信息查询结学生信息查询.jsp提交所填内容成功执行数据库操作是否成功成功(非空)处理.jsp果.jsp
失败
需要说明的问题:
录入项检测使用javascript来实现(各项非空);
第16页 7/10/2009
kk
操作权限:面向所有用户
3.4.2 功能描述
(8) 功能类型:查询数据
(9) 功能概述:显示查询结果
(10) 前提业务:无
(11) 后继业务:
(12) 功能约束:没有约束;
(13) 约束描述:
(14) 操作权限:面向所有用户
3.4.3 界面设计
(4) 基础信息处理
下表是动作说明:
A01 确定 点击按钮 提交数据到图
书查询数据处理.jsp页面
A02 图书信息查询 点击按钮 将页面转至图
书信息查询.jsp页面 (5) 数据要求
(3) 功能类型:数据查询
(4) 数据描述:
页面显示字段见下表:
10 Y N 文本框
(6) 学生信息查询的输出项
第17页 7/10/2009
kk
学生学号
姓名
性别
生日
证件号码
联系电话
登记日期
有效期至
已借书数
3.4.4 模块内部逻辑
Search.jsp
Index.jsp
List.jspView.jsp
5, Search.jsp用于显示界面的内容,给用户显示一个查询接口
6, Index.jsp用来调度所有的页面,它根据传入的参数来决定包含哪
一个jsp页面来显示内容;
在index.jsp页面中,
它根据传入的参数来决定包含哪一个jsp页面来显示内容;则可
以通过”/>,利用jsp:include标签来
被动态加载发送到相应页面;
7, List.jsp 用来显示查询到的结果列表。
第18页 7/10/2009
kk
8, View.jsp用来显示查询到的学生的各项属性。
??注释:学生信息查询模块与图书查询模块属于同一类功能。实现
可以完全类似。
3.4.5 存储分配
学生文件:
XSID 学生编号 Int 10 1 ? 自动
编号 Name 姓名 nvarchar 10 Sex 性别 nvarchar 2 ? ZJH 证件号码 nvarchar 25 ? LXDH 联系电话 nvarchar 40 ? DJRQ 登记日期 datetime 8 ? YXQZ 有效期至 datetime 8 ? YJSS 已借书数 smallint 2 ? RuleID 学生
规则
编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf
int 10
ID
ZT 是否挂失 nvarchar 2 ?
借书文件:
Int 10 1 1 借阅编? 自动号 编号
Int 10 2 图书编? 号
Int 10 3 学生编? 号
Datatime 8 4 借阅时?
间
Datatime 8 5 到期时?
间
Smallint 2 6 续借次?
第19页 7/10/2009
kk
数
Nvarchar 10 7 操作员 ?
navarchar 50 8 状态 ?
3.5 021入库管理
具体格式如下:
021
图书馆管理 所属项目 图书馆管理
系统
2007-11-27 陈新光 完成时间 页码 第16页
3.5.1 功能流程图
失败
录入项检验入库管理.jsp提交所填内容成功入库数据处理.jsp执行数据库操作是否成功成功显示结果.jsp(非空)
失败
(1) 执行数据库操作的时候要验证权限
(2) 录入项检验用javascript来实现(选项非空)
3.5.2 功能描述
(1) 功能类型:添加数据
(2) 功能描述:增加图书目录文件中的图书信息。 (3) 前提业务:管理模块
(4) 后继业务:无
(5) 功能约束:权限约束
第20页 7/10/2009
kk
(6) 约束描述:无
(7) 操作权限:图书馆管理人员
3.5.3 界面设计
1, 基础信息处理
动作说明如下表:
A01 保存 点击按钮 提交数据到入
库数据处理.jsp页面 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 文本框
默认系统时 年 月 日 只需程序记显示在入库
间,格式: 录 界面
第21页 7/10/2009
kk
默认系统登只需程序记显示在入库陆人员 录 界面 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"));
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);
}
该
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
有一个参数,是java.util.Hashtable类,在调用该方法
前,先用和hashtable的put方法将字段名和该条记录的值存入
hashtable中,然后将这个hashtable作为参数传入insert方法中。
在insert方法的最后,调用ParentBean中的insertRecord方法,insertRecord可以根据传入的参数自动的生成增加记录的SQL语句并通过JDBC发送到数据库。
第22页 7/10/2009
kk
正对ParentBean类:主要是实现对数据库的各种操作:如与
数据库的连接,对数据库的操作。
3.5.4 存储分配
图书目录文件:
Int 10 1 1 图书编号 ? 自动编号
20 2 条形码 nvarchar
200 3 书名 nvarchar
50 4 图书类型 Nvarchar ?
20 5 作者 Nvarchar ?
20 6 译者 Nvarchar ?
ISBN 20 7 Nvarchar
30 8 出版社 Nvarchar ? Money 8 9 价格 ?
20 10 书架名称 Nvarchar ? Smallint 2 11 现存量 ? Smallint 2 12 库存总量 ? Datatime 8 13 入库时间 ?
10 14 操作员 Nvarchar ?
200 15 简介 Nvarchar ? Smallint 2 16 借出次数 ?
2 17 是否注销 Nvarchar ?
50 18 图书状态 nvarchar ? 入库表:
Nvarchar 30 1 1 书号 ? 自动
编号
Nvarchar 20 2 条形码 ? Nvarchar 200 3 书名 ? Nvarchar 20 4 作者 ? Nvarchar 30 5 出版社 ? Nvarchar 50 6 版次 ?
第23页 7/10/2009
kk
Nvarchar 20 7 图书类? 别
Nvarchar 20 8 存放位? 置
Money 8 9 单价 ?
Smallint 2 10 入库数? 量
Money 8 11 金额 ?
Nvarchar 10 12 经手人 ?
Nvarchar 30 13 票号 ?
Nvarchar 10 14 操作员 ?
Datatime 8 15 日期 ?
注:
3.6 022学生借书模块
具体格式如下:
022
图书馆管理 所属项目 图书馆管理
系统
2007-11-27 陈新光 完成时间 页码 第21页 3.6.1 功能流程图
超额
录入项检验借书.jsp提交所填内容成功检查学生欠款信息执行数据库操作欠款是否超额未超额处理借书数据.jsp(非空)
失败
失败是否成功
显示学生借书信息.jsp
第24页 7/10/2009
kk
需要说明的问题:
(1) 在进行借书,修改数据信息时,应先查询学生的欠款信息,如欠款
超额,则利用javascript实现信息提示,拒绝借书,如无超额,则
接受借书。
(2) 为便于以后的恢复操作,此修改操作只在表中做一个
标志
禁止坐卧标志下载饮用水保护区标志下载桥隧标志图下载上坡路安全标志下载地理标志专用标志下载
,并不是
真正的对其修改;
3.6.2 功能描述
(1) 功能类型:修改数据和查询数据
(2) 功能描述:更新学生借书文件,图书目录文件等中的信息;
(3) 前提业务:管理模块
(4) 后继业务:无
(5) 功能约束:权限约束
(6) 约束描述:
(7) 操作权限:图书馆管理人员
3.6.3 界面设计
1, 基础信息处理
动作说明如下:
A01 重置 点击按钮 将文本框内的
所有数据清空 A02 提交 点击按钮 将数据提交到
处理学生超额信息页面 A03 取消 将当前页面关闭,并取消
借阅
2, 数据描述
第25页 7/10/2009
kk
(1) 功能类型:修改数据和查询数据 (2) 界面设计:
(3) 数据字段描述:
10 Y N 文本框
10 Y N 文本框
3, 图书借阅数据处理内部逻辑 If(strEdit.equals(“1”)){
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)来完成借阅
流程。流程其实就是对几个表进行增改的操作。 关于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"));//证件号
第27页 7/10/2009
kk
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"));
//新增操作
createStatement();
clearBatch();
sql=" insert into JSWJB(JYID,XSID,BOOKID,JYSJ,DQSJ,ZT,XJCS) "
+" values("+strID+","+strXSID+","+strBOOKID+",'"+strJYSJ
第28页 7/10/2009
kk
+"',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();
clearBatch();
sql="update JSWJB set ZT='"+strOne+"' where JYID="+id;
addBatch(sql);
第29页 7/10/2009
kk
sql="update BOOK set ZT='可借' where BOOKID="+strBOOKID;
addBatch(sql);
int result[]=executeBatch();
closeStm();
return result;
}
3.6.4 存储分配
借书文件:
Int 10 1 1 借阅编? 自动
号 编号
Int 10 2 图书编?
号
Int 10 3 学生编?
号
Datatime 8 4 借阅时?
间
Datatime 8 5 到期时?
间
Smallint 2 6 续借次?
数
Nvarchar 10 7 操作员 ?
navarchar 50 8 状态 ?
罚款单:
Int 10 1 1 借阅编? 自动编
号 号
Int 10 2 图书编?
第30页 7/10/2009
kk
号
Int 10 3 学生编? 号
Smallint 3 4 应罚金?
额
Smallint 3 5 实收金?
额
Nvarchar 1 6 状态 ?
Nvarchar 200 7 备注 ?
学生文件:
XSID 学生编号 Int 10 1 ? 自动
编号 Name 姓名 nvarchar 10 Sex 性别 nvarchar 2 ? ZJH 证件号码 nvarchar 25 ? LXDH 联系电话 nvarchar 40 ? DJRQ 登记日期 datetime 8 ? YXQZ 有效期至 datetime 8 ? YJSS 已借书数 smallint 2 ? RuleID 学生规则int 10
ID
ZT 是否挂失 nvarchar 2 ?
3.7 023学生还书
具体格式如下:
023
图书馆管理 所属项目 图书馆管理
系统
2007-11-27 陈新光 完成时间 页码 第27页
第31页 7/10/2009
kk
3.7.1 功能流程图
失败
录入项检测还书.jsp提交数据成功处理.jsp执行数据库操作是否 成功成功显示结果(非空)
失败
需要说明的问题:
(1) 显示结果可直接在处理结果.jsp中利用javascript来实现显示功能! (2) 处理要包含:对图书状态和借书文件表中信息的修改以及学生的欠款
金额的计算,并更新Publish表。
3.7.2 功能描述
(1) 功能类型:修改数据
(2) 功能概述:完成学生的还书业务并计算学生的欠款信息 (3) 前提业务:管理模块
(4) 后继业务:无
(5) 功能约束:权限约束
(6) 约束描述:
(7) 操作权限:图书馆管理人员
3.7.3 界面设计
(1) 基础信息处理
A01 重置 点击按钮 将文本框内的
所有数据清空 A02 提交 点击按钮 将数据提交到
处理还书信息页面
第32页 7/10/2009
kk
(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页 7/10/2009
kk
} }
针对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页 7/10/2009
kk
3.7.4 存储分配
借书文件:
Int 10 1 1 借阅编? 自动号 编号
Int 10 2 图书编? 号
Int 10 3 学生编? 号
Datatime 8 4 借阅时?
间
Datatime 8 5 到期时?
间
Smallint 2 6 续借次?
数
Nvarchar 10 7 操作员 ?
navarchar 50 8 状态 ?
学生文件:
XSID 学生编号 Int 10 1 ? 自动
编号 Name 姓名 nvarchar 10 Sex 性别 nvarchar 2 ? ZJH 证件号码 nvarchar 25 ? LXDH 联系电话 nvarchar 40 ? DJRQ 登记日期 datetime 8 ? YXQZ 有效期至 datetime 8 ? YJSS 已借书数 smallint 2 ? RuleID 学生规则int 10
ID
ZT 是否挂失 nvarchar 2 ?
图书目录文件:
第35页 7/10/2009
kk
Int 10 1 1 图书编号 ? 自动编号
20 2 条形码 nvarchar
200 3 书名 nvarchar
50 4 图书类型 Nvarchar ?
20 5 作者 Nvarchar ?
20 6 译者 Nvarchar ?
ISBN 20 7 Nvarchar
30 8 出版社 Nvarchar ?
Money 8 9 价格 ?
20 10 书架名称 Nvarchar ?
Smallint 2 11 现存量 ?
Smallint 2 12 库存总量 ?
Datatime 8 13 入库时间 ?
10 14 操作员 Nvarchar ?
200 15 简介 Nvarchar ?
Smallint 2 16 借出次数 ?
2 17 是否注销 Nvarchar ?
50 18 图书状态 nvarchar ?
罚款单;
Int 10 1 1 借阅编? 自动编号 号
Int 10 2 图书编? 号
Int 10 3 学生编? 号
Smallint 3 4 应罚金?
额
Smallint 3 5 实收金?
额
Nvarchar 1 6 状态 ?
Nvarchar 200 7 备注 ?
第36页 7/10/2009
kk
3.8 024图书注销
具体格式如下:
024
图书馆管理 所属项目 图书馆管理
系统
2007-11-27 陈新光 完成时间 页码 第31页
3.8.1 功能流程图
失败
录入项检测注销.jsp提交数据成功处理.jsp执行数据库操作是否 成功成功显示结果(非空)
失败
需要说明的问题:
(1) 显示结果可直接在处理结果.jsp中利用javascript来实现显示功能!
(2) 在处理图书注销的时候,为了便于以后的恢复操作,此删除操作只在
表中做一标志,并不是真正的删除。
3.8.2 功能描述
(1) 功能描述:删除数据
(2) 功能概述:注销图书
(3) 前提业务:管理模块
(4) 后继业务:无
(5) 约束描述:
(6) 操作权限:图书馆管理人员
3.8.3 界面设计
(1) 基础信息处理
第37页 7/10/2009
kk
动作说明如下:
A01 重置 点击按钮 将文本框内的
所有数据清空 A02 提交 点击按钮 将数据提交到
处理还书信息页面
(2) 界面描述:
(3) 数据描述:
10 Y N 文本框
(4) 对于图书注销业务的处理
3.8.4 存储分配
图书目录文件:
Int 10 1 1 图书编号 ? 自动编号
20 2 条形码 nvarchar
200 3 书名 nvarchar
50 4 图书类型 Nvarchar ?
20 5 作者 Nvarchar ?
20 6 译者 Nvarchar ?
第38页 7/10/2009
kk
ISBN 20 7 Nvarchar
30 8 出版社 Nvarchar ?
Money 8 9 价格 ?
20 10 书架名称 Nvarchar ?
Smallint 2 11 现存量 ?
Smallint 2 12 库存总量 ?
Datatime 8 13 入库时间 ?
10 14 操作员 Nvarchar ?
200 15 简介 Nvarchar ?
Smallint 2 16 借出次数 ?
2 17 是否注销 Nvarchar ?
50 18 图书状态 nvarchar ?
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{
第39页 7/10/2009
kk
//取得列数和列名
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
if(rs.next())
{
for(int i=1;i<=cols;i++)
{
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);
第40页 7/10/2009
kk
}
return hash;
}
(2) 增加记录的公共接口
该方法有一个参数,是java.util.Hashtable类,在调用该方法前,先用和
hashtable的put方法将字段名和该条记录的值存入hashtable中,然后将这个hashtable作为参数传入insert方法中。 在insert方法的最后,调用ParentBean中的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="";
第41页 7/10/2009
kk
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);
}
(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"));
……………………
第42页 7/10/2009
kk
return updateRecord(vect);
}
3.11 测试要点
3.11.1 测试范围
验证用户身份,进行权限控制 功能性测试
测试数据库检索代码的健壮性 功能性测试
3.11.2 测试方法
功能性测试:黑盒测试
第43页 7/10/2009