1、图书管理系统详细设计说明书2018 年 10 月2018/10/8目录1 引言 21.1 编写目的 21.2 项目背景 21.3 定义 21.4 参考资料 22 总体设计 22.1 需求概述 22.2 软件结构 23 程序描述 23.1 01 登陆模块 .23.2 02 管理模块 .23.3 031 图书信息查询模块 .23.4 032 学生信息查询模块 .23.5 021 入库管理模块 .23.6 022 学生借书模块 .23.7 023 学生还书模块 .23.8 024 图书注销模块 .23.9 接口设计 23.10 测试要点 2kk第 0 页 2018/10/8文档名称: 详细设计规格说
2、明书项目名称: 图书馆管理系统项目负责人:陈新光编写 TEST _年_月_日校对 所有小组成员 _年_月_日审核 所有小组成员 _年_月_日批准 XXX _年_月_日开发单位_组员: TEST1 TEST2 TEST3kk第 1 页 2018/10/81 引言1.1 编写目的图书管理系统详细设计是设计的第二个阶段,这个阶段的主要任务是在图书管理系统概要设计书基础上,对概要设计中产生的功能模块进行过程描述,设计功能模块的内部细节,包括算法和详细数据结构,为编写源代码提供必要的说明。概要设计解决了软件系统总体结构设计的问题,包括整个软件系统的结构、模块划分、模块功能和模块间的联系等。详细设计则要解
3、决如何实现各个模块的内部功能,即模块设计。具体的说,模块设计就是要为已经产生的图书管理各子系统设计详细的算法。但这并不等同于系统实现阶段用具体的语言编码,它只是对实现细节作精确的描述,这样编码阶段就可以将详细设计中对功能实现的描述,直接翻译、转化为用某种程序设计语言书写的程序。1.2 项目背景根据 XX 学校希望能够充分利用现代科技来提高图书管理的效率,在原有的办公系统基础上进行扩展,将一些可以用计算机来管理的都进行计算机化,使得图书馆管理人员工作更加方便,工作效率也更加的高。1.3 定义Mysql:数据库管理软件DBMS:数据库管理系统Windows 2000/2003/XP:运行环境JSP
4、 :软件开发语言Myeclipse :开发工具kk第 2 页 2018/10/81.4 参考资料软件工程导论第 5 版 张海藩编著 清华大学出版社实用软件工程 Leszek A.Maciaszek Bruc Lee Liong 著机械工业出版社2 总体设计2.1 需求概述按照需求分析文档中的规格要求,使用条形码扫描器进书、借书、还书,使得信息传递准确、流畅。同时,系统最大限度地实现易安装,易维护性,易操作性,运行稳定,安全可靠。kk第 3 页 2018/10/82.2 软件结构图书馆管理系统基础信息设置查询子系统管理子系统图书馆信息系统参数设置管理员设置书架设置图书词库设置新书购入学生借书学生
5、还书图书注销学生信息查询图书信息查询系统登陆系统由 3 大模块,6 小模块组成:kk第 4 页 2018/10/8序号 编号 名称1, 01 登陆模块2, 02 管理模块3, 031 图书信息查询模块4, 032 学生信息查询模块5, 021 入库管理模块6, 022 学生借书模块7, 023 学生还书模块8, 024 图书注销模块9, 040 基础信息设置kk第 5 页 2018/10/83 程序描述3.1 01 登陆模块具体格式见下表:功能编号 01 功能名称 登陆模块 内容 功能流程图所属业务 图书馆管理 所属项目 图书馆管理系统编写人 陈新光 完成时间 2007-11-26 页码 第
6、5 页3.1.1 功能流程图功能流程图如下图所示。登陆 . j s p录入项检验( 非空 )提交所填内容失败登陆数据处理 . j s p成功 是否成功执行数据库操作 管理 . j s p成功失败需要说明的问题:(1) 录入项检测使用 javascript 实现(各项必须非空)(2) 登陆.jsp 页面也包含查询按钮,在此的登陆.jsp 提交的数据只是用户名和密码。3.1.2 功能描述(1) 功能类型:查询数据(2) 功能描述:提高系统的安全性(3) 前提业务:无(4) 后继业务:02 (管理模块)(5) 功能约束:权限约束kk第 6 页 2018/10/8(6) 约束描述:(7) 操作权限:图
7、书馆管理员3.1.3 界面设计(1) 基础信息处理 动作说明:动作编号 动作名称 动作描述A01 登陆 点击登陆按钮 提交数据到登陆数据处理.jsp 页面A02 重至 点击退重至按钮 将当前信息恢复原先状态A03 图书信息查询 点击 将页面转至到图书信息查询.jsp 页面A04 学生信息查询 点击 将页面转至学生信息查询.jsp 页面A05 基础信息 点击 将显示基础信息(2) 数据要求(1) 功能类型:数据查询(2) 数据描述:页面显示录入字段如下:字段名称 长度 录入方式 是否非空项 数据检验 默认显示管理员 ID 10 文本框 Y N管理员密码 15 password Y N3.1.4
8、登陆数据处理.jsp 的内部逻辑登陆数据处理:关键点两点:1,数据库连接;2,记录登陆信息及信息处理;1, 数据库连接: kk第 7 页 2018/10/8如下:public class lib_system_Conn extends Objectpublic lib_system_Conn() private Connection conn = null;private ResultSet rs;String re = “;/设置你的数据库ipString dbip = “127.0.0.1“;/设置你的数据库用户名和密码:String use = “root“;String pass =
9、“860409“;/设置您的数据库名String dbName = “lib_system“;public java.sql.Connection getConn()tryClass.forName(“org.gjt.mm.mysql.Driver“).newInstance();String url =“jdbc:mysql:/“+dbip+“:3306/“+dbName+“?user=“+use+“conn= DriverManager.getConnection(url);catch(Exception e)e.printStackTrace();return this.conn ;/在
10、 Mysql建立lib_system数据库,之后将与数据操作相关数据与该数据库相连;2, 记录登陆信息及信息处理:当用户点击“登陆”按钮之后,数据将提交到登陆数据处理.jsp 页面。 取得帐号密码这两个从页面传入的值,然后跟数据库当中管理员表中的账号和密码比较。如果正确的话,在 JSP 的 SESSION 中存入一个标记属性,表示当前已经有管理员登陆了。处理完毕后,跳转到管理页面,如果失败,则提示登陆失败,并重新进入到登陆页面。具体的逻辑如下:3.1.5 存储分配管理员表:(admin)序号 字段名 类型 长度 精度 小数 默认 允许 主键 说明kk第 9 页 2018/10/8位数 值 空1
11、 (admin_ID)管理员IDInt 10 2 (admin_password)管理员密码Char 153 (admin_quanxian)权限Nvarchar 153.2 02 管理模块具体格式见下表功能编号 02 功能名称 管理模块 内容 功能流程图所属业务 图书馆管理 所属项目 图书馆管理系统编写人 陈新光 完成时间 2007-11-26 页码 第 8 页3.2.1 功能流程图功能流程图如下所示:管理 . j s p查询 . j s p 入库管理 . j s p 图书注销 . j s p学生还书 . j s p学生借书 . j s p需要说明的问题:在选择相应的业务时,需要在当前的页面
12、显示;并且在管理页面内,默认显示图书查询页面。kk第 10 页 2018/10/83.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 图
13、书注销 点击按钮 将页面转至图书注销.jsp 页面A05 图书查询 点击按钮 将页面转至图书查询.jsp 页面(2) 数据要求功能类型:其他kk第 11 页 2018/10/83.3 031 图书信息查询模块具体格式如下:功能编号 031 功能名称 图书信息查询模块内容 功能流程图所属业务 图书馆管理 所属项目 图书馆管理系统编写人 陈新光 完成时间 2007-11-26 页码 第 10 页3.3.1 功能流程图功能流程图如下图:图书查询 . j s p录入项检验( 非空 )提交所填内容失败图书查询数据处理 . j s p成功 是否成功执行数据库操作 查询结果 . j s p成功失败需要说明的
14、问题:录入项检测使用 javascript 来实现(各项非空) ;操作权限:面向所有用户3.3.2 功能描述(1) 功能类型:查询数据(2) 功能概述:显示查询结果(3) 前提业务:无kk第 12 页 2018/10/8(4) 后继业务:(5) 功能约束:没有约束;(6) 约束描述:(7) 操作权限:面向所有用户3.3.3 界面设计(1) 基础信息处理下表是动作说明:动作编号 动作名称 动作描述A01 确定 点击按钮 提交数据到图书查询数据处理.jsp 页面A02 学生信息查询 点击按钮 将页面转至学生信息查询.jsp 页面(2) 数据要求(1) 功能类型:数据查询(2) 数据描述:页面显示字
15、段见下表:字段名称 长度 录入方式 是否非空项 数据检验 默认显示请选择查询类型20 下拉列表 Y N请输入查询内容200 文本框 Y N(3) 图书信息查询的输出项书名图书类型作者译者ISBN出版社kk第 13 页 2018/10/8价格书架名称现存量简介书名图书类型3.3.4 模块内部逻辑S e a r c h . j s pL i b _ q u e r y . j s pC h u l i . j s p V i e w . j s p1, Search.jsp 用于显示界面的内容,给用户显示一个查询接口2, Lib_query.jsp 用来调度所有的页面,它根据传入的参数来决定包含哪
16、一个 jsp 页面来显示内容;在 lib_query.jsp 页面中,它根据传入的参数来决定包含哪一个 jsp 页面来显示内容;则可以通过”/,利用 jsp:include 标签来kk第 14 页 2018/10/8被动态加载发送到相应页面;3, chuli.jsp 用来处理数据查询和显示查询到的结果列表。在这个页面中,数据要求是以列表的形式显示到输出页面。由于查询到的结果可能过多,所以采用分页形式显示;对于分页功能的内部逻辑:4, View.jsp 用来显示查询到的图书的各项属性。3.3.5 存储分配图书目录文件(Book):序号 字段名 类型 长度 精度 小数位数 默认值 允许空 主键 说
17、明1 (BookID)图书编号 Int 10 1 自动编号2 (TXM)条形码 nvarchar 203 (Title)书名 nvarchar 2004 (TSLX)图书类型 Nvarchar 50 5 (Author)作者 Nvarchar 20 6 (Translator)译者 Nvarchar 20 7 (ISBN)ISBN Nvarchar 208 (CBS)出版社 Nvarchar 30 10 (SJMC)书架名称 Nvarchar 20 11 (XCL)现存量 Smallint 2 12 (KCZL)库存总量 Smallint 2 13 (RKSJ)入库时间 Datatime 14
18、 (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 自动kk第 15 页 2018/10/8借阅编号 编号2 (BookID)图书编号Int 10 3 (StuID)学生编号Int 10 4 (JYSJ)借阅时间Datatime 8 5 (DQSJ)到期时间Data
19、time 8 6 (XJCS)续借次数Smallint 2 7 (CZY)操作员Nvarchar 10 8 (ZT)状态 navarchar 50 3.4 032 学生信息查询模块具体格式如下:功能编号 032 功能名称 学生信息查询模块内容 功能流程图所属业务 图书馆管理 所属项目 图书馆管理系统编写人 陈新光 完成时间 2007-11-26 页码 第 12 页3.4.1 功能流程图功能流程图如下图:学生信息查询 . j s p录入项检验( 非空 )提交所填内容失败学生信息查询数据处理 . j s p成功 是否成功执行数据库操作学生信息查询结果 . j s p成功失败需要说明的问题:录入项检
20、测使用 javascript 来实现(各项非空) ;kk第 16 页 2018/10/8操作权限:面向所有用户3.4.2 功能描述(8) 功能类型:查询数据(9) 功能概述:显示查询结果(10) 前提业务:无(11) 后继业务:(12) 功能约束:没有约束;(13) 约束描述:(14) 操作权限:面向所有用户3.4.3 界面设计(4) 基础信息处理下表是动作说明:动作编号 动作名称 动作描述A01 确定 点击按钮 提交数据到图书查询数据处理.jsp 页面A02 图书信息查询 点击按钮 将页面转至图书信息查询.jsp 页面(5) 数据要求(3) 功能类型:数据查询(4) 数据描述:页面显示字段见
21、下表:字段名称 长度 录入方式 是否非空项 数据检验 默认显示请输入学号 10 文本框 Y N(6) 学生信息查询的输出项kk第 17 页 2018/10/8学生学号姓名性别生日证件号码联系电话登记日期有效期至已借书数3.4.4 模块内部逻辑S e a r c h . j s pI n d e x . j s pL i s t . j s p V i e w . j s p5, Search.jsp 用于显示界面的内容,给用户显示一个查询接口6, Index.jsp 用来调度所有的页面,它根据传入的参数来决定包含哪一个 jsp 页面来显示内容;在 index.jsp 页面中,它根据传入的参数来
22、决定包含哪一个 jsp 页面来显示内容;则可以通过”/,利用 jsp:include 标签来被动态加载发送到相应页面;7, List.jsp 用来显示查询到的结果列表。kk第 18 页 2018/10/88, View.jsp 用来显示查询到的学生的各项属性。注释:学生信息查询模块与图书查询模块属于同一类功能。实现可以完全类似。3.4.5 存储分配学生文件:序号 字段 字段名 类型 长度 精度 小数位数默认值允许空主键 说明1 XSID 学生编号 Int 10 1 自动编号2 Name 姓名 nvarchar 103 Sex 性别 nvarchar 2 4 ZJH 证件号码 nvarchar
23、25 5 LXDH 联系电话 nvarchar 40 6 DJRQ 登记日期 datetime 8 7 YXQZ 有效期至 datetime 8 8 YJSS 已借书数 smallint 2 9 RuleID 学生规则IDint 1010 ZT 是否挂失 nvarchar 2 借书文件:序号 字段名 类型 长度 精度 小数位数默认值 允许空 主键 外键 说明1 借阅编号Int 10 1 自动编号2 图书编号Int 10 3 学生编号Int 10 4 借阅时间Datatime 8 5 到期时间Datatime 8 6 续借次 Smallint 2 kk第 19 页 2018/10/8数7 操作员
24、 Nvarchar 10 8 状态 navarchar 50 3.5 021 入库管理具体格式如下:功能编号 021 功能名称 入库管理模块内容 功能流程图所属业务 图书馆管理 所属项目 图书馆管理系统编写人 陈新光 完成时间 2007-11-27 页码 第 16 页3.5.1 功能流程图入库管理 . j s p录入项检验( 非空 )提交所填内容失败入库数据处理 . j s p成功 是否成功执行数据库操作 显示结果 . j s p成功失败(1) 执行数据库操作的时候要验证权限(2) 录入项检验用 javascript 来实现(选项非空)3.5.2 功能描述(1) 功能类型:添加数据(2) 功能
25、描述:增加图书目录文件中的图书信息。(3) 前提业务:管理模块(4) 后继业务:无(5) 功能约束:权限约束kk第 20 页 2018/10/8(6) 约束描述:无(7) 操作权限:图书馆管理人员3.5.3 界面设计1, 基础信息处理动作说明如下表:动作编号 动作名称 动作描述A01 保存 点击按钮 提交数据到入库数据处理.jsp 页面A02 退出 点击按钮 将当前页面关闭2, 数据描述(1) 功能类型:数据增加。(2) 数据描述:页面录入字段见下表:字段名称 长度 录入方式 是否非空项 数据检验 默认显示书号 30 文本框 Y N条形码 20 文本框 Y N书名 200 文本框 Y N作者
26、20 文本框 Y N出版社 30 文本框 Y N版次 50 文本框 Y N图书类别 20 文本框 Y N单价 8 文本框 Y N录入时间 默认系统时间,格式:年 月 日 只需程序记录显示在入库界面kk第 21 页 2018/10/8录入人 默认系统登陆人员只需程序记录显示在入库界面3, 入库数据处理内部逻辑:图书入库采用表格进行多行添加:利用 javaBean 来编写一个 BookBean 来管理图书。在 BookBean 类中增加记录的公共接口来实现入库数据的添加。具体的类设计如下:Public int insert (Hashtable hash)int intID = makeID(“B
27、ook“,“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
28、.toString(String)hash.get(“ISBN“),“CHAR“);。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。/还有其他选项,同上格式。return insertRecord(vect);该方法有一个参数,是 java.util.Hashtable 类,在调用该方法前,先用和 hashtable 的 put 方法将字段名和该条记录的值存入 hashtable 中,然后将这个 hashtable 作为参数传入 insert 方法中。在 insert 方法的最后,调用 ParentBean 中的 insertRecord 方法,insertRec
29、ord 可以根据传入的参数自动的生成增加记录的kk第 22 页 2018/10/8SQL 语句并通过 JDBC 发送到数据库。正对 ParentBean 类:主要是实现对数据库的各种操作:如与数据库的连接,对数据库的操作。3.5.4 存储分配图书目录文件:序号 字段名 类型 长度 精度 小数位数 默认值 允许空 主键 说明1 图书编号 Int 10 1 自动编号2 条形码 nvarchar 203 书名 nvarchar 2004 图书类型 Nvarchar 50 5 作者 Nvarchar 20 6 译者 Nvarchar 20 7 ISBN Nvarchar 208 出版社 Nvarcha
30、r 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 作者 Nvarch
31、ar 20 5 出版社 Nvarchar 30 kk第 23 页 2018/10/86 版次 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 功能名称 学生借书模块内容 功能流程图所属业务 图书馆管理 所属项目 图书馆管理系统编写人 陈新光 完成时间
32、2007-11-27 页码 第 21 页3.6.1 功能流程图借书 . j s p录入项检验( 非空 )提交所填内容失败检查学生欠款信息成功 欠款是否超额执行数据库操作 处理借书数据 . j s p未超额超额是否成功失败显示学生借书信息 . j s pkk第 24 页 2018/10/8需要说明的问题:(1) 在进行借书,修改数据信息时,应先查询学生的欠款信息,如欠款超额,则利用 javascript 实现信息提示,拒绝借书,如无超额,则接受借书。(2) 为便于以后的恢复操作,此修改操作只在表中做一个标志,并不是真正的对其修改;3.6.2 功能描述(1) 功能类型:修改数据和查询数据(2) 功
33、能描述:更新学生借书文件,图书目录文件等中的信息;(3) 前提业务:管理模块(4) 后继业务:无(5) 功能约束:权限约束(6) 约束描述:(7) 操作权限:图书馆管理人员3.6.3 界面设计1, 基础信息处理动作说明如下:动作编号 动作名称 动作描述A01 重置 点击按钮 将文本框内的所有数据清空A02 提交 点击按钮 将数据提交到处理学生超额信息页面A03 取消 将当前页面关闭,并取消借阅kk第 25 页 2018/10/82, 数据描述(1) 功能类型:修改数据和查询数据(2) 界面设计:(3) 数据字段描述:字段名称 长度 录入方式 是否非空项 数据检验 默认显示学生证件号码10 文本
34、框 Y N书籍条形码号10 文本框 Y N3, 图书借阅数据处理内部逻辑If(strEdit.equals(“1”)If(学生超额|学生不存在)ifSuccess=false;elseIf(!bb.IsValid(hash)/新增操作Int intdel=bb.addBorrow(hash);If(intdel=null)ifSuccess=false;elsekk第 26 页 2018/10/8For(int i=0;ialert(“”);alert(“借阅失败! ”);alert(“借阅成功! ”);%执行的过程如下:首先要验证学生信息是否存在和学生的欠款是否超额,也就是说学生是否可以借书
35、,图书是否在馆等,在 确定合法之后调用 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);kk第 27 页 2018/10/8String strZJH = ds.toStrin
36、g(String)hash.get(“ZJH“);/证件号String strTXM = ds.toString(String)hash.get(“TXM“);/条形码String strJYSJ = ds.toString(String)hash.get(“JYSJ“);/借阅时间String strXSID = “;/学生 IDString strBOOKID = “;/图书 IDString strDQSJ = “;/到期时间String strXJCS = “;/续借次数/根据学生证件号取的学生 ID/根据学生 ID 取得规则 ID,然后取得可以借阅天数,sql=“select Stu
37、dent.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“);/根据条形码取得图书 IDsql=“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) “