🌟欢迎来到 我的博客 —— 探索技术的无限可能!
图书馆管理系统系统分析与设计
图书馆信息管理系统(项目需求和计划、项目设计)
图书馆信息管理系统(项目实现)
图书馆信息管理系统(项目测试)
图书馆信息管理系统(总)
目录
一、项目需求和计划
1.1 项目来源及背景
本项目是一个计算机管理系统,也就是将传统手工的管理方式转变为智能化、标准化、规范化的管理管理模式,对图书馆中所有的图书、文献资料、音像资料、报刊、期刊等各种类型的资料实现采编、收集图书信息、检索、归档、流通以及一系列相关工作的计算机化、信息化管理。
自从人类步入到信息时代,创造的信息就爆炸式的增长,再加上现在的数字化技术,各种通讯技术,多媒体技术的急速发展和计算机网络的全面普及,而图书馆作为这些信息的集散地,需要不断的更新新出现的图书信息,图书的流通情况。但是图书馆的管理人员是有限的,在计算机尚未在图书管理系统广泛使用之前,管理人员仅仅基于文本和表格的纸质方式去记录图书信息和流通信息已经不能适应快速增长的图书数量,另一方面,人工的统计方式并不能保证数据的正确性,有时会非常容易出现错误。出错的时候,还得一本本的查阅纸质文档,这显得非常的耗费人力财力和物力,效果也不明显,因此仅仅依靠手工操作方式在今天已经不能适应信息量庞大的图书馆了。
为了使读者能够更加快速的借书、还书、预借书本、查询图书的信息等业务,图书馆管理人员能更快的对读者信息、图书信息进行管理,避免出现不必要的图书管理人员和读者的摩擦,因此急需要有一套能够有效快速处理图书馆日常业务的图书馆管理系统,使图书馆的管理工作规范化、系统化、程序化,提高图书馆图书信息、读者信息处理的精确性和有效性,减轻图书馆工作人员的工作负担。
1.2 研究现状
当今世界,科学技术突飞猛进。以计算机多媒体和网络技术为代表的信息技术,以惊人的发展速度,迅速在各领域运用,教育也面临信息技术的挑战。图书馆信息管理系统建设作为学校教育现代化的基础工程已引起了我国教育行政部门和学校的高度重视。
1.3 项目计划
该项目一共分成4周完成,每周具体的分配任务如下:
第1周
- 了解图书馆信息管理系统的用户需求以及用户特点
- 初步分析图书信息管理系统的可行性
- 明确项目目标
第2周
- 进行图书馆信息管理系统的功能规格分析
- 进行图书馆信息管理系统的性能需求分析
- 进行图书馆信息管理系统的系统分析
- 进行图书馆信息管理系统的页面设计
- 进行图书馆信息管理系统的模块设计
- 进行图书馆信息管理系统的数据库设计
第3周
- 使用java对于图书馆信息管理系统的模块进行实现
- 使用SQL工具进行图书馆信息管理系统的数据库进行实现
第4周
- 使用黑盒测试,白盒测试等测试方法对设计实现的所需功能进行功能测试。
- 对系统进行安全测试,提高系统对非法入侵防范能力。
- 根据系统的整体框架和实现形式,完成软件工程实践报告。
- 修复已知的Bug,对现有的问题进行归档,发布公测版本
- 收集用户反馈信息,优化版本的呈现效果。
二、项目设计
1. 用户的特点
本系统的用户是借阅者和图书馆的工作人员。借阅者他们的差异比较大,有的学历很高,有的可能很低。有的经验很丰富,有的可能没有经验等。图书馆的工作人员他们对于他们对图书馆图书的管理业务很熟悉,主要是通过常规操作能对读者的借阅图书、归还图书就行,不需要了解计算机知识,只要会操作电脑一样也可以使用图书馆管理系统。但是使用本系统前需要对使用人员进行教学,了解系统的基本功能,操作方式。
2. 项目目标
本项目是要开发一个图书馆管理系统,通过这个系统处理常见的图书馆业务。这个系统主要目标是:
(1)有客户端(借阅者使用)和管理端(图书馆管理员和系统管理员使用)。
(2)借阅者可以对于图书馆里面存在的图书进行借阅图书、归还图书、预借图书等基本操作。
(3)借阅者可以对于图书馆里面的图书的数量、位置、是否被借阅等信息进行查询。
(4)图书管理员能够处理借阅者的借阅图书、归还图书、预借图书等基本功能。
(5)图书管理员能够对图书信息进行查看、增加、修改、删除功能。
(6)图书管理员能够对读者信息进行查看、增加、修改、删除功能。
(7)图书管理员可以查看操作日志,图书的预借信息情况。
(8)系统管理员拥有图书管理员的所有功能,而且系统管理员可以对图书管理员进行管理,可以分配图书管理员账号,系统的用户可以更改密码。
3. 功能规格
采用面向对象分析作为主要的系统建模方法,使用UML(Unified Modeling Language)作为建模语言。UML为建模活动提供了从不同角度观察和展示系统的各种特征的方法。在UML中,从任何一个角度对系统所作的抽象都可能需要几种模型来描述,而这些来自不同角度的模型图最终组成了系统的映像。
用例描述角色(用户、外部系统以及系统处理)是如何与系统交互来完成工作的。用例模型提供了一个非常重要的方式来界定系统边界以及定义系统功能,同时,该模型将来可以派生出动态对象模型。
设计用例时,我们需要遵循下列步骤:
1)识别出系统的角色。角色可以是用户、外部系统,甚至是外部处理,通过某种途径与系统交互。重要的是着重从系统外部执行者的角度来描述系统需要提供哪些功能,并指明这些功能的执行者(角色)是谁。尽可能地确保所有角色都被完全识别出来。
2)描述主要的用例。可以采取不断地问自已“这个角色究竟想用系统做什么?”来准确地描述用例。
3)重新审视每个用例,为它们下个详尽的定义。
3.1 角色定义
角色或者执行者指与系统产生交互的外部用户或者外部系统。
3.1.1 借阅者
借阅者是指在这个图书馆管理系统中通过客户端搜索信息和借还书籍的人员,这个角色主要参与客户端的查询图书信息、借阅图书、归还图书、预借图书等功能。
3.1.2 管理用户
管理用户是指管理端的用户,此角色派生两个子类,图书管理员和系统管理员。
图书管理员是能够对图书馆管理系统里面的图书信息进行查看、增加、修改、删除,同时也可以对图书馆管理系统里面的借阅者信息进行查看、增加、修改、删除等操作。
系统管理员是可以在图书馆管理系统实现对图书归还、借阅、续借请求处理及图书信息管理,同时能对于借阅者,图书管理员还有图书管理系统的管理。
借阅者和管理用户的关系入图所示:
3.1.3 数据库
数据库是一个与系统产生交互的外部系统,数据库也是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,所以我们可以通过数据库快速的查询想要的信息。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。而图书馆的信息放入数据库里面也可以形成一个小型的数据世界。
3.2 系统主用例图
图书馆管理系统可以分为两个主要的组成部分,一个是客户端系统。一个是管理端系统。客户端系统功能主要是指借阅者通过图书馆官网进行操作的功能,即查询书籍和借阅归还书籍功能。管理端系统功能由图书馆管理员和系统管理员两类人使用,其中图书馆管理员主要有管理图书馆图书信息和处理借阅者借书还书等功能,系统管理员拥有图书管理员的所有权限,另外系统管理员还有的独有权限,就是可以管理图书管理员,包括增加、删除图书管理员。系统的主用例如图2所示。
图2 系统的主用例图
3.3 客户端系统
客户端系统主要是提供来到图书馆想要借阅书本的借阅者使用的功能,它的功能分为查询书籍信息、借阅图书、归还图书、预借图书等部分,每个登录的用户首先都要通过安全认证然后确认登录账户,系统根据相应的账户实现相应的功能。图5是客户端的活动图。
客户端的功能主要包括登录、查询书籍信息、浏览书籍信息、借阅图书、归还图书、预借图书、续借图书等功能,图6是它的用例图。
图3 客户端的活动图
图4 借阅者的用例图
客户端管理的这些用例描述如下:
(1)登录。借阅者通过输入自己的账号和密码进入图书馆客户端,在页面能选择查询书籍信息、预借图书、借阅图书、归还图书、续借图书等功能。如果忘记密码或者未注册,可以先找回密码或者注册新用户。
(2)查询书籍信息。借阅者登录以后选择查看书籍信息进入,在这借阅者可以通过输入想要的书籍的名字找到对应图书在图书馆的数量、位置、书本类型以及是否已经被借阅等信息,也可以通过输入作者名字、书本类型来找到想要的书在图书馆位置。
(3)预借图书。借阅者登录以后选择预借图书进入,在这借阅者可以输入自己的读者借阅证,图书管理员在接收到读者的请求后,会验证借阅者信息。查看该借阅者的读者借阅证是否有效。读者借阅证有效借阅者才可以输入想要预借的图书,否则系统会提示读者借阅证无效,接着经过系统检查图书信息表是否有该图书存在后,如果图书存在,系统会把借阅者的预借借阅信息登记到预借表中,更新借阅者的预借信息。如果图书不存在,系统会告知借阅者图书不存在,让借阅者输入其他书籍进行预借。
(4)借阅图书。借阅者登录以后选择借阅图书进入,在这借阅者可以输入想要借的图书的名字,图书馆管理系统会去进入查询书籍信息检测是否有该图书存在和进入预借图书功能检测用户是否预借了图书,并且查询借阅者的借书数量是否超过了限制。如果图书馆有该书,用户借书数量没有超过限制并且预借了这本图书,系统会记录用户的借书时间和借阅图书的信息,并且显示借书和最晚归还图书的时间给用户。
(5)归还图书。借阅者登录以后选择归还图书进入,在这借阅者可以归还之前在图书馆里面借阅的图书,通过图书馆管理系统检测图书没有过期的书可以归还,过期的图书借阅证要先去续借以后再来归还。
(6)续借图书。借阅者登录以后选择续借图书进入,在这借阅者把已借阅的图书但是到了规定的归还的期限,但是可以续借一次的图书进行续借。系统记录借阅者要续借的图书信息,并且向用户显示续借续借以后最晚归还图书的时间。
3.3.1 登录
借阅者通过输入自己的账号和密码进入图书馆客户端,如果用户忘记密码或者未注册,可以先找回密码或者注册新用户。
具体描述如下:
用例 | 借阅者登录 | |
---|---|---|
使用语境 | 借阅者正确输入账户密码并点击确定后进入图书馆管理系统客户端 | |
范围 | 借阅者(读者) | |
主执行者 | 借阅者输入账号密码 | |
前置条件 | 借阅者登录 | |
后置条件 | 查询书籍信息、预借图书、借阅图书、归还图书、续借图书 | |
触发事件 | 借阅者成功登录图书馆管理系统客户端 | |
级别 | 用户目标 | |
描述 | 步骤 | 活动 |
1. | 借阅者在账户栏正确填写输入账户 | |
2. | 借阅者在密码栏正确填写输入密码 | |
3. | 借阅者鼠标点击登录按钮 | |
扩展 | 步骤 | 分支动作 |
1. | 没有借阅者账户信息 | |
2. | 注册新账户 | |
3. | 借阅者密码填错 | |
4. | 找回密码 |
借阅者登录具体活动图如下:
图5借阅者登录活动图
3.3.2 查询书籍信息
借阅者登录以后通过选择查看书籍信息进入,在这借阅者可以通过输入想要的书籍的名字找到对应图书在图书馆的数量、位置、书本类型以及是否已经被借阅等信息,也可以通过输入作者名字、书本类型来找到想要的书在图书馆位置。查询完书籍信息后可以选择返回去选择其他功能,也可以选择退出系统。
具体描述如下:
表2借阅者查询书籍信息用例描述
用例 | 借阅者查询书籍信息 | |
---|---|---|
使用语境 | 借阅者登录系统以后选择查询书籍信息功能 | |
范围 | 借阅者(读者) | |
主执行者 | 借阅者选择查询书籍信息功能 | |
前置条件 | 借阅者需要查询书籍信息 | |
后置条件 | 返回(可以继续选择查询书籍信息、预借图书、借阅图书、归还图书、续借图书) | |
触发事件 | 借阅者查询书籍信息完成 | |
级别 | 概要 | |
描述 | 步骤 | 活动 |
1. | 借阅者输入输入读者借阅证 | |
2. | 系统检测读者借阅证有效 | |
3. | 系统显示图书信息 | |
扩展 | 步骤 | 分支动作 |
1. | 系统没有查询到图书馆关于这个图书的信息 | |
2. | 借阅者可查询其他书籍 | |
3. | 系统检测到读者借阅证无效 | |
4. | 借阅者输入正确的低着借阅证或者注册一个借阅证 |
借阅者查询书籍信息具体活动图如下:
图6借阅者查询书籍信息活动图
3.3.3 预借图书
借阅者登录以后通过选择预借图书信息进入。在这里借阅者可以输入想要预借的图书,只要借阅者提供的读者借阅证有效且图书存在图书馆内,系统就会把借阅者的预借借阅信息登记到预借表中,并且更新借阅者的预借信息。
具体描述如下:
表3借阅者预借图书用例描述
用例 | 借阅者预借图书 | |
---|---|---|
使用语境 | 借阅者登录系统以后选择预借图书功能 | |
范围 | 借阅者(读者) | |
主执行者 | 借阅者选择预借图书功能 | |
前置条件 | 借阅者需要预借图书 | |
后置条件 | 返回(可以继续选择查询书籍信息、预借图书、借阅图书、归还图书、续借图书) | |
触发事件 | 系统记录借阅者的预借图书信息 | |
级别 | 概要 | |
描述 | 步骤 | 活动 |
1. | 借阅者输入借阅证和要预借的图书名 | |
2. | 系统检测读者借阅者有效 | |
系统检测图书在图书馆内 | ||
3. | 系统更新借阅者的预借信息 | |
扩展 | 步骤 | 分支动作 |
1. | 系统检测到读者借阅证无效 | |
2. | 借阅者输入正确的低着借阅证或者注册一个借阅证 | |
3. | 系统查询图书不存在图书馆内 | |
4. | 借阅者输入其他书籍进行预借 |
借阅证预借图书具体活动图如下:
图7借阅证预借图书活动图
3.3.4 借阅图书
借阅者登录以后选择借阅图书进入。在这借阅者可以输入想要借的图书的名字,图书馆管理系统会检测图书是否存在,借阅者是否预借了这本图书,借阅者的借书数量是否超过了限制,只有3个都满足条件才回给用户对该图书进行借阅。系统会去记录借阅图书的信息并且显示借书和最晚归还图书的时间给用户。
具体描述如下:
表4借阅者借阅图书用例描述
用例 | 借阅者借阅图书 | |
---|---|---|
使用语境 | 借阅者登录系统以后选择借阅图书功能 | |
范围 | 借阅者(读者) | |
主执行者 | 借阅者选择借阅图书功能 | |
前置条件 | 借阅者需要在图书馆借阅图书 | |
后置条件 | 返回(可以继续选择查询书籍信息、预借图书、借阅图书、归还图书、续借图书) | |
触发事件 | 借阅者借阅图书完成 | |
级别 | 概要 | |
描述 | 步骤 | 活动 |
1. | 借阅者输入要借阅的书名 | |
2. | 系统检测图书存在 | |
系统检测借阅者预借了这本图书 | ||
系统查询借阅者的借书数量没有超过了限制 | ||
3. | 借阅图书成功后系统记录用户的借书时间 | |
4. | 系统显示用户借书和最晚归还图书的时间 | |
扩展 | 步骤 | 分支动作 |
1. | 系统查询图书不存在图书馆内 | |
2. | 借阅者输入其他书籍进行借阅 | |
3. | 系统查询借阅者没有预借了这本图书 | |
4. | 借阅者去进行借阅图书登记 | |
5. | 系统查询借阅者的借书数量超过了限制 | |
6. | 告诉借阅者借书数量已达上限 |
借阅者借阅图书具体活动图如下:
图8借阅者借阅图书活动图
3.3.5 归还图书
借阅者登录以后选择归还图书进入。在这借阅者可以归还之前在图书馆里面借阅的图书,通过图书馆管理系统检测图书没有过期的书可以归还,过期的图书借阅证要先去续借以后再来归还。
具体描述如下:
表5借阅者归还图书用例描述
用例 | 借阅者归还图书 | |
---|---|---|
使用语境 | 借阅者登录系统以后选择归还图书功能 | |
范围 | 借阅者(读者) | |
主执行者 | 借阅者选择归还图书功能 | |
前置条件 | 借阅者需要归还借阅的图书 | |
后置条件 | 返回(可以继续选择查询书籍信息、预借图书、借阅图书、归还图书、续借图书) | |
触发事件 | 借阅者归还图书完成 | |
级别 | 概要 | |
描述 | 步骤 | 活动 |
1. | 借阅者输入要归还的图书信息 | |
2. | 系统检测借阅者借阅图书时间没有过期 | |
3. | 借阅者归还图书完成 | |
扩展 | 步骤 | 分支动作 |
1. | 系统检测借阅者借阅图书时间已经过期 | |
2. | 借阅者先去续借图书再来归还图书 |
借阅者归还图书具体活动图如下:
图9借阅者归还图书活动图
3.3.6 续借图书
借阅者登录以后选择续借图书进入。在这借阅者输入要续借的图书,系统检测图书可以续借一次的图书进行续借。系统记录借阅者要续借的图书信息,并且向用户显示续借以后最晚归还图书的时间。
具体描述如下:
表6借阅者续借图书用例描述
用例 | 借阅者续借图书 | |
---|---|---|
使用语境 | 借阅者登录系统以后选择续借图书功能 | |
范围 | 借阅者(读者) | |
主执行者 | 借阅者选择续借图书功能 | |
前置条件 | 借阅者需要续借图书 | |
后置条件 | 返回(可以继续选择查询书籍信息、预借图书、借阅图书、归还图书、续借图书) | |
触发事件 | 借阅者成功续借过期的图书 | |
级别 | 概要 | |
描述 | 步骤 | 活动 |
1. | 借阅者输入要续借的图书名字 | |
2. | 系统检测图书可以续借 | |
3. | 系统记录续借图书的信息 | |
4. | 系统显示图书续借以后最晚归还时间 | |
扩展 | 步骤 | 分支动作 |
1. | 系统检测图书不能续借 | |
2. | 借阅者交过期以后的钱 |
借阅者续借图书具体活动图如下:
图10借阅者续借图书活动图
3.4 管理端系统
管理端系统主要是提供在图书馆工作的工作人员和管理图书馆管理系统的工作人员使用的地方。在管理端图书管理员能对于图书馆里面的图书信息进行查看、增加、修改、删除等功能操作,也能对来图书馆的借阅者信息进行查看、增加、修改、删除等功能操作。在管理端系统管理员除了拥有图书管理员的所有权限,另外还有系统管理员的独有权限,就是可以管理图书管理员信息,包括增加、删除图书管理员。有了管理端系统,能让工作人员更好的去管理图书馆。每个登录的管理员首先都要通过安全认证然后确认登录账户,系统根据相应的账户实现相应的功能。图13是客户端的活动图。
管理端的功能主要包括查看图书信息(包括被借阅的情况)、增加图书信息、修改图书信息、删除图书信息、查看借阅者信息、增加借阅者信息、修改借阅者信息、删除借阅者信息等功能,特别的是系统管理员还有查看图书管理员信息、增加图书管理员信息、修改图书管理员信息、删除图书管理员信息的功能。图14和图15是图书管理员和系统管理员的用例图。
图11客户端的活动图
图12图书管理员用例图
图13系统管理员用例图
管理端管理的这些用例描述如下:
(1)登录。管理员通过输入自己的账号和密码进入图书馆管理端,系统通过账号判断用户是图书管理员还是系统管理员。如果是图书馆管理员登录后能在页面选择书籍管理和借阅者信息管理功能。如果是系统管理员登录后能在页面能选择书籍管理、借阅者信息管理还有图书馆管理员信息管理功能。如果管理员忘记密码可以先找回密码。
(2)书籍管理。管理员登录以后选择书籍管理进入,里面包括了查看图书信息、增加图书信息、修改图书信息、删除图书信息4个小功能。管理员都可以在这对于图书馆里面书籍的借阅情况进行了解,也可以对于图书馆图书的相关信息进行查看、增加、修改、删除等功能操作。
(3)借阅者信息管理。管理员登录以后选择借阅者信息管理进入,里面包括了查看借阅者信息、增加借阅者信息、修改借阅者信息、删除借阅者信息4个小功能。管理员都可以在这对于来图书馆进行借阅和归还书籍的借阅者信息情况进行了解,并且可以对于借阅者的相关信息进行查看、增加、修改、删除等功能操作。
(4)图书管理员信息管理。系统管理员登录以后选择图书管理员信息管理进入,里面包括了查看图书管理员信息、增加图书管理员信息、修改图书管理员信息、删除图书管理员信息4个小功能。系统管理员可以对于图书管理员的相关信息进行查看、增加、修改、删除等功能操作。
3.4.1 登录
管理员通过输入自己的账号和密码进入图书馆管理端,系统通过账号判断用户是图书管理员还是系统管理员。如果管理员忘记密码可以先找回密码。
具体描述如下:
表7管理员登录用例描述
用例 | 管理员登录 | |
---|---|---|
使用语境 | 管理员正确输入账户密码并点击确定后进入图书馆管理系统管理端 | |
范围 | 管理员(图书管理员和系统管理员) | |
主执行者 | 管理员输入账号密码 | |
前置条件 | 管理员登录 | |
后置条件 | 书籍管理、借阅者信息管理、借阅者信息管理(这个只有系统管理员才可以) | |
触发事件 | 管理员成功登录图书馆管理系统管理端 | |
级别 | 用户目标 | |
描述 | 步骤 | 活动 |
1. | 管理员在账户栏正确填写输入账户 | |
2. | 管理员在密码栏正确填写输入密码 | |
3. | 管理员鼠标点击登录按钮 | |
扩展 | 步骤 | 分支动作 |
1. | 系统没有管理员账户信息 | |
2. | 注册新账户 | |
3. | 管理员密码填错 | |
4. | 找回密码 |
管理员登录具体活动图如下:
图14管理员登录活动图
3.4.2 书籍管理
管理员登录以后选择书籍管理进入。管理员都可以在这对于图书馆里面书籍的借阅情况进行了解,也可以对于图书馆图书的相关信息进行查看、增加、修改、删除等功能操作。
具体描述如下:
表8管理员书籍管理用例描述
用例 | 管理员对书籍管理 | |
---|---|---|
使用语境 | 管理员登录系统以后选择书籍管理功能 | |
范围 | 管理员(图书管理员和系统管理员) | |
主执行者 | 管理员要对书籍信息进行管理 | |
前置条件 | 管理员登录 | |
后置条件 | 查看图书信息、增加图书信息、修改图书信息、删除图书信息 | |
返回 | (可以继续选择书籍管理、借阅者信息管理、借阅者信息管理) | |
触发事件 | 管理员对于图书馆书籍信息进行管理 | |
级别 | 概要 | |
描述 | 步骤 | 活动 |
1. | 管理员输入图书名字 | |
2. | 管理员选择对于全部图书信息进行查看、增加、修改、删除等功能操作 | |
3. | 管理员选择继续操作、返回或者退出系统 | |
扩展 | 步骤 | 分支动作 |
1. | 系统没有查询到图书馆关于这个图书的信息 | |
2. | 管理员可对其他图书进行管理或者增加图书信息 |
管理员对书籍管理具体活动图如下:
图15管理员对书籍管理活动图
3.4.3 借阅者信息管理
管理员登录以后选择借阅者信息管理进入。管理员都可以在这对于来图书馆进行借阅和归还书籍的借阅者信息情况进行了解,并且可以对于借阅者的相关信息进行查看、增加、修改、删除等功能操作。
具体描述如下:
表9管理员对借阅者信息管理用例描述
用例 | 管理员对借阅者信息管理 | |
---|---|---|
使用语境 | 管理员登录系统以后选择借阅者信息管理功能 | |
范围 | 管理员(图书管理员和系统管理员) | |
主执行者 | 管理员要对借阅者信息进行管理 | |
前置条件 | 管理员登录 | |
后置条件 | 查看借阅者信息、增加借阅者信息、修改借阅者信息、删除借阅者信息 | |
返回 | (可以继续选择书籍管理、借阅者信息管理、借阅者信息管理) | |
触发事件 | 管理员对于借阅者信息进行管理 | |
级别 | 概要 | |
描述 | 步骤 | 活动 |
1. | 管理员输入借阅者名字 | |
2. | 管理员选择对于全部借阅者信息进行查看、增加、修改、删除等功能操作 | |
3. | 管理员选择继续操作、返回或者退出系统 | |
扩展 | 步骤 | 分支动作 |
1. | 系统没有查询到图书馆关于这个借阅者的信息 | |
2. | 管理员可对其他借阅者进行管理或者增加借阅者信息 |
管理员对借阅者信息管理具体活动图如下:
图16管理员对借阅者信息管理活动图
3.4.4 图书管理员信息管理
系统管理员登录以后选择图书管理员信息管理进入,系统管理员可以对于图书管理员的相关信息进行查看、增加、修改、删除等功能操作。
具体描述如下:
表10管理员对图书管理员信息管理用例描述
用例 | 管理员对图书管理员信息管理 | |
---|---|---|
使用语境 | 管理员登录系统以后选择图书管理员信息管理功能 | |
范围 | 管理员(图书管理员和系统管理员) | |
主执行者 | 管理员要对图书管理员信息进行管理 | |
前置条件 | 管理员登录 | |
后置条件 | 查看图书管理员信息、增加图书管理员信息、修改图书管理员信息、删除图书管理员信息 | |
返回 | (可以继续选择书籍管理、借阅者信息管理、借阅者信息管理) | |
触发事件 | 管理员对于图书管理员信息进行管理 | |
级别 | 概要 | |
描述 | 步骤 | 活动 |
1. | 管理员输入图书管理员名字 | |
2. | 管理员选择对于全部图书管理员信息进行查看、增加、修改、删除等功能操作 | |
3. | 管理员选择继续操作、返回或者退出系统 | |
扩展 | 步骤 | 分支动作 |
1. | 系统没有查询到图书馆关于这个图书管理员的信息 | |
2. | 管理员可对其他图书管理员进行管理或者增加图书管理员信息 |
管理员对图书管理员信息管理具体活动图如下:
图17管理员对图书管理员信息管理活动图
4. 性能需求
根据用户对本系统的要求,确定了图书馆管理系统在响应时间、可靠性、安全性等方面需要有较高的性能要求。
4.1 界面需求
图书馆管理系统的界面要求如下。
1)页面内容:主题突出,站点定义、术语和行文格式统一、规范、明确、栏目、菜单设置和布局合理,传递的信息准确、及时。能让用户一下就能找到自己想要的信息,让用户方便快捷的在图书馆完成借还书,管理员能更快速的处理好图书馆的工作。系统内容丰富,文字准确,语句通顺,专用术语使用规范,行文格式统一规范。
2)导航结构:页面具有明确的导航指示,且便于理解,方便用户使用。
3)技术环境:页面大小适当,能用各种常用浏览器以不同分辨率浏览,无错误链接和空链接;采用CSS处理,控制字体大小和版面布局。
4)艺术风格:界面、版面形象清晰悦目、布局合理,字号大小适宜、字体选择合理,前后一致,美观大方,动与静搭配恰当,动静效果好;色彩和谐自然,与主题内容相协调。
4.2 响应时间需求
无论是客户端还是管理端,当用户登录,进行任何操作的时候,图书馆管理系统应该及时地进行反应,反应的时间在5秒以内。系统应能监测出各种非正常情况,如遇设备的通信中断,无法连接数据库服务器等,以避免出现长时间等待甚至无响应。
4.3 可靠性需求
图书馆管理系统应保证7×24小时内不宕机,保证最少500人可以同时在客户端和管理端登录和使用,并且此时系统能正常运行,正确提示相关内容。
4.4 开放性需求
图书馆管理系统应该具有较强的灵活性,以适应将来功能扩展的需求。这样不至于将来想要扩展功能的时候系统需要重新编写。
4.5 可扩展性需求
图书馆管理系统设计要求能够体现扩展性要求,以适应将来功能扩展的需求。
4.6 系统安全性需求
图书馆管理系统有严格的权限管理功能,各功能模块需有相应的管理人的权限方能进入。图书馆管理系统需要定期对于系统数据进行存储,防止各类误操作可能造成的数据丢失,破坏。防止用户非法获得网页以及内容。
5. 系统分析
在该图书馆管理系统中,系统用户只有在通过互联网进入图书馆管理系统再登陆系统后才能使用系统的各项功能。用户可以进行借阅书籍和归还书籍。同时,管理员可以对图书馆的图书信息、借阅者信息、图书管理员信息进行管理。图书馆管理系统包括管理端系统和客户端系统。
管理端系统包括查询书籍信息、借阅图书、归还图书、预借图书、续借图书等功能。客户端系统包括书籍管理、借阅者信息管理、图书馆管理员信息管理等功能。
6. 页面设计
6.1 客户端界面设计
客户端界面是供借阅者来图书馆提供借阅书籍、归还书籍、查询书籍信息等功能的过程。借阅者通过输入账户密码登录系统以后可以对于想要看的书本进行查询,可以对于想要借阅的图书进行预借和借阅,也可以对于借阅的图书进行归还,更重要的是对于过期的图书可以进行能续借。主要界面设计如下:
6.1.1 借阅者登录页面
在该图书馆管理系统中,系统用户只有在登陆系统后才能使用系统的各项功能。登录界面中主要放置了两个输入框,一个用户输入用户名,一个用户输入用户密码,输入用户名与密码后点击确认键进入登陆。
在本登陆模块中,系统会先判断输入的账号和密码是否正确,首先需要打开数据库,获取数据库中记载用户信息的表,然后根据输入的信息和数据库表中的信息进入判断,假如用户名与密码一致符合数据表中的记录,那么说明数据库中存在着该用户,信息匹配,此时转向登陆界面,登陆成功进入系统主界面。否则需要找回密码或者注册新用户。
借阅者登录页面如图所示:
图18借阅者登录页面
6.1.2 查询书籍信息页面
在该图书馆管理系统中,用户登录系统以后选择查询书籍信息功能进入该页面,在此页面,用户可以选择查询的条件,系统会根据用户的选择在数据库里面寻找符合的信息,将符合的信息则显示给用户,否则提示用户查询失败。
借阅者查询书籍信息页面如图所示:
图19借阅者查询书籍信息页面
6.1.3 预借书籍页面
在该图书馆管理系统中,用户登录系统以后选择预借书籍功能进入该页面,在此页面,用户可以填写预借图书信息,系统会根据用户的选择在数据库里面寻找符合的图书信息,如果有符合的图书信息,则告知用户预借图书成功,否则提示用户预借图书失败。
借阅者预借书籍页面如图所示:
图20借阅者预借书籍页面
6.1.4 借阅书籍页面
在该图书馆管理系统中,用户登录系统以后选择借阅书籍功能进入该页面,在此页面,有两个选项可以选,一个是已预借图书,一个是未预借图书。系统默认已预借图书,如果未借阅图书系统会提示用户先进行预借图书再来借阅书籍。
借阅图书时,用户输入要借阅的书籍名和借阅的时间,系统会在数据库寻找是否有符合的图书信息,如果有,则告知用户借阅成功,并且显示借阅的图书信息,否则提示用户借阅失败。
借阅者借阅书籍页面如图所示:
图21借阅者借阅书籍页面
6.1.5 归还书籍页面
在该图书馆管理系统中,用户登录系统以后选择归还书籍功能进入该页面,在此页面,有两个选项可以选,一个是没有过期,一个是已过期。系统默认没有过期,如果已过期系统会提示用户先进行续借图书再来归还书籍。
归还图书时,用户输入要归还的书籍名和归还的时间,系统会在数据库寻找是否有符合的图书信息,和判断是否过期,如果有且没过期,则告知用户归还图书成功,并且显示归还的图书信息,否则提示用户归还图书失败。
借阅者归还书籍页面如图所示:
图22借阅者归还书籍页面
6.1.6 续借书籍页面
在该图书馆管理系统中,用户登录系统以后选择续借书籍功能进入该页面,在此页面,有两个选项可以选,一个是已过期,一个是没有过期。系统默认已过期,如果没有过期系统会提示用户返回上一级进行其他功能选择。
续借图书时,用户输入要续借的书籍名和现在的时间,系统会在数据库寻找是否有符合的图书信息,和判断是否过期,如果有且已过期,则告知用户续借图书成功,并且显示续借的图书信息和续借后最晚归还时间还有本次续借次数已用完!!!。否则提示用户续借图书失败。
借阅者续借书籍页面如图所示:
图23借阅者续借书籍页面
6.2 管理端界面设计
管理端界面是供管理员来图书馆管理图书馆的页面。其中包括图书馆管理员对于图书馆的管理还有系统管理员对于图书馆管理系统的管理。
管理端主要实现题库管理、问卷管理、职位发布、简历管理、面试管理以及用户管理等功能。主要界面设计如下:
6.2.1 管理员登录页面
在该图书馆管理系统中,系统用户只有在登陆系统后才能使用系统的各项功能。登录界面中主要放置了两个输入框,一个用户输入用户名,一个用户输入用户密码,输入用户名与密码后点击确认键进入登陆。
在本登陆模块中,系统会先判断输入的账号和密码是否正确,首先需要打开数据库,获取数据库中记载用户信息的表,然后根据输入的信息和数据库表中的信息进入判断,假如用户名与密码一致符合数据表中的记录,那么说明数据库中存在着该用户,信息匹配,此时转向登陆界面,登陆成功进入系统主界面。否则需要找回密码或者注册新用户。
管理员登录页面如图所示:
图24管理员登录页面
6.2.2 书籍管理页面
在该图书馆管理系统中,管理员登录系统以后选择书籍信息管理功能进入该页面,在此页面,管理员可以选择添加信息、修改信息、删除信息、查询信息还有刷新页面等功能。
假如管理员选择查询信息,系统会根据用户的选择在数据库里面寻找符合的信息,将符合的信息则显示给用户,否则提示用户查询失败。
书籍管理页面如图所示:
图25书籍管理页面
6.2.3 借阅者信息管理页面
在该图书馆管理系统中,管理员登录系统以后选择借阅者信息管理功能进入该页面,在此页面,管理员可以选择添加信息、修改信息、删除信息、查询信息还有刷新页面等功能。
假如管理员选择修改信息,系统会根据用户的选择在数据库里面寻找符合的信息,将符合的信息则显示给用户,接着供管理员对于信息进行修改。
借阅者信息管理页面如图所示:
图26借阅者信息管理页面
6.2.4 图书馆管理员信息管理页面
在该图书馆管理系统中,管理员登录系统以后选择图书馆管理员信息管理功能进入该页面,在此页面,管理员可以选择添加信息、修改信息、删除信息、查询信息还有刷新页面等功能。
假如系统管理员选择增加信息,系统会有几个地方供系统管理员填写,比如图书管理员的姓名、编号、出生日期和联系方式。并在底下有两个选项可选,一个是确认,一个是取消。
图书馆管理员信息管理页面如图所示:
图27图书馆管理员信息管理页面
7. 模块设计
图书馆管理系统按照功能分解有客户端子系统和管理端子系统。根据页面的设计,客户端系统分为登录模块、查询书籍信息模块、图书借还模块3个模块,管理端系统分为登录模块、书籍信息管理模块、借阅者信息管理模块、图书馆管理员信息管理模块4个模块,图书馆管理系统与各个模块之间的关系如图30所示。
图28图书馆管理系统与各模块关系图
7.1 客户端子系统模块设计
图书馆管理系统的客户端系统分为借阅者登录模块、查询书籍信息模块、图书借还模块3大模块。
7.1.1 借阅者登录模块
在该图书馆管理系统中,借阅者只有在登陆系统后才能使用系统的各项功能。
比如说查询书籍信息和对于图书馆里面的图书进行借阅、归还、续借等操作。
借阅者登录模块如图所示:
图29借阅者登录模块
借阅者登录模块顺序图如图所示:
图30借阅者登录模块顺序图
7.1.2 查询书籍信息模块
在该图书馆管理系统中,用户登录系统以后选择查询书籍信息功能进入该模块,在这模块借阅者可以对于图书馆的图书信息进行查询,找到自己想要的图书的信息。
查询书籍信息模块如图所示:
图31查询书籍信息模块
查询书籍信息模块顺序图如图所示:
图32查询书籍信息模块顺序图
7.1.3 图书借还模块
在该图书馆管理系统中,用户登录系统以后选择图书借还信息功能进入该模块,在这模块借阅者可以对于图书馆的图书进行借阅,可以归还借阅的图书,可以续借已过期的图书等功能。
图书借还模块如图所示:
图33图书借还模块
图书借还模块顺序图如图所示:
图34图书借还模块顺序图
7.2 管理端子系统模块设计
管理端系统分为管理员登录模块、书籍信息管理模块、借阅者信息管理模块、图书馆管理员信息管理模块4大模块。
7.2.1 管理员登录模块
在该图书馆管理系统中,管理员只有在登陆系统后才能使用系统的各项功能。
比如说图书馆管理员可以对于书籍信息和借阅者信息进行管理。而系统管理员不但可以对于书籍信息和借阅者信息进行管理,还可以对于图书馆管理员信息进行管理。
管理员登录模块如图所示:
图35管理员登录模块
管理员登录模块顺序图如图所示:
图36管理员登录模块顺序图
7.2.2 书籍信息管理模块
在该图书馆管理系统中,管理员登录系统以后选择书籍信息管理进入该模块,在这模块管理员可以对于图书馆的图书信息进行添加、修改、删除、查询。
书籍信息管理模块如图所示:
图37书籍信息管理模块
书籍信息管理模块顺序图如图所示:
图38书籍信息管理模块顺序图
7.2.3 借阅者信息管理模块
在该图书馆管理系统中,管理员登录系统以后选择节借阅者信息管理进入该模块,在这模块管理员可以对于来图书馆的借阅图书的借阅者信息进行添加、修改、删除、查询。
借阅者信息管理模块如图所示:
图39借阅者信息管理模块
借阅者信息管理模块顺序图如图所示:
图40借阅者信息管理模块顺序图
7.2.4 图书馆管理员信息管理模块
在该图书馆管理系统中,系统管理员登录系统以后选择图书馆管理员信息管理进入该模块,在这模块系统管理员可以对于图书馆管理员信息进行添加、修改、删除、查询。
图书馆管理员信息模块如图所示:
图41图书馆管理员信息模块
图书馆管理员信息模块顺序图如图所示:
图42图书馆管理员信息模块顺序图
8. 数据库设计
本图书馆管理系统的数据库设计主要是根据第一章的需求分析来进行进一步的设计。设计内容主要是进行图书馆管理数据库的设计。
8.1 数据库概念设计
数据库概念设计主要是用来反映现实世界中再到图书馆的实体、属性和它们之间的关系等的原始数据形式,建立数据库的每一幅用户视图。其中图书馆管理系统中的管理用户可以对于图书进行借阅、归还、续借等操作。管理人员可以对于图书馆的图书信息和借阅者的信息进行管理。
8.1.1 数据库E-R设计图
图书馆管理系统内关系用E-R图表示,便于理解。
图书馆管理系统数据库E-R图如图所示:
图43图书馆管理系统数据库E-R图
8.1.2 E-R设计图说明
表11数据库E-R实体表
实体名称 | 实体描述 |
---|---|
图书 | 用于存储图书信息 |
图书类别 | 用于存储图书馆类别信息 |
借阅者 | 用于存储借阅者信息 |
借阅证 | 用于存储借阅证信息 |
图书管管理员 | 用于存储图书管管理员信息 |
系统管理员 | 用于存储系统管理员信息 |
8.2 数据库逻辑设计
8.2.1 数据库表
图书馆管理系统根据需求分析大致分为8个表。他们分别是图书信息表、图书类别表、借阅者信息表、借阅证表、管理员信息表、预借图书信息表、借还图书信息表还有逾期记录表。下面为8个表的内容:
8.2.1.1图书信息表
表12图书信息表(book)
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
Book_id | 图书编号 | varchar(15) | 联合主键 | 否 |
Book_name | 图书名称 | varchar(30) | 联合主键 | 否 |
Type_name | 类别名称 | varchar(20) | 外键 | 否 |
Book_writer | 作者 | varchar(20) | 否 | |
Book_press | 出版社 | varchar(20) | 否 | |
Book_num | 书本库存数量 | number(3,0) | 否 | |
Book_price | 图书价格 | number(4,2) | 否 |
8.2.1.2图书类别表
表13图书类别表(type)
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
Type_name | 类别名称 | varchar(20) | 主键 | 否 |
Type_id | 类别编号 | varchar(10) | 否 |
8.2.1.3借阅者信息表
表14借阅者信息表(borrower)
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
Borrower_name | 借阅者姓名 | varchar(20) | 主键 | 否 |
B_card_id | 借阅证编号 | varchar(15) | 外键 | 否 |
Borrower_sex | 借阅者性别 | varchar(2) | 男或女 | 否 |
Borrower_birth | 借阅者生日 | datetime | 否 | |
Borrower_pwd | 密码 | varchar(15) | 否 | |
Borrower_account | 账户 | varchar(20) | 否 |
8.2.1.4借阅证表
表15借阅证表(borrow_card)
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
B_card_id | 借阅证编号 | varchar(15) | 主键 | 否 |
B_card_date | 办证时间 | datetime | 否 | |
B_card_indate | 有效期 | datetime | 否 | |
B_card_usenum | 可借数量 | number(3,0) | 否 |
8.2.1.5管理员信息表
表16管理员信息表(admin)
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
Admin_name | 管理员姓名 | varchar(20) | 联合主键 | 否 |
Admin_id | 管理员编号 | varchar(15) | 联合主键 | 否 |
Admin_sex | 管理员性别 | varchar(2) | 男或女 | 否 |
Admin_birth | 管理员生日 | datetime | 否 | |
Admin_pwd | 管理员密码 | varchar(15) | 否 | |
Admin_account | 管理员账户 | varchar(20) | 否 |
8.2.1.6预借图书信息表
表17预借图书信息表(Reserve Book)
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
r_Number | 编号 | int | 是 | |
r_BookId | 图书编号 | varchar(15) | 联合主键 | 否 |
r_BookName | 图书名称 | varchar(30) | 联合主键 | 否 |
r_BookName | 图书作者 | varchar(20) | 是 | |
r_ReaderId | 借阅证编号 | varchar(15) | 外键 | 否 |
r_ReaderName | 借阅者姓名 | varchar(20) | 否 | |
r_BookNumber | 预借数量 | int | 5 | 是 |
r_BookPrice | 图书价格 | int | 否 |
8.2.1.7借还图书信息表
表18借还图书信息表(Borrow books)
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
Number | 编号 | int | 是 | |
CardID | 借阅证编号 | varchar(15) | 外键 | 否 |
ReaderName | 借阅者姓名 | varchar(20) | 否 | |
BookID | 图书编号 | varchar(15) | 联合主键 | 否 |
BookName | 图书名称 | varchar(30) | 联合主键 | 否 |
Price | 图书价格 | int | 否 | |
BorrowDate | 借书日期 | datetime | 否 | |
BorrowNumber | 借书数量 | int | 5 | 是 |
ReturnBook | 还书日期 | datetime | 是 |
8.2.1.8逾期记录表
表19逾期记录表(dated)
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
Number | 编号 | int | 是 | |
CardID | 借阅证编号 | varchar(15) | 外键 | 否 |
ReaderName | 借阅者姓名 | varchar(20) | 否 | |
BookID | 图书编号 | varchar(15) | 联合主键 | 否 |
BookName | 图书名称 | varchar(30) | 联合主键 | 否 |
Money | 罚款金额 | number(3,0) | 是 |
8.2.2 数据库类图
图书馆管理系统数据库类图如下:
图44图书馆管理系统数据库类图
三、设备要求
根据图书馆管理系统项目的需求背景陈述,可以确定本项目分为客户端和管理端,客户端主要功能是提供借阅者的图书信息查询、借阅图书、归还图书等。管理端的功能提供图书管理员和系统管理员两类人使用。图书管理员能更好的对于读者信息、图书信息进行查看、增加、修改、删除。系统管理员能更好的管理图书馆信息和图书管理员信息。它们的关系如图45所示。
3.1 系统运行的网络环境要求
本系统的网络拓扑结构图如图46所示,无论是客户端的借阅者还是管理端的管理用户都可以通过网络登录到本系统中。借阅者可以通过网络查询图书的相关信息,进行借阅图书或者归还图书等功能,图书管理员通过网络对于借阅者借阅信息进行管理。管理端的系统管理员需要设置管理端的用户以及相应的权限。
图46网络拓扑结构图
3.2 系统运行的硬件环境要求
本系统的硬件环境如下:
借阅者使用的电脑:
普通PC | |
---|---|
CPU | P100GHz |
内存 | 256MB以上 |
支持版本 | 能够运行IE5.0以上或者Netscape4.0以上版本的机器 |
分辨率 | 推荐使用1024×768像素 |
管理员使用电脑:
普通电脑 | |
---|---|
CPU | P100GHz |
内存 | 512MB以上 |
支持版本 | 能够运行IE5.0以上或者Netscape4.0以上版本的机器 |
分辨率 | 推荐使用1024×768像素 |
Web服务器 | |
---|---|
CPU | P100GHz |
内存 | 2G以上 |
硬盘 | 100GB以上 |
网卡 | KMb/s速度 |
数据库服务器 | |
---|---|
CPU | P100GHz |
内存 | 2GB以上 |
硬盘
硬盘 | 100GB以上 |
---|
3.3 系统运行软件环境要求
本系统的软件环境如下:
操作系统 | 中文Windows10 |
---|---|
数据库 | SQL Server 2000 |
开发工具包 | JDK,java |
Web服务器 | Tomcat |
浏览器 | Windows |
四、项目实现过程
4.1 基于Java环境的系统功能分析以及其代码实现
第一步:创建一个BOOK类来定义图书
public class Book {
private String bookName;
private String authorName;
private double price;
private String type;
private boolean isBorrowed;
public Book(String bokName, String authorName, double price, String type) {
this.bookName = bokName;
this.authorName = authorName;
this.price = price;
this.type = type;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bokName) {
this.bookName = bokName;
}
public String getAuthorName() {
return authorName;
}
public void setAuthorName(String authorName) {
this.authorName = authorName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toString() {
return "Book{" +
"bookName='" + bookName + '\'' +
", authorName='" + authorName + '\'' +
", price=" + price +
", type='" + type + '\'' +
(isBorrowed ? " 已借出" : " 未借出") +
'}';
}
第二步:创建一个BookList类来定义具体有什么图书
public class BookList {
private Book[] books;
private int BookUseSize;
public BookList() {
books = new Book[5];
books[0] = new Book("三国演义", "施耐庵", 68.8, "小说");
books[1] = new Book("水浒传", "罗贯中", 56.6, "小说");
books[2] = new Book("西游记", "吴承恩", 60, "小说");
this.BookUseSize = 3;
}
public void setBooks(int i, Book book) {
if (i >= books.length) {
expansion();
}
books[i] = book;
}
public Book getPosBooks(int i) {
return books[i];
}
public void setBooksUseSize(int i) {
this.BookUseSize = i;
}
public int getBooksUseSize() {
return this.BookUseSize;
}
public void expansion() {
books = Arrays.copyOf(books, 2 * books.length);
}
第三步:创建和用户相关的类(也就是使用者)
创建User也就是父类的特征
public abstract class User {
protected String userName;
public User(String userName) {
this.userName = userName;
}
}
创建管理员,来管理图书书籍
public class Administrator extends User {
public Administrator(String userName) {
super(userName);
}
}
创建普通用户,继承父类Users
public class GeneralUser extends User {
public GeneralUser(String userName) {
super(userName);
}
}
第四步:创建一切程序的入口,也就是我们系统的主类
import Book.BookList;
import User.User;
import User.Administrator;
import User.GeneralUser;
import java.util.Scanner;
public class Main {
public static User login() {
System.out.println("请输入你的姓名:>");
Scanner scanner = new Scanner(System.in);
String userName = scanner.nextLine();
while (true) {
System.out.println("请输入你的身份:> 1,管理员 0,普通用户");
int choice = scanner.nextInt();
if (choice == 1) {
return new Administrator(userName);//发生多态
} else if (choice == 0) {
return new GeneralUser(userName);//发生多态
} else {
System.out.println("选择错误,请重新选择:>");
}
}
}
public static void main(String[] args) {
User user = login();
}
第五步:创建菜单包实现抽象类定义的接口
public class Administrator extends User {
public Administrator(String userName) {
super(userName);
}
public int menu() {
System.out.println("====hello," + super.userName + " welcome====");
System.out.println("1,查找图书");
System.out.println("2,新增图书");
System.out.println("3,删除图书");
System.out.println("4,显示图书");
System.out.println("0,退出系统");
System.out.println("请输入你的操作:>");
Scanner scanner = new Scanner(System.in);
return scanner.nextInt();
}
}
2、GeneralUser类(2/3)
public class GeneralUser extends User {
public GeneralUser(String userName) {
super(userName);
}
public int menu() {
System.out.println("====hello," + super.userName + " welcome====");
System.out.println("1,查找图书");
System.out.println("2,借阅图书");
System.out.println("3,归还图书");
System.out.println("0,退出系统");
System.out.println("请输入你的操作:>");
Scanner scanner = new Scanner(System.in);
return scanner.nextInt();
}
}
3、User类
public abstract class User {
protected String userName;
public User(String userName) {
this.userName = userName;
}
public abstract int menu()}
最后一步:函数针对我们系统实现其六大功能
1、新增图书AddOperation类
package Operation;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class AddOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("==新增图书==");
addBookOperation(bookList);
}
public void addBookOperation(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入书名:>");
String bookName = scanner.nextLine();
System.out.println("请输入作者名:>");
String authorName = scanner.nextLine();
System.out.println("请输入书的类型:>");
String type = scanner.nextLine();
System.out.println("请输入书的单价:>");
Double price = scanner.nextDouble();
Book book = new Book(bookName, authorName, price, type);
int currentSize = bookList.getBooksUseSize();
bookList.setBooks(currentSize, book);
bookList.setBooksUseSize(currentSize + 1);
System.out.println("新增成功!");
}
}
2、展示图书DisplayOperation类
package Operation;
import Book.BookList;
public class DisplayOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("==展示图书==");
displayBooksOperation(bookList);
}
public void displayBooksOperation(BookList bookList) {
int currentSize = bookList.getBooksUseSize();
for (int i = 0; i < currentSize; i++) {
System.out.println(bookList.getPosBooks(i));
}
}
}
3、查找图书FindOperation类
package Operation;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class FindOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("==查找图书==");
Scanner scan = new Scanner(System.in);
System.out.println("请输入查找的方式:> 1,按书名查找 0,按作者查找");
int find = scan.nextInt();
scan.nextLine();
String[] howToFind = new String[] {"作者名", "书名"};
System.out.println("请输入你要查找的" + howToFind[find] +":>");
String bookName = scan.nextLine();
int result = findBooksOperation(bookList, bookName, find);
if (result == -1) {
System.out.println("未找到该书!");
return;
}
System.out.println(bookList.getPosBooks(result));
}
public int findBooksOperation(BookList bookList, String bookName, int mark) {
int currentSize = bookList.getBooksUseSize();
for (int i = 0; i < currentSize; i++) {
Book book = bookList.getPosBooks(i);
if (mark == 1 && book.getBookName().equals(bookName)) {
return i;
}
if (mark == 0 && book.getAuthorName().equals(bookName)) {
return i;
}
}
return -1;
}
public int findBooksOperation(BookList bookList, String bookName) {
int currentSize = bookList.getBooksUseSize();
for (int i = 0; i < currentSize; i++) {
Book book = bookList.getPosBooks(i);
if (book.getBookName().equals(bookName)) {
return i;
}
}
return -1;
}
}
4、借阅图书BorrowOperation类和归还图书ReturnOperation类
package Operation;
import Book.BookList;
import BookBook;
import java.util.Scanner;
public class BorrowOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("==借阅图书==");
borrowBookOperation(bookList);
}
public void borrowBookOperation(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要借阅的书名:>");
String borrowBookOperation = scanner.nextLine();
FindOperation findOperation = new FindOperation();
int findResult = findOperation.findBooksOperation(bookList, borrowBookOperation);
if (findResult == -1) {
System.out.println("没有此书信息!");
return;
}
Book book = bookList.getPosBooks(findResult);
book.setBorrowed(true);
System.out.println("已借出!");
}
}
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class ReturnOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("==归还图书==");
returnBookOperation(bookList);
}
public void returnBookOperation(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要归还的书名:>");
String returnBookOperation = scanner.nextLine();
FindOperation findOperation = new FindOperation();
int findResult = findOperation.findBooksOperation(bookList, returnBookOperation);
if (findResult == -1) {
System.out.println("没有此书信息!");
return;
}
Book book = bookList.getPosBooks(findResult);
book.setBorrowed(false);
System.out.println("已归还!");
}
}
5、删除图书DelOperation类
package Operation;
import Book.BookList;
import Book.Book;
import java.util.Scanner;
public class DelOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("删除图书");
delBookOperation(bookList);
}
public void delBookOperation(BookList bookList) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入要删除的书名:>");
String delName = scan.nextLine();
FindOperation find = new FindOperation();
int result = find.findBooksOperation(bookList, delName);
if (result == -1) {
System.out.println("没有此书信息!");
return;
}
int currentSize = bookList.getBooksUseSize();
int i = 0;
for (i = result; i < currentSize - 1; i++) {
Book book = bookList.getPosBooks(i + 1);
bookList.setBooks(i, book);
}
bookList.setBooks(i,null);
bookList.setBooksUseSize(currentSize - 1);
System.out.println("已删除!");
}
}
6、退出系统ExitOperation类
package Operation;
import Book.BookList;
public class ExitOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("==退出系统==");
System.out.println("你已经退出");
System.exit(0);
int currentSize = bookList.getBooksUseSize();
for (int i = 0; i < currentSize; i++) {
bookList.setBooks(i, null);
}
}
}
4.2 基于SQLSERVER环境的系统功能分析以及其数据库的搭建
图书信息表t_book
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
Book_id | 图书编号 | varchar(15) | 主键 | 否 |
Type_id | 类别编号 | varchar(10) | 外键 | 否 |
Type_name | 类别名称 | varchar(20) | 外键 | 否 |
Book_name | 书名 | varchar(20) | 否 | |
Book_writer | 作者 | varchar(10) | 否 | |
Book_company | 出版社 | varchar(20) | 是 | |
Book_date | 出版日期 | datetime | 是 | |
Book_brief | 简介 | varchar(100) | 是 |
学生信息表t_student
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
Stu_id | 学号 | varchar(15) | 主键 | 否 |
Stu_name | 姓名 | varchar(10) | 否 | |
Stu_pwd | 密码 | varchar(20) | 否 | |
Stu_sex | 性别 | varchar(2) | 否 | |
Stu_tel | 联系电话 | varchar(15) | 是 | |
Borrow_num | 借书数量 | number(2) | 默认为0 | 否 |
Stu_Depart | 所在院系 | varchar(10) | 否 |
管理员信息表t_admin
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
Admin_id | 工作号 | number(5) | 主键 | 否 |
Admin_name | 姓名 | varchar(10) | 否 | |
Admin_pwd | 密码 | varchar(20) | 否 |
借阅信息表 t_borrow_student
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
Book_id | 图书编号 | varchar(15) | 外主键 | 否 |
Stu_id | 学生学号 | varchar(15) | 外主键 | 否 |
Borrow_date | 借阅日期 | datetime | 否 | |
Return_date | 还书日期 | datetime | 否 | |
renew | 是否续借 | varchar(2) | 否 |
图书类别信息表 t_book_type
字段英文名称 | 列名 | 数据类型 | 字段约束 | 可否为空 |
---|---|---|---|---|
Type_id | 类别编号 | varchar(10) | 外主键 | 否 |
Type_name | 类别名称 | varchar(20) | 外主键 | 否 |
SQL语句创建表
代码如下:
create table t_book_type(--图书类别信息表 t_book_type
Type_id varchar(10) not null, --类别编号
Type_name varchar(20) not null, --类别名称
primary key(Type_id ,type_name)
)
create table t_book(--图书信息表t_book
Book_id varchar(15) not null primary key, --图书编号
Type_id varchar(10) not null, --类别编号
Type_name varchar(20) not null, --类别名称
Book_name varchar(20) not null, --书名
Book_writer varchar(10) not null, --作者
Book_company varchar(20), --出版社
Book_date datetime, --出版日期
Book_brief varchar(100), --简介
Book_price float not null, --价格
foreign key(Type_id,Type_name) references t_book_type(Type_id,Type_name)
)
create table t_student(--学生信息表t_student
Stu_id varchar(15) not null, --学号
Stu_name varchar(10) not null, --姓名
Stu_pwd varchar(20) not null, --密码
Stu_sex varchar(2) not null check(Stu_sex='男' or Stu_sex='女'), --性别
Stu_tel varchar(15), --联系电话
Borrow_num numeric(2,0) not null default 0 , --表示默认值为0--借书数量
Stu_Depart varchar(10) not null, --所在院系
Stu_liberty_id varchar(6) not null, --借书证号
primary key(Stu_id,Stu_liberty_id)
)
create table t_admin(--管理员信息表t_admin
Admin_id numeric(5,0) not null primary key, --工作号
Admin_name varchar(10) not null, --姓名
Admin_pwd varchar(20) not null --密码
)
create table t_borrow_student(--借阅信息表 t_borrow_student
Book_id varchar(15) not null, --图书编号
Stu_id varchar(15) not null, --学生学号
Borrow_date datetime not null, --借阅日期
Return_date datetime not null, --还书日期
renew varchar(2) not null, --是否续借
Stu_liberty_id varchar(6) not null, --借书证号
primary key(Book_id,Stu_id),
foreign key(Book_id) references t_book(Book_id),
foreign key(Stu_id,Stu_liberty_id) references t_student(Stu_id,Stu_liberty_id)
)
图47图书信息管理系统数据库里面创建的表
insert into t_book_type(Type_id,Type_name)--图书类别信息表
values ('T00001','计算机类'),
('T00002','中国文学'),
('T00003','外国文学'),
('T00004','数学类'),
('T00005','外国语类'),
('T00006','政治类'),
('T00007','天文类'),
('T00008','体育类'),
('T00009','自然科学类'),
('T00010','其他')
insert into t_book(Book_id,Type_id,Type_name,Book_name,Book_writer,Book_company,Book_date,Book_brief,Book_price,Book_num)--图书信息表
values ('B00001','T00001','计算机类','数据库系统原理','邓丽','广东电子出版社','2018-08-05','数据库介绍。',40,100),
('B00002','T00001','计算机类','java程序设计','周绍斌','广东电子出版社','2018-07-25','java学习',45,200),
('B00003','T00002','中国文学','文化苦旅','余秋雨','作家出版社','2012-06-01','探索中国文化的历史命运',34.5,100),
('B00004','T00002','中国文学','朝花夕拾','鲁迅','长江文艺出版社','2015-12-29','饱含着浓烈的抒情气息',20.39,100),
('B00005','T00003','外国文学','人间失格','太宰治','现代出版社','2016-10-05','人间失格。',45,100),
('B00006','T00003','外国文学','老人与海','海明威','国际文化出版公司','2016-11-05','外国文学。',20.5,100),
('B00007','T00004','数学类','高等数学','杨爱珍','上海财经大学出版社','2015-10-01','大学生必备数学知识。',29,100),
('B00008','T00005','外国语类','大学英语','陆琳','人民邮电出版社','2016-06-02','大学生必备英语知识。',35.6,100),
('B00009','T00006','政治类','毛泽东思想','刘琳','机械工业出版社','2014-05-09','学习新思想',45,100),
('B00010','T00004','数学类','线性代数','李黎','高等教育出版社','2016-07-28','大学生必备线性知识。',30.5,100)
insert into t_admin(Admin_id,Admin_name,Admin_pwd)--管理员信息表
values (1,'李恺','001'),
(2,'李军','002'),
(3,'张鸿涛','003'),
(4,'文章','004'),
(5,'詹文海','005'),
(6,'李志勇','006'),
(7,'梁宇飞','007'),
(8,'周永波','008'),
(9,'谢玉玉','009'),
(10,'范文昊','010'),
(11,'刘景页','011')
insert into t_student(Stu_id,Stu_name,Stu_pwd,Stu_sex,Stu_tel,Borrow_num,Stu_Depart,Stu_liberty_id)--学生信息表
values ('S00001','张羽','S00001','男','15620354789',0,'计算机学院','R00001'),
('S00002','李飞','S00002','女','13856214521',0,'计算机学院','R00002'),
('S00003','张三','S00003','男','14235689526',0,'外国语学院','R00003'),
('S00004','刘泳景','S00004','男','14785623584',0,'机械学院','R00004'),
('S00005','曹家俊','S00005','男','15623785123',0,'商管学院','R00005'),
('S00006','余大兔','S00006','女','17856241254',0,'法学院','R00006'),
('S00007','刘小青','S00007','女','14562358971',0,'医学院','R00007'),
('S00008','徐俊瑞','S00008','男','18554235561',0,'计算机学院','R00008'),
('S00009','刘千秋','S00009','男','15478620146',0,'计算机学院','R00009'),
('S00010','孙浩楠','s00010','男','14862395209',0,'数媒学院','R00010')
insert into publish(p_name,p_id)--出版社信息表
values ('现代出版社','10001'),
('作家出版社','10002'),
('长江文艺出版社','10003'),
('广东电子出版社','10004'),
('人民邮电出版社','10005'),
('高等教育出版社','10006'),
('机械工业出版社','10007'),
('国际文化出版公司','10008'),
('上海财经大学出版社','10009')
insert into t_borrow_student(Book_id,Stu_id,Borrow_date,Return_date,renew,Stu_liberty_id,overdue)--借阅信息表
values ('B00001','S00005','2018-10-15','2018-11-10','否','R00005','否'),
('B00002','S00009','2021-06-02','2021-07-01','否','R00009','否'),
('B00003','S00001','2018-09-10','2018-10-05','否','R00001','否'),
('B00004','S00007','2019-10-06','2019-11-05','否','R00007','否'),
('B00005','S00010','2016-05-25','2016-06-20','否','R00010','否'),
('B00006','S00002','2017-10-09','2017-11-06','是','R00002','否'),
('B00006','S00004','2017-11-06','2017-12-06','否','R00004','否'),
('B00007','S00008','2020-09-01','2020-10-01','否','R00008','否'),
('B00010','S00003','2019-11-15','2019-12-09','否','R00003','否'),
('B00010','S00006','2018-08-06','2018-09-06','否','R00006','否')
结果如下:
出版社信息表(Publish):
管理员信息表(t_admin):
图书类别信息表(t_book_type):
借阅信息表(t_borrow_student):
学生信息表(t_student):
五、项目测试
5.1 功能测试
5.1.1用户注册
测试类型 黑盒测试
测试方法 等价类划分法
模块名称 用户注册
用例描述 该用例用于测试前端系统用户注册功能是否符合预期要求
前置条件 用户在图书馆信息管理系统主界面(首页)点击用户注册
编号 | 测试项 | 操作步骤 | 预期结果 | 实际结果 | 数据 |
---|---|---|---|---|---|
Test0 | 成功完成用户注册 | 1.用户首页点击注册 2.用户输入账号 3.用户输入首密码 4.用户输入次密码 | 提示注册成功引导用户登录 | 用户成功注册并登录 | 1.用户名:wss444 2.首密码:123456 3.次密码:123456 |
Test1 | 用户注册失败 | 1.用户首页点击注册 2.用户输入用户名 3.用户输入首密码 4.用户输入次密码 | 提示注册失败并告知账号已被占用,要求重新填写账号名 | 提示注册失败并告知账号已被占用,要求重新填写账号名 | 1.用户名:Eee123 2.首密码:123456 3.次密码:123456 |
Test2 | 用户注册失败 | 1.用户首页点击注册 2.用户输入用户名 3.用户输入首密码 4.用户输入次密码 | 提示注册失败告知首密码和次密码不一致 | 提示注册失败告知首密码和次密码不一致 | 1.用户名:Rty7888 2.首密码:123455 3.次密码: 123456 |
Test3 | 用户注册失败 | 1.用户首页点击注册 2.用户输入用户名 3.用户输入首密码 4.用户输入次密码 | 提示注册失败并告知账号为空 | 提示注册失败并告知账号为空 | 1.用户名: 2.首密码:123456 3.次密码: 123456 |
Test4 | 用户注册失败 | 1.用户首页点击注册 2.用户输入用户名 3.用户输入首密码 4.用户输入次密码 | 提示注册失败并告知账号由4-8位字母、数字组成 | 提示注册失败并告知账号由字母、数字组成 | 1.用户名:0007 2.首密码:123456 3.次密码: 123456 |
Test5 | 用户注册失败 | 1.用户首页点击注册 2.用户输入用户名 3.用户输入首密码 4.用户输入次密码 | 提示注册失败并告知账号由4-8位字母、数字组成 | 提示注册失败并告知账号由4-8位字母、数字组成 | 1.用户名:Aa1 2.首密码:123456 3.次密码: 123456 |
Test6 | 用户注册失败 | 1.用户首页点击注册 2.用户输入用户名 3.用户输入首密码 4.用户输入次密码 | 提示注册失败并告知账号由4-8位字母、数字组成 | 提示注册失败并告知账号由4-8位字母、数字组成 | 1.用户名:Aaaaaaa 2.首密码:123456 3.次密码: 123456 |
Test7 | 用户注册失败 | 1.用户在首页点击注册 2.用户输入用户名 3.用户输入首密码 4.用户输入次密码 | 提示注册失败并告知账号由4-8位字母、数字组成 | 提示注册失败并告知账号由4-8位字母、数字组成 | 1.用户名:aaaa12345 2.首密码:123456 3.次密码: 123456 |
Test8 | 用户注册失败 | 1.用户在首页点击注册 2.用户输入用户名 3.用户输入首密码 4.用户输入次密码 | 提示注册失败并告知账号由4-8位字母、数字组成 | 提示注册失败并告知账号由4-8位字母、数字组成 | 1.用户名:aaaa123# 2.首密码:123456 3.次密码:123456 |
Test9 | 用户注册失败 | 1.用户在首页点击注册 2.用户输入用户名 3.用户输入首密码 4.用户输入次密码 | 提示注册失败告知密码由6-10位数字组成 | 提示注册失败告知密码由6-10位数字组成 | 1.用户名:aaa123 2.首密码:12345 3.次密码: 12345 |
Test10 | 用户注册失败 | 1.用户在首页点击注册 2.用户输入用户名 3.用户输入首密码 4.用户输入次密码 | 提示注册失败告知密码由6-10位数字组成 | 提示注册失败告知密码由6-10位数字组成 | 1.用户名:aaa123 2.首密码:123456¥ 3.次密码: 123456¥ |
Test11 | 用户注册失败 | 1.用户在首页点击注册 2.用户输入用户名 3.用户输入首密码 4.用户输入次密码 | 提示注册失败告知密码由6-10位数字组成 | 提示注册失败告知密码由6-10位数字组成 | 1.用户名:aaa123 2.首密码:12345678911 3.次密码: 12345678911 |
5.1.2 用户查询书籍
测试类型 黑盒测试
测试方法 场景法
模块名称 用户查询书籍
用例描述 该用例用于测试用户查询书籍功能是否符合预期要求
前置条件 用户在前端查询书籍信息
编号 | 测试项 | 操作步骤 | 预期结果 | 实际结果 | 数据 |
---|---|---|---|---|---|
Test0 | 成功查询书籍 | 1.用户输入读者借阅证 2.输入要查阅的图书名字 3.显示图书信息 | 成功显示图书信息 | 成功显示图书信息 | 1.输入读者借阅证:aaa123 2.输入查阅的图书名字:《海的老人》 |
Test1 | 查询书籍失败 | 1.用户输入读者借阅证 2.输入要查阅的图书名字 3.显示图书信息 | 显示图书信息失败并告知没有该借阅证账号 | 显示图书信息失败并告知没有该借阅证账号 | 1.输入读者借阅证:abb123 2.输入查阅的图书名字: |
Test2 | 查询书籍失败 | 1.用户输入读者借阅证 2.输入要查阅的图书名字 3.显示图书信息 | 显示图书信息失败并告知查无此书 | 显示图书信息失败并告知查无此书 | 1.输入读者借阅证:abb123 2.输入查阅的图书名字: 《hhhgjdof》 |
Test3 | 查询书籍失败 | 1.用户输入读者借阅证 2.输入要查阅的图书名字 3.显示图书信息 | 显示图书信息失败并告知查无此书但是有名字类似的书籍 | 显示图书信息失败并告知查无此书但是有名字类似的书籍 | 1.输入读者借阅证:abb123 2.输入查阅的图书名字: 《还的老人》 |
5.1.3用户借阅图书
测试类型 黑盒测试
测试方法 场景法
模块名称 用户借阅书籍
用例描述 该用例用于测试用户借阅图书功能是否符合预期要求
前置条件 用户在图书馆借阅图书
编号 | 测试项 | 操作步骤 | 预期结果 | 实际结果 | 数据 |
---|---|---|---|---|---|
Test0 | 成功借阅图书 | 1.输入要借阅的书名 2.点击确认 | 借阅成功 | 借阅成功 | 1.显示该借阅书籍基本信息 2.显示借阅者预借了此书 3.显示借书者借阅数量并未超过限制 |
Test1 | 借阅失败 | 1.输入要借阅的书名 2.点击确认 | 借阅失败并提示查无此书 | 借阅失败并提示查无此书 | 1.显示查无此书 |
Test2 | 借阅失败 | 1.输入要借阅的书名 2.点击确认 | 借阅失败并显示没有预借此书 | 借阅失败并显示没有预借此书 | 1.显示该借阅书籍基本信息 2.显示借阅者没有预借此书 3.显示借书者借阅数量并未超过限制 |
Test3 | 借阅失败 | 1.输入要借阅的书名 2.点击确认 | 借阅失败并显示借阅数量已超过限制 | 借阅失败并显示借阅数量已超过限制 | 1.显示该借阅书籍基本信息 2.显示借阅者预借了此书 3.显示借书者借阅数量超过限制 |
5.1.4管理员对管理员信息表进行查询
测试类型 黑盒测试
测试方法 场景法
模块名称 管理员信息表查询
用例描述 该用例用于系统后端查询管理员信息表模块是否满足用户需求
前置条件 管理员登录并对管理员信息表进行查询
编号 | 测试项 | 操作步骤 | 预期结果 | 实际结果 | 数据 |
---|---|---|---|---|---|
Test0 | 成功查询 | 1.管理员登录后端系统 2.管理员选择管理员信息 3.管理员搜索管理员姓名 | 查看对应管理员信息 | 跳转到对应管理员信息 | 1.Admin_id:1 2.Admin_name:李恺 3.Admin_pwd:001 |
Test1 | 成功查询 | 1.管理员登录后端系统 2.管理员选择管理员信息 3.管理员搜索管理员姓名 | 查看对应管理员信息 | 跳转到对应管理员信息 | 1.Admin_id:2 2.Admin_name:李军 3.Admin_pwd:002 |
Test2 | 成功查询 | 1.管理员登录后端系统 2.管理员选择管理员信息 3.管理员搜索管理员姓名 | 查看对应管理员信息 | 跳转到对应管理员信息 | 1.Admin_id:3 2.Admin_name:张鸿涛 3.Admin_pwd:003 |
Test3 | 成功查询 | 1.管理员登录后端系统 2.管理员选择管理员信息 3.管理员搜索管理员姓名 | 查看对应管理员信息 | 跳转到对应管理员信息 | 1.Admin_id:4 2.Admin_name:文章 3.Admin_pwd:004 |
Test4 | 成功查询 | 1.管理员登录后端系统 2.管理员选择管理员信息 3.管理员搜索管理员姓名 | 查看对应管理员信息 | 跳转到对应管理员信息 | 1.Admin_id:5 2.Admin_name:詹文海 3.Admin_pwd:005 |
Test5 | 成功查询 | 1.管理员登录后端系统 2.管理员选择管理员信息 3.管理员搜索管理员姓名 | 查看对应管理员信息 | 跳转到对应管理员信息 | 1.Admin_id:6 2.Admin_name:李志勇 3.Admin_pwd:006 |
Test6 | 成功查询 | 1.管理员登录后端系统 2.管理员选择管理员信息 3.管理员搜索管理员姓名 | 查看对应管理员信息 | 跳转到对应管理员信息 | 1.Admin_id:7 2.Admin_name:梁宇飞 3.Admin_pwd:007 |
Test7 | 成功查询 | 1.管理员登录后端系统 2.管理员选择管理员信息 3.管理员搜索管理员姓名 | 查看对应管理员信息 | 跳转到对应管理员信息 | 1.Admin_id:8 2.Admin_name:周永波 3.Admin_pwd:008 |
Test8 | 成功查询 | 1.管理员登录后端系统 2.管理员选择管理员信息 3.管理员搜索管理员姓名 | 查看对应管理员信息 | 跳转到对应管理员信息 | 1.Admin_id:9 2.Admin_name:谢玉玉 3.Admin_pwd:009 |
5.1.5管理员对书籍信息进行管理(增删查改)
测试类型 黑盒测试
测试方法 场景法
模块名称 书籍信息管理(增删查改)
用例描述 该用例用于系统后端书籍信息管理是否满足用户需求
前置条件 管理员登录并对书籍信息进行管理
编号 | 测试项 | 操作步骤 | 预期结果 | 实际结果 | 数据 |
---|---|---|---|---|---|
Test0 | 成功查询 | 1.管理员登录后端系统 2.管理员选择书籍信息 3.管理员点击书籍查询 4.管理员搜索书籍《朝花夕拾》 | 查看对应书籍信息 | 跳转到对应书籍信息 | 1.Book_id:B00004 2.Type_id:T00004 3.Type_name:中国文学 4.Book_name:朝花夕拾 5.Book_writer:鲁迅 6.Book_company:长江文艺出版社 7.Book_date:2015-12-29 8.Book_brief:饱含浓烈的抒情气息 9.Book_price:20.39 10.Book_num:100 |
Test1 | 成功增加 | 1.管理员登录后端系统 2.管理员选择书籍信息 3.管理员点击增加书籍 4.管理员输入书籍信息 | 成功增加该书籍 | 成功增加该书籍 | 1.Book_id:B00011 2.Type_id:T00011 3.Type_name:外国文学 4.Book_name:格林童话 5.Book_writer:无 6.Book_company:长江文艺出版社 7.Book_date:2017-7-29 8.Book_brief:适合儿童阅读的好书 9.Book_price:55 10.Book_num:100 |
Test2 | 成功修改 | 1.管理员登录后端系统 2.管理员选择书籍信息 3.管理员点击修改书籍信息 4.管理员输入书籍信息 | 修改成功 | 修改成功 | 1.Book_id:B00011 2.Type_id:T00015 3.Type_name:外国文学 4.Book_name:格林童话 5.Book_writer:无 6.Book_company:长江文艺出版社 7.Book_date:2017-7-29 8.Book_brief:适合儿童阅读的好书 9.Book_price:55 10.Book_num:100 |
Test3 | 成功删除 | 1.管理员登录后端系统 2.管理员选择书籍信息 3.管理员点击删除书籍信息 4.管理员点击确认删除 | 删除成功 | 删除成功 | 您已成功删除《格林童话》 |
Test4 | 查询失败 | 1.管理员登录后端系统 2.管理员选择书籍信息 3.管理员点击书籍查询 4.管理员搜索书籍《老人与海》 | 没有这本书! | 没有这本书! | 查无此书 |
5.2 非功能测试
5.3 Bug分析
5.3.1 bug汇总
缺陷编号 | 缺陷等级 | 缺陷模块 | 缺陷概要 | 缺陷描述 | 状态 |
---|---|---|---|---|---|
Bug01 | Urgent | 借阅图书模块(边界判定) | 图书已无库存,但系统仍显示借出 | 1.用户登录 2.用户输入要借阅的图书 3.用户点击借阅 4.图书显示无库存但仍借出成功 | Fixed |
Bug02 | Urgent | 预借图书(数据丢失) | 跳转至预借图书页面发现用户初始保存的数据丢失且需要重新登录 | 1.用户搜索预借图 2.用户点击确认预借图书 3.跳转预借成功界面时数据丢失,要求用户重新登录 | Fixed |
Bug03 | Very High | 管理用户信息(内容遗漏) | 管理员查看用户信息时,用户信息缺少,无法刷新出来 | 1管理员登录系 2.管理员选择用户信息管理 3.管理员点击查看信息 4.用户信息缺少,部分无法刷新 | Open |
Bug04 | Very High | 归还图书模块<接口错误> | 用户因借书超时进入支付界面,手机支付后界面无响应 | 1.用户登录选择归还图书 2.用户归还图书后发现逾期须缴费 3.用户完成支付后界面无响应 | New |
Bug05 | High | 管理图书信息模块(信息死锁) | 图书介绍图片更改在后端提示已经更改成功但是前台界面同步更新后端数据图片仍然为更改前的图片 | 1.管理员登录后端选择管理图书信息 2.找到图书图片更改并点击选取图片按钮 3.管理员上传图片并刷新前界面此时图片未曾更改 | Closed |
Bug06 | Urgent | 续借图书模块(进度提示) | 续借成功但进度条一直处于初始态 | 1.用户登录后选择续借图书 2.用户点击需要续借的图书 3.系统显示续借成功但进度条一直处于初始态 | New |
Bug07 | High | 管理图书信息(进度提示) | 选择上传图书信息的时候寻址条的进度一直处于初始态 | 1.管理员登录后端选择管理图书信息 2.找到相应图书信息后选择修改 3.修改完成点击确认后寻址条一直处于初始态 | Open |
Bug08 | Very High | 管理图书信息(保存失败) | 可以直接上传图片不用进行等待但是前方的图片未保存就已被剔除 | 1.管理员登录后端选择更改图书信息 2.找到图书图片更改并点击选取图片按钮进行更改 3.更改的图片在前台成功的显示但是原来的图片损毁 | Fixed |
Bug09 | Middle | 管理图书信息(信息优化) | 提示内容:正在上传的图片是已经传过了的,不可以再上传了。内容提示过于口语化,不符合提示严谨的规范 | 1.管理员登录后端选择更改图书信息 2.找到图书图片更改并点击选取图片按钮 3.管理员上传图片,系统提示:该图片已重复上传 | Open |
Bug10 | Low | 管理用户信息(改进建议) | 当管理员长期处于等待的白页时,可以利用网络抓包工具分析服务器的网络请求给出中断指示 | 1.管理员登录后端选择管理用户信息 2.修改对应用户信息后点击确认 3.确认后等待时间过长,甚至出现白页。 | Closed |
Bug11 | Urgent | 用户注册(数据堆栈) | 已经注册过的账号再次注册,系统提示注册成功 | 1.用户使用相同用户名注册账号并且使用相同的密码 2.用户注册成功,登录后原来的所有账号信息都恢复成出厂设置,信息被反向篡改 | Fiexd |
Bug12 | Low | 用户注册(改进建议) | 用户输入账号名或者密码时,可以提示大小锁按键切换已经打开,优化用户注册难度和体验 | 1.用户首页点击注册 2.用户输入用户名无提示 3.用户输入首密码无提示 4.用户输入次密码 | Open |
Bug13 | Low | 用户注册(改进建议) | 用户将此密码输入完毕后,系统首页应该给出两次密码的校验结果,两次的密码一致打“√” | 1.用户首页点击注册 2.用户输入用户名 3.用户输入首密 “123456” 4.用户输入次密"123456" 5.无密码校验直接点击注册 | New |
Bug14 | Urgent | 用户注册(功能错误) | 用户输入空白这个字符在用户名上注入,输入密码后系统提示其注册成功 | 1.用户首页点击注册 2.用户输入用户名为空白 3.用户输入首密码 4.用户输入次密码 5.账号注册成功并进行登录 | Fiexd |
Bug15 | High | 用户注册(内容乱码) | 用户在注册时采用非法字符如¥¥¥¥作为密码/次密码,网页无法正常的显示非法字符的格式 | 1.用户首页点击注册 2.用户输入用户名 3.用户输入首密 “¥¥¥¥” 4.用户输入次密 “¥¥¥¥” 5.密码无法显示此内容 | New |
Bug16 | Low | 预借图书模块(程序冻结) | 搜索图书时偶尔会卡死 | 1用户登录后选择预借图书 2.用户搜索所需图书 3.点击搜索后系统无响应、卡顿 | Closed |
Bug17 | Urgent | 借阅图书模块(数据流失) | 用户已预借图书,但点击借阅该图书时却显示没有预借 | 1.用户登录后选择借阅图书 2.用户点击借阅图书后系统显示该图书没有预借 | Fiexd |
5.3.2 缺陷分析
5.3.2.1 从严重程度分析
缺陷等级 | 1-Urgent(致命错误) | 2-Very High(严重错误) | 3-High(一般错误) | 4-Middle(轻微错误) | 5-Low(改进建议) | 总数 |
---|---|---|---|---|---|---|
bug数 | 6 | 3 | 3 | 1 | 4 | 17 |
5.3.2.2从模块来分析
模块 | 用户注册 | 借阅图书模块 | 预借图书模块 | 管理用户信息 | 归还图书模块 | 管理图书信息 | 续借图书模块 | 总数 |
---|---|---|---|---|---|---|---|---|
bug数 | 5 | 2 | 3 | 2 | 1 | 3 | 1 | 17 |
5.3.2.3从Bug状态分析
Bug状态 | New(新建) | Open(打开) | Fixed(已修复) | Closed(已关闭) | 总数 |
---|---|---|---|---|---|
bug数 | 4 | 4 | 6 | 3 1 | 7 |
六、 项目总结与体会
本次的项目做的是一个图书信息管理系统,简易上来称,其是一个计算机管理系统,也就是将传统手工的管理方式转变为智能化、标准化、规范化的管理管理模式,对图书馆中所有的图书、文献资料、音像资料、报刊、期刊等各种类型的资料实现采编、收集图书信息、检索、归档、流通以及一系列相关工作的计算机化、信息化管理。
结合软件工程课程的学习的知识,通过对目前市场上已有的图书信息管理系统进行分析研究,对目前各大图书馆整理书籍管理工作等进行一定的背景研究与工作剖析,最终根据其需求,为了使读者能够更加快速的借书、还书、预借书本、查询图书的信息等业务,图书馆管理人员能更快的对读者信息、图书信息进行管理,避免出现不必要的图书管理人员和读者的摩擦,因此急需要有一套能够有效快速处理图书馆日常业务的图书馆管理系统,使图书馆的管理工作规范化、系统化、程序化,提高图书馆图书信息、读者信息处理的精确性和有效性,减轻图书馆工作人员的工作负担,我们选择了做一个图书信息管理系统这一项目。
要学习软件工程,学会如何系统的思考,以及养成良好的编码习惯,想学好软件工程,就必须知道软件工程的目标、过程和原则:软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构,实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程,过程模型及工程方法选取的约束。
软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明,每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿干整个开发过程,实现完成后的确认,保证最终产品满足用户的`要求。维护活动包括使用过程中的扩充,修改与完善。伴随以上过程,还有管理过程、支持过程、培训过程等。软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。我们学习了详细设计的方法,其原则是过程描述是否易干理解复审和维护,进而过程描述能够自然地转换成代码,并保证详细设计与代码完全一致。包括程序流程图、N-S图、PAD图、HIPO图。
程序流程图:程序流程图又称之为程序框图,它是软件开发者最熟悉的一种算法表达工具。它独立于任何一种程序设计语言,比较直观和清晰地描述过程的控制流程,易于学习掌握。在流程图中只能使用下述的五种基本控制结构:顺序型;选择型;while型循环;until型循环;多情况型选择。
N-S图:一种符合结构化程序设计原则的图形描述工具,称为盒图,又称为N-S图。在N-S图中,为了表示五种基本控制结构,规定了五种图形构件。顺序型;选择型;WHILE重复型;UNTIL重复型:多分支选择型。
PAD图:它是用结构化程序设计思想表现程序逻辑结构的图形工具。PAD也设置了五种基本控制结构的图示,并允许递归使用。
HIPO图:HIPO图是由一组IPO图加一张HC图组成。它是美国IBM公司在软件设计中使用的主要表达工具。
HC图既是层次图,用于表示软件的分层结构。HC图中的每一个模块,均可用一张IPO图来描述。IPO图由输入、处理和输出三个框组成,需要时还可以增加一个数据文件框,这种图形的优点是能够直观地显示输入一处理-输出三者之间的联系。
还有测试方法:按照测试过程是否在实际应用环境中来分,有静态分析与动态测试。测试方法有分析方法(包括静态分析法与白盒法)与非分析方法(称黑盒法)。
静态分析技术:不执行被测软件,可对需求分析说明书、软件设计说明书、源程序做结构检查、流程分析、符号执行来找出软件错误。
动态测试技术:当把程序作为一个函数,输入的全体称为函数的定义域,输出的全体称为函数的值域,函数则描述了输入的定义域与输出值域的关系。
通过回顾完软件工程这门课程所学习的知识点后,可以初步定个项目大纲:项目需求和计划,项目设计,设备要求,项目实现过程,项目测试结果,项目总结和体会。项目需求和计划主要是对图书信息管理系统进行一个市场调查,在线上百度百科与线下踩点各个图书馆中了解目前阶段图书信息管理的工作与现时代下科技与发展对快速整理信息的需求。并针对此需求制定相关项目目标与计划。这次项目是要开发一个图书馆信息管理系统,我们想通过这个系统处理常见的图书馆业务。这个系统主要目标是想有客户端(借阅者使用)和管理端(图书馆管理员和系统管理员使用)。在这个系统设计上,借阅者可以对于图书馆里面存在的图书进行借阅图书、归还图书、预借图书等基本操作;可以对于图书馆里面的图书的数量、位置、是否被借阅等信息进行查询;图书管理员能够处理借阅者的借阅图书、归还图书、预借图书等基本功能、能够对图书信息、读者信息进行查看、增加、修改、删除功能。同时图书管理员可以查看操作日志,图书的预借信息情况;系统管理员拥有图书管理员的所有功能,而且系统管理员可以对图书管理员进行管理,可以分配图书管理员账号,系统的用户可以更改密码。
项目目标定制完成以后,就开始分工合作进行每周任务的计划制定了。在第一周,我们了解图书馆信息管理系统的用户需求以及用户特点,并初步分析图书信息管理系统的可行性;在第2周,我们进行图书馆信息管理系统的功能规格分析、性能需求分析、系统分析、页面设计、模块设计、数据库设计;在第3周,我们使用java对于图书馆信息管理系统的模块进行实现,同时使用SQL工具进行图书馆信息管理系统的数据库进行实现;在第4周,我们使用黑盒测试,白盒测试等测试方法对设计实现的所需功能进行功能测试,对系统进行安全测试,提高系统对非法入侵防范能力,根据系统的整体框架和实现形式,完成软件工程实践报告。在完成报告后,我们团队一起讨论并修复已知的Bug,对现有的问题进行归档,发布公测版本,最后,我们对整个项目做收尾工作——我们收集用户反馈信息,优化版本的呈现效果,立志做一个优秀的项目报告。
软件工程对干初学者来说,知识基础较薄弱,对一些应用操作,概念、工具方法等理解起来较大困难,要能从整体概念上较好地理解和把握、学好软件工程,不是仅仅把几本专业书籍细致地看几遍,然后上机练习几次就可以成功,学习过程中要注意多看多练要注意结合实际,更要多思考,面对错误不要一范就问,要尝试自己去解决。但是还要注意什么都学,肯定是什么都学不透的,要集中精力打攻坚战,学习软件工程首先要明白自己的学习目标究竟是什么,根据自己的实际工作出发有针直对性的在相应的学习方向上进行提高,制定出详细的学习规划。还要注意与其他科目的相辅相成,就像我们在学习面向对象分析的时候要结合大一学习的面向对象及其方法学这一专业科目进行研究拓展;在学习语言时,要看看与C语言的联系,多思多想,把从各个科目学到的知识通汇贯通。
我们可以发现开发软件并非是一些代码这么简单,在开发软件的过程中,编写代码的工作量其实只占不到所有工程量的30%,而后期的管理和维护更是占了60%到80%之多。一个完整的项目规划须包括,软件的定义,可行性分析报告,项目开发计划,软件需求说明书,概要设计说明书,详细设计说明书,用户操作手册,测试计划,测试分析报告,开发进度报告,项目开发总结报告,软件维护手册,软件问题报告,软件修改报告,等多个文档,每个文档都要上级验收审查,而文档数量众多,要做好这点真的不是很容易,而恰恰写好文档正能保证完成软件工程其中一个目的的关键,既研究如何用最小的开销做出生存期较长的软件,再加上各个阶段都要进行周密的策划、详细的分工部署和人员安排,且各阶段要据具体情况不断的反复才能达成,所以代码只是开发软件这个浩大的工程的一个小小的过程。而编码的学习中,我更了解到形成自己独特的规范的编码风格是非常重要的事。
在写程序的过程中,要逐步的在规范的基础上形成属于自己的风格,即方便自己的修改,也方便日后他人的阅读。在学习中,我们还要注意比较三种方法的优缺点,例如:传统方法虽然使软件摆脱了混乱和无序,但其在适应需求变化的方面不够灵活,而且传统方法要么面向行为,要么面向数据,缺乏两者的有机结合。而面向对象方法的程序设计和问题求解更符合人们日常自然的思维习惯,适合大型、复杂及交互性比较强的系统。形式化方法则是一中基于形式化数学变换的软件开发方法,它可将系统的规格说明转换为可执行的程序。在今后的学习中要注意多读书、多思考、多练习、多讨论,不断熟悉书本的基础,并以此为基础将其扩散开来,应用于今后的实践。