资源描述
〖图书管理系统〗具体设计说明书
2024年5月
目录
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
文档名称: 具体设计规格说明书
项目名称: 图书馆管理系统
项目责任人:陈新光
编写 TEST _____年_____月_____日
校对 全部小组组员 _____年_____月_____日
审核 全部小组组员 _____年_____月_____日
同意 XXX _____年_____月_____日
开发单位__________________________________________
组员: TEST1 TEST2 TEST3
1 引言
1.1 编写目标
图书管理系统具体设计是设计第二个阶段,这个阶段关键任务是在图书管理系统概要设计书基础上,对概要设计中产生功效模块进行过程描述,设计功效模块内部细节,包含算法和具体数据结构,为编写源代码提供必需说明。
概要设计处理了软件系统总体结构设计问题,包含整个软件系统结构、模块划分、模块功效和模块间联络等。具体设计则要处理怎样实现各个模块内部功效,即模块设计。具体说,模块设计就是要为已经产生图书管理各子系统设计具体算法。但这并不等同于系统实现阶段用具体语言编码,它只是对实现细节作正确描述,这么编码阶段就能够将具体设计中对功效实现描述,直接翻译、转化为用某种程序设计语言书写程序。
1.2 项目背景
依据XX学校期望能够充足利用现代科技来提升图书管理效率,在原有办公系统基础上进行扩展,将部分能够用计算机来管理全部进行计算机化,使得图书馆管理人职员作愈加方便,工作效率也愈加高。
1.3 定义
•Mysql:数据库管理软件
•DBMS:数据库管理系统
•Windows //XP:运行环境
•JSP :软件开发语言
•Myeclipse :开发工具
1.4 参考资料
《软件工程导论——第5版》 张海藩编著 清华大学出版社
《实用软件工程》 Leszek A.Maciaszek Bruc Lee Liong著
机械工业出版社
2 总体设计
2.1 需求概述
根据需求分析文档中规格要求,使用条形码扫描器进书、借书、还书,使得信息传输正确、流畅。同时,系统最大程度地实现易安装,易维护性,易操作性,运行稳定,安全可靠。
2.2 软件结构
系统由3大模块,6小模块组成:
序号 编号 名称
1, 01 登陆模块
2, 02 管理模块
3, 031 图书信息查询模块
4, 032 学生信息查询模块
5, 021 入库管理模块
6, 022 学生借书模块
7, 023 学生还书模块
8, 024 图书注销模块
9, 040 基础信息设置
3 程序描述
3.1 01登陆模块
具体格式见下表:
功效编号
01
功效名称
登陆模块
内容
功效步骤图
所属业务
图书馆管理
所属项目
图书馆管理系统
编写人
陈新光
完成时间
-11-26
页码
第5页
3.1.1 功效步骤图
功效步骤图以下图所表示。
需要说明问题:
(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
文本框
Y
N
管理员密码
15
password
Y
N
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" ;
conn= DriverManager.getConnection(url);
}
catch(Exception e){
e.printStackTrace();
}
return this.conn ;
}
}
//在Mysql建立lib_system数据库,以后将和数据操作相关数据和该数据库相连;
2, 统计登陆信息及信息处理:
当用户点击“登陆”按钮以后,数据将提交到登陆数据处理.jsp页面。 取得帐号密码这两个从页面传入值,然后跟数据库当中管理员表中账号和密码比较。假如正确话,在JSPSESSION中存入一个标识属性,表示目前已经有管理员登陆了。处理完成后,跳转到管理页面,假如失败,则提醒登陆失败,并重新进入到登陆页面。
具体逻辑以下:
<%
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);
//在JSPsession中存如一个标识属性,表示目前已经有管理员登陆了
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)
序号
字段名
类型
长度
精度
小数位数
默认值
许可空
主键
说明
1
(admin_ID)管理员ID
Int
10
√
2
(admin_password)管理员密码
Char
15
3
(admin_quanxian)权限
Nvarchar
15
3.2 02管理模块
具体格式见下表
功效编号
02
功效名称
管理模块
内容
功效步骤图
所属业务
图书馆管理
所属项目
图书馆管理系统
编写人
陈新光
完成时间
-11-26
页码
第8页
3.2.1 功效步骤图
功效步骤图以下所表示:
需要说明问题:
在选择对应业务时,需要在目前页面显示;而且在管理页面内,默认显示图书查询页面。
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
功效名称
图书信息查询模块
内容
功效步骤图
所属业务
图书馆管理
所属项目
图书馆管理系统
编写人
陈新光
完成时间
-11-26
页码
第10页
3.3.1 功效步骤图
功效步骤图以下图:
需要说明问题:
录入项检测使用javascript来实现(各项非空);
操作权限:面向全部用户
3.3.2 功效描述
(1) 功效类型:查询数据
(2) 功效概述:显示查询结果
(3) 前提业务:无
(4) 后继业务:
(5) 功效约束:没有约束;
(6) 约束描述:
(7) 操作权限:面向全部用户
3.3.3 界面设计
(1) 基础信息处理
下表是动作说明:
动作编号
动作名称
动作描述
A01
确定
点击按钮 提交数据到图书查询数据处理.jsp页面
A02
学生信息查询
点击按钮 将页面转至学生信息查询.jsp页面
(2) 数据要求
(1) 功效类型:数据查询
(2) 数据描述:
页面显示字段见下表:
字段名称
长度
录入方法
是否非空项
数据检验
默认显示
请选择查询类型
20
下拉列表
Y
N
请输入查询内容
200
文本框
Y
N
(3) 图书信息查询输出项
书名
图书类型
作者
译者
ISBN
出版社
价格
书架名称
现存量
介绍
书名
图书类型
3.3.4 模块内部逻辑
1, Search.jsp用于显示界面内容,给用户显示一个查询接口
2, Lib_query.jsp用来调度全部页面,它依据传入参数来决定包含哪一个jsp页面来显示内容;
在lib_query.jsp页面中,
它依据传入参数来决定包含哪一个jsp页面来显示内容;则能够经过<jsp:include page=”<%= ……%>”/>,利用jsp:include标签来被动态加载发送到对应页面;
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
√
5
(DQSJ)到期时间
Datatime
8
√
6
(XJCS)续借次数
Smallint
2
√
7
(CZY)操作员
Nvarchar
10
√
8
(ZT)状态
navarchar
50
√
3.4 032学生信息查询模块
具体格式以下:
功效编号
032
功效名称
学生信息查询模块
内容
功效步骤图
所属业务
图书馆管理
所属项目
图书馆管理系统
编写人
陈新光
完成时间
-11-26
页码
第12页
3.4.1 功效步骤图
功效步骤图以下图:
需要说明问题:
录入项检测使用javascript来实现(各项非空);
操作权限:面向全部用户
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) 学生信息查询输出项
学生学号
姓名
性别
生日
证件号码
联络电话
登记日期
使用期至
已借书数
3.4.4 模块内部逻辑
5, Search.jsp用于显示界面内容,给用户显示一个查询接口
6, Index.jsp用来调度全部页面,它依据传入参数来决定包含哪一个jsp页面来显示内容;
在index.jsp页面中,
它依据传入参数来决定包含哪一个jsp页面来显示内容;则能够经过<jsp:include page=”<%= ……%>”/>,利用jsp:include标签来被动态加载发送到对应页面;
7, List.jsp 用来显示查询到结果列表。
8, View.jsp用来显示查询到学生各项属性。
★★注释:学生信息查询模块和图书查询模块属于同一类功效。实现能够完全类似。
3.4.5 存放分配
学生文件:
序号
字段
字段名
类型
长度
精度
小数位数
默认值
许可空
主键
说明
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
学生规则ID
int
10
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
功效名称
入库管理模块
内容
功效步骤图
所属业务
图书馆管理
所属项目
图书馆管理系统
编写人
陈新光
完成时间
-11-27
页码
第16页
3.5.1 功效步骤图
(1) 实施数据库操作时候要验证权限
(2) 录入项检验用javascript来实现(选项非空)
3.5.2 功效描述
(1) 功效类型:添加数据
(2) 功效描述:增加图书目录文件中图书信息。
(3) 前提业务:管理模块
(4) 后继业务:无
(5) 功效约束:权限约束
(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
录入时间
默认系统时间,格式:
年 月 日
只需程序统计
显示在入库界面
录入人
默认系统登陆人员
只需程序统计
显示在入库界面
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);
}
该方法有一个参数,是java.util.Hashtable类,在调用该方法前,先用和hashtableput方法将字段名和该条统计值存入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
√
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
功效名称
学生借书模块
内容
功效步骤图
所属业务
图书馆管理
所属项目
图书馆管理系统
编写人
陈新光
完成时间
-11-27
页码
第21页
3.6.1 功效步骤图
需要说明问题:
(1) 在进行借书,修改数据信息时,应先查询学生欠款信息,如欠款超额,则利用javascript实现信息提醒,拒绝借书,如无超额,则接收借书。
(2) 为便于以后恢复操作,此修改操作只在表中做一个标志,并不是真正对其修改;
3.6.2 功效描述
(1) 功效类型:修改数据和查询数据
(2) 功效描述:更新学生借书文件,图书目录文件等中信息;
(3) 前提业务:管理模块
(4) 后继业务:无
(5) 功效约束:权限约束
(6) 约束描述:
(7) 操作权限:图书馆管理人员
3.6.3 界面设计
1, 基础信息处理
动作说明以下:
动作编号
动作名称
动作描述
A01
重置
点击按钮 将文本框内全部数据清空
A02
提交
点击按钮 将数据提交四处理学生超额信息页面
A03
取消
将目前页面关闭,并取消借阅
2, 数据描述
(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<intdel.length;i++){
%><script>alert(“<%=intdel[i]%>”);</script><%
If(intdel[i]!=1)
ifSuccess=false;
}
}
}
}
If(!ifSuccess){
%><script>alert(“借阅失败!”);</script><%
}else{
%><script>alert(“借阅成功!”);</script><%
}
}
实施过程以下:
首先要验证学生信息是否存在和学生欠款是否超额,也就是说学生是否能够借书,图书是否在馆等,在 确定正当以后调用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"));//证件号
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
+"',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
展开阅读全文