实验2《软件项目的设计》实验报告 - 图文

更新时间:2024-01-25 20:29:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

软件工程

实验报告

实验2:

图书管理软件系统软件项目的设计

学号: 班号: 姓名: 课程主讲教师: 张建国 实验指导教师: 张建国

提交日期: 2011年11月11日

I

图书管理软件系统软件项目的设计

目 录

第一章 系统概述 ...................................................................................................................... 1

1.1 系统开发背景和意义 ................................................................................................. 1 1.2 开发环境 ..................................................................................................................... 1 第二章 系统需求分析 .............................................................................................................. 2

2.1 任务概述 ..................................................................................................................... 2 2.2 数据描述(数据流图+数据字典) ................................................................................ 2 2.3 功能需求 ..................................................................................................................... 6 2.4性能需求 ...................................................................................................................... 6 第三章 系统总体设计 .............................................................................................................. 8

3.1 新的业务流程 ............................................................................................................. 8 3.2 系统功能模块图 ......................................................................................................... 8 3.3 系统的流程图 ............................................................................................................. 9 第四章 详细设计 .................................................................................................................... 11

4.1 程序流程图 ............................................................................................................... 11 4.2 程序输入输出描述 ................................................................................................... 13

4.2.1 主模块 ............................................................................................................ 13 4.2.1 学生管理模块 ................................................................................................ 13 4.2.2 图书管理模块 ................................................................................................ 13 4.2.3 借阅管理模块 ................................................................................................ 13 4.2.4 归还管理模块 ................................................................................................ 13 4.2.5 管理措施设置模块 ........................................................................................ 13 4.3 程序接口描述 ........................................................................................................... 14

4.3.1 外部接口 ........................................................................................................ 14

II

4.3.2 内部接口 ........................................................................................................ 14 4.4 数据库的设计 ........................................................................................................... 14

4.4.1 数据库的逻辑设计 ........................................................................................ 14 4.4.2 数据库的物理设计 ........................................................................................ 16

第五章 编码实现 .................................................................................................................... 19

5.1 程序编码 ................................................................................................................... 19 第六章 测试分析报告 ............................................................................................................ 37

6.1 测试计划和要点 ....................................................................................................... 37

6.1.1 主模块测试要点 ............................................................................................ 37 6.1.2 借阅模块测试要点 ........................................................................................ 37 6.1.3 学生查询模块测试要点 ................................................................................ 37 6.1.4 图书查询模块测试要点 ................................................................................ 38 6.1.5 图书归还模块测试要点 ................................................................................ 38 6.2 测试用例 ................................................................................................................... 38

6.2.1 主模块测试用例 ............................................................................................ 39 6.2.2 借阅模块测试用例 ........................................................................................ 39 6.2.3 学生查询模块测试用例 ................................................................................ 40 6.2.4 图书查询模块测试用例 ................................................................................ 40 6.2.5 图书归还模块测试用例 ................................................................................ 40 6.3 测试结果及结论 ....................................................................................................... 41

6.3.1 测试的结果 .................................................................................................... 41 6.3.2 缺陷分析及改进 ............................................................................................ 42 6.3.3 测试结论 ........................................................................................................ 43

总结 .......................................................................................................................................... 44 参考文献 .................................................................................................................................. 45

III

第一章 系统概述

1.1 系统开发背景和意义

图书管理软件系统是高校内每一个系部或院部都必须切实面对的工作,但一直以来人们使用传统的人工方式管理图书资料。这种方式存在着许多缺点,如效率低、保密性差且较为繁琐。另外,随着图书资料数量的增加,其工作量也将大大增加,这必将增加图书资料管理者的工作量和劳动强度,这将给图书资料信息的查找、更新和维护都带来了很多困难。

经过详细的调查,目前我国各类高等学校中有相当一部分单位图书资料管理还停留在人工管理的基础上。这样的管理机制已经不能适应时代的发展,其管理方法将浪费许多人力和物力。随着科学技术的不断提高,这种传统的手工管理方法必然被以计算机为基础的信息管理方法所取代。

图书管理作为计算机应用的一个分支,有着手工管理无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高图书管理的效率。因此,开发一套能够为用户提供充足的信息和快捷的查询手段的图书管理系统,将是非常必要的,也是十分及时的。

1.2 开发环境

开发环境的选择会影响到数据库的设计,所以在这里给出图书管理系统开发与运行环境的选择如下:

开发环境:Windows XP 开发工具:Dephi

数据库管理系统: Access数据库

1

第二章 系统需求分析

2.1 任务概述

经过对我校详细调查,并多次与负责图书管理的老师进行研讨后,加深了对现行图书管理业务的深刻了解,与此同时,将整个图书管理的业务流程抽象描述如下:

1.新的图书购进后,分门别类地进行归并并汇总,加以编号。 2.新书编号后,上到书架以备学生借阅。

3.如某学生需要借阅图书,则在其本人的借阅登记表上进行登记,记录相关借阅信息与借阅日期。

4.学生借阅图书后,应及时归还图书,并在本人的借阅登记表上注明还书日期和时间。

根据以上调查分析,可以给出其现行业务流程图如图2.1所示。

新图书分类、编号新图书学生借阅新图书学生归还图书新图书归还后的图书新图书 图2.1 现行图书管理业务流程图

2.2 数据描述(数据流图+数据字典)

经过详细的调查,我们已经清楚了解了现行的业务流程,接下来给出系统的逻辑模型。构造系统逻辑模型的工具是数据流图和数据字典。根据现行图书管理的业务流程,首先把数据流图中的源点和终点都选定为学生,因此可以得到图书管理系统的基本系统模型,如图2.2所示。

2

图书管理员图书借阅信息图书管理系统图书归还信息图书管理员 图2.2 图书管理系统的基本系统模型

根据基本系统模型,对其逐步细化,得到描述逻辑系统细化后的数据流图,如图2.3所示。

图书信息2图书信息D2图书信息登记借阅信息D3借阅登记借阅结果管理员13学生借阅图 书图书管理借阅管理归还图书4学生信息归还管理归还图书D4归还登记学生归还结果学生管理学生信息D1学生信息 图2.3 图书管理系统数据流图(顶层DFD图)

