资源描述
电子信息学院
实验报告书
课程名:《软件工程实验 》
题 目: 软件工程实验报告
实验类别 【综合】
班 级: BX0903
学 号: 31
姓 名: 乐传阳
评语:
实验态度:认真( ) 一般( ) 差( )
实验结果:正确( ) 部分正确( ) 错( )
实验理论:掌握( ) 熟悉( ) 了解( )
操作技能:强( ) 一般( ) 差( )
实验报告:好( ) 一般( ) 差( )
成绩: 指导教师: 曾宪文
批阅时间: 年 月 日
53 / 54
1、实验目及要求
《软件工程》是一门实用性强课程,实验部分主要配合课程教学,围绕“图书馆管理系统”软件需求分析、设计、实现、测试、维护等过程进行。通过这些实验,使学生更深入理解软件工程基本原理、概念和技术方法,掌握软件可行性研究、需求分析、总体设计、详细设计、编码、测试和维护基本技术和方法,了解软件项目管理、过程模型和团队模型。
实验以团队方式组织,每个团队3-9人,每人任务不同,相互合作完成一个项目。开发过程中设置里程碑,每个里程碑进行评审。人人参及评审并被评审。
2、 实验步骤
⑴ 实验步骤及相关文档
第一章可行性分析报告
1 引言
为了方便管理者和及读者、便于图书更好管理。
1.1 编写目:
从现在应用技术方面和用户操作方式方面研究图书馆管理管理系统可行性和必要性。
1. 2 项目背景:
图书馆每天图书进出量很大,需要一个管理系统用来统一管理,记录图书进出信息。
开发者:乐传阳
用户:图书馆管理员及读者
1.3 参考资料:
《软件工程技术及应用》
《数据结构》
《软件工程实践教程》
《软件工程概论》
2 可行性研究前提
2.1 要求:
功能:系统要做到能准确记录不同图书借出还入时间,判断是否超时,以及计算超时应该罚款多少,还要记录各本书借出对应学号。系统在稳定性方面也要做到遇到断电、系统崩溃等情况保存数据不能缺失。.
性能:稳定快速,实时控制
输入/输出:条形码英文和汉字或者扫描仪器输入,英文和汉字输出。
安全及保密要求:不能轻易被破坏,不能让管理人员以外人删改图书信息。。
2. 2 可行性研究方法:
通过调查分析开发图书馆管理所具备能力及实现方法。确定总体结构,利用SQL Server数据库所具有能力,以最简洁最容易方法,使用VC++使其成为一个初级系统软件。
2. 3 决定可行性主要因素:
图书馆规模、设备状况、操作人员技术
3. 所建议系统技术可行性分析
3.1 对系统简要描述
系统能做到能准确记录不同图书借出还入时间,判断是否超时,以及计算超时应该罚款多少,还要记录各本书借出对应学号。
(1).设备:采用系统后,系统性能设备要求较高,建议系统使用了最先进技术使设备也必须跟着升级。
(2)软件采用了先进数据库技术以及一系列高技术含量软件,使得原来系统上一些软件无法继续使用,不过在新系统开发过程中将尽量考虑到,对现有软件兼容性。
3.2. 技术可行性评价
就目前使用开发技术来说软件功能目标应该能够达到;利用现有技术在规定期限内开发工作基本能够完成。
4软件经济可行性分析
4.1软件不需太多硬件设施,所以在购买和安装硬件及有关设备上不会有太多费用支出。
.4.2软件并不是太大系统软件,系统开发费用很低,并没有一次性巨大投资和日常研究耗费。
4.3软件安装和运行维护可能会有一定支出。
4.4软件操作简单,界面合理,人员不需复杂培训。
5 社会因素分析
该项目为独立开发,在技术上没有使用任何现有软件及方法。所以在法律方面不会存在侵犯专利权、侵犯版权等问题,完全按照合同规定责任履行。
软件对用户要求不高,不会导致用户不会用情况。
7.其他可供选择方案
由于软件比较简单,所以没有提供其他方案,只有一种开发方案。
8 结论意见
经过一系列各个不同方面可行性分析,分析员和用户及使用部门负责人对需要解决问题取得基本一致看法,开发方案得到批准,可以进行开发。
第二章需求分析及需求规格说明书
1. 概述
1. 1用户简介
本系统要面向图书馆广大读者,以及图书馆管理人员。广大读者借书具有时间和数量无规律性,而图书馆管理人员要准确记录图书进出量以及图书借出还入时间等等。
1. 2项目目及目标
图书馆具有大量图书进出信息,为了准确记录图书信息,避免图书缺失。也为了及时反馈图书是否被借出信息,方便广大读者借阅。
系统要做到能准确记录不同图书借出还入时间,判断是否超时,以及计算超时应该罚款多少,还要记录各本书借出对应学号。系统在稳定性方面也要做到遇到断电、系统崩溃等情况保存数据不能缺失。
1. 3参考资料
《软件工程技术及其应用》
《实用软件工程》
《软件工程实践教程》
1. 4相关文档
a 可行性分析报告
b 概要设计说明书
c 详细设计说明书
2. 目标系统描述
2.1组织结构及职责
3.标系统功能需求
3.1 功能需求分析
1.日常工作管理:包括借书管理、还书管理。
(1) 借书管理:主要功能是记录借阅证编号和图书编号,进行借书过程。在数据库中插入一条借书记录,该记录包括读者编号、图书编号、借出日期、还书期限、 操作员编号。
(2) 还书管理:主要功能是输入借阅证编号、图书编号,在借阅登记表中找到相应记录,将该记录相应数据插入到还书记录中,同时将借书记录删除,并保存 在借阅历史记录表中。
2.基本资料维护管理:包括图书资料维护、读者资料维护
(1) 图书资料维护:包括新书入库,以及现有书籍资料修改和删除。
(2) 读者资料维护:包括新读者资料入库,以及现有读者资料修改和删除
3.查询管理:包括图书资料查询、读者资料查询。
(1) 图书资料查询:根据相应图书信息对所有书籍进行所需查询。此查询包括:‘图书分类’、‘图书编号’、‘图书名称’、‘作者’、‘出版社’。
(2) 读者资料查询:根据相应读者资料进行所需查询。 ‘读者编号’、‘读者姓名’、‘读者种类’。
4.系统管理:系统登录、标准数据管理
(1)系统登录:管理员登录。
(2)标准数据管理:用于常用数据系统维护。
3.2功能需求点列表
编号
名称
使用者
功能
输入
输出
1
借书
读者
借出书籍
书籍编号以及学号
书籍是否存在
2
还书
读者
还入书籍
书籍编号以及学号
书籍数量
3
查询
读者以及管理员
查询书籍数量
书籍编号或名称
书籍剩余数量
4
系统管理
管理员
常用数据系统维护
管理员验证号
系统情况
4.目标系统性能需求
4.1时间要求
1.响应时间不能太长,要求系统能快速给出应答。
2.能更新处理时间。
3.远程数据传输时间不能太长,要及时准确。
4.2空间需求
A.支持并行操作使用者数要达到一定要求,要能支持多个用户同时操作。
B.要能处理大量文件并记录各种数据。
C.在一定时间内处理数据总数要尽可能大。
D.输入输出数据要完全符合要求,避免图书信息重复。
5.目标系统界面及接口需求
5.1界面需求
界面要求方便、简介、美观、一致等。
A.输入设备:键盘、鼠标、条形码扫描器和扫描仪等。
B.输出设备:显示器、打印机等。
C.显示风格:图形和字符界面。
D.显示方式:1024x768或640x480。
5.2接口需求点
1.软件接口:可能会需要及一些办公软件相联结。
2.硬件接口:可能会及一些磁盘机光盘刻录机等连接以便保存数据
6.目标系统其他需求
6.1安全性
1.要求查询返回数据不能出错。
2.对于权限控制要合理。为防止非法利用管理员账户登录进行破坏行为,系统应有相应检测模块检测到后应冻结账户。
3.要有数据库定时备份功能。
6.2可靠性
系统应具有数据及时准确处理功能,保证数据可靠性。
6.3灵活性
系统应具有一定灵活处理能力,比如书籍编号和名称都可以查询书籍。可键盘输入学号也可扫描学生卡等
7.目标系统假设及约束条件
可利用资源有学校机房和自己电脑,系统投入使用最晚时间是2011-6-2。
第三章软件设计及设计说明书
1、 导言
(1) 目
使软件工程规范化,使设计人员遵循统一概要设计进行编写,降低系统实现风险,做到系统设计资料规范性及全面性,以利于系统实现、测试、维护和版本升级等。
(2) 范围
软件系统总体结构设计、全局数据库和数据结构设计、外部接口设计、主要部件功能分配设计和部件之间接口设计等。
(3) 命名规则
变量命名规则:声明全局变量、局部变量对象命名规则。
数据库对象命名规则:声明数据库表名、字段名、索引名和视图名等对象命名规则。
(4) 术语定义
术语定义和解释表
序号
术语名称
术语定义
1
总体设计
软件系统总体逻辑结构,按照不同设计方法有不同结构
2
外部接口
本软件和其他软件之间接口,接口设施可以是中间件
3
数据结构
包括数据库表结构和其他数据结构
4
视图
在基表和其他视图之上建立一张虚表,具有很多物理表性质
5
子系统
具有相对独立功能小系统
6
模块
具有功能独立能被调用信息单元
7
角色
数据库中享有某些特权操作用户
8
内部接口
软件内部各子系统、模块、部件等之间接口
(5) 参考资料
1) 用户需求报告。
2) 软件开发合同。
3) 数据库设计规范。
4) 命名规范。
(6) 相关文档
1) 详细设计说明书。
2) 源程序清单。
3) 测试计划及报告。
4) 用户使用手册。
(7) 版本更新记录
由于是最新版本,无更新记录。
2、 总体设计
(1) 总体结构
图书馆管理系统
读者子系统
管理子系统
基础信息
图书借阅
书目检索
图书归还
读者开户
帐户续费
更新图书
书目检索
读者检索
读者管理
图书预约
管理员管理
(2) 运行环境设计
硬件平台:
条形码扫描仪
学生卡读卡机
(3) 子系统清单
子系统编号
子系统名称
子系统功能
1
读者子系统
供读者借书、还书、查阅图书等
2
管理子系统
供管理员管理 读者开户 续借 查阅图书数量、种类等
3
基础信息管理
管理读者和管理员基础信息
(4) 功能模块清单
模块编号
模块名称
模块功能
1
图书借阅
记录借出图书编号以及对应学号借出时间等
2
图书归还
记录归还图书编号以及时间,计算是否超时,以及超时罚款等
3
图书查找
查找该图书是否还有没有借出以及书名剩余量等信息
4
读者开户
为新读者注册一个账号一般用其学号,记录下他信息
5
更新书库
对于借出和还入书或者新加或丢失图书及时记录,更新图书信息
3、 模块功能分配
该系统,可以分为两大模块,一个小模块:分别为管理子系统,读者子系统两大模块;基础信息管理小模块;
在管理子系统中:
1):新书购入处理模块只要是针对采购员在根据计划在外采购新书之后处理,所以当采购员采购到新书后,系统根据原先计划采购新书进行核查,如果符合计划预定,则将新书入库;否则退货;该模块主要是处理购入新书是否符合要求;
2):处理学生借书模块:
该模块主要是处理学生借书业务,在图书馆管理人员输入学生信息时候,系统会根据学生文件对该学生进行查询,看看是否存在该学生,如果不存在,则系统给出警告信息:该学生不存在;如果存在该学生,则系统根据罚款单对该学生欠款情况进行查询,如果欠款超过一定金额,则借书失败,否则接受借书,更新借书文件,在显示器上面显示借书成功;
3):处理学生还书模块:
该模块主要是处理学生还书业务,在图书馆管理人员输入要还图书字段时,系统会在借书文件中查找该图书信息,之后对借书文件,学生文件中该学生已借书数,图书目录文件进行更新;然后在借书文件中提取学生数据,根据图书还书日期和借出日期对学生欠款金额进行计算之后将结果显示出来;
在查询子系统中:
有两个查询内容:
1) 学生信息查询:学生信息查询子模块主要是对学生信息查询;
2) 图书信息查询:图书信息查询子模块主要是对图书信息查询;
这些模块,是针对学生或者图书馆管理人员这两个不同对象,查询子系统主要是让用户了解信息,所以不需要进行用户密码登陆,直接可以进行查询,而管理模块是涉及到图书馆内部重要信息管理方面,所以必须要设置用户密码登陆和权限等等,以保数据安全性和系统安全性;
4、 数据结构设计
(1)数据库表名清单
序号
表名
功能概述
1
学生文件表
记录学生信息,方便学生借书还书注册等
2
图书目录文件
记录图书库里总图书量及其信息
3
借书文件表
方便查看哪些书籍被借出 还入及其时间
4
入库单表
记录新入库图书信息
5
管理员表
管理员id等 方便管理员身份注册及验证登陆
(2) 数据库表详细清单
A:学生文件表:
1
学生编号
Int
4
1
√
自动编号
2
姓名
nvarchar
10
3
性别
nvarchar
2
√
4
证件号码
nvarchar
25
√
5
联系电话
nvarchar
40
√
6
登记日期
datetime
8
√
7
有效期至
datetime
8
√
8
已借书数
smallint
2
√
9
是否挂失
nvarchar
2
√
B:图书目录文件
序号
字段名
类型
长度
精度
小数位数
默认值
允许空
主键
说明
1
图书编号
Int
4
1
√
自动编号
2
条形码
nvarchar
20
3
书名
nvarchar
200
4
图书类型
Nvarchar
50
√
5
作者
Nvarchar
20
√
6
译者
Nvarchar
20
√
7
ISBN
Nvarchar
20
8
出版社
Nvarchar
30
√
9
价格
Money
8
√
10
书架名称
Nvarchar
20
√
11
现存量
Smallint
2
√
12
库存总量
Smallint
2
√
C:借书文件表
序号
字段名
类型
长度
精度
小数位数
默认值
允许空
主键
外键
说明
1
借阅编号
Int
4
1
√
自动编号
2
图书编号
Int
4
√
3
学生编号
Int
4
√
4
借阅时间
Datatime
8
√
5
应还时间
Datatime
8
√
6
续借次数
Smallint
2
√
D:入库单表
序号
字段名
类型
长度
精度
小数位数
默认值
允许空
主键
外键
说明
1
书号
Nvarchar
30
1
√
自动编号
2
条形码
Nvarchar
20
√
3
书名
Nvarchar
200
√
4
作者
Nvarchar
20
√
5
出版社
Nvarchar
30
√
6
版次
Nvarchar
50
√
7
图书类别
Nvarchar
20
√
8
存放位置
Nvarchar
20
√
9
单价
Money
8
√
10
入库数量
Smallint
2
√
11
金额
Money
8
√
12
经手人
Nvarchar
10
√
13
票号
Nvarchar
30
√
14
操作员
Nvarchar
10
√
15
日期
datatime
8
√
E:管理员表
序号
字段名
类型
长度
精度
小数位数
默认值
允许空
主键
说明
1
管理员ID
int
4
√
2
管理员密码
char
15
3
权限
nvarchar
16
5、 接口设计
5.1外部接口
用户接口:
采用窗口化,菜单式进行设计,在操作时响应热键。
硬件接口:
一卡通,扫描仪器
5.2软件接口
通过JDBC对SQL Server2000数据库连接
内部接口
通过面向对象语言设计类,在public类中实现调用;类间实现严格封装
第四章编码及测试
一. 源代码
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#include<fcntl.h>
#define STACK_INIT_SIZE 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
struct student /*学生 卡号 已借书 */
{
int carnum;
char lendbook[10];
}
student[1000];
struct book /*书编号 书名 状态 */
{
int booknum;
char bookname[10];
int turefalse;
}book[1000];
struct card /*卡编号 对应学生名字 班级*/
{
int cardnum;
char studentname[10];
}
card[100];
book_add();
book_search();
int panduan();
book_change();
book_delect();
card_add();
book_lend();
book_history() ;
system_about();
system_edition();
window_display();
book_manage();
book_lend_return();
system_help();
window_choice();
system_exit();
book_return();
/****************************************** 主函数 *******************************************/
void main()
{
window_display();
window_choice();
}
/******************************** 主界面 显示子函数***************************************/
window_display()
{
printf("\n");
printf(" 图书管理系统\n");
printf("\n");
printf("\n");
printf(" 1: 图书管理\n");
printf(" 2:图书借还 \n");
printf(" 3: 系统帮助 \n");
printf(" 4: 退出系统 \n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" 请选择进入板块\n");
}
/******************************************* 主界面 选项子函数 ************************************************/
window_choice()
{
char choice1;
scanf("%s",&choice1);
switch(choice1)
{
case '1':book_manage();break;
case '2':book_lend_return();break;
case '3':system_help();break;
case '4':system_exit();break;
}
}
book_manage()
{
char manage_choice;
system("cls");
printf("\n");
printf(" 这里是图书管理板块 \n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" 1 加书 2改书 3 删书 4 查书 0返回 \n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" 请您选择 \n");
scanf("%s",&manage_choice);
switch(manage_choice)
{
case '1':book_add();;break;
case '2':book_change();;break;
case '3':book_delect();;break;
case '4':book_search();break;
case '0': system("cls");window_display();window_choice();break;
}
}
book_lend_return()
{
char choic;
system("cls");
printf(" 这里是图书借还板块 \n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" 1 办卡 2借书 3 还书 4 历史 0返回 \n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" 请您选择 \n");
scanf("%s",&choic);
switch(choic)
{
case '1':card_add();break;
case '2':book_lend();;break;
case '3':book_return();;break;
case '4':book_history();break;
case '0': system("cls");window_display();window_choice();break;
}
}
system_help()
{
char choice_help;
system("cls");
printf(" \n");
printf(" 这里是系统帮助板块 \n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" 1 关于系统 2 版本信息 0 返回 \n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" 请您选择 \n");
scanf("%s",&choice_help);
switch(choice_help)
{
case '1':system_about();break;
case '2':system_edition();break;
case '0': system("cls");window_display();window_choice();break;
}
}
/***************************************** 加书 **********************************/
int panduan()
{
int bookmum,i=0;
FILE *fp=fopen("C:\\book.txt","a+");
scanf("%d",&bookmum);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(bookmum==book[i].booknum)
{ printf("您输入编号重复 请重新输入\n");
panduan();
}
}
return bookmum;
}
book_add()
{ FILE *fp;
int bookmum=0;
int i=0,j=0;
system("cls");
printf(" \n");
printf(" 请您输入这本书编号\n");
bookmum=panduan();
book[i].booknum=bookmum;
printf(" 请您输入这本书书名\n");
scanf("%s",&book[i].bookname);
printf(" 请您设置书状态 1表示没有人借 0表示已经借出\n");
scanf("%d",&book[i].turefalse);
fp=fopen("C:\\book.txt","a+");
fwrite(&book[i],sizeof(struct book),1,fp);
fclose(fp);
}
/************************************** 一(2) 查书 ****************************************/
book_search()
{
FILE *fp;
char bookname[10];
int i;
system("cls");
fp=fopen("C:\\book.txt","r");
printf("\n");
printf(" 请输入你要查找书名\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookname,book[i].bookname)==0)
{
if(book[i].turefalse==1)
{
printf("这本书还在\n");
}
else
{
printf("这本书被借了\n");
fclose(fp);
}
fclose(fp);
return 0;
}
}
printf("没有这本书\n");
fclose(fp);
return 0;
}
/******************************* 一(3) 改书 **********************************************************/
book_change()
{
FILE *fp,*fp2;
char bookname[10],choice;
int i;
fp=fopen("C:\\book.txt","r");
fp2=fopen("C:\\bookl.txt","w");
system("cls");
printf(" \n");
printf(" 您要改那本书\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book[i].bookname,bookname)==0)
{
printf(" 请选择要修改内容\n");
printf(" 编号:%d 书名:《%s》 \n",book[i].booknum,book[i].bookname);
printf(" 1:修改书编号\n");
printf(" 2:修改书名\n");
scanf("%s",&choice);
switch(choice)
{
case '1':
{
printf("输入新编号\n");
scanf("%d",&book[i].booknum);
fwrite(&book[i],sizeof(struct book),1,fp2);
}break;
case '2':
{
printf("新书名:\n");
scanf("%s",book[i].bookname);
fwrite(&book[i],sizeof(struct book),1,fp2);
}break;
}
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("C:\\book.txt","w");
fp2=fopen("C:\\bookl.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen("C:\\bookl.txt","w");
fclose(fp2);
printf("没有这本书 \n");
}
/************************************** 一 (4) 删书 ************
展开阅读全文