软件详细设计说明书实例
2022年4月
目录
1
引言 ................................................................................................................................................ 2 1.1 1.2 1.3 1.4 2
编写目的 ............................................................................................................................... 2 项目背景 ............................................................................................................................... 2 定义 ....................................................................................................................................... 2 参考资料 ............................................................................................................................... 3
总体设计 ........................................................................................................................................ 3 2.1 2.2
需求概述 ............................................................................................................................... 3 软件结构 ............................................................................................................................... 4
3 程序描述 ........................................................................................................................................ 6 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10
01登陆模块 ........................................................................................................................... 6 02管理模块 ............................................................................................ 错误!未定义书签。 031图书信息查询模块 .......................................................................... 错误!未定义书签。 032学生信息查询模块 .......................................................................... 错误!未定义书签。 021入库管理模块 .................................................................................. 错误!未定义书签。 022学生借书模块 .................................................................................. 错误!未定义书签。 023学生还书模块 .................................................................................. 错误!未定义书签。 024图书注销模块 .................................................................................. 错误!未定义书签。 接口设计 ................................................................................................ 错误!未定义书签。 测试要点 ........................................................................................................................ 43
文档名称: 详细设计规格说明书 项目名称: 图书馆管理系统 项目负责人:陈新光
编写 TEST _____年_____月_____日
校对 所有小组成员 _____年_____月_____日 审核 所有小组成员 _____年_____月_____日 批准 XXX _____年_____月_____日 开发单位__________________________________________
组员: TEST1 TEST2 TEST3
1 引言
1.1 编写目的
图书管理系统详细设计是设计的第二个阶段,这个阶段的主要任务是在图书管理系统概要设计书基础上,对概要设计中产生的功能模块进行过程描述,设计功能模块的内部细节,包括算法和详细数据结构,为编写源代码提供必要的说明。
概要设计解决了软件系统总体结构设计的问题,包括整个软件系统的结构、模块划分、模块功能和模块间的联系等。详细设计则要解决如何实现各个模块的内部功能,即模块设计。具体的说,模块设计就是要为已经产生的图书管理各子系统设计详细的算法。但这并不等同于系统实现阶段用具体的语言编码,它只是对实现细节作精确的描述,这样编码阶段就可以将详细设计中对功能实现的描述,直接翻译、转化为用某种程序设计语言书写的程序。
1.2 项目背景
根据XX学校希望能够充分利用现代科技来提高图书管理的效率,在原有的办公系统基础上进行扩展,将一些可以用计算机来管理的都进行计算机化,使得图书馆管理人员工作更加方便,工作效率也更加的高。
1.3 定义
•Mysql:数据库管理软件 •DBMS:数据库管理系统
•Windows 2000/2003/XP:运行环境 •JSP :软件开发语言 •Myeclipse :开发工具
1.4 参考资料
《软件工程导论——第5版》 张海藩编著 清华大学出版社
《实用软件工程》
Leszek A.Maciaszek Bruc Lee Liong著
机械工业出版社
2 总体设计
2.1 需求概述
按照需求分析文档中的规格要求,使用条形码扫描器进书、借书、还书,使得信息传递准确、流畅。同时,系统最大限度地实现易安装,易维护性,易操作性,运行稳定,安全可靠。
2.2 软件结构
图书馆信息系统参数设置基础信息设置管理员设置书架设置图书词库设置系统登陆新书购入管理子系统学生借书学生还书图书馆管理系统图书注销学生信息查询查询子系统图书信息查询 系统由3大模块,6小模块组成:
序号 1, 2, 编号 名称
01 登陆模块 02 管理模块 3, 031 4, 032 5, 021 6, 022 7, 023 8, 024 9, 040
图书信息查询模块 学生信息查询模块 入库管理模块 学生借书模块 学生还书模块 图书注销模块 基础信息设置
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) 操作权限:图书馆管理员
3.1.3 界面设计
(1) 基础信息处理
动作说明:
动作编号 A01 动作名称 登陆 动作描述
点击登陆按钮 提交数据到登陆数据处理.jsp页面 A02 重至 点击退重至按钮 将当前信息恢复原先状态
A03
图书信息查询
点击 将页面转至到图书信息查询.jsp页面
A04
学生信息查询
点击 将页面转至学生信息查询.jsp页面
A05 基础信息 (2) 数据要求
(1) 功能类型:数据查询 (2) 数据描述:
页面显示录入字段如下:
字段名称 管理员ID 长度 10 录入方式 文本框 password 是否非空项 数据检验 Y Y N N 默认显示 点击 将显示基础信息 管理员密码 15 3.1.4 登陆数据处理.jsp的内部逻辑
登陆数据处理:
关键点两点:1,数据库连接;2,记录登陆信息及信息处理;
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\" ; }
//在Mysql建立lib_system数据库,之后将与数据操作相关数据与该数据库相连;
conn= DriverManager.getConnection(url); }
catch(Exception e){ e.printStackTrace(); }
return this.conn ; }
2, 记录登陆信息及信息处理:
当用户点击“登陆”按钮之后,数据将提交到登陆数据处理.jsp页面。 取得帐号密码这两个从页面传入的值,然后跟数据库当中管理员表中的账号和密码比较。如果正确的话,在JSP的SESSION中存入一个标记属性,表示当前已经有管理员登陆了。处理完毕后,跳转到管理页面,如果失败,则提示登陆失败,并重新进入到登陆页面。 具体的逻辑如下:
<%
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?\"+response.encodeURL(erroMsg)); } }
catch(UserNotFoundException e) {
erroMsg=\"错误的用户名和密码\"; response.sendRedirect(\"login_process.jsp\");
else{ } %>
out.println(\"请填写好你的个人信息!\");
3.1.5 存储分配
管理员表:(admin)
序号
字段名
类型
长度
精度
小数
默认
允许
主键
说明
1 (admin_ID)管理员ID 2
(admin_password)管理员密码
3 (admin_quanxian)权限 Nvarchar 15 Char
15
Int 10 位数 值
空
√
3.2 02管理模块
具体格式见下表 功能编号 所属业务 02
功能名称
管理模块 所属项目 内容
功能流程图
图书馆管理 图书馆管理 系统 编写人 陈新光 完成时间 2007-11-26 页码 第8页 3.2.1 功能流程图
功能流程图如下所示:
管理.jsp查询.jsp入库管理.jsp学生借书.jsp学生还书.jsp图书注销.jsp需要说明的问题:
在选择相应的业务时,需要在当前的页面显示;并且在管理页面内,默认显示图书查询页面。
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) 数据要求
功能类型:其他
3.3 031图书信息查询模块
具体格式如下: 功能编号
031
功能名称
图书信息查内容 询模块
所属业务 图书馆管理 所属项目 图书馆管理 系统 编写人 陈新光 完成时间 2007-11-26 页码 第10页 功能流程图
3.3.1 功能流程图
功能流程图如下图:
失败图书查询.jsp提交所填内容录入项检验(非空)成功图书查询数据处理.jsp执行数据库操作是否成功成功查询结果.jsp失败需要说明的问题:
录入项检测使用javascript来实现(各项非空); 操作权限:面向所有用户
3.3.2 功能描述
(1) 功能类型:查询数据 (2) 功能概述:显示查询结果 (3) 前提业务:无
(4) 后继业务:
(5) 功能约束:没有约束; (6) 约束描述:
(7) 操作权限:面向所有用户
3.3.3 界面设计
(1) 基础信息处理
下表是动作说明:
动作编号 A01 动作名称 确定 动作描述
点击按钮 提交数据到图书查询数据处理.jsp页面 A02 学生信息查询 点击按钮 将页面转至学生信息查询.jsp页面
(2) 数据要求
(1) 功能类型:数据查询 (2) 数据描述:
页面显示字段见下表:
字段名称
长度
录入方式 下拉列表 是否非空项 数据检验 Y N 默认显示 请选择查询20 类型 请输入查询200 内容
文本框 Y N (3) 图书信息查询的输出项
书名 图书类型 作者 译者 ISBN 出版社
价格 书架名称 现存量 简介 书名 图书类型
3.3.4 模块内部逻辑
Search.jspLib_query.jspChuli.jspView.jsp
1, Search.jsp用于显示界面的内容,给用户显示一个查询接口 2, Lib_query.jsp用来调度所有的页面,它根据传入的参数来决定包含哪一个jsp页面来显示内容; 在lib_query.jsp页面中,
它根据传入的参数来决定包含哪一个jsp页面来显示内容;则可以通过 被动态加载发送到相应页面; 3, chuli.jsp 用来处理数据查询和显示查询到的结果列表。 在这个页面中,数据要求是以列表的形式显示到输出页面。 由于查询到的结果可能过多,所以采用分页形式显示; 对于分页功能的内部逻辑: 4, View.jsp用来显示查询到的图书的各项属性。 3.3.5 存储分配 图书目录文件(Book): 序号 1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 17 18 字段名 (BookID)图书编号 (TXM)条形码 (Title)书名 (TSLX)图书类型 (Author)作者 (Translator)译者 (ISBN)ISBN (CBS)出版社 (SJMC)书架名称 (XCL)现存量 (KCZL)库存总量 (RKSJ)入库时间 (CZY)操作员 (JJ)简介 (JCCS)借出次数 类型 Int 长度 精度 小数位数 默认值 允许空 主键 10 1 √ √ √ √ √ √ √ √ √ √ √ √ √ √ 说明 自动编号 nvarchar 20 nvarchar 200 Nvarchar 50 Nvarchar 20 Nvarchar 20 Nvarchar 20 Nvarchar 30 Nvarchar 20 Smallint Smallint Datatime 2 2 Nvarchar 10 Nvarchar 200 Smallint 2 (SFzhuxiao)是否注销 Nvarchar 2 (BookZT)图书状态 nvarchar 50 借书文件表(JSWJB): 序号 字段名 类型 长度 精度 小数位数 1 (JYID)Int 10 1 默认值 允许空 √ 自动主键 外键 说明 借阅编号 2 (BookID)图书编号 3 (StuID)学生编号 4 (JYSJ)借阅时间 5 (DQSJ)到期时间 6 (XJCS)续借次数 7 (CZY)操作员 8 (ZT)状态 navarchar 50 √ Nvarchar 10 √ Smallint 2 √ Datatime 8 √ Datatime 8 √ Int 10 √ Int 10 √ 编号 3.4 032学生信息查询模块 具体格式如下: 功能编号 032 功能名称 学生信息查内容 询模块 所属业务 图书馆管理 所属项目 图书馆管理 系统 编写人 陈新光 完成时间 2007-11-26 页码 第12页 功能流程图 3.4.1 功能流程图 功能流程图如下图: 失败学生信息查询.jsp提交所填内容录入项检验(非空)成功学生信息查询数据处理.jsp执行数据库操作是否成功成功学生信息查询结果.jsp失败需要说明的问题: 录入项检测使用javascript来实现(各项非空); 操作权限:面向所有用户 3.4.2 功能描述 (8) 功能类型:查询数据 (9) 功能概述:显示查询结果 (10) 前提业务:无 (11) 后继业务: (12) 功能约束:没有约束; (13) 约束描述: (14) 操作权限:面向所有用户 3.4.3 界面设计 (4) 基础信息处理 下表是动作说明: 动作编号 A01 动作名称 确定 动作描述 点击按钮 提交数据到图书查询数据处理.jsp页面 A02 图书信息查询 点击按钮 将页面转至图书信息查询.jsp页面 (5) 数据要求 (3) 功能类型:数据查询 (4) 数据描述: 页面显示字段见下表: 字段名称 长度 录入方式 文本框 (6) 学生信息查询的输出项 是否非空项 数据检验 Y N 默认显示 请输入学号 10 学生学号 姓名 性别 生日 证件号码 联系电话 登记日期 有效期至 已借书数 3.4.4 模块内部逻辑 Search.jspIndex.jspList.jspView.jsp 5, Search.jsp用于显示界面的内容,给用户显示一个查询接口 6, Index.jsp用来调度所有的页面,它根据传入的参数来决定包含哪一个jsp页面来显示内容; 在index.jsp页面中, 它根据传入的参数来决定包含哪一个jsp页面来显示内容;则可以通过 7, List.jsp 用来显示查询到的结果列表。 8, View.jsp用来显示查询到的学生的各项属性。 ★★注释:学生信息查询模块与图书查询模块属于同一类功能。实现可以完全类似。 3.4.5 存储分配 学生文件: 序号 字段 字段名 类型 长度 精度 小数位数 1 XSID 学生编号 Int 10 默认值 1 允许空 √ 自动编号 2 3 4 5 6 7 8 9 Name Sex ZJH LXDH DJRQ YXQZ YJSS RuleID 姓名 性别 nvarchar 10 nvarchar 2 √ √ √ √ √ √ 主键 说明 证件号码 nvarchar 25 联系电话 nvarchar 40 登记日期 datetime 8 有效期至 datetime 8 已借书数 smallint 2 学生规则ID int 10 10 ZT 是否挂失 nvarchar 2 √ 借书文件: 序号 字段名 类型 长度 精度 小数位数 1 借阅编号 2 图书编号 3 学生编号 4 借阅时间 5 到期时间 6 续借次 Smallint 2 √ Datatime 8 √ Datatime 8 √ Int 10 √ Int 10 √ Int 10 1 √ 自动编号 默认值 允许空 主键 外键 说明 数 7 8 操作员 Nvarchar 状态 10 √ √ navarchar 50 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) 功能约束:权限约束 (6) 约束描述:无 (7) 操作权限:图书馆管理人员 3.5.3 界面设计 1, 基础信息处理 动作说明如下表: 动作编号 A01 动作名称 保存 动作描述 点击按钮 提交数据到入库数据处理.jsp页面 A02 退出 点击按钮 将当前页面关闭 2, 数据描述 (1) 功能类型:数据增加。 (2) 数据描述: 页面录入字段见下表: 字段名称 书号 条形码 书名 作者 出版社 版次 图书类别 单价 录入时间 长度 30 20 200 20 30 50 20 8 录入方式 文本框 文本框 文本框 文本框 文本框 文本框 文本框 文本框 是否非空项 数据检验 Y Y Y Y Y Y Y Y N N N N N N N N 默认显示 显示在入库界面 默认系统时 年 月 日 只需程序记 间,格式: 录 录入人 默认系统登 陆人员 只需程序记 录 显示在入库界面 3, 入库数据处理内部逻辑: 图书入库采用表格进行多行添加: 利用javaBean来编写一个BookBean来管理图书。 在BookBean类中增加记录的公共接口来实现入库数据的添加。 具体的类设计如下: Public int insert (Hashtable hash){ int intID = makeID(\"Book\ Vector vect = new Vector(); vect.add(\"Book\"); vect.add(addVector(\"BookID\ vect.add(addVector(\"Title\CHAR\")); vect.add(addVector(\"Author\\")),\"CHAR\")); vect.add(addVector(\"ISBN\CHAR\")); 。。。。。。。。。。。。。。。。。。。。//还有其他选项,同上格式。 } 该方法有一个参数,是java.util.Hashtable类,在调用该方法前,先用和hashtable的put方法将字段名和该条记录的值存入hashtable中,然后将这个hashtable作为参数传入insert方法中。 在insert方法的最后,调用ParentBean中的insertRecord方return insertRecord(vect); 法,insertRecord可以根据传入的参数自动的生成增加记录的SQL语句并通过JDBC发送到数据库。 正对ParentBean类:主要是实现对数据库的各种操作:如与 数据库的连接,对数据库的操作。 3.5.4 存储分配 图书目录文件: 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 字段名 类型 长度 精度 小数位数 默认值 允许空 主键 10 1 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ 说明 自动编号 图书编号 Int 条形码 书名 nvarchar 20 nvarchar 200 图书类型 Nvarchar 50 作者 译者 ISBN 出版社 价格 Nvarchar 20 Nvarchar 20 Nvarchar 20 Nvarchar 30 Money 8 书架名称 Nvarchar 20 现存量 Smallint 2 2 8 库存总量 Smallint 入库时间 Datatime 操作员 简介 Nvarchar 10 Nvarchar 200 2 借出次数 Smallint 是否注销 Nvarchar 2 图书状态 nvarchar 50 入库表: 序号 字段名 类型 长度 精度 小数位数 默认值 允许空 主键 外键 说明 1 书号 Nvarchar 30 1 √ 自动编号 2 3 4 5 6 条形码 书名 作者 出版社 版次 Nvarchar Nvarchar Nvarchar Nvarchar Nvarchar 20 200 20 30 50 √ √ √ √ √ 7 图书类别 Nvarchar 20 √ 8 存放位置 Nvarchar 20 √ 9 10 单价 入库数量 Money Smallint 8 2 √ √ 11 12 13 14 15 金额 经手人 票号 操作员 日期 Money Nvarchar Nvarchar Nvarchar Datatime 注: 8 10 30 10 8 √ √ √ √ √ 3.6 022学生借书模块 具体格式如下: 功能编号 022 功能名称 学生借书模内容 块 所属业务 图书馆管理 所属项目 图书馆管理 系统 编写人 陈新光 完成时间 2007-11-27 页码 第21页 功能流程图 3.6.1 功能流程图 超额借书.jsp提交所填内容录入项检验(非空)成功检查学生欠款信息执行数据库操作欠款是否超额未超额处理借书数据.jsp失败失败是否成功显示学生借书信息.jsp需要说明的问题: (1) 在进行借书,修改数据信息时,应先查询学生的欠款信息,如欠款 超额,则利用javascript实现信息提示,拒绝借书,如无超额,则接受借书。 (2) 为便于以后的恢复操作,此修改操作只在表中做一个标志,并不是 真正的对其修改; 3.6.2 功能描述 (1) 功能类型:修改数据和查询数据 (2) 功能描述:更新学生借书文件,图书目录文件等中的信息; (3) 前提业务:管理模块 (4) 后继业务:无 (5) 功能约束:权限约束 (6) 约束描述: (7) 操作权限:图书馆管理人员 3.6.3 界面设计 1, 基础信息处理 动作说明如下: 动作编号 A01 动作名称 重置 动作描述 点击按钮 将文本框内的所有数据清空 A02 提交 点击按钮 将数据提交到处理学生超额信息页面 A03 取消 将当前页面关闭,并取消借阅 2, 数据描述 (1) 功能类型:修改数据和查询数据 (2) 界面设计: (3) 数据字段描述: 字段名称 长度 录入方式 文本框 是否非空项 数据检验 Y N 默认显示 学生证件号10 码 书籍条形码10 号 3, 文本框 Y N 图书借阅数据处理内部逻辑 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\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 \"; //新增操作 createStatement(); clearBatch(); sql=\" insert into JSWJB(JYID,XSID,BOOKID,JYSJ,DQSJ,ZT,XJCS) \" +\" values(\"+strID+\ //根据条形码取得图书ID Hashtable hashReId=(Hashtable)searchOneData(sql); strXSID=ds.toString((String)hashReId.get(\"XSID\")); String strKJYSJ=ds.toString((String)hashReId.get(\"KJYSJ\")); sql=\"select BOOKID from Book where TXM='\"+strTXM+\"'\"; Hashtable hashBKID=(Hashtable)searchOneData(sql); strBOOKID = ds.toString((String)hashBKID.get(\"BOOKID\")); )\" +\"',to_char((to_date('\"+strJYSJ+\"','yyyy-MM-dd')+\"+strKJYSJ+\"),'yyyy-MM-dd' } +\ 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) createStatement(); clearBatch(); sql=\"update JSWJB set ZT='\"+strOne+\"' where JYID=\"+id; addBatch(sql); { System.out.println(\"批量处理取消借阅。。。。。\"); String sql=\"\"; sql=\"select BOOKID from JSWJB where JYID=\"+id; Hashtable hash=(Hashtable)searchOneData(sql); String strBOOKID=(String)hash.get(\"BOOKID\"); sql=\"update BOOK set ZT='可借' where BOOKID=\"+strBOOKID; addBatch(sql); int result[]=executeBatch(); closeStm(); } return result; 3.6.4 存储分配 借书文件: 序号 字段名 类型 长度 精度 小数位数 1 借阅编号 2 图书编号 3 学生编号 4 借阅时间 5 到期时间 6 续借次数 7 8 操作员 Nvarchar 状态 10 √ √ Smallint 2 √ Datatime 8 √ Datatime 8 √ Int 10 √ Int 10 √ Int 10 1 √ 自动编号 默认值 允许空 主键 外键 说明 navarchar 50 罚款单: 序号 字段名 类型 长度 精度 小数位数 1 借阅编号 2 图书编Int 10 √ Int 10 1 √ 自动编号 默认值 允许空 主键 外键 说明 号 3 学生编号 4 应罚金额 5 实收金额 6 7 状态 备注 Nvarchar 1 Nvarchar 200 √ √ Smallint 3 √ Smallint 3 √ Int 10 √ 学生文件: 序号 字段 字段名 类型 长度 精度 小数位数 1 XSID 学生编号 Int 10 默认值 1 允许空 √ 自动编号 2 3 4 5 6 7 8 9 Name Sex ZJH LXDH DJRQ YXQZ YJSS RuleID 姓名 性别 nvarchar 10 nvarchar 2 √ √ √ √ √ √ 主键 说明 证件号码 nvarchar 25 联系电话 nvarchar 40 登记日期 datetime 8 有效期至 datetime 8 已借书数 smallint 2 学生规则ID int 10 10 ZT 是否挂失 nvarchar 2 √ 3.7 023学生还书 具体格式如下: 功能编号 所属业务 023 功能名称 学生还模块 内容 所属项目 功能流程图 图书馆管理 图书馆管理 系统 编写人 陈新光 完成时间 2007-11-27 页码 第27页 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 提交 点击按钮 将数据提交到处理还书信息页面 (2) 界面描述: (3) 数据描述 字段名称 长度 录入方式 文本框 是否非空项 数据检验 Y N 默认显示 书籍条形码10 号 对于还书业务的处理,实质上与借书业务的实现基本上相同,只是调用了backBorrow(hash)来实现还书功能; If(strEdit.equals(“1”)){ Int intdel[]=bb.BackBorrow(hash); If(intdel==null){ ifSuccess=false; }else{ For(int i=0;i If(intdel[i]!=1) ifSuccess=false; }else{ %><% } } 针对backBorrow(hash)算法如下: public int[] backBorrow(String TXM) { System.out.println(\"批量处理还书。。。。。\"); String sql=\"\"; String strBOOKID=ds.toString((String)toName(\"BOOK\ createStatement(); clearBatch(); sql=\"update JSWJB set ZT='\"+strOne+\"',DQSJ='\"+strNow+\"' where String strNow = ds.getDateTime(); strNow = strNow.substring(0,10); 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; 3.7.4 存储分配 借书文件: 序号 字段名 类型 长度 精度 小数位数 1 借阅编号 2 图书编号 3 学生编号 4 借阅时间 5 到期时间 6 续借次数 7 8 操作员 Nvarchar 状态 10 √ √ Smallint 2 √ Datatime 8 √ Datatime 8 √ Int 10 √ Int 10 √ Int 10 1 √ 自动编号 默认值 允许空 主键 外键 说明 navarchar 50 学生文件: 序号 字段 字段名 类型 长度 精度 小数位数 1 XSID 学生编号 Int 10 默认值 1 允许空 √ 自动编号 2 3 4 5 6 7 8 9 Name Sex ZJH LXDH DJRQ YXQZ YJSS RuleID 姓名 性别 nvarchar 10 nvarchar 2 √ √ √ √ √ √ 主键 说明 证件号码 nvarchar 25 联系电话 nvarchar 40 登记日期 datetime 8 有效期至 datetime 8 已借书数 smallint 2 学生规则ID int 10 10 ZT 是否挂失 nvarchar 2 √ 图书目录文件: 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 字段名 类型 长度 精度 小数位数 默认值 允许空 主键 10 1 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ 说明 自动编号 图书编号 Int 条形码 书名 nvarchar 20 nvarchar 200 图书类型 Nvarchar 50 作者 译者 ISBN 出版社 价格 Nvarchar 20 Nvarchar 20 Nvarchar 20 Nvarchar 30 Money 8 书架名称 Nvarchar 20 现存量 Smallint 2 2 8 库存总量 Smallint 入库时间 Datatime 操作员 简介 Nvarchar 10 Nvarchar 200 2 借出次数 Smallint 是否注销 Nvarchar 2 图书状态 nvarchar 50 罚款单; 序号 类型 长度 精度 小数位数 默认值 允许空 主键 外键 说明 字段名 1 借阅编号 Int 10 1 √ 自动编号 2 图书编号 Int 10 √ 3 学生编号 Int 10 √ 4 应罚金额 Smallint 3 √ 5 实收金额 Smallint 3 √ 6 7 状态 备注 Nvarchar 1 Nvarchar 200 √ √ 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) 基础信息处理 动作说明如下: 动作编号 A01 动作名称 重置 动作描述 点击按钮 将文本框内的所有数据清空 A02 提交 点击按钮 将数据提交到处理还书信息页面 (2) 界面描述: (3) 数据描述: 字段名称 长度 录入方式 文本框 是否非空项 数据检验 Y N 默认显示 书籍条形码10 号 (4) 对于图书注销业务的处理 3.8.4 存储分配 图书目录文件: 序号 1 2 3 4 5 6 字段名 类型 长度 精度 小数位数 默认值 允许空 主键 10 1 √ √ √ √ 说明 自动编号 图书编号 Int 条形码 书名 nvarchar 20 nvarchar 200 图书类型 Nvarchar 50 作者 译者 Nvarchar 20 Nvarchar 20 7 8 9 10 11 12 13 14 15 16 17 18 ISBN 出版社 价格 Nvarchar 20 Nvarchar 30 Money 8 √ √ √ √ √ √ √ √ √ √ √ 书架名称 Nvarchar 20 现存量 Smallint 2 2 8 库存总量 Smallint 入库时间 Datatime 操作员 简介 Nvarchar 10 Nvarchar 200 2 借出次数 Smallint 是否注销 Nvarchar 2 图书状态 nvarchar 50 3.9 025 基础信息设置 3.10 接口设计 (1) 用来查询一条数据的私有接口 该方法有一个参数,参数是一个字符串,表示要向数据库发送一条SQL语句,这个SQL只是一个查询语句,方法的返回植是一个Hashtable,在Hashtable中以键值对的方式表示了从数据库中选出了第一行记录。用Hashtable中的get(“FieldName”)方法可以得到改行记录的某一个记录的值。 private Hashtable searchOneData(String sql) Statement stmt = null; try{ { Hashtable hash = new Hashtable(); ResultSet rs = selectRecord(sql); //取得列数和列名 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); } } 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(“………….”); …………………… } (3) 删除记录的公共接口 该方法有一个参数id,该参数表示的是book表中的ID字段,ID字段是这个表的主键,用这个主键可以检索到表中的一条唯一的记录,通过这个主键,delete方法可以生成一条SQL语句,删除这一条记录。 public int delete(String id) { String sql=\"\"; Return insertRecord(vect); sql=\"delete from Book where BookID=\"+id; return deleteRecord(sql); } (4) 查询记录的公共接口 Public Vector getData(String sqlwhere, int page){ } (5) 修改记录的接口 public int update(Hashtable hash) Vector vect = new Vector(); vect.add(\"Book\"); { String sql=””; Sql=”select * from Book”; If (!sqlwhere.equals(“”)) Sql+=sqlwhere; Return getOnePage(sql,page,20); vect.add(addVector(\"Title\ )); vect.add(addVector(\"Author\ vect.add(addVector(\"ISBN\…………………… return updateRecord(vect); } 3.11 测试要点 3.11.1 测试范围 测试范围 系统登陆验证 信息检索功能测试 主要内容 验证用户身份,进行权限控制 测试数据库检索代码的健壮性 简要说明 功能性测试 功能性测试 3.11.2 测试方法 功能性测试:黑盒测试 仅供个人用于学习、研究;不得用于商业用途。 For personal use only in study and research; not for commercial use. Nur für den persönlichen für Studien, Forschung, zu kommerziellen Zwecken verwendet werden. Pour l 'étude et la recherche uniquement à des fins personnelles; pas à des fins commerciales. т о л ь к о для людей, которые используются для обучения, исследований и не должны использоваться в коммерческих целях. 以下无正文 仅供个人用于学习、研究;不得用于商业用途。 For personal use only in study and research; not for commercial use. Nur für den persönlichen für Studien, Forschung, zu kommerziellen Zwecken verwendet werden. Pour l 'étude et la recherche uniquement à des fins personnelles; pas à des fins commerciales. т о л ь к о для людей, которые используются для обучения, исследований и не должны использоваться в коммерческих целях. 以下无正文 For personal use only in study and research; not for commercial use 因篇幅问题不能全部显示,请点此查看更多更全内容