对顶层DFD图中的一个加工“学生管理”进行展开,如图2.4。

D2图书信息登记借阅信息D3借阅登记借阅结果管理员学生信息2图书信息3学生借阅图 书图书管理借阅管理归还图书4归还管理归还图书D4归还登记学生归还结果1.1学生信息新学生录入1.2学生信息D1学生信息学生查询学生信息1.3更新学生信息毕业学生清空图2.4 细化后数据流图

3

对顶层DFD图中的一个加工“图书管理”进行展开,如图2.5。

D2图书信息登记图书信息图书基本信息2.23学生借阅图 书借阅信息D3借阅登记借阅结果管理员图书编号2.1编号分类建挡借阅管理归还图书4归还管理归还图书D4归还登记学生归还结果 图2.5 “图书管理”展开

对第1层DFD图中的加工进一步进行展开,如图2.6。

学生借阅请求3.1学生信息合法性检查学生学生借阅条件3.2图书信息借阅结果借阅图书(1)

图书信息图书

图2.6 进一步细化数据流图

有了系统的数据流图后,还有相当多的数据信息如图书、借阅、归还等信息需要进一步描述,这就是需要定义数据字典,才能把现有的系统描述清楚。图2.7列出了系统的主要数据字典。

4

图书:图书表结构别名:描述:纪录所有图书的基本情况定义:图书信息表=图书编号+图书名称+图书ISBN号+图书作者+图 书出版社+图书类型+图书价格+图书库存量+图书副本数量+图书总数位置:Librarydat.mdf数据库

借书登记:借书登记表结构别名:描述:纪录所有图书的借阅情况定义:借阅登记表=借书编号+学生编号+图书编号+借书时间+归还时间+是否归还位置:Librarydat.mdf数据库

学生信息:学生信息表结构别名:描述:纪录所有学生信息情况定义:学生信息表=学生编号+学生姓名+性别+入校时间+毕业时间位置:Librarydat.mdf数据库

归还登记:归还登记表结构别名:描述:纪录所有已归还图书的借阅情况定义:归还信息表=编号+图书名称+归还时间+作者+出版社位置:Librarydat.mdf数据库

名称:管理员别名:描述:纪录管理员信息定义:管理员信息=管理员ID+管理员name+密码+加入时间+级别位置:

名称:借阅请求别名:描述:学生借阅请求信息定义:借阅请求=借阅ID+学生学号+图书ID位置:

名称:归还图书别名:描述:归还图书的相关信息定义:归还图书=借阅ID+学生学号+图书ID+归还日期位置:

名称:提示惩罚信息别名:描述:未归还图书的学生需要提示的信息,比如相应赔偿或超期罚款定义:提示惩罚信息=借阅ID+学生学号+图书ID+应归还日期+处罚提示位置:

名称:管理条例1别名:描述:对正常归还的处理办法定义:管理条例1 =借阅ID+未过规定归还时间位置:

5

名称:管理条例2别名:描述:对丢失或超期归还图书的处理办法定义:管理条例2 =借阅编号+未过规定归还时间(false)+相关处罚办法位置:名称:归还结果别名:描述:归还图书操作完成后的返回结果定义:归还结果 =借阅ID+图书ID+学生学号+已归还(true/false)+是否提示惩罚位置:

名称:借阅结果别名:描述:是否借阅成功的返回结果定义:借阅结果 =借阅ID+图书ID+学生学号+借出否+提示成功借阅位置:

图2.7 系统主要数据字典

2.3 功能需求

经过以上详细的用户调查,在现行业务流程和数据分析的基础上,基本可以确定系统设计必须达到的目标。

以下是图书管理系统必须具备的功能:

1.新进图书的登记功能:对于购进的新书,系统必须具备图书信息资料的录入功能。 2.图书的查询修改功能:当图书资料发生变化,如图书丢失或有错误信息输入时,则应能够及时对数据进行修改和补充。

3.借阅的登记,归还的登记功能:系统的主要功能之一,供本校学生借阅图书、归还图书,并进行登记。

4.学生信息的增加、删除和修改功能:系统主要功能之一,建立学生信息,并对其进行维护。

2.4性能需求

为了保证系统能够长期、安全、稳定、可靠、高效的运行,图书管理系统应该满足以下的性能需求:

6

1、系统处理的准确性和及时性

系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足学校对信息处理的需求。

2、系统的开放性和系统的可扩充性

图书管理系统在开发过程中,应该充分考虑以后的可扩充性。例如用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。

3、系统的易用性和易维护性

图书管理系统是直接面对使用人员的,而使用人员往往对计算机并不时非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。

4、系统的标准性

系统在设计开发使用过程中都要涉及到很多计算机硬件、软件。所有这些都要符合主流国际、国家和行业标准。

5、系统的先进性

目前计算系统的技术发展相当快,做为图书管理系统工程,在系统的生命周期尽量做到系统的先进,充分完成企业信息处理的要求而不至于落后。这一方面通过系统的开放性和可扩充性,不断改善系统的功能完成。另一方面,在系统设计和开发的过程中,应在考虑成本的基础上尽量采用当前主流并先进且有良好发展前途的产品。

6、系统的响应速度

图书管理系统系统在日常处理中的响应速度为秒级,达到实时要求,以及时反馈信息。在进行统计分析时,根据所需数据量的不同而从秒级到分钟级,原则是保证操作人员不会因为速度问题而影响工作效率。

7

第三章 系统总体设计

3.1 新的业务流程

根据需求分析的得到的现行业务处理流程,在用户反复研究后,首先确定目标系统的业务流程,其处理流程如图3.1。

管理员登录用户验证合法用户图书登记登记后的图书管理员退出登录借阅或归还图书

图3.1 图书管理系统的业务流程

针对新的业务流程,现具体描述其功能如下: 1.用户登录:系统对用户合法性进行检查。

2.图书入库:对新购进的图书分类进行编号,并把图书基本信息录入计算机。 3.图书借阅:对已入库的图书,学生可以借阅,并进行登记。 4.图书归还:对学生已归还的图书进行归还登记。

