图书管理系统课程设计.docx
《图书管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《图书管理系统课程设计.docx(39页珍藏版)》请在冰豆网上搜索。
![图书管理系统课程设计.docx](https://file1.bdocx.com/fileroot1/2023-4/17/d9797ca3-8141-4cca-b74c-72f03b159792/d9797ca3-8141-4cca-b74c-72f03b1597921.gif)
图书管理系统课程设计
软件工程导论实验报告
一、实验题目:
学生成绩管理系统、图书借阅管理系统、工资管理系统、网络订餐系统、招聘考试成绩管理系统
二、实验目标
通过独立完成项目开发,加深对软件开发分析过程的流程和方法的理解,建立软件工程的思想,同时,明确软件开发的成本和时间管理的相关概念。
实验一
实验要求:
.在实验题目列出的几个系统中选择一个作为自己要开发的软件系统,要求该系统有明确的功能需求,并建立系统的分析模型。
.对系统进行需求分析,掌握ER图、DFD、DD的设计与编写
.熟悉Visio环境和基本操作,制作一个简单的系统流程图和数据流图、主要数据项的数据字典描述及主要加工的逻辑说明(自己选择结构语言、判定树、判定表等)。
.撰写需求分析规格说明书
用户需求分析
作为图书管理系统,其主要的需求人员是借阅者,借阅者对其的要求可以大体概括如下:
1)能按各种方式,比如书名、编号、作者等查询图书馆的藏书情况;
2)能熟悉使用图书管理系统;
3)能方便地借阅图书、续借图书、归还图书;
4)能查询自己的基本资料、借阅图书情况;
5)能方便图书管理员对图书的录入登记、注销;
6)能方便对新生的登记或注销已经毕业学生的信息;
7)能及时发布一些学院学生借阅图书超期情况、馆内藏书情况等。
功能说明
1)、读者管理系统
(1)未注册者可以进入注册系统进行注册;
(2)已注册借阅者可按姓名、编号或身份证号登陆进入借阅者检索系统查询借阅者
情况;
(3)已注册借阅者可按书名、出版社或作者对图书信息进行检索查询或提出预约请
求;
2)、图书管理员管理系统
(1)图书管理员通过图书管理员身份认证进入图书管理员管理系统;
(2)读者可借阅在库图书;
(3)在规定期限内借阅者归还借阅图书;
(4)读者在不违规情况下可继续借阅已借阅图书;
(5)读者可以预约图书。
3)、系统管理员管理系统
(1)系统管理员通过系统管理员身份认证进入系统管理员管理系统;
(2)系统管理员可以对图书进行图书管理(如:
查询、删除、修改图书资料或图书
分类查询修改、删除管理);
(3)系统管理员可以对借阅者进行学生管理(如:
查询、删除、修改借阅者信息或
借阅者类别修改、删除管理,查询浏览借阅者详细资料,包括借阅次数,登陆次数,
最后登陆时间);
4)、罚款管理系统
(1)罚款管理员通过罚款管理员身份认证进入罚款管理系统;
(2)罚款处理可以读取借阅信息表再生成超时罚款信息表,通过超时罚款信息表可
以生成罚款单给罚款管理员;
(3)图书管理员告知罚款系统图书超时未还,经罚款管理员鉴定后,对图书进行注销处理且罚款管理员对借阅者进行罚款处理。
DFD顶层流程图
ER模型图
程序流程图
数据字典
图书管理系统数据流图中,数据信息和处理过程需要通过数据字典才能描述清楚。
在定义的图书管理系统数据字典中,主要对数据流图中的数据项、数据流、数据存储和处理过程进行说明。
(1)数据项描述
1)数据项名称:
借书证号
含义说明:
惟一标识一个借书证
类型:
字符型
长度:
50
逻辑关系:
不允许为空
2)数据项名称:
用户名
含义说明:
读者的名称
类型:
字符型
长度:
20
逻辑关系:
不允许为空
3)数据项名称:
密码
含义说明:
对用户名和操作员管理员进行加密
类型;字符型
长度:
10
逻辑关系:
允许为空
4)数据项名称:
性别
类型:
字符型
长度:
10
逻辑关系:
允许为空
5)数据项名称:
所在系别
类型;字符型
长度:
10
逻辑关系:
允许为空
6)数据项名称:
所在班级
类型:
字符型
长度:
10
逻辑关系:
允许为空
7)数据项名称:
操作员名称
类型:
字符型
长度:
30
逻辑关系:
不允许为空
8)数据项名称:
操作员简称
含义说明:
惟一标识一个操作员
类型:
字符型
长度:
10
逻辑关系:
不允许为空
9)数据项名称:
操作员级别
含义说明:
对操作员和管理员进行区分
类型:
字符型
长度:
10
逻辑关系:
不允许为空
10)数据项名称:
图书编号
含义说明:
惟一标识一个图书
类型:
字符型
长度:
10
逻辑关系:
不允许为空
11)数据项名称:
图书名称
类型:
字符型
长度:
50
逻辑关系:
不允许为空
12)数据项名称:
作者
类型:
字符型
长度:
50
逻辑关系:
不允许为空
13)数据项名称:
作者
类型:
字符型
长度:
50
逻辑关系:
不允许为空
14)数据项名称:
作者
类型:
字符型
长度:
50
逻辑关系:
不允许为空
15)数据项名称:
出版社
类型:
字符型
长度:
50
逻辑关系:
不允许为空
16)数据项名称:
出版时间
类型:
日期时间型
长度:
8
逻辑关系:
不允许为空
17)数据项名称:
价格
类型:
整型
长度:
4
逻辑关系:
不允许为空
18)数据项名称:
备注
类型:
字符型
长度:
200
逻辑关系:
允许为空
19)数据项名称:
借书日期
类型:
日期时间
长度:
8
逻辑关系:
不允许为空
20)数据项名称:
还书日期
类型:
日期时间
长度:
8
逻辑关系:
不允许为空
(2)数据结构描述
1)数据流名称:
用户情况
含义说明:
定义了一个读者的有关信息
组成结构:
用户情况=用户名+借书证号+密码+性别+所在系别+所在班级
2)数据流名称:
操作员情况
含义说明:
定义了一个操作员的有关信息
组成结构:
操作员情况=操作员名称+操作员简称+操作员级别+操作员密码
3)数据流名称:
图书情况
含义说明:
定义了一个图书的有关信息
组成结构:
图书情况=图书编号+图书名称+作者+出版社+出版时间+价格+备注
(3)数据流(非数据项)说明
1)数据流名称:
借书单
含义:
读者借书时要填写的单据
来源:
读者
去向:
审核借书
数据流量:
250份/天
组成:
借书单=借书证号+图书编号+借书日期
2)数据流名称:
还书单
含义:
读者还书时要填写的单据
来源:
读者
去向:
审核还书
数据流量:
250份/天
组成:
还书单=图书编号+还书日期
(4)数据存储说明
1)数据存储名称:
图书数据表
含义说明:
存放图书的有关信息
组成结构:
图书编号+图书名称+作者+出版社+出版时间+价格+备注
说明;书号具有惟一性和非空性
2)数据存储名称:
用户信息表
含义说明:
存放读者的注册信息
组成结构:
用户名+借书证号+密码+性别+所在系别+所在班级
说明:
证号具有惟一性和非空性,性别只能是男和女
3)数据存储名称:
借书记录
含义说明:
存放读者的借书,还书信息
组成结构:
借书证号+图书编号+借书日期+还书日期
说明:
要求能够立即查询
(5)处理过程说明
1)处理过程名称:
图书管理
输入:
图书情况,
输出:
图书记录
处理说明:
对馆内所有图书按图书编号进行管理,将图书数据数据化,存储图书数据表中。
2)处理过程名称:
读者管理
输入:
读者情况,
输出:
读者记录
处理说明:
建立读者信息表,对读者进行统一编号,实现读者记录表的增删改维护功能。
3)处理过程名称:
查看数目
输入:
借书请求,读者,,
输出:
借书记录,图书信息
处理说明:
实现根据图书编号等查询图书。
4)处理过程名称:
借书处理
输入:
图书情况,读者,借书记录
输出:
借书记录
处理说明:
确认读者符合借书条件,办理借书手续。
5)处理过程名称:
还书处理
输入:
图书情况,
输出:
借书记录
处理说明:
对照相应的图书编号可办理还书手续。
6)处理过程名称:
安全管理
输入:
操作员情况,用户情况
输出:
操作员级别,操作员记录,用户记录
处理说明:
通过用户名和口令,确认用户身份,保证系统的安全型。
实验2
实验内容:
采用面向数据流的设计方法设计系统软件结构,使用Visio画出软件层次图。
(2学时)
实验要求:
学习总体设计的基本方法;
掌握面向数据流的设计方法;
通过对实验
(一)中DFD图的分析,使用Visio画出软件层次图。
编写出初步的系统设计报告
实验结果:
顶层数据流图:
第0层图:
第一层图:
(1):
登陆子系统
(2):
管理子系统
(3)查询子系统
第二层图:
(1):
处理新书购入
(2)处理学生借书
(3):
处理学生还书
(4):
处理图书注销
(5)处理学生信息查询
(6)处理图书信息查询
实验三
完成实验
(二)中的两到三个主要功能模块的详细设计;编写部分代码(2学时)
要求:
学习详细设计的基本方法;
掌握详细设计图形工具的使用方法;
给出主要功能模块的算法
选择程序设计语言编写主要功能模块代码
图书基本信息录入模块
首先输入图书录入的编号(不为0)判断是否有重复的编号,若有,则提示用户该书已存在,若无则继续录入书名、作者、出版社、单价。
voidputin()/*定义录入函数*/
{
inty=1;
system("cls");
while(y)
{
printf("\t请输入您的书籍的书号:
");
scanf("%s",library.book[library.count].number);
printf("\t请输入书名:
");
scanf("%s",library.book[library.count].name);
printf("\t请输入作者名:
");
scanf("%s",library.book[library.count].author);
printf("\t请输入出版社:
");
scanf("%s",library.book[library.count].publish);
printf("\t请输入出版时间:
");
scanf("%s",library.book[library.count].time);
printf("\t请输入该书的价格:
");
fflush(stdin);
scanf("%f",&library.book[library.count].price);
library.count++;
printf("\n是否继续录入(1.继续;0,退出录入):
");
fflush(stdin);
scanf("%d",&y);
if(y!
=1)
{
y=0;
break;
}
}
save();
}
图书基本信息查询模块
用户先选择图书查询方式(按书名查找或按书号查找)输入图书书名或书号后,查找出该图书是否存在,若存在,则显示该图书信息,若不存在则提示用户无此图书信息。
voidsearch_by_author()/*定义按作者名查询*/
{
chars3[20];
intflag=1;
printf("请输入要查询的书的作者:
");
fflush(stdin);
scanf("%s",s3);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for(inti=0;iif(strcmp(s3,library.book[i].author)==0)
{
flag=0;
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
}
if(flag)
{
printf("cannotfound!
");
}
fflush(stdin);
getchar();
}
图书基本信息修改模块
用户输入要修改的书名,判断该书是否存在,若不存在,则提示用户无此图书信息;若存在,则提示用户选择修改项目,然后提示用户图书信息修改完成。
voidmodify()//修改图书信息
{
charnumber[10];
system("cls");/*清屏*/
printf("\nPleasetypeinthenumberofthebookyouwanttodelete:
");
fflush(stdin);
scanf("%s",number);
inti;
for(i=0;i{
if(strcmp(number,library.book[i].number)==0)
{
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
break;
}
}
if(i!
=library.count)
{
mbookbook;
printf("\n\t\t请输入修改后此图书的信息\n");
printf("\t请输入图书号:
");
scanf("%s",book.number);
printf("\t请输入图书名:
");
scanf("%s",book.name);
printf("\t请输入作者名:
");
scanf("%s",book.author);
printf("\t请输入出版社:
");
scanf("%s",book.publish);
printf("\t请输入出版时间:
");
scanf("%s",book.time);
printf("\t请输入该书的价格:
");
fflush(stdin);
scanf("%f",&book.price);
strcpy(library.book[i].name,book.name);
strcpy(library.book[i].number,book.number);
strcpy(library.book[i].publish,book.publish);
strcpy(library.book[i].author,book.author);
strcpy(library.book[i].time,book.time);
library.book[i].price=book.price;
save();
}
else
printf("\ncannotfound!
\n");
fflush(stdin);
getchar();
}
实验4
对所选系统完成系统测试(2学时)
实验要求:
学习软件测试的基本方法;
结合实验(三)中的算法,用白盒法中的逻辑覆盖测试技术,设计测试用例;
选择实验(三)中给出代码的模块进行黑盒测试。
单元测试:
采用白盒测试法
针对用户还书、预约、借书、查询等功能模块进行测试
(1)对于还书功能模块,模块的程序流程图如下:
判定节点为2,环形复杂度为:
2+1=3
采用路径覆盖法,测试用例为:
1、测试路径:
0-5输入条件:
retno不存在预期输出:
无该图书
2、测试路径:
0-1-4-5输入条件:
retno存在,borday>90预期输出:
接受违约惩罚
3、测试路径:
0-1-2-3输入条件:
retno存在,borday<=90预期输出:
成功还书
(2)对于预约功能模块,模块的程序流程图如下:
图中判定节点为:
2,环形复杂度为:
2+1+3
采用路径覆盖法,测试用例如下:
1、测试路径:
0-1-6-9输入条件:
borday>90预期输出:
接受违约处罚
2、测试路径:
0-1-2-7输入条件:
borday<=90,borno不存在预期输出:
不存在该图书
3、测试路径:
0-1-2-3-8输入条件:
borday<=90,borno存在,onself不存在预期输出:
图书已借出
4、测试路径:
0-1-2-3-4-5输入条件:
borday<=90,borno存在,onself存在预期输出:
预约成功
(3)对于借书功能模块,模块的程序流程图如下:
图中判定节点为4,环形复杂度为:
4+1=5
采用路径覆盖测试法,测试用例如下:
1、测试路径:
0-7输入条件:
borday>90预期输出:
接受违约惩罚
2、测试路径:
0-1-8输入条件:
borday<=90,borno>5预期输出:
超出所借数目的最大
3、测试路径:
0-1-2-3-9输入条件:
borday<=90,borno>5,bookno不存在预期输出:
所借图书编号不存在
4、测试路径:
0-1-2-3-4-10输入条件:
borday<=90,borno>5,bookno存在,onshelf不存在预期输出:
书不在架
5、测试路径:
0-1-2-3-4-5-6输入条件:
borday<=90,borno>5,bookno存在,onshelf存在预期输出:
借书成功
(4)对于查询功能模块,模块的程序流程图如下:
流程图中判定节点为2,环形复杂度为:
2+1=3
采用路径覆盖测试法,测试用例如下:
1、测试路径:
0-1-6输入条件:
bookno不存在预期输出:
要查找的图书不存在
2、测试路径:
0-1-2-3输入条件:
bookno存在,onself=1预期输出:
要查找的图书已被借走
3、测试路径:
0-1-2-4-5输入条件:
bookno存在,onself=0预期输出:
返回查找图书信息
2.)确认测试:
采用黑盒测试法测试
确认测试,主要是为了检测接口功能应对的各种非预期性输入时系统的可靠性和容错性等性能。
本小型图书管理系统将对用户和管理员与图书管理系统之间的交互接口进行测试,所以测试的主要内容有2个:
图书管理系统和管理员接口,图书管理系统和读者接口。
(1)读者与图书管理系统之间的接口
读者登陆图书管理系统,应受到系统如下的约束:
用户名需要以字母开头,后面是数字和字母组合,不能超过最大长度为10,密码长度不超过6
划分了等价类,情况如下所示:
输入条件
有效等价类
编号
无效等价类
编号
用户名开头
字母(a-z)
1
非字母
4
余下字符
数字和字母组合
2
非数字和字母
5
字符数
小于10
3
大于10
6
有效等价类的测试用例:
测试编号
输入条件
预期输出
覆盖等价类
开头
余下字符
个数
T1
a
dd32323
8
add32323
1、2、3
无效等价类的测试用例:
测试编号
输入条件
预期输出
覆盖等价类
开头
余下字符
个数
T1
2
dd32323
8
输入错误
2、3、4
T2
a
*>
5
输入错误
1、3、5
T3
a
1234567899
11
输入错误
1、2、6
实验5
面向对象方法建模(2学时)
实验要求:
学习面向对象软件的设计方法;
掌握UML建模语言的使用,ROSE工具使用;
对前四个实验所建系统的用例图和类图。
用例图
1.借阅者请求服务的用例图
用例图说明:
(1)SerchforBook:
书籍查询用例。
(2)Reservethebook:
书籍预订用例。
(3)Logonthesystem:
登陆系统。
(4)QueryInfo:
查询借阅信息。
(5)Borrowthebook:
借阅书籍。
(6)Returnthebook:
归还书籍。
(7)ReturnWithFine:
还书时交纳罚金。
如果借阅者所借书籍超过借阅期限未还,还书的时候就要交纳一定的罚金。
2.图书馆管理员处理借书、还书等的用例图
用例图说明:
(1)Getbook:
书籍归还处理
(2)Lendbook:
书籍借阅处理
(3)RemoveReservation:
删除书籍预订信息
(4)GetWithFine:
还书时收取罚金
(5)Checkusercount:
检查用户借阅凭证的合法性,图书管理员在借阅者借书的时候要检查用户借阅凭证的合法性
3.系统管理员进行系统维护的用例图
用例图说明:
(1)QueryBorrowerInfo:
查询读者信息
(2)QueryBookInfo:
查询书籍信息
(3)AddTitle:
增加书目
(4)RemoveorUpdateTitle:
删除或更新书目
(5)AddBook:
增加书籍
(6)RemoveBook:
删除书籍
(7)AddBorrower:
添加借阅者帐户
(8)RemoveorUpdateBorrower:
删除或更新借阅者帐户信息
类图
对图书馆管理系统中,对需求规格说明书进行分析,完成图书馆管理系统中,系统包图和类图的设计。