绪论 ............................................. 4 第1章 可行性分析 ................................ 1
§1.1 项目的要求、目标和环境 .......................... 1
§1.1.1 项目的要求.................................................................................... 1
§1.1.2 项目的目的.................................................................................... 1 §1.1.3 项目的环境.................................................................................... 1
§1.2 可行性分析 ...................................... 2
§1.2.1 社会可行性分析............................................................................ 2
§1.2.2 技术可行性分析............................................................................ 2 §1.2.3 经济可行性分析............................................................................ 3
第2章 需求分析 .................................. 4
§2.1引言 ............................................ 4
§2.1.1 编写的目的.................................................................................... 4
§2.1.2 背景................................................................................................ 4
§2.2任务概述 ........................................ 4
§2.2.1目标................................................................................................. 4
§2.3.需求规定 ....................................... 5
§2.3.1对功能的规定................................................................................. 5
§2.3.2 对性能的规定................................................................................ 5 §2.3.3输入输出要求................................................................................. 6 §2.3.4数据管理能力要求(针对软件系统)......................................... 7 §2.3.5故障处理要求................................................................................. 7
§2.4.运行环境规定 ................................... 8
§2.4.1设备................................................................................................. 8
§2.4.2支持软件......................................................................................... 8 §2.4.3控制................................................................................................. 8
第3章 项目开发计划 .............................. 9
§3.1 引言 ............................................ 9
§3.1.1编写目的......................................................................................... 9
§3.1.2 背景................................................................................................ 9
§3.1.3定义................................................................................................. 9 §3.1.4参考资料....................................................................................... 10
§3.2项目概述 ....................................... 10
§3.2.1工作内容....................................................................................... 10
§3.2.2产品............................................................................................... 10 1. 程序......................................................................................................... 10 2. 文件......................................................................................................... 10 3. 服务......................................................................................................... 11 §3.2.3验收标准....................................................................................... 11 §3.2.4完成项目的最迟期限................................................................... 11 §3.2.5本计划的批准者和批准日期....................................................... 11
§3.3实施计划 ....................................... 11
§3.3.1工作任务的分解与人员分工....................................................... 11
§3.3.2预算............................................................................................... 12 §3.3.3关键问题....................................................................................... 12
§3.4支持条件 ....................................... 14
§3.4.1计算机系统支持........................................................................... 14
§3.4.2需由用户承担的工作................................................................... 15 §3.4.3由外单位提供的条件................................................................... 15
第4章 项目设计 ................................. 15
§4.1面向对象分析(OOA) ............................ 15
§4.1.1 用例描述及用例图...................................................................... 15
§4.1.2 活动图.......................................................................................... 19 §4.1.3顺序图........................................................................................... 21
§4.2面向对象设计(OOD) .............................. 23
§4.2.1 系统框架图(三层架构).......................................................... 23
§4.2.2 页面导航图.................................................................................... 1
第5章 测试 ...................................... 1
§5.1、引言: ......................................... 1
§5.1.1 编写目的........................................................................................ 1
§5.1.2背景................................................................................................. 1 §5.1.3定义................................................................................................. 1
§5.2. 测试计划 ....................................... 2
§5.2.1系统说明....................................................................................... 2
§5.2.2 测试策略........................................................................................ 2
§5.2.3 测试方案........................................................................................ 4
§5.3、测试过程 ....................................... 4
§5.3.1黑盒测试......................................................................................... 4
1)测试项目名称及测试内容...................................................................... 5 2)测试用例.................................................................................................. 5
§5.4 测试结果 ........................................ 7
§5.4.1能力................................................................................................. 7
§5.4.2缺陷和限制..................................................................................... 8 §5.4.3建议................................................................................................. 8 §5.4.4评价................................................................................................. 8
§5.5测试资源消耗 .................................... 8
第6章 项目管理 .................................. 1
§6.1 绘制关键日期表 .................................. 1 §6.2 预览甘特图 ...................................... 2 §6.3 预览网络图 ...................................... 2
总结 ............................................. 1 参考文献 ......................................... 1
绪论
随着现代科学技术的进步,人类社会正逐渐走向信息化,图书馆拥有丰富的文献信息资源,是社会系统的重要组成部分,在信息社会中作用愈来愈重要,我国图书馆计算机等信息技术的应用起步于20世纪70年代末期,随着改革开放的步伐得迅速发展,特别是90年代以后,我国图书馆信息网络建设取得了较大发展图书馆信息化建设迈向了一个新台阶。
大三上学期我们的软件工程课程设计要求应用软件工程的方法对我们的项目进行详细的需求分析、概要设计、详细设计以及进行必要的测试,旨在让程序能够实现读者管理功能、采编管理功能、流通管理功能、统计管理功能和查询管理功能。在此基础上让程序能够实现图书管理的自动化,帮助广大师生更好的管理和使用图书,提高图书在信息时代的作用。为使图书管理工作科学化、规范化,就必须采用计算机辅助管理,从而减少人力的投入,由系统对入库图书进行自动分类、归类,学生信息整理、借阅情况登记入档,提高信息处理的精度和准确度。
运用所学习的软件工程的知识,实现图书馆的管理系统,需要小组的共同协助,大家一起的努力。
第1章 可行性分析
§1.1 项目的要求、目标和环境
小组实施软件工程项目,最终希望得到项目的成功。达到以下几个主要的目标:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发工作,及时交付使用。这是我这个项目的最终的目的。
§1.1.1 项目的要求
最终要设计的系统应该能够实现以下要求:读者管理功能、采编管理功能、流通管理功能、统计管理功能和查询管理功能这也是最主要的几个大模块。
§1.1.2 项目的目的
本设计目的在于实现图书管理管理系统,能够帮助广大师生更好的管理图书,减少人工的繁琐工作。
§1.1.3 项目的环境
运行环境:装有Windows XP、Windows 7 操作系统的微型计算机
开发软件:Microsoft Word、Power Designer 15、Microsoft Visio、MyEclipse等
§1.2 可行性分析
从我们学过的知识中我们可以知道只要资源和时间不加以限制,所有项目都是可行的,然而,由于资源缺乏和交付时间限制的困扰,使得基于计算机系统的开发变得比较困难,因此,尽早对软件Software项目的可行性做出细致而谨慎的评估是十分必要的,如果在定义阶段及早发现将来可能在开发过程中遇到的问题,及早做出决定,可以避免大量的人力、财力、时间上的浪费,可行性和风险分析是密切相关的,如果项目的风险很大,就会降低产生高质量软件Software的可行性。
下面分别从管理可行性、技术可行性以及经济可行性三方面进行可行性分析。
§1.2.1 社会可行性分析
我们的系统是通过对目前学校的具体情况进行考察分析后我们开始设计的,能够对目前大多数图书馆的许多基本情况进行管理,使得管理员能够方便管理图书,借阅者能够方便借阅图书。
所以做一个图书管理系统是可行的,是有可行性的。 §1.2.2 技术可行性分析
对待开发系统进行功能、性能和限制条件分析,确定在现有资源条件下技术风险有多大,系统是否能实现。
这里资源包括已有或可以搞到硬件、软件Software资源、现有技术人员技术水平和已有工作基础。
我们的系统目前针对大多数图书管理系统,使用者是针对图书馆的管理员的。因而在实施过程中需求及难度都不会太大,我们可以很容易的做到。
§1.2.3 经济可行性分析
我们已经知道经济可行性分析是进行开发成本的估算及对可能
取得效益的评估,确定待开发系统是否值得投资开发。本系统的实施主要考虑到设备费用,软件开发费用,人工费用,系统投入运行后的经常费用等。
其中,设备费用是指实现整个图书管理所需的硬件设备费用,主要包括了主机费用及网络费用。由于本系统对主机及网络的要求不高,因而费用将不会需要太多。
软件开发费用是指开发图书管理系统过程中所耗费的费用。主要包括软件需求分析调研过程中,系统分析设计中,后期系统运行测试过程中等耗费。
本系统主要是针对图书管理过程中的图书和读者的管理,内容及规模都不大。耗费也随之减少。人工费用主要是指管理人员培训费用。整个系统牵涉到的业务流程中的角色都需要经过新的培训,但系统操作可视化,主要管理流程简单易懂,对图书管理员来说容易上手
所以说我们可以看出来,实际实现中,经济开支不会很大,经济是可行的。
第2章 需求分析
§2.1引言
§2.1.1 编写的目的
需求的编写是为了研究图书管理系统软件的开发途径和应用方
法。同时它也是进行项目策划、概要设计和详细设计的基础,是维护人员进行内部维护,信息更新,验收和测试的依据。本需求的预期读者是与图书管理系统软件开发有联系的决策人,开发组成人员,扶助开发者,支持本项目的领导和公司人员,软件验证者。
§2.1.2 背景
a. 图书管理系统 b. 开发者: 彭佑猛
c. 用户:学校及企业单位的图书馆 §2.2任务概述
§2.2.1目标
建立的图书管理系统,要把图书馆的图书管理、读者管理、图书借阅管理等日常管理工作实行计算机统一管理,以提高工作效率和管理水平。 2.2用户的特点
本软件适用于教育界,对图书馆的书籍,读者资料,借还书等可以进行方便的管理。 技术约束:
本项目的设计是在JavaWeb程序设计语言的条件下进行的,技术设计采用软硬一体化的设计方法。 §2.3.需求规定
§2.3.1对功能的规定
用列表的方式,逐项定量和定性地叙述对系统所提出的功能要求,
说明输入什么量、经怎么样的处理、得到什么输出,说明系统的容量,包括系统应支持的终端数和应支持的并行操作的用户数等指标。
§2.3.2 对性能的规定
1. 精度
在精度需求上,根据使用需要,在各项数据的输入,输出及传输过程中,可以满足各种精度的需求。如:根据关键字精度的不同,查找可分为精确查找和泛型查找,精确查找可精确匹配读者已知道的书目,泛型查找,只要满足与输入的关键字相匹配的书目即输出,可供读者查找。
2. 时间特性要求
在软件方面,响应时间,更新处理时间都比较快且迅速,完全满足用户要求。
3. 灵活性
当用户需求,如操作方式,运行环境,结果精度,数据结构于其他软件接口等发生变化时,设计的软件要做适当调整,灵活性非常大。
§2.3.3输入输出要求
查询书目:输入关键字为书名,作者,索引号,按照精确匹配为主,
再索引关联字。输出时列出索引到的所有书目信息,具体信息包括内容摘要、目录号、作者信息、书名、价格、流水号、购买日期等。方便读者查找。
借阅图书:通过设备识别图书和读者(借阅证)的流水号(条形码),
向数据库传送信息,然后在数据库索引图书信息和读者信息是否符合要求,符合要求待图书管理员确认后再更新相关数据,并将这些数据存入借书文件,最后输出显示存储成功;否则报错。
查看读者的借阅信息:进入读者借书信息管理系统,只需要输入读者个人信息即可,然后系统根据输入的信息,送图书馆管理系统索引查找相关信息,最后将读者借书的信息输出显示。
§2.3.4数据管理能力要求(针对软件系统)
定时整理数据:系统管理员根据市场图书行情定时整理系统数据
库,对图书的借阅情况、读者的管理情况、书库的增减等均可有计算机执行,并将运行结果归档。
查询库存量:能随时查询书库中图书的库存量,以便准确、及时、方便地为读者提供借阅信息,但不能修改数据,无信息处理权,即可以打印清单、浏览数据等,管理权限由系统管理员掌握和分配。
§2.3.5故障处理要求
a. 内部故障处理
在开发阶段可以随即修改数据库里的相应内容。 b. 外部故障处理
对编辑的程序进行重装载时,第一次装载认为错,修改。第二次运行,在需求调用时出错,有错误提示,重试。
c. 本软件可能产生的错误为数据库的错误信息,应由数据库管理员对数据库进行维护。为了确保系统恢复的能力,数据库管理员要定期对数据库进行备份。
§2.4.运行环境规定
§2.4.1设备
硬件、外部设备
运行本软件所要求的硬设备的最小配置: a. 奔腾4代、内存256M; b. I/O设备:显示器、鼠标、键盘;
§2.4.2支持软件
a.操作系统:Windows/98及以上版本 b.支撑框架:JavaWeb
c.数据库:Microsoft SQL Server。
§2.4.3控制
本软件是以中文版Windows XP及其以上版本的操作系统来控制软件运行。
第3章 项目开发计划
§3.1 引言
小组实施软件工程项目,最终希望得到项目的成功。达到以下几个主要的目标:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发工作,及时交付使用。这是我们这个项目的最终的目的。
§3.1.1编写目的
次项目开发计划的编写主要是为了给开发《图书管理系统》做主要的规划和整合,在开发过程中起到引导作用,并能给验收者和使用者提供简要的说明。
§3.1.2 背景
说明:
a. 实习内容:图书管理系统 b. 项目开发组成人员:彭佑猛 c. 用户:学校及企业单位的图书馆
§3.1.3定义
专业术语:
Microsoft SQL Server Jsp
§3.1.4参考资料
a. 《软件工程》 主编:张海潘、倪宁
3.2项目概述
§3.2.1工作内容
在一周内要为图书馆建立一个图书管理系统,完成文档的编写,
软件的开发,数据库建立,测试及试运行,并且完成图书借阅内的计算机网络建设,使图书馆系统能正常运行。该系统能为用户提供图书分类管理,图书管理,读者管理,借阅管理,信息查询。
§3.2.2产品 程序
JSP程序包和SQL Server数据库
文件
·项目开发计划 ·需求规格说明书 ·概要设计说明书 ·详细设计说明书 ·测试计划书 ·主要代码清单
服务
培训安装、维护和运行,支持从使用系统开始,维护期限为1年
§3.2.3验收标准
各个功能均能正常运行使用。
§3.2.4完成项目的最迟期限
完成项目最迟期限:2014/2/28
§3.2.5本计划的批准者和批准日期
批准者:张长伦
批准时间:2014/2/23 §3.3实施计划
§3.3.1工作任务的分解与人员分工
(1)需求分析 任务:a.需求规约 彭佑猛
b.项目开发计划书 彭佑猛 (2)设计 任务: a .文档编写 彭佑猛 b.各模型映射 彭佑猛 c.测试规约 彭佑猛 (3)实现 任务:a.数据库建立 彭佑猛 b.程序编码 彭佑猛 c.测试 彭佑猛
§3.3.2预算
参与编写人员:1个人 预期完成需时:5天
§3.3.3关键问题
1. 关键技术
1.JSP与数据库的连接; 2.三成架构的建立; 3.数据库的建立。
2. 风险 (1)需求变更风险
需求变更是软件项目经常发生的事情。一个看似很有“钱途”的软件项目,往往由于无限度的需求变更而让项目承建方苦不堪言,甚至最终亏损(实际上项目建设方也面临巨大的风险)。
(2)沟通不良风险
项目组与项目各干系方沟通不良是影响项目顺利进展的一个非常重要的因素。
(3)进度风险
有些项目对进度要求非常苛刻(进度要求不高的项目,我们同样要考虑该风险),项目进度的延迟意味着违约或市场机会的错失。
(4)质量风险
有些项目,用户对软件质量有很高的要求,如果项目组成员同类型项目的开发经验不足,则需要密切关注项目的质量风险。
(5)系统性能风险
有些软件项目属于多用户并发的应用系统,系统对性能要求很高,这时项目组就需要关注项目的性能风险。
(6)工具风险
软件项目开发和实施过程,所必须用到的管理工具、开发工具、测试工具等是否能及时到位、到位的工具版本是否符合项目要求等,是项目组需要考虑的风险因素。
(7)技术风险
在软件项目开发和建设的过程中,战略管理技术因素是一个非常重要的因素。项目组一定要本着项目的实际要求,选用合适、成熟的技术,千万不要无视项目的实际情况而选用一些虽然先进但并非项目所必须且自己又不熟悉的技术。如果项目所要求的技术项目成员不具备或掌握不够,则需要重点关注该风险因素。
(8)团队成员能力和素质风险
团队成员的能力(包括业务能力和技术能力)和素质,对项目的进展、项目的质量具有很大的影响,项目经理在项目的建设过程需要实时关注该因素。
(9)团队成员协作风险
团队成员是否能齐心协力为项目的共同目标服务,生产管理是影响进度和质量的关键因素。
3. 解决方案: 1.强调团队支持
2.给予项目组长相应的权利 3.改进问题的处理和沟通 4.避免使用纯项目式组织结构 5.增加项目检测的频率
6.为项目团队建立清晰的项目目标 7.选择有经验的项目组长 §3.4支持条件
§3.4.1计算机系统支持
计算机:处理器 p4 2.0DHz以上,内存 1G以上
开发工具:Visual Basic 操作系统:Windows XP/Win 7 数据库管理系统:Microsoft SQL Server
§3.4.2需由用户承担的工作
需由学校承担的工作:学校录入图书、租借以及读者信息 需由学生承担的工作:学生需提供自己的个人信息,如:所在学
校班级、年龄等。
§3.4.3由外单位提供的条件
需要学校提供学校图书信息,师生个人信息。
第4章 项目设计
§4.1面向对象分析(OOA)
§4.1.1 用例描述及用例图
图书管理系统涉及读者信息管理、借阅信息管理、图书信息管理等多方面的信息管理,系统的使用对象为图书管理员和读者。他们在使用系统时,各拥有不同的权限,以完成各自需要的工作。下面对图书管理系统中主要的业务流程进行简要分析:
在图书管理系统中,图书管理员要为每个读者建立借阅账户,
记录读者的个人信息和图书借阅信息。读者个人账户建立成功后,给读者发借阅卡,可以通过图书管理员借阅、归还图书,也可以通过相应的终端查询个人的借阅信息,检索图书。
读者借阅图书时,先输入借阅证卡号、密码,验证借阅证的有效性及是否可续借,无效则向读者提示原因,如“卡号不对”、“密码不对”、“已借满,不能再借”等;有效则显示读者的基本信息,例如读者的个人资料、已经借阅的图书信息等;读者通过图书管理员向系统提出借阅请求,管理员操作管理终端,登记读者新借阅图书的相关信息。
相应地,读者归还图书时,也需验证借阅卡号、密码等信息,验证借阅证的有效性,若不对,系统给出相关的提示;通过系统验证后,显示读者基本信息及图书借阅信息;读者向图书管理员递交归还的图书,管理员验证无误后,删除读者该书的借阅信息;若读者超期归还,则先向管理员递交图书滞纳费用,归还图书;
另外,图书馆图书资料变更,如新购进图书或图书被损毁不能再使用时,图书管理员要相应的将图书信息入库或注销;同理,若有新增读者帐号或需要注销读者帐号的,图书管理员应通过系统管理终端进行记录。
综上所述,一个典型的图书管理系统应包含图书信息管理、借阅信息管理、读者信息管理三部分数据管理,其中图书管理员可实现如下操作:
(1)增加、删除图书;
(2)增加、删除读者; (3)借出、归还图书记录; (4)查询读者信息、图书信息; 普通读者可以实现如下操作:
(1)修改个人信息(如登陆密码,或其他个人信息等) (2)查询个人借阅信息和检索图书;
如下图4-1-1示,简要的表达了上述图书管理系统的基本功能。
4-1-1 用例图
§4.1.2 活动图
2-1 书籍预定
2-2 借书过程
2-3还书活动图
2-4书籍状态活动图
§4.1.3顺序图
顺序图在分析或者设计过程中都可以使用,每个用例至少需要做
一个顺序图。其优点如下:
1. 是验证用例逻辑及使用逻辑清晰的好方法 2. 根须用例规约描述,推测用例的可能实现过程。 3. 发现系统瓶颈的一种很好的机制。 4. 检验分析模型,确认是否缺少一些类。
在此,我们对借书、还书、超期罚款三个用例做顺序图如下:
3-1借书顺序图
3-2还书顺序图
3-3 罚款顺序图(还书时有书籍超期)
§4.2面向对象设计(OOD)
§4.2.1 系统框架图(三层架构)
系统总体采用三层架构:DAL数据访问层、BLL业务逻辑层、Web视图层。
§4.2.2 页面导航图
网站页面导航图,体现了页面之间的跳转关系。箭头指向方向为下一页。
4-2-3 页面导航图
第5章 测试
§5.1、引言:
§5.1.1 编写目的
1. 测试目的:通过测试验证图书管理系统各项功能的可用性,
实用性及其中是否有缺陷或是错误,使其达到设计指标。 2. 测试环境
Windows 7 操作系统
3. 测试方法:使用以用户文档为基础构造的测试用例来测试程序和数据。
§5.1.2背景
说明:
a 被测试软件系统的名称:图书管理系统
b图书管理系统是针对学校图书馆管理员更好地管理图书,读者借阅读书的系统软件,主要实现管理员对系统信息的添加,修改,删除,包括读者和图书的信息,读者对图书的查询,借阅和归还等。
§5.1.3定义
系统就是指图书管理系统。
§5.2. 测试计划
§5.2.1系统说明
功能模块:读者管理、采编管理、流通管理、统计管理、查询
管理。
读者管理功能主要是读者基本信息;
采编管理功能包括图书基本信息和图书注销信息;
流通管理功能包括借书管理、还书管理、图书预约和图书状态管理;
统计管理功能包括各类书籍的馆藏统计和已出借书籍统计和为出借书籍统计;
查询管理功能包括读者信息查询和图书信息查询等。
§5.2.2 测试策略
测试策略包括用户界面测试、软件功能测试、软件可靠性测试。 用户界面测试:通过和用户交互如输入相应信息(包括正确信息和错误信息)来测试输出信息的正确性。
软件功能测试:对照用户需求来测试本系统的功能是否完全符合用户需求。
软件可靠性测试:通过模拟图书馆的实际功能在不同的配置环境下来对本系统进行功能可靠性测试,查看是否能够正常完成图书馆管理系统的各项功能。
1) 用户界面 序测试内容 测试方法 预期测试结果 号 1 界面输入 在软件的测试运行中检光标可以正确定位到输入域,查界面输入是否正常。 输入数据有效,输入顺序合理。 2 界面显示 在软件的测试运行中检在1024*768分辨率下,界面查界面显示是否正常。 显示正常。 3 界面文字在软件的测试运行中检界面文字与提示表达清晰,无查界面文字与提示的表错误和模糊语义。 与提示 达是否清晰,有无错误和模糊语义。 2)软件功能测试 删除功能没有实现,通过以管理员身份登入系管理读可以正确对相应的数据库添加读者统,进行对读者,图书信者,图表进行添加,修改,删除图信息时没息进行添加,修改,删除书信息 书,读者信息。 有同时注操作。 册读者帐号。 通过以读者身份登入系通过输入图书名字,进行对查询图统,进行对图书信息的查相应图书的查询,显示图书书信息 询。 信息。 读者登入系统后查询个人显示当前读者的读者的读 查询个信息,显示自己的读者信者编号,读者姓名,读者性人信息 息。 别,联系方式,已借书数。 借阅查询到的图书,并能及 图书借通过以读者身份登入系时更改图书状态。显示自己阅与归统,对可以借的图书借阅,当前已经借阅的图书的信还 归还自己已借的图书。 息,归还其中某书,并能及时更新信息。 备注 1 2 3 4 3) 软件安全可靠性 序测试内测试方法 号 容 1 预期测试结果 备注 系统容错性还不完备。 软件发现错误时,有错误提软件容在软件的测试运行中进行示,可以回复到正常状态。判定。 错性 对关键输入数据的有效性检查比较完备。
序测试内测试方法 号 容 预期测试结果 备注 3 系统在单击有没有发生由于软件错误而些窗口运行稳在软件的测试运行中进行导致的系统崩溃和丢失数的叉号判定。 定性 据现象。 时会出现崩溃。 §5.2.3 测试方案
对本系统进行功能测试,检查系统功能是否满足用户的需求;对系统的处理进行测试,检查是否处理的符合要求;对界面进行测试,检查系统与用户的交互信息是否能检查错误。
(1)采用黑盒测试测试方法。对软件结构的上层模块使用自顶向下推进的方法;对下层模块或关键模块使用自底向上结合的方法,对关键模块的测试采用同值分割的方法。
(2)采用白盒测试。基本路径测试是在程序流程图的基础上,通过分析由控制构造的环路复杂性,导出基本路径集合,从而设计测试用例, 保证这些路径至少通过一次。 §5.3、测试过程
§5.3.1黑盒测试
采用黑盒测试方法,整个过程采用自底向上,逐个集成的的办法,依次进行单元测试,组装测试,测试用例的设计应包括合理的和不合理的输入条件。
1)测试项目名称及测试内容
测试 1:名称:借书测试。 目的:测试借书功能。
内容:括读者证号输入、合理性检查、合法性检查,借书对
话显示控制,图书书号提交、合理性检查、合法性检查,借书登记。
测试 2:名称: 还书测试。 目的:测试还书功能。
内容:还书对话框显示控制,图书书号提交、合理性检查、
合法性检查,还书登记。
测试 3:名称:图书库管理测试。 目的:测试图书库操作功能。
内容:图书库管理界面显示控制,图书库浏览,增加图书记
录,删除图书记录,编辑图书记录。
2)测试用例
用例1:借书测试
表5-1 借书功能的测试用例表 输入 借阅者学号(已存)
输出 显示借阅成功
图书书号(已存) 已借书数目(未超量) 借阅者学号(已存) 图书书号(已存) 已借书数目(超量) 借阅者学号(未存) 显示提示“没有该借阅者” 图书书号(已存) 借阅者学号(已存) 显示提示“没有该书” 图书书号(未存) 步骤及操作:驱动模块调用之后,看库是否已经关闭,并打开图书信
息库直接察看结果
允许偏差:不允许任何偏差 条件:借书信息表 用例2:还书测试
表5-2 还书功能的测试用例表 输入 图书书号(已存并没借出) 图书书号(已存并借出) 图书书号(未存) 输出 显示还书成功 提示书以借出 显示还书不成功 显示提示“超量” 步骤及操作:驱动模块调用之后,看库是否已经关闭,并打开图书信
息库直接察看结果
允许偏差:不允许任何偏差
条件:借书信息表
用例3:图书库管理测试
表5-3 图书采编管理功能的测试用例表 输入 添加图书(未存) 添加图书(已存) 删除图书书号(已存并未借显示删除成功 出) 删除图书书号(已存并借出) 提示该书以借出,不能删除 修改图书(未存) 修改图书(已存) 提示该书不存在 显示修改成功 输出 显示添加成功 提示该书已存 步骤及操作:驱动模块调用之后,看库是否已经关闭,并打开图书信
息库直接察看结果
允许偏差:不允许任何偏差 条件:图书信息表
§5.4 测试结果 §5.4.1能力
图书管理系统实现了管理员对读者及图书信息的管理,其中包括
对信息的添加,修改和删除;实现了读者对图书信息的查询及借阅归还等功能及对个人信息的查询的功能。
§5.4.2缺陷和限制
1)系统中预定功能还没有实现
2)对于多用户的并发性还没进行完整的测试,如压力测试
§5.4.3建议
1)建议系统功能能更加全面,能够修改,完善以上提出的错误与缺陷;
2)系统还没有实现网络化,还需要进一步提升系统的性能。
§5.4.4评价
由于时间和人力有限,该软件还有一些功能没有进行前台代码实现,还有缺陷和限制还需要加以改正,现在还仅仅实现了单击的操作,还没有实现网络化,还需要进一步的提升。 §5.5测试资源消耗 一人,4小时测试时间。
第6章 项目管理
在整个项目中安排进度中控制时间和节约时间式非常重要的,我们不能无限制的延长时间,同时项目的主要特点之一即是有严格的时间期限要求,所以说进度的计划和时间的控制也是非常重要的。
进度计划能够让我们有计划的进行项目的开发,帮做我们有计划的完成我们的任务。我们主要用到以下几种制定进度的方法: ①关键日期表 ②甘特图 ③计划评审技术 §6.1 绘制关键日期表
我们的进度计划表,其中列出一些关键活动和进行的日期。如图6-1所示: 任务名称 工期 开始时间 完成时间 需求分析 项目估算 可行性分析 制定项目开发计划 面向对象分析(OOA) 面向对象设计(OOD) 面向对象编程 测试计划 单元测试 集成测试 系统测试 系统评估 0.5 个工作日 0.5 个工作日 0.5 个工作日 1 个工作日 1 个工作日 1 个工作日 2 个工作日 0.5 个工作日 0.5 个工作日 0.5 个工作日 0.5 个工作日 0.5 个工作日 2014年1月18日 2014年1月18日 2014年1月19日 2014年1月20日 2014年1月21日 2014年1月22日 2014年1月23日 2014年2月25日 2014年2月26日 2014年2月26日 2014年2月27日 2014年2月27日 2014年1月18日 2014年1月18日 2014年1月19日 2014年1月20日 2014年1月21日 2014年2月22日 2014年1月23日 2014年2月25日 2014年2月26日 2014年2月26日 2014年2月27日 2014年2月27日 图6-1 关键日期表
§6.2 预览甘特图
甘特图也叫做线条图或横道图。它是以横线来表示每项活动的起止时间。甘特图的优点是简单、明了、直观,易于编制,因此到目前为止仍然是小型项目中常用的工具。即使在大型工程项目中,它也是高级管理层了解全局、基层安排进度时有用的工具。在甘特图上,可以看出各项活动的开始和终了时间。在绘制各项活动的起止时间时,也考虑它们的先后顺序。如下图所示:
§6.3 预览网络图
网络图(Network planning)是一种图解模型,形状如同网络,故称为网络图。网络图是由作业、事件和路线三个因素组成的。本项目网络图清晰展示了各任务的前置与并发关系,如下图所示:
总结
本系统是一个面向小型图书管理系统,具有一定实用性的数据库信息管理系统。它主要完成对图书馆的一系列管理,包括进入新书、借阅、信息查询管理。
本系统具有相当的实用功能。在查询方面,系统实现了多条件任意字段的模糊查询,同时在分类查询上实现了动态生成。在管理方面,系统较好地实现了管理员注册和密码修改等各项功能。
系统在设计过程中不可避免地遇到了各种各样的问题,由于整个系统完全都是由个人设计的,必然存在着许多不足之处。
由于时间关系,系统功能实现不够完善,使用不是很方便。 通过本次课程设计我学到了不少新的东西,也发现了大量的问题,本次课程设计历经一个星期,期间收获颇多,从头到尾模拟了整个软件从设计到最后测试的过程,熟悉了诸多操作,有些在设计过程中已经解决,有些还有待今后慢慢学习。只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。
参考文献
[1] 张海藩.软件工程导论(第3版). 北京: 人民邮电出版社 [2] 赵斌.软件体系结构设计与测试技术。北京:电子工业出版社 [3] 郑人杰.计算机软件测试技术。北京:清华大学出版社
附:主要代码(主要是BLL层的类的代码)
管理业务类:
public class Admin_Bll {
static Lib_Book_Dal bookD;
static Book_LibInfo_Dal tBookD;
public Admin_Bll()throws NamingException, SQLException{ bookD = new Lib_Book_Dal();
tBookD = new Book_LibInfo_Dal(); }
//对书目的操作暂时只有增加和删除 /**
* 添加书目 * @param book * @return boolean */
public static boolean addBook(Lib_Book book){ return bookD.insert_Book(book); } /**
* 为书目添加书 * @param book * @param tbook * @return
* @throws SQLException * @throws NamingException */
public static boolean addTBook(Lib_Book book,Book_LibInfo tbook,int lid) throws NamingException, SQLException{ Isbn_Lib_Dal ilD = new Isbn_Lib_Dal(); Isbn_Lib il = new Isbn_Lib();
//如果是第一次添加该书在某图书馆 则新增一条馆藏记录 if(ilD.haveLog(book.getIsbn(), lid)){ //初始化记录
il.setIl_rest((short)1); il.setIl_sum((short)1); il.setIsbn(book.getIsbn()); il.setLib_id(lid); //插入
ilD.insert_Isbn_Lib(il); }else{
//为该书在该图书馆中的库存量+1
il = ilD.queryById(book.getIsbn(), lid);
il.setIl_rest((short)(il.getIl_rest()+1));//剩余+1
il.setIl_sum((short)(il.getIl_sum()+1));//总量+1 }
return tBookD.insert_Book_LibInfo(tbook); }
/**
* 删除书
* @param tbook * @return
* @throws SQLException * @throws NamingException */
public static boolean deleteTBook(Book_LibInfo tbook,int lid) throws NamingException, SQLException{
Isbn_Lib_Dal ilD = new Isbn_Lib_Dal(); Isbn_Lib il = new Isbn_Lib();
//获得图书馆藏记录
String ISBN = tBookD.getISBN(tbook.getBook_id()); il = ilD.queryById(ISBN, lid); if(il.getIl_sum()==1){
ilD.delete_Isbn_Lib(il);//假如只剩下一本书 则删除书的同时删除馆藏记录 }else{
il.setIl_rest((short)(il.getIl_rest()-1));//假如剩下不止一本书 则减少剩余量记录和总量记录
il.setIl_sum((short)(il.getIl_sum()-1)); }
return tBookD.delete_Book_LibInfo(tbook.getBook_id()); } /**
* 删除书目 首先确定书目下是否有书 如有书 不得删除 * @param book * @return */
public static boolean deleteBook(Lib_Book book){ if(bookD.have_tBook(book.getIsbn())){ return false; }else{
return bookD.delete_Book(book.getIsbn()); } }
//对用户的操作 /**
* 增加用户 * @param user * @return
* @throws NamingException * @throws SQLException */
public static boolean insertUser(Lib_User user) throws NamingException, SQLException{
Lib_User_Dal userD = new Lib_User_Dal(); //为该读者建立借阅总和记录并初始化
User_Brrow_Dal ubD = new User_Brrow_Dal(); User_Brrow userB = new User_Brrow(); userB.setU_id(user.getU_id()); userB.setUb_c_num((short)0); userB.setUb_f_num((short)0);
userB.setUb_is_overdue((short)0); userB.setUb_n_num((short)0); userB.setUs_sum((short)0); try{
if(ubD.insert_User_Brrow(userB)){//如果建立借阅总和记录成功 新建该user
userD.insert_User(user); }
}catch(Exception e){ e.printStackTrace(); }
return userD.insert_User(user); } /**
* 删除用户 * @param user * @return
* @throws NamingException * @throws SQLException */
public static boolean deleteUser(Lib_User user) throws NamingException, SQLException{
Lib_User_Dal userD = new Lib_User_Dal();
User_Brrow_Dal ubD = new User_Brrow_Dal();
if(ubD.delete_User_Brrow(user.getU_id())){ //先删借阅总和记录 再删用户
return userD.delete_User(user.getU_id()); }else{
return false; } } /**
* 修改用户信息 * @param user * @return
* @throws NamingException * @throws SQLException */
public static boolean updateUser(Lib_User user) throws NamingException, SQLException{
Lib_User_Dal userD = new Lib_User_Dal(); return userD.update_User(user); } /**
* 模糊搜索得到用户信息 如三个条件均无(uid<0 utype<0 name=\"\")则为获得全部用户信息 * @param uid * @param name * @param utype * @return List
* @throws SQLException * @throws NamingException */
public static List Lib_User_Dal userD = new Lib_User_Dal(); return userD.queryCondition(uid, name, utype); } /** * 为用户办理借书手续 * @param bid * @param uid * @param lid * @return * @throws NamingException * @throws SQLException */ public static boolean doBorrow(int bid,int uid,int lid) throws NamingException, SQLException{ Lib_Book_Dal bookD = new Lib_Book_Dal(); Book_LibInfo_Dal blD = new Book_LibInfo_Dal(); Lib_Borrow_Log_Dal logD = new Lib_Borrow_Log_Dal(); User_Brrow_Dal ubD = new User_Brrow_Dal(); Lib_User_Dal userD = new Lib_User_Dal(); Isbn_Lib_Dal ilD = new Isbn_Lib_Dal(); User_Brrow uB = new User_Brrow(); //Book_LibInfo bl = new Book_LibInfo(); Lib_Book book = new Lib_Book(); Lib_User user = new Lib_User(); Lib_Borrow_Log log = new Lib_Borrow_Log(); Isbn_Lib il = new Isbn_Lib(); //得到用户借阅总和记录 uB = ubD.queryById(uid); //如果超期 则返回false 表示借书失败 if(uB.getUb_is_overdue()==1){ return false;} //得到书目 String ISBN = blD.getISBN(bid); book = bookD.queryById(ISBN); int bookType = book.getType_id(); //借阅量 short sum = uB.getUs_sum();//总 short chi = uB.getUb_c_num();//中文书 short fre = uB.getUb_f_num();//外文书 short nw = uB.getUb_n_num();//新书 //得到用户,验证是否在该用户类型规定的可借范围内 user = userD.queryById(uid); switch(user.getU_type_id()){ case 0:return false;//如果是管理员 不能借书 case1:if(chi==5&&fre==1&&nw==1&&sum==7){return false;}break;//本科生 case2:if(chi==12&&fre==3&&nw==1&&sum==16){return false;}break;//教师 case3:if(chi==10&&fre==2&&nw==1&&sum==13){return false;}break;//研究生 case4:if(chi==12&&fre==3&&nw==1&&sum==16){return false;}break;//博士 case5:if(chi==7&&fre==1&&nw==1&&sum==9){return false;}break;//非教师} //增加该书的借书记录 并初始化 log.setBl_is_overdue((short)0); log.setBl_renew((short)0); log.setBl_state((short)0); log.setBook_id(bid); log.setU_id(uid); logD.inserBorrowLog(log);//插入 //减少该书库存剩余量 il = ilD.queryById(book.getIsbn(), lid); il.setIl_rest((short)(il.getIl_rest()-1)); //增加其某种书的借阅量 switch(bookType){ case 1:uB.setUb_c_num((short)(uB.getUb_c_num()+1));break; case 2:uB.setUb_f_num((short)(uB.getUb_f_num()+1));break; case 3:uB.setUb_n_num((short)(uB.getUb_n_num()+1));break} uB.setUs_sum((short)(uB.getUs_sum()+1)); ubD.update_User_Brrow(uB);//更新借阅量 return true;} /** * 为用户办理还书手续 * @param bid * @param uid * @param lid * @return * @throws NamingException * @throws SQLException */ public static boolean doBack(int bid,int uid,int lid) throws NamingException, SQLException{ Lib_Book_Dal bookD = new Lib_Book_Dal(); Book_LibInfo_Dal blD = new Book_LibInfo_Dal(); Lib_Borrow_Log_Dal logD = new Lib_Borrow_Log_Dal(); User_Brrow_Dal ubD = new User_Brrow_Dal(); Isbn_Lib_Dal ilD = new Isbn_Lib_Dal(); User_Brrow uB = new User_Brrow(); Lib_Book book = new Lib_Book(); Lib_Borrow_Log log = new Lib_Borrow_Log(); Isbn_Lib il = new Isbn_Lib(); //得到用户借阅总和记录 uB = ubD.queryById(uid); //如果超期 则需检查还了这本书之后 是否无超期 if(uB.getUb_is_overdue()==1){ //检查该书还书之后是否无超期 //如果是 则设该读者为无超期状态uB.setUb_is_overdue((short)0); return false; } //得到书目 和书本类型 String ISBN = blD.getISBN(bid); book = bookD.queryById(ISBN); int bookType = book.getType_id(); //查找该用户最近对该书的借书记录 log = logD.queryLastLog(bid, uid); if(log == null){return false;} logD.updateState(log.getBl_id(),1);//设置该借书记录为已还state=1 //增加该书库存剩余量 il = ilD.queryById(book.getIsbn(), lid); il.setIl_rest((short)(il.getIl_rest()+1)); //减少其对某种书的借阅量 switch(bookType){ case 1:uB.setUb_c_num((short)(uB.getUb_c_num()-1));break; case 2:uB.setUb_f_num((short)(uB.getUb_f_num()-1));break; case 3:uB.setUb_n_num((short)(uB.getUb_n_num()-1));break; } uB.setUs_sum((short)(uB.getUs_sum()-1)); ubD.update_User_Brrow(uB);//更新借阅量 return true;} /** * 得到用户借书记录 * @param uid * @return * @throws NamingException * @throws SQLException */public static List Lib_Borrow_Log_Dal logD = new Lib_Borrow_Log_Dal(); return logD.queryHistory(uid, (short)2); }} 用户业务类: public class User_Bll { private Lib_User_Dal userDal; private Lib_Book_Dal bookDal; private Book_LibInfo_Dal bookLib; private Lib_Borrow_Log_Dal borrowHistory; public User_Bll() throws NamingException, SQLException{ userDal = new Lib_User_Dal(); bookDal = new Lib_Book_Dal();} public boolean regist(Lib_User user){ return userDal.insert_User(user);} //修改密码public boolean modifyPsw(Lib_User user){ return userDal.update_User(user);} //修改其他信息public boolean modifyMess(Lib_User user){ return userDal.update_User(user);} //根据ISBN查询书目 public List queryBook(String ISBN) throws SQLException{ return bookLib.searchByISBN(ISBN);} //根据ISBN查询书目 public List queryBook(String ISBN,String name,String author,String publisher,int typeid) throws SQLException{ return bookDal.queryCondition(ISBN,name, author, publisher, typeid);} //查询所有借阅历史 public List queryBorrowHistory(int uid,short state) throws SQLException{return borrowHistory.queryHistory(uid, state);}} 登录业务类: public class Login_Bll { private Lib_User_Dal userDal; public Login_Bll() throws NamingException, SQLException{ userDal = new Lib_User_Dal();} public boolean isExistUser(int uid){ if (userDal.queryById(uid)==null) return false; else return true;} public Lib_User islogin(int uid,String psw){ try { Lib_User_Dal userD = new Lib_User_Dal(); Lib_User user = new Lib_User(); user = userD.queryById(uid); if(psw.equals(user.getU_psw())){ return user; }else{ return null;} } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace();} return null;} public boolean isAdmin(Lib_User user){ if(user.getU_type_id()==0){ return true; }else{ return false; }}} 因篇幅问题不能全部显示,请点此查看更多更全内容