5.信息查询:即对所有图书的借阅情况,或学生的基本情况和借阅情况进行查询。 6.管理措施:定义系统规定的借阅图书超期时间、超期处罚办法和丢失赔偿办法。

3.2 系统功能模块图

依据需求分析阶段得到的数据流图,采用软件工程中软件设计的概念和原理,与用户成分协商后,在保证系统基本功能要求的前提下,结合系统新的业务流程确定系统必

8

须具备的所有功能,由此给出图书管理系统的系统功能模块图如图3.2所示。

图书管理系统学生管理图书管理借阅管理归还管理管理措施学生信息管理学生信息查询图书信息登记图书信息查询借阅登记借阅查询正常归还登记超期或丢失处理超期处罚设置押金设置丢失赔偿设置

图3.2 图书管理系统功能模块图

3.3 系统的流程图

依据软件工程的基本原理,综合以上分析给出系统流程图如图3.4所示。

9

管理员登录用户校验合法用户图书管理程序图书管理系统主文件新图书信息读入学生信息管理信息设定图书信息表借阅图书归还图书押金、超期时限、丢失罚款设定借阅图书成功报告归还图书超期应归还图书丢失相应处理措施退出管理员

图3.4 系统流程图

10

第四章 详细设计

4.1 程序流程图

依据软件工程的基本原理,详细设计阶段的根本任务是确定应该怎样具体实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在系统实现阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。具体来说就是把经过总体设计得到的各个模块详细的加以描述。

由于本系统采用支持面向对象的Visual Basic 6.0作为开发工具,而Visual Basic 6.0采用事件驱动的编程机制,所以在此给出软件系统的主程序流程图,如图4.1所示。

开始管理员登陆是否合法Yes显示主界面No选择操作学生管理图书管理借阅管理归还管理管理措施设置管理员注销结束

图4.1 主程序流程图

11

根据以上主程序的流程图,我们可以得出下面的关于各个模块的程序流程图,如图4.2所示。

开始管理员登陆是否合法Yes选择No学生信息表操作图书信息表操作查询信息借阅图书归还图书退出选择选择查询方式读入书号Yes已借出读入书号超期YesNo罚款No更新数据库Yes退出增加删除修改No确认Yes更新书名书号作者出版社No读入学号输入所需记录要求查找记录显示记录NoYes确认Yes更新数据库Yes继续继续No继续管理员注销结束

图4.2 程序流程图

12

4.2 程序输入输出描述

4.2.1 主模块

1.输入项目:操作系统传递至的各种消息以及用户的输入数据。 2.输出项目:用户界面显示。 4.2.1 学生管理模块

1.输入项目:与学生管理操作子对话框有关的用户输入及系统消息。 2.输出项目:操作结果显示。 4.2.2 图书管理模块

1.输入项目:用户口令。 2.输出项目:相应的界面。 4.2.3 借阅管理模块

1.输入项目:学生学号、图书编号。 2.输出项目:学生信息、相关借书信息。 4.2.4 归还管理模块

1.输入项目:图书编号。 2.输出项目:相关学生信息。 4.2.5 管理措施设置模块

1.输入项目:用户的输入。

2.输出项目:根据用户的输入显示相应的对话框。

13

4.3 程序接口描述

4.3.1 外部接口

按Windows应用软件用户界面的规范来设计,使用以对话框为主的用户界面,便于用户使用。 4.3.2 内部接口

模块间接口采用数据耦合方式,通过参数表传送数据,交换信息。

4.4 数据库的设计

4.4.1 数据库的逻辑设计

在需求分析阶段已完成该系统所有的数据分析。根据该阶段所建立的概念模型,已经得出满足系统设计要求的几个关系描述,该阶段的主要工作就是把前一阶段的成果转化为具体的数据库。下面给出概念结构设计得E-R图如图4.3所示。

性别学生学生姓名入校时间毕业时间学生学号 ①

图书ISBN号图书名称图书编号图书数量图书类别图书图书作者图书出版社图书编号 ②

14

管理员编号加入时间姓名密码 ③ (1) 分E-R图

管理员11学生管理图书管理NMN归还N学生MN图书借阅 (2) 总E-R图

图4.3 概念结构设计E-R图

实体:图书(图书编号,书名,作者,出版社,定价,图书类别,图书ISBN号,图书数量)

学生(学生学号,学生姓名,性别,入校时间,毕业时间) 管理员(编号,名字,密码,加入时间) 联系:学生管理(图书管理员,学生姓名,学生密码) 图书管理(图书管理员,借阅号,归还号) 查询(图书编号,借阅证号,图书管理员,学生)

15

4.4.2 数据库的物理设计

依据数据库的原理,并结合以上E-R图,经过转化,即可进行数据库的物理设计。基于以上数据库的逻辑设计,考虑程序设计的简易性,同时考虑题目的时间,该系统的数据库采用Microsoft SQL Server 2000。本系统决定采用一个数据库,在其下创建5个数据表,其结构分别如下:

1.图书信息表(tBook),其字段列表如表4-1所示。

表4-1 图书信息表的结构

序号 1 2 3 4 5 6 7 8 9 10

字段名称 cBooksID cBooksName cBooksISBN cBooksAuthor cBooksPublisher cBooksType smBooksPrice iBooksStoreQuan iBooksLeftQuant iBooksTotalQuan 字段说明 图书编号 图书名称 图书ISBN号 图书作者 图书出版社 图书类型 图书价格 图书库存量 图书副本数量 图书总数 类型 文本 文本 文本 文本 文本 文本 货币 整数 整数 整数 位数 7 20 15 10 20 16 属性 必须非空 必须非空 可为空 可为空 可为空 可为空 可为空 可为空 可为空 可为空 备注 2.图书借阅登记表(tBorrow),其字段列表如表4-2所示。

表4-2 图书借阅登记表的结构

序号 1 2 3

字段名称 cBorrowID cVipID cBooksID 字段说明 借书编号 学生编号 图书编号 16

类型 文本 文本 文本 位数 6 6 7 属性 必须非空 必须非空 必须非空 备注 4 5 6

