1、软件详细设计说明书实例软件详细设计说明书实例20212021年年1010月月目录目录1引言引言.21.1编写目的.21.2项目背景.21.3定义.21.4参考资料.22总体设计总体设计.22.1需求概述.22.2软件结构.23程序描述程序描述.23.101登陆模块.23.202管理模块.23.3031图书信息查询模块.23.4032学生信息查询模块.23.5021入库管理模块.23.6022学生借书模块.23.7023学生还书模块.23.8024图书注销模块.23.9接口设计.23.10测试要点.2文档名称:详细设计规格说明书项目名称:图
2、书馆管理系统项目负责人:陈新光编写TEST_年_月_日校对所有小组成员_年_月_日审核所有小组成员_年_月_日批准XXX_年_月_日开发单位_组员:TEST1TEST2TEST31引言1.1编写目的图书管理系统详细设计是设计的第二个阶段,这个阶段的主要任务是在图书管理系统概要设计书基础上,对概要设计中产生的功能模块进行过程描述,设计功能模块的内部细节,包括算法和详细数据结构,为编写源代码提供必要的说明。概要设计解决了软件系统总体结构设计的问题,包括整个软件系统的结构、模块划分、模块功能和模块间的联系等。详细设计则要解决如何实现各个模块的内部功能,即模块设计。具
3、体的说,模块设计就是要为已经产生的图书管理各子系统设计详细的算法。但这并不等同于系统实现阶段用具体的语言编码,它只是对实现细节作精确的描述,这样编码阶段就可以将详细设计中对功能实现的描述,直接翻译、转化为用某种程序设计语言书写的程序。1.2项目背景根据XX学校希望能够充分利用现代科技来提高图书管理的效率,在原有的办公系统基础上进行扩展,将一些可以用计算机来管理的都进行计算机化,使得图书馆管理人员工作更加方便,工作效率也更加的高。1.3定义Mysql:数据库管理软件DBMS:数据库管理系统Windows2000/2003/XP:运行环境JSP:软件开发语言Myeclipse:开发工
4、具1.4参考资料软件工程导论第5版张海藩编著清华大学出版社实用软件工程LeszekA.MaciaszekBrucLeeLiong著机械工业出版社2总体设计2.1需求概述按照需求分析文档中的规格要求,使用条形码扫描器进书、借书、还书,使得信息传递准确、流畅。同时,系统最大限度地实现易安装,易维护性,易操作性,运行稳定,安全可靠。2.2软件结构图书馆管理系统基础信息设置查询子系统管理子系统图书馆信息系统参数设置管理员设置书架设置图书词库设置新书购入学生借书学生还书图书注销学生信息查询图书信息查询系统登陆系统由系统由3大模块,大模块,6小模块组成:小模块组成:序号序号
6、功失败需要说明的问题:(1)录入项检测使用javascript实现(各项必须非空)(2)登陆.jsp页面也包含查询按钮,在此的登陆.jsp提交的数据只是用户名和密码。3.1.2功能描述(1)功能类型:查询数据(2)功能描述:提高系统的安全性(3)前提业务:无(4)后继业务:02(管理模块)(5)功能约束:权限约束(6)约束描述:(7)操作权限:图书馆管理员3.1.3界面设计(1)基础信息处理动作说明:动作编号动作编号动作名称动作名称动作描述动作描述A01登陆点击登陆按钮提交数据到登陆数据处理.jsp页面A02重至点击退重至按钮将当前信息恢复原先状态A0
7、3图书信息查询点击将页面转至到图书信息查询.jsp页面A04学生信息查询点击将页面转至学生信息查询.jsp页面A05基础信息点击将显示基础信息(2)数据要求(1)功能类型:数据查询(2)数据描述:页面显示录入字段如下:字段名称字段名称长度长度录入方式录入方式是否非空项是否非空项数据检验数据检验默认显示默认显示管理员管理员ID10文本框YN管理员密码管理员密码15passwordYN3.1.4登陆数据处理.jsp的内部逻辑登陆数据处理:关键点两点:1,数据库连接;2,记录登陆信息及信息处理;1,数据库连接:如下:publicclasslib_system_Conn
8、extendsObjectpubliclib_system_Conn()privateConnectionconn=null;privateResultSetrs;Stringre=;/设置你的数据库ipStringdbip=127.0.0.1;/设置你的数据库用户名和密码:Stringuse=root;Stringpass=860409;/设置您的数据库名StringdbName=lib_system;publicjava.sql.ConnectiongetConn()tryClass.forName(org.gjt
10、理:当用户点击“登陆”按钮之后,数据将提交到登陆数据处理.jsp页面。取得帐号密码这两个从页面传入的值,然后跟数据库当中管理员表中的账号和密码比较。如果正确的话,在JSP的SESSION中存入一个标记属性,表示当前已经有管理员登陆了。处理完毕后,跳转到管理页面,如果失败,则提示登陆失败,并重新进入到登陆页面。具体的逻辑如下:3.1.5存储分配管理员表:(admin)序号序号字段名字段名类型类型长度长度精度精度小数小数默认默认允许允许主键主键说明说明位数位数值值空空11(admin_ID)管理员IDInt1022(admin_password)管理员密码Char1533(ad
12、:登陆模块(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.3031图书信息查询模块具体格式
14、能约束:没有约束;(6)约束描述:(7)操作权限:面向所有用户3.3.3界面设计(1)基础信息处理下表是动作说明:动作编号动作编号动作名称动作名称动作描述动作描述A01确定点击按钮提交数据到图书查询数据处理.jsp页面A02学生信息查询点击按钮将页面转至学生信息查询.jsp页面(2)数据要求(1)功能类型:数据查询(2)数据描述:页面显示字段见下表:字段名称字段名称长度长度录入方式录入方式是否非空项是否非空项数据检验数据检验默认显示默认显示请选择查询请选择查询类型类型20下拉列表YN请输入查询请输入查询内容内容200文本框YN(3)图书信息查询的输出项书名图书类型作者译
15、者ISBN出版社价格书架名称现存量简介书名图书类型3.3.4模块内部逻辑Search.jspLib_query.jspChuli.jspView.jsp1,Search.jsp用于显示界面的内容,给用户显示一个查询接口2,Lib_query.jsp用来调度所有的页面,它根据传入的参数来决定包含哪一个jsp页面来显示内容;在lib_query.jsp页面中,它根据传入的参数来决定包含哪一个jsp页面来显示内容;则可以通过jsp:includepage=”/,利用jsp:include标签来被动态加载发送到相应页面;3,chuli.jsp用来处理数据查询和显示查询到
16、的结果列表。在这个页面中,数据要求是以列表的形式显示到输出页面。由于查询到的结果可能过多,所以采用分页形式显示;对于分页功能的内部逻辑:4,View.jsp用来显示查询到的图书的各项属性。3.3.5存储分配图书目录文件(Book):序号序号字段名字段名类型类型长度长度精度精度小数位数小数位数默认值默认值允许空允许空主键主键说明说明1(BookID)图书编号Int101自动编号2(TXM)条形码nvarchar203(Title)书名nvarchar2004(TSLX)图书类型Nvarchar505(Author)作者Nvarchar206(Translator)译者Nvarchar20
19、生信息查询.jsp录入项检验(非空)提交所填内容失败学生信息查询数据处理.jsp成功是否成功执行数据库操作学生信息查询结果.jsp成功失败需要说明的问题:录入项检测使用javascript来实现(各项非空);操作权限:面向所有用户3.4.2功能描述(8)功能类型:查询数据(9)功能概述:显示查询结果(10)前提业务:无(11)后继业务:(12)功能约束:没有约束;(13)约束描述:(14)操作权限:面向所有用户3.4.3界面设计(4)基础信息处理下表是动作说明:动作编号动作编号动作名称动作名称动作描述动作描述A01确定点击按钮提交数据到图书查询数据处理.jsp页面
21、jsp页面来显示内容;在index.jsp页面中,它根据传入的参数来决定包含哪一个jsp页面来显示内容;则可以通过jsp:includepage=”/,利用jsp:include标签来被动态加载发送到相应页面;7,List.jsp用来显示查询到的结果列表。8,View.jsp用来显示查询到的学生的各项属性。注释:学生信息查询模块与图书查询模块属于同一类功能。实现可以完全类似。3.4.5存储分配学生文件:序号序号字段字段字段名字段名类型类型长度长度精度精度小数小数位数位数默认默认值值允许允许空空主键主键说明说明11XSID学生编号Int101自动编号22Name姓
24、能描述:增加图书目录文件中的图书信息。(3)前提业务:管理模块(4)后继业务:无(5)功能约束:权限约束(6)约束描述:无(7)操作权限:图书馆管理人员3.5.3界面设计1,基础信息处理动作说明如下表:动作编号动作编号动作名称动作名称动作描述动作描述A01保存点击按钮提交数据到入库数据处理.jsp页面A02退出点击按钮将当前页面关闭2,数据描述(1)功能类型:数据增加。(2)数据描述:页面录入字段见下表:字段名称字段名称长度长度录入方式录入方式是否非空项是否非空项数据检验数据检验默认显示默认显示书号书号30文本框YN条形码条形码20文本框YN书名书名200文本框YN作
26、ectorvect=newVector();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);。。。。
27、。。。。。。。。。。。。。。。。/还有其他选项,同上格式。returninsertRecord(vect);该方法有一个参数,是java.util.Hashtable类,在调用该方法前,先用和hashtable的put方法将字段名和该条记录的值存入hashtable中,然后将这个hashtable作为参数传入insert方法中。在insert方法的最后,调用ParentBean中的insertRecord方法,insertRecord可以根据传入的参数自动的生成增加记录的SQL语句并通过JDBC发送到数据库。正对
29、员Nvarchar1015简介Nvarchar20016借出次数Smallint217是否注销Nvarchar218图书状态nvarchar50入库表:序号序号字段名字段名类型类型长度长度精度精度小数位小数位数数默认值默认值允许空允许空主键主键外键外键说明说明1书号Nvarchar301自动编号2条形码Nvarchar203书名Nvarchar2004作者Nvarchar205出版社Nvarchar306版次Nvarchar507图书类别Nvarchar208存放位置Nvarchar209单价Money810入库数量Smallint211金额Money812经手人Nvarchar1013票号N
31、vascript实现信息提示,拒绝借书,如无超额,则接受借书。(2)为便于以后的恢复操作,此修改操作只在表中做一个标志,并不是真正的对其修改;3.6.2功能描述(1)功能类型:修改数据和查询数据(2)功能描述:更新学生借书文件,图书目录文件等中的信息;(3)前提业务:管理模块(4)后继业务:无(5)功能约束:权限约束(6)约束描述:(7)操作权限:图书馆管理人员3.6.3界面设计1,基础信息处理动作说明如下:动作编号动作编号动作名称动作名称动作描述动作描述A01重置点击按钮将文本框内的所有数据清空A02提交点击按钮将数据提交到处理学生超额信息页面A03取消将当前页面关
32、闭,并取消借阅2,数据描述(1)功能类型:修改数据和查询数据(2)界面设计:(3)数据字段描述:字段名称字段名称长度长度录入方式录入方式是否非空项是否非空项数据检验数据检验默认显示默认显示学生证件号学生证件号码码10文本框YN书籍条形码书籍条形码号号10文本框YN3,图书借阅数据处理内部逻辑If(strEdit.equals(“1”)If(学生超额|学生不存在)ifSuccess=false;elseIf(!bb.IsValid(hash)/新增操作Intintdel=bb.addBorrow(hash);If(intdel=null)ifSuccess=false;elseFor(i
33、nti=0;ialert(“”);alert(“借阅失败!”);alert(“借阅成功!”);%执行的过程如下:首先要验证学生信息是否存在和学生的欠款是否超额,也就是说学生是否可以借书,图书是否在馆等,在确定合法之后调用bb.addBorrow(hash)来完成借阅流程。流程其实就是对几个表进行增改的操作。关于addBorrow(hash)的算法:publicintaddBorrow(Hashtablehash)System.out.println(批量处理新增借阅。。。。。。);Stringsql=;intintID=makeID(JYWJB,JYID,tru
35、生证件号取的学生ID/根据学生ID取得规则ID,然后取得可以借阅天数,sql=selectStudent.RuleID,Student.XSID,Rule.KJYSJ+fromStudengt,RULE+whereStudent.ZJH=+strZJH+andStudent.RuleID=Rule.RuleID;HashtablehashReId=(Hashtable)searchOneData(sql);strXSID=ds.toString(String)hashReId.get(XSID);StringstrKJYSJ=ds.toString(String
36、)hashReId.get(KJYSJ);/根据条形码取得图书IDsql=selectBOOKIDfromBookwhereTXM=+strTXM+;HashtablehashBKID=(Hashtable)searchOneData(sql);strBOOKID=ds.toString(String)hashBKID.get(BOOKID);/新增操作createStatement();clearBatch();sql=insertintoJSWJB(JYID,XSID,BOOKID,JYSJ,DQSJ,ZT,XJCS)+values(+strID+,+strX
37、SID+,+strBOOKID+,+strJYSJ+,to_char(to_date(+strJYSJ+,yyyy-MM-dd)+strKJYSJ+),yyyy-MM-dd)+,+strZero+,+strZero+);addBatch(sql);sql=updateBooksetZT=借出whereBOOKID=+strBOOKID;addBatch(sql);sql=updateStudentsetYJSS=YJSS+1whereXSID=+strXSID;addBatch(sql);intresult=executeBatch();closeStm();return
38、result;而对于取消按钮事件,由于要实现取消借阅,所以需要调用delBorrow(Stringid)来取消借阅操作;算法如下:publicintdelBorrow(Stringid)System.out.println(批量处理取消借阅。。。。。);Stringsql=;sql=selectBOOKIDfromJSWJBwhereJYID=+id;Hashtablehash=(Hashtable)searchOneData(sql);StringstrBOOKID=(String)hash.get(BOOKID);createStatement();cle
42、入项检测(非空)提交数据处理.jsp成功失败是否成功执行数据库操作显示结果成功失败需要说明的问题:(1)显示结果可直接在处理结果.jsp中利用javascript来实现显示功能!(2)处理要包含:对图书状态和借书文件表中信息的修改以及学生的欠款金额的计算,并更新Publish表。3.7.2功能描述(1)功能类型:修改数据(2)功能概述:完成学生的还书业务并计算学生的欠款信息(3)前提业务:管理模块(4)后继业务:无(5)功能约束:权限约束(6)约束描述:(7)操作权限:图书馆管理人员3.7.3界面设计(1)基础信息处理动作编号动作编号动作名称动作名称动作描述
43、动作描述A01重置点击按钮将文本框内的所有数据清空A02提交点击按钮将数据提交到处理还书信息页面(2)界面描述:(3)数据描述字段名称字段名称长度长度录入方式录入方式是否非空项是否非空项数据检验数据检验默认显示默认显示书籍条形码书籍条形码号号10文本框YN对于还书业务的处理,实质上与借书业务的实现基本上相同,只是调用了backBorrow(hash)来实现还书功能;If(strEdit.equals(“1”)Intintdel=bb.BackBorrow(hash);If(intdel=null)ifSuccess=false;elseFor(inti=0;ialert(“归还操
44、作失败!”);alert(“归还操作成功!”);%针对backBorrow(hash)算法如下:publicintbackBorrow(StringTXM)System.out.println(批量处理还书。。。。。);Stringsql=;StringstrBOOKID=ds.toString(String)toName(BOOK,TXM,BOOKID,TXM);StringstrNow=ds.getDateTime();strNow=strNow.substring(0,10);createStatement();clearBatch();sql=update
45、JSWJBsetZT=+strOne+,DQSJ=+strNow+whereBOOKID=+strBOOKID+andZT=+strZero+;System.out.println(sql1:+sql);addBatch(sql);sql=updateBOOKsetZT=可借whereBOOKID=+strBOOKID;System.out.println(sql2:+sql);addBatch(sql);intresult=executeBatch();closeStm();returnresult;3.7.4存储分配借书文件:序号序号字段名字段名类型类型长度长
47、6DJRQ登记日期datetime877YXQZ有效期至datetime888YJSS已借书数smallint299RuleID学生规则IDint101010ZT是否挂失nvarchar2图书目录文件:序号序号字段名字段名类型类型长度长度精度精度小数位数小数位数默认值默认值允许空允许空主键主键说明说明1图书编号Int101自动编号2条形码nvarchar203书名nvarchar2004图书类型Nvarchar505作者Nvarchar206译者Nvarchar207ISBNNvarchar208出版社Nvarchar309价格Money810书架名称Nvarchar2011现存量Sm
50、(5)约束描述:(6)操作权限:图书馆管理人员3.8.3界面设计(1)基础信息处理动作说明如下:动作编号动作编号动作名称动作名称动作描述动作描述A01重置点击按钮将文本框内的所有数据清空A02提交点击按钮将数据提交到处理还书信息页面(2)界面描述:(3)数据描述:字段名称字段名称长度长度录入方式录入方式是否非空项是否非空项数据检验数据检验默认显示默认显示书籍条形码书籍条形码号号10文本框YN(4)对于图书注销业务的处理3.8.4存储分配图书目录文件:8出版社Nvarchar309价格Money810书架名称Nvarchar2011现存量Smallint212库存总量Smal
52、HashtablesearchOneData(Stringsql)Hashtablehash=newHashtable();ResultSetrs=selectRecord(sql);Statementstmt=null;try/取得列数和列名ResultSetMetaDatarsmd=rs.getMetaData();intcols=rsmd.getColumnCount();if(rs.next()for(inti=1;i=cols;i+)Stringfield=ds.toString(rsmd.getColumnName(i);String
54、出错+e);returnhash;(2)增加记录的公共接口该方法有一个参数,是java.util.Hashtable类,在调用该方法前,先用和hashtable的put方法将字段名和该条记录的值存入hashtable中,然后将这个hashtable作为参数传入insert方法中。在insert方法的最后,调用ParentBean中的insertRecord方法,insertRecord可以根据传入的参数自动的生成增加记录的SQL语句并通过JDBC发送到数据库Publicintinsert(Hashtablehash)IntintID=mak
55、eID(“Book”,”BookID”,”,true);Vectorvect=newVector();Vect.add(“.”);ReturninsertRecord(vect);(3)删除记录的公共接口该方法有一个参数id,该参数表示的是book表中的ID字段,ID字段是这个表的主键,用这个主键可以检索到表中的一条唯一的记录,通过这个主键,delete方法可以生成一条SQL语句,删除这一条记录。publicintdelete(Stringid)Stringsql=;sql=deletefromBookwhereBookID=+id;returnde
56、leteRecord(sql);(4)查询记录的公共接口PublicVectorgetData(Stringsqlwhere,intpage)Stringsql=”;Sql=”select*fromBook”;If(!sqlwhere.equals(“”)Sql+=sqlwhere;ReturngetOnePage(sql,page,20);(5)修改记录的接口publicintupdate(Hashtablehash)Vectorvect=newVector();vect.add(Book);vect.add(addVector(Title,ds.to
57、String(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);returnupdateRecord(vect);3.11测试要点3.11.1测试范围测试范围测试范围主要内容主要内容简要说明简要说明系统登陆验证系统登陆验证验证用户身份,进行权限控制功能性测试信息检索功能测试信息检索功能测试测试数据库检索代码的健壮性功能性测试3.11.2测试方法功能性测试:黑盒测试