cBorrwTime cReturnTime cReturn 借书时间 还书时间 是否归还 时间日期 时间日期 文本 1 可为空 可为空 可为空 3.图书归还登记表(tReturn),其字段列表如表4-3所示。

表4-3 图书归还登记表的结构

序号 1 2 3 4 5 6 7

字段名称 cBorrowID cVipID cBooksID cBorrwTime cReturnTime cReturn cNoReturn 字段说明 借书编号 学生编号 图书编号 借书时间 还书时间 是否归还 归还异常 类型 文本 文本 文本 时间日期 时间日期 文本 文本 位数 6 6 7 1 8 属性 必须非空 必须非空 必须非空 可为空 必须非空 必须非空 可为空 备注 4.学生信息表(tVip),其字段列表如表4-4所示。

表4-4 学生信息表的结构

序号 1 2 4 5 6

字段名称 cVipID cVipName cVipSex vipAddTime vipEndTime 字段说明 学生编号 学生姓名 学生性别 学生入学时间 学生毕业时间 类型 文本 文本 文本 时间日期 时间日期 位数 6 10 1 属性 必须非空 必须非空 可为空 必须非空 必须非空 备注 17

5.管理员信息表(tOperators),其字段列表如表4-5所示。

表4-5 管理员信息表的结构

序号 1 2 3 4

字段名称 cOperatorID cOperatorName cOperatorPassword cOperatorAddTime 字段说明 管理员编号 管理员姓名 密码 管理员加入时间 类型 文本 文本 文本 时间日期 位数 5 10 6 10 属性 必须非空 必须非空 必须非空 必须非空 备注 18

第五章 编码实现

5.1 程序编码

登陆界面如图5.1所示。

图5.1 登陆界面

程序代码如下:

Function Check_Password(ByVal UserName As String, ByVal UserPassword As String) As Integer On Error GoTo ER2:

If ConnectToServer = True Then Set objRs = New Recordset

StrSql = \cOperatorPassword from tOperators where cOperatorName='\Trim(cboName.Text) & \

GetData StrSql 'Reference function to get data If objRs.EOF Then

Check_Password = 0 'This Operator not exist Else

If txtPassword.Text <> Trim(objRs.Fields(\ Check_Password = 1 ' password error Else

Check_Password = 2 'password ok

CurrentOpname = Trim(cboName.Text)

CurrentOppassword = objRs.Fields(\ 'Here can save a operator grade for expand End If End If

objCon.Close Exit Function ER2:

19

& MsgBox Err.Description Check_Password = 255 End If End Function

Private Sub cmdCancel_Click() Unload Me End End Sub

Private Sub cmdOK_Click() Dim intCheck As Integer

'Static intLogTimes to save user login times Static intLogTimes As Integer

intLogTimes = intLogTimes + 1 'Save login times If intLogTimes > MaxLogTimes Then

'Over allowed login times then list information

MsgBox \ Unload Me Else

intCheck = Check_Password(Trim(txtPassword), Trim(cboName)) Select Case intCheck Case 0

MsgBox \ Case 1

MsgBox \error ,please check your password !\vbInformation + vbOKOnly, \ Case 2

Unload Me

If CurrentOpname = \ MainWin.mnuOp.Visible = True Else

MainWin.mnuOp.Visible = False End If

Load MainWin MainWin.Show End Select

End If End Sub

主界面如图5.2所示。

20

图5.2 程序主界面

程序代码如下:

Option Explicit

Private Sub MDIForm_Activate()

If CurrentOpname = \

StatusBar2.Panels(1).Text = \管理员:\ Toolbar1.Buttons(1).Visible = True Toolbar1.Buttons(2).Visible = True Else

StatusBar2.Panels(1).Text = \操作员:\ Toolbar1.Buttons(1).Visible = False Toolbar1.Buttons(2).Visible = False End If End Sub

Private Sub MDIForm_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbRightButton Then

PopupMenu mnuOperation 'Design popup menu End If End Sub

Private Sub MDIForm_Unload(Cancel As Integer)

CheckConnect 'Reference function to make objcon break if connection is open End Sub

21

Private Sub mnuAbout_Click() frmAbout.Show End Sub

Private Sub mnuBookQuery_Click()

CheckConnect 'Reference function to make objcon break if connection is open Load frmBookQuery frmBookQuery.Show End Sub

Private Sub mnuBookRegist_Click()

CheckConnect 'Reference function to make objcon break if connection is open Load frmBookReg frmBookReg.Show End Sub

Private Sub mnuBorrowQuery_Click()

CheckConnect 'Reference function to make objcon break if connection is open Load frmReadQuery frmReadQuery.Show End Sub

Private Sub mnuExit_Click()

CheckConnect 'Reference function to make objcon break if connection is open Unload Me End End Sub

Private Sub mnuReLogin_Click()

CheckConnect 'Reference function to make objcon break if connection is open Unload Me Load frmLogin frmLogin.Show End Sub

Private Sub mnuVipQuery_Click()

CheckConnect 'Reference function to make objcon break if connection is open Load frmVipQuery frmVipQuery.Show End Sub

Private Sub mnuVipRegist_Click()

CheckConnect 'Reference function to make objcon break if connection is open Load frmVipReg frmVipReg.Show

22

End Sub

Private Sub munReadRegist_Click()

CheckConnect 'Reference function to make objcon break if connection is open Load frmReadRegist frmReadRegist.Show End Sub

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Key Case \

CheckConnect 'Reference function to make objcon break if connection is open Load frmAdmin frmAdmin.Show Case \

CheckConnect 'Reference function to make objcon break if connection is open Load frmVipReg frmVipReg.Show Case \

CheckConnect 'Reference function to make objcon break if connection is open Load frmVipQuery frmVipQuery.Show Case \

CheckConnect 'Reference function to make objcon break if connection is open Load frmBookReg frmBookReg.Show Case \

CheckConnect 'Reference function to make objcon break if connection is open Load frmBookQuery frmBookQuery.Show Case \

CheckConnect 'Reference function to make objcon break if connection is open Load frmReadRegist frmReadRegist.Show Case \

CheckConnect 'Reference function to make objcon break if connection is open Load frmReadQuery frmReadQuery.Show End Select End Sub

操作员管理界面如图5.3所示。

23

图5.3 操作员管理界面

代码如下:

Option Explicit Sub SetTextEmpty()

'This function is set all text to empty txtOpID.Text = \ txtOpName.Text = \ txtOpPwd.Text = \ cboOpGrade.Text = \ txtOpAddTime.Text = \End Sub

Sub RefreshOperator()

'This function is to Refresh text

txtOpID.Text = objRs.Fields(0).Value txtOpName.Text = objRs.Fields(1).Value txtOpPwd.Text = objRs.Fields(2).Value cboOpGrade.Text = objRs.Fields(3).Value ' txtOpAddTime.Text = objRs.Fields(4).Value End Sub

Private Sub cmdAdd_Click()

24

txtOpID.Enabled = True 'You don't change datagrid untill you add data finish dgdOp.Enabled = False

If cmdAdd.Caption = \添加\ cmdAdd.Caption = \确定\

SetTextEmpty ' reference settextempty founction to set empty cmdDel.Enabled = False cmdModify.Enabled = False cmdRefresh.Enabled = False txtOpID.SetFocus Else

If Trim(txtOpName.Text) = \

MsgBox \name must not null ,please input operator name !\vbInformation + vbOKOnly

txtOpName.SetFocus Exit Sub

ElseIf Trim(txtOpID.Text) = \

MsgBox \ID must not null ,please input operator ID !\vbInformation + vbOKOnly

txtOpID.SetFocus Exit Sub

ElseIf Trim(txtOpPwd.Text) = \

MsgBox \password must not null ,please input operator password !\vbInformation + vbOKOnly

txtOpPwd.SetFocus Exit Sub Else

With objRs

checkAddNew = True

.Filter = \ If .RecordCount > 0 Then

MsgBox \ txtOpID.Text = \ txtOpID.SetFocus

.Filter = \

cmdRefresh.Value = True 'To executer refresh once checkAddNew = False cmdDel.Enabled = True cmdModify.Enabled = True cmdAdd.Caption = \添加(&A)\ txtOpID.Enabled = False cmdRefresh.Enabled = True dgdOp.Enabled = True

25

checkAddNew = False Exit Sub End If

checkAddNew = True .AddNew

.Fields(0).Value = Trim(txtOpID.Text) .Fields(1).Value = Trim(txtOpName.Text) .Fields(2).Value = Trim(txtOpPwd.Text) .Fields(3).Value = Trim(cboOpGrade.Text) .Fields(4).Value = Trim(txtOpAddTime.Text) .Update

MsgBox \ .Filter = \

cmdRefresh.Value = True 'To executer refresh once End With

checkAddNew = False

'----There will reference a founction to set empty txtOpID.Enabled = False cmdDel.Enabled = True cmdModify.Enabled = True cmdRefresh.Enabled = True cmdAdd.Caption = \添加\

dgdOp.Enabled = True 'You can use datagrid after add finish End If End If End Sub

Private Sub cmdDel_Click()

If Empty_Check = True Then Exit Sub 'Reference function to check if your database is null If Not objRs.EOF And objRs.RecordCount > 0 Then

If MsgBox(\= vbYes Then

objRs.Delete End If End If End Sub

Private Sub cmdModify_Click()

If Empty_Check = True Then Exit Sub 'Reference function to check if your database is null dgdOp.Enabled = False

If txtOpID.Text <> objRs.Fields(0).Value Then Exit Sub 'To check operator ID If cmdModify.Caption = \修改\ cmdModify.Caption = \确定\ cmdDel.Enabled = False

26

cmdAdd.Enabled = False Else

With objRs

.Fields(0).Value = Trim(txtOpID.Text) .Fields(1).Value = Trim(txtOpName.Text) .Fields(2).Value = Trim(txtOpPwd.Text) .Fields(3).Value = Trim(cboOpGrade.Text) .Update End With

cmdModify.Caption = \修改\ cmdDel.Enabled = True cmdAdd.Enabled = True dgdOp.Enabled = True End If End Sub

Private Sub cmdExit_Click() Unload Me End Sub

Private Sub cmdRefresh_Click()

RefreshOperator 'Reference function is to Refresh text End Sub

Private Sub dgdOp_RowColChange(LastRow As Variant, ByVal LastCol As Integer) If checkAddNew = True Then Exit Sub cmdRefresh.Value = True End Sub

Private Sub Form_Activate()

FormMiddle frmAdmin 'Reference function to make form in MDIForm'mddile cboOpGrade.ListIndex = 1

If ConnectToServer = True Then

Set objRs = New ADODB.Recordset StrSql = \

GetData StrSql 'Reference function to get data Set dgdOp.DataSource = objRs cmdRefresh.Value = True End If End Sub

Private Sub txtOpAddTime_KeyPress(KeyAscii As Integer) 'CheckInputNum 'Reference function to check input

If Not (KeyAscii >= vbKey0 And KeyAscii <= vbKey9 _ Or KeyAscii = vbKeyBack _ Or KeyAscii = Asc(\

27

KeyAscii = 0 End If End Sub

Private Sub txtOpID_KeyPress(KeyAscii As Integer)

If Not (KeyAscii >= vbKey0 And KeyAscii <= vbKey9 _ Or KeyAscii = vbKeyBack) Then KeyAscii = 0 End If End Sub

学生登记界面如图5.4所示。

图5.4学生信息登记界面

代码如下:

Private Sub cmdAdd_Click() dgdVip.Enabled = False cmdRefresh.Enabled = False txtVipID.Enabled = True

If cmdAdd.Caption = \添加(&A)\ cmdAdd.Caption = \确定\ txtVipID.SetFocus

SetTextEmpty ' Reference a founction to set empty cmdDel.Enabled = False

28

cmdModify.Enabled = False cmdRefresh.Enabled = False Else

'To Progress option Dim vipsex As String

If VipMale.Value = True Then vipsex = \男\

ElseIf VipFemale.Value = True Then vipsex = \女\ Else

vipsex = \ End If

If txtVipName.Text = \

MsgBox \ txtVipName.SetFocus Exit Sub

ElseIf txtVipID.Text = \

MsgBox \ txtVipID.SetFocus Exit Sub Else

With objRs

checkAddNew = True

.Filter = \ If .RecordCount > 0 Then

MsgBox \ txtVipID.Text = \ txtVipID.SetFocus .Filter = \ cmdRefresh.Value = True checkAddNew = False cmdDel.Enabled = True cmdModify.Enabled = True cmdAdd.Caption = \添加(&A)\ txtVipID.Enabled = False cmdRefresh.Enabled = True dgdVip.Enabled = True checkAddNew = False Exit Sub End If

checkAddNew = True .AddNew

29

.Fields(0).Value = Trim(txtVipID) .Fields(1).Value = Trim(txtVipName) .Fields(2) = vipsex

.Fields(3) = Trim(txtVipID_card.Text) .Fields(4) = Trim(txtVipPhone.Text) .Fields(5) = Trim(txtVipAddress.Text) .Fields(6) = Trim(txtVipAddTime.Text) .Fields(7) = Trim(txtVipEndTime.Text) .Update

MsgBox \ .Filter = \ cmdRefresh.Value = True End With

checkAddNew = False cmdDel.Enabled = True cmdModify.Enabled = True cmdAdd.Caption = \添加(&A)\ txtVipID.Enabled = False cmdRefresh.Enabled = True dgdVip.Enabled = True End If End If End Sub

Private Sub cmdClose_Click() Unload Me End Sub

Private Sub cmdDel_Click()

If Empty_Check = True Then Exit Sub 'Reference function to check if your database is empty CheckConnect 'To break objrs if it is opened If ConnectToServer = True Then

Set objRs = New ADODB.Recordset

StrSql = \* from tBorrow where cVipID ='\& Trim(txtVipID.Text) & \cReturnTime='' \

GetData StrSql 'Reference function to get data If objRs.RecordCount > 0 Then

MsgBox \ CheckConnect 'To break objrs if it is opened If ConnectToServer = True Then

Set objRs = New ADODB.Recordset StrSql = \

GetData StrSql 'Reference fuction to get data Set dgdVip.DataSource = objRs

30

cmdRefresh.Value = True 'Exectue refresh in order to list data when form load ColNamechange 'Reference fuction to change columns name to chinese End If Else

If MsgBox(txtVipName & \'s data will delete are you sure to continue ?\vbYesNo + vbInformation) = vbYes Then

StrSql = \ objCon.Execute StrSql

CheckConnect 'To break objrs if it is opened If ConnectToServer = True Then

Set objRs = New ADODB.Recordset StrSql = \

GetData StrSql 'Reference function in order to get data Set dgdVip.DataSource = objRs

cmdRefresh.Value = True 'Exectue refresh in order to list data when form load ColNamechange 'Reference fuction to change columns name to chinese End If End If

CheckConnect 'To break objrs if it is opened If ConnectToServer = True Then

Set objRs = New ADODB.Recordset StrSql = \

GetData StrSql 'Reference fuction to get data Set dgdVip.DataSource = objRs

cmdRefresh.Value = True 'Exectue refresh in order to list data when form load ColNamechange 'Reference fuction to change columns name to chinese End If End If End If End Sub

Private Sub cmdModify_Click()

If Empty_Check = True Then Exit Sub 'Reference function to check is your database is empty If Trim(txtVipID.Text) <> Trim(objRs.Fields(0).Value) Then Exit Sub 'To check vipID If cmdModify.Caption = \修改(&M)\ cmdModify.Caption = \确定\ cmdDel.Enabled = False cmdAdd.Enabled = False cmdRefresh.Enabled = False Else

If MsgBox(\you sure to modify this record \vbYesNo + vbInformation) = vbYes Then

With objRs

31

If Not .EOF And .RecordCount > 0 Then .Fields(0).Value = Trim(txtVipID.Text) .Fields(1).Value = Trim(txtVipName.Text) ' .Fields(2) = vipsex

.Fields(3) = Trim(txtVipID_card.Text) .Fields(4) = Trim(txtVipPhone.Text) .Fields(5) = Trim(txtVipAddress.Text) .Fields(6) = Trim(txtVipAddTime.Text) .Fields(7) = Trim(txtVipEndTime.Text) .Update End If End With

cmdModify.Caption = \修改(&M)\ cmdDel.Enabled = True cmdAdd.Enabled = True cmdRefresh.Enabled = True End If End If End Sub

Private Sub cmdRefresh_Click()

RefreshVip 'Reference refreshvip function to refresh End Sub

Private Sub dgdVip_RowColChange(LastRow As Variant, ByVal LastCol As Integer) If checkAddNew = True Then Exit Sub cmdRefresh.Value = True End Sub

Private Sub Form_Activate()

FormMiddle frmVipReg 'Reference function to make form in MDIForm'mddile If ConnectToServer = True Then

Set objRs = New ADODB.Recordset StrSql = \

GetData StrSql 'Reference function in order to get data Set dgdVip.DataSource = objRs

cmdRefresh.Value = True 'Exectue refresh in order to list data when form load ColNamechange 'Reference fuction to change columns name to chinese End If End Sub

图书信息登记界面如图5.5所示。

32

图5.5 图书信息登记界面

图书查询界面如图5.6所示。

图5.6 图书信息查询界面

代码如下:

Private Sub cmdQuery_Click()

CheckConnect 'If objRs is open then close it

33

If ConnectToServer = True Then

Set objRs = New ADODB.Recordset If optCheck(0).Value = True Then

'This is check if your query by is null If Trim(txtbookID.Text) = \

MsgBox \ txtbookID.SetFocus Exit Sub End If

StrSql = \ GetData StrSql 'Reverence function to ger data If objRs.RecordCount = 0 Then

MsgBox \book do not exist,please input another books ID or choose another query way !\ txtbookID.Text = \

optCheck(0).Value = False

EnabledSet 'Reference function to set checkbox enabled

CheckConnect 'Reference function if objrs is open then close it

Exit Sub End If

optCheck(0).Value = False

ElseIf optCheck(1).Value = True Then

'This is check if your query way is null If Trim(txtBookName.Text) = \

MsgBox \ txtBookName.SetFocus Exit Sub End If

StrSql = \\

GetData StrSql 'Reference function to get data If objRs.RecordCount = 0 Then

MsgBox \ or choose another query way!\ txtBookName.Text = \ optCheck(1).Value = False

EnabledSet 'Reference function to set checkbox enabled

CheckConnect 'Reference function if objrs is open then close it cmdQuery.Enabled = False Exit Sub

34

End If

optCheck(1).Value = False

ElseIf optCheck(2).Value = True Then 'This is check if your query by is null If Trim(txtBookAuthor.Text) = \

MsgBox \ txtBookAuthor.SetFocus 'Reference function to ger data Exit Sub End If

StrSql = \\

GetData StrSql 'Reference to get data If objRs.RecordCount = 0 Then

MsgBox \author do not exist,please input another author or choose another query way!\ txtBookAuthor.Text = \

EnabledSet 'Reference function to set checkbox enabled

CheckConnect 'Reference function if objrs is open then close it optCheck(2).Value = 0 cmdQuery.Enabled = False Exit Sub End If

optCheck(2).Value = False

ElseIf optCheck(3).Value = True Then 'This is check if your query is null If Trim(txtBookPublisher.Text) = \

MsgBox \ txtBookPublisher.SetFocus 'Reference function to get data Exit Sub End If

StrSql = \& \

GetData StrSql 'Reference function to get data If objRs.RecordCount = 0 Then

MsgBox \publisher do not exist,please input another publisher or choose another query way!\ txtBookPublisher.Text = \ optCheck(3).Value = False

EnabledSet 'Reference function to set checkbox enabled

CheckConnect 'Reference function if objrs is open then close it

35

cmdQuery.Enabled = False Exit Sub End If

optCheck(3).Value = False Else

Exit Sub 'If you don't choice query then exit sub End If

Set dgdResult.DataSource = objRs 'change columns name

dgdResult.Columns(0).Caption = \图书编号\ dgdResult.Columns(1).Caption = \图书名称\ dgdResult.Columns(2).Caption = \号\ dgdResult.Columns(3).Caption = \作者\ dgdResult.Columns(4).Caption = \出版社\ dgdResult.Columns(5).Caption = \类别\ dgdResult.Columns(6).Caption = \价格\ dgdResult.Columns(7).Caption = \藏书数量\ dgdResult.Columns(8).Caption = \库存数量\ 'Bond data to text

txtbookID.Text = objRs.Fields(0).Value txtBookName.Text = objRs.Fields(1).Value txtBookAuthor.Text = objRs.Fields(3).Value txtBookPublisher.Text = objRs.Fields(4).Value End If

cmdQuery.Enabled = False

EnabledSet 'Reference function to set checkbox enabled End Sub

Private Sub Form_Activate()

FormMiddle frmBookQuery 'Reference function to make form in MDIForm'mddile End Sub

36

第六章 测试分析报告

有两种基本方法可以用来标识测试用例,即功能测试(黑盒测试)和结构测试(白盒测试)。本次测试我主要采用了功能测试。

功能测试的基本观点是,任何程序都可以看作是将输入定义域取值映射到输出值域的函数。

6.1 测试计划和要点

软件测试的本质是针对要测试的内容确定一组测试用例。在讨论之前,我先把要测试各个模块的计划和要点列出: 6.1.1 主模块测试要点

数据库连接情况:正常情况,数据库文件缺少,外部系统异常。 系统设置获取:正常情况,外部系统异常。

对用户输入的响应:合法输入,能够正常调用子模块;

非法输入,系统能否辨别,并作出响应(提出警告); 子模块的异常状况,系统能否及时做出响应。

6.1.2 借阅模块测试要点

模块正常运行流程

用户输入数据检查(学生学号、图书书号),包括数据合理性检查,以及合法性检查 数据库操作

数据库连接异常时的响应情况 6.1.3 学生查询模块测试要点

数据库连接正常时 输入合理合法参数

37

输入参数不合理 输入参数不合法

数据库连接异常;数据库数据异常(读者姓名为空) 6.1.4 图书查询模块测试要点

数据库连接正常 数据库数据正常 输入的书号合理合法 输入的书号不合理 输入的书号不合法 数据库数据异常 数据库连接异常 6.1.5 图书归还模块测试要点

模块正常工作流程

对输入的查验,包括输入值的合法性与合理性检验 数据库连接异常能否做出适当处理 数据库数据异常时能否判断并给予适当处理

6.2 测试用例

测试用例是为了特定目的(如考察特定程序路径或验证是否符合特定的需求)而设计的测试数据及与之相关的测试规程的一个特定的集合,或称为有效地发现软件缺陷的最小测试执行单元。

根据上一节给出的测试要点,又因为测试是不可能穷举的。所以我们采用等价划分法来进行对图书管理系统的测试。它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有代表性和完整性。

38

6.2.1 主模块测试用例

表6-1 主模块测试用例

字段名称 标识符 测试项 输入标准 C1 描 述 主模块中的“系统”菜单栏,“业务”菜单栏的功能测试 1.打开主模块,没有任何输入字符,点击相应的菜单栏项目。 2.在数据库文件缺少的情况下,打开主模块。 1.模块未做任何操作,单击“系统”|“退出”命令,能正常退出,无提示信息。 2.在打开相应的子窗体时,未做任何操作,单击“系统”|“退出”命令,输出标准 能正常退出,无提示信息。 3.在打开相应的子窗体时,做相关的增删或修改操作,未保存,单击“系统”|“退出”命令,提示“修改信息未保存,保存修改吗?”单击“Yes”,保存修改,正常退出,单击“No”,不保存修改,并退出。 6.2.2 借阅模块测试用例

表6-2 借阅模块测试用例

字段名称 标识符 测试项 C2 借阅模块的功能测试 描 述 1.打开借阅模块,没有任何输入字符,点击相应的项目。 输入标准 2.输入一些正确的学号、图书号、借阅号,点击“登记”。 3.输入一些非法的学号、图书号、借阅号,点击“登记”。 1.模块未做任何操作,单击 “退出”命令,能正常退出,无提示信息。 输出标准 2.在打开借阅模块,做相关的“借出”操作,未保存,单击 “退出”命令,提示“修改信息未保存,保存修改吗?”单击“Yes”,保存修改,正常退出,单击“No”,不保存修改,并退出。

39

6.2.3 学生查询模块测试用例

表6-3 学生查询模块测试用例

字段名称 标识符 测试项 C3 学生查询模块的功能测试 描 述 1.打开学生查询模块,没有任何输入字符,点击相应的项目。 2.输入一些正确的学号、姓名,点击“确定”。 输入标准 3.输入一些非法的学号、姓名,点击“确定”。 4.在选择“按姓名查询”单选时,输入学号,点击“确定”。 5.在选择“按学号查询”单选时,输入姓名,点击“确定”。 输出标准 1.模块未做任何操作,单击 “退出”命令,能正常退出,无提示信息。 6.2.4 图书查询模块测试用例

表6-4 图书查询模块测试用例

字段名称 标识符 测试项 C4 图书查询模块的功能测试 描 述 1.打开图书查询模块,没有任何输入字符,点击相应的项目。 2.输入一些正确的书名、作者、出版社,点击“确定”。 输入标准 3.输入一些非法的书名、作者、出版社,点击“确定”。 4.在选择“按书名查询”单选时,输入作者或出版社,点击“确定”。 5.在选择“按作者查询”单选时,输入书名或出版社,点击“确定”。 6.在选择“按出版社查询”单选时,输入书名或作者,点击“确定”。 输出标准 1.模块未做任何操作,单击 “退出”命令,能正常退出,无提示信息。 6.2.5 图书归还模块测试用例

40

表6-5 图书归还模块测试用例

字段名称 标识符 测试项 C5 图书归还模块的功能测试 描 述 1.打开归还模块,没有任何输入字符,点击相应的项目。 输入标准 2.输入一些正确的学号、图书号,点击“登记”。 3.输入一些非法的学号、图书号,点击“登记”。 1.模块未做任何操作,单击 “退出”命令,能正常退出,无提示信息。 输出标准 2.在打开借阅模块,做相关的“借出”操作,未保存,单击 “退出”命令,提示“修改信息未保存,保存修改吗?”单击“Yes”,保存修改,正常退出,单击“No”,不保存修改,并退出。 6.3 测试结果及结论

6.3.1 测试的结果

我们按照6.2节中给出的测试用例的顺序来给出相应的测试结果。

表6-6 主模块测试结果

标识符 测试结果 C1 正常操作无任何异常处理出现 与预期的偏差 无 说明的问题 主模块通过了功能测试 表6-7 借阅模块测试结果

标识符 测试结果 C2 在输入借阅号但是未输入图书号或学生学号时,系统也能给出正确的借阅成功信息 应该在借阅图书时,输入完整的借阅信息,包括借阅号、图书号、学生学号和借阅时间 图书借阅模块的借阅功能有待改进 41

与预期的偏差 说明的问题

表6-8 学生查询模块测试结果

标识符 测试结果 C3 在单选“按姓名查询”时,输入学生学号也能查询到学生的相关信息。 在单选“按学号查询”时,输入学生姓名也能查询到学生的相关信息。 应该在单选按“姓名”或“学号”查,只能通过选中的方式查询学生的相关信息。 学生查询模块的借阅功能有待改进

表6-9 图书查询模块测试结果

与预期的偏差 说明的问题 标识符 测试结果 C4 正常操作无任何异常处理出现 与预期的偏差 无 说明的问题

表6-10 图书归还模块测试结果

图书查询模块通过了功能测试 标识符 测试结果 C5 正常操作无任何异常处理出现 与预期的偏差 无 说明的问题

6.3.2 缺陷分析及改进

本部分对上述缺陷和其他收集数据进行综合分析 1.缺陷综合分析

缺陷发现效率 = 缺陷总数/执行测试用时 = 2/(5天) = 0.4 /天 用例质量 = 缺陷总数/测试用例总数 ×100% = 2/5 ×100% = 40% 2.对缺陷的改进

在测试用例C2和C3中,发现的缺陷,通过对相关功能编码的改进,已经使测试

42

图书归还模块通过了功能测试

的结果和预期达到的效果一致。 6.3.3 测试结论 1. 测试目标完成 2. 测试已经通过

3. 可以进入下一阶段项目目标

43

总结

这次软件工程课程设计,我主要采用Visual Basic作为前台开发工具,Microsoft SQL Severe2000作为后台数据库,结合软件工程设计和数据库编程的有关知识,开发了这个图书管理系统。

通过这次软件工程课程设计,我对于软件工程设计的相关步骤和流程有了更深刻的理解,熟悉并掌握了Microsoft SQL Severe2000和VB6.0的数据库使用,另一方面,也对SQL语言作为嵌入式语言的功能有了更深刻的体会。同时,我也发现自己对于软件工程设计和数据库设计的知识掌握的还不够,设计和编程能力还有待于进一步提高。这次课程设计给了我一个锻炼自己,强化专业知识的机会,通过这次课程设计,我也得以一窥软件工程设计的广袤天地,我相信,只要认真学习,多借鉴别人的经验,多思考,多实践,就一定能够成为一个合格的软件设计人员,能够翱翔在软件开发的天地。

同时,在这里感谢我的指导老师张建国老师的悉心指导。

44

参考文献

[1]张海藩.软件工程导论(第四版).北京:清华大学出版社,2003年12月 [2]朱少民.软件测试方法和技术.北京:清华大学出版社,2005年7月 [3]Paul C.Jorgensen.软件测试(第二版).北京:机械工业出版社,2006年2月 [4]郭胜,夏邦贵.Visual Basic数据库开发入门与范例解析.北京:机械工业出版社,2004年4月

[5]刘瑞新.Visual Basic管理信息系统开发毕业设计指导及实例.北京:机械工业出版社,2005年3月

45

本文来源:https://www.bwwdw.com/article/459w.html

Top