例:有一个大学图书管理系统,该系统除了一般的图书管理功能外,还能够为学生和教工从其他图书馆借阅图书和文献资料提供服务。 因此系统应该具备以下功能: ⑴ 基本数据维护功能 ⑵ 基本业务功能 ⑶ 数据库管理功能
⑷ 信息查询功能 ---- 功能需求
⑴基本数据维护功能
提供使用者录入、修改并维护基本数据的途径。基本数据包括读者的信息、图书资料的相关信息,可以对这些信息进行修改,更新。
⑵基本业务功能
读者借、还书籍的登记管理功能,随时根据读者借、还书籍的情况更新数据库系统,如果书籍已经借出,可以进行预留操作以及书籍的编目、入库、更新等操作。
⑶数据库管理功能
对所有图书信息及读者信息进行统一管理维护的功能,对书籍的借还也要进行详细的登记,以便协调整个图书馆的运作。
⑷信息查询功能
提供对各类信息的查询功能,如对本图书馆的用户借书信息、还书的信息、书籍源信息、预留信息等进行查询,对其他图书馆的书籍、资料源信息的查询功能。
----非功能需求
① 系统安全性需求:为保证系统安全性,对本图书馆的各项功能进行分级、分权限操作,对各类用户进行确认。对其他图书馆借阅图书和文献资料服务控制访问范围:如限IP、限用户等。
② 对系统可用性的需求:为了方便使用者,要求对所有交互操作提供在线帮助功能。
③ 对系统查询速度的需求:要求系统在20 s之内响应查询服务请求。 ④ 对系统可靠性的需求:要求系统失败发生率小于1%。 ----- 领域需求
例如:对“大学图书管理系统”,提出一些与图书管理的业务相关的需求: ⑴ 图书编目要求按照《中国图书馆分类法》进行; ⑵ 由于版权限制,某些文献资料只能在图书馆规定的阅览室阅读,并限制复制和打印。
第一条需求是遵循我国图书管理的规定,执行对图书的分类管理的标准。而第二条需求则是版权法对图书馆文献资料的保护的需要,描述了对一类文献资料有限制的使用和服务。
3.2 软件需求分析方法
酒店管理系统
按照功能分解为以下子系统:
1.客房预定系统 2.前台接待系统 3.前台收银系统 4.账务系统 5.管家系统 6.电话系统 7.客房系统 8.合约系统
9.经理系统 10.总经理系统11.密码管理系统 12.报表系统 13.账务报表
例:盘存/销售系统,用户提出系统应有以下功能:
① 计算买主订单 ② 准备销售报表 ③ 建立买主文件和应收账发票 ④ 运行更新的盘存文件 ⑤ 产生托运单和包装单 ⑥ 保证库存及时订货
1、 结构化分析方法
是一种以数据、数据的封闭性为基础,从问题空 间到某种表示的映射方法,由数据流图(DFD图)表示。
结构化分析方法—图书预订系统
例:学生成绩管理系统
在该系统中,教务人员录入学生信息、课程信息和成绩信息,学生可以随时查询自己所选课程的成绩。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取。
第1层
第2层
需求案例分析
案例一 医院病房监护系统
(采用结构化分析方法) 案例二 网上竞拍系统
(采用基于用例的方法)
案 例 一 医院病房监护系统 一、问题的描述
在医院ICU病房里,将病症监视器安置在每个病床,对病人进行监护。监视器将病人的组合病症信号实时地传送到中央监护系统进行分析处理。
在中心值班室里,值班护士使用中央监护系统对病人的情况进行监控,监护系统实时地将病人的病症信号与标准的病诊信号进行比较分析,当病症出现异常时,系统会立即自动报警,并打印病情报告和更新病历。
根据医生的要求随时打印病人的病情报告,系统还定期自动更新病历。 经过初步的需求分析,得到系统功能要求: 1. 监视病人的病症(血压、体温、脉搏等)。 2. 定时更新病历。
3. 病情出现异常情况时报警。
4. 随机地产生某一病人的病情报告。 二、系统功能需求
1. 监视病员的病症
♦ 采集病症信号(血压、体温、脉搏等)。 ♦ 组合病症信号。
♦ 将模拟病症信号转换为数字信号(A/D转换)。
2. 定时更新病历
♦ 将病症信号进行格式化并加入更新日期、时间。 ♦ 更新病历库中病人的信息。
♦ 可人工设定更新病历的时间间隔。 二、系统功能需求
3. 病情出现异常情况时报警
♦ 根据标准病症信号库中的值,判断是否报警。 ♦ 将报警信号转换为各种模拟信号(D/A转换)。 ♦ 实时打印病情报告,立即更新病历。 4. 随机地产生某一病员的病情报告 非功能需求
1. 监视器与网络的可靠性要求,涉及人的生命安全。
2. 效率需求中对时间、空间的需求,所采集的病症信号数据量大。 3. 互操作需求--如要求监视器采样频率可人工调整等。 4. 对病人病历的隐私的要求。 医院病房监护系统分层DFD图
顶层确定了系统的范围,其外部实体为病人和护士。
伪代码
S1;
if (x>5) then S2
else S3; while (y<0) S4; S5;
if u>0 then {
S6;
while (k>5) S7; }
S8;
顺序结构对应的伪码,其中‘seq’和‘end’是关键字: A seq do B; do C; do D; A end
选择结构对应的伪码,其中‘select’、‘or’ 、‘do’和‘end’是关键字,cond1、cond2和cond3分别是执行B、C或D的条件:
A select
cond1 do B; or cond2 do C; or cond3 do D; A end
重复结构对应的伪码,其中‘iter’、‘until’、‘while’和‘end’是关键字(重复结构有until和while两种形式),cond是条件:
A iter until(或while)cond do B; A end
程序1 if ( A < B ) goto 120;
if ( B < C ) goto 110;
100 write ( C ); goto 140;
110 write ( B ); goto 140;
120 if ( A < C ) goto 130; goto 100;
130 write ( A ); 140 end
程序2
if ( A < B ) and ( A < C ) then write ( A ) else
if ( A B ) and ( B < C ) then write ( B ) else
write ( C )
endif endif
程序1
f0 = f (a); f1 = f (b); if ( f0 * f1 <= 0 ) { x0 = a; x1 = b;
for ( i = 1;i <= n;i++ ){
xm = ( x0+x1 ) / 2; fm = f (xm); if ( abs (fm) < eps || abs (x1-x0) < eps) goto finish;
if ( f0 * fm > 0 ) { x0 = xm; f0 = fm;} else x1 = xm; }
finish:printf (); }
程序2
f0 = f (a); f1 = f (b); if ( f0 * f1 <= 0 ) { x0 = a; x1 = b;
for ( i = 1;i <= n;i++ ){
xm = ( x0+x1 ) / 2; fm = f (xm); if ( abs (fm) < eps || abs (x1-x0) < eps) break;
if ( f0 * fm > 0 ) { x0 = xm; f0 = fm;} else x1 = xm;
}
printf (); }
例:二分法求方程 f (x)=0 在区间[a,b]中的根 程序3
f0 = f (a); f1 = f (b); if ( f0 * f1 <= 0 ) {
x0 = a; x1 = b;i == 1;finished = 0; while ( i <= n && 0 == finished){
xm = ( x0+x1 ) / 2; fm = f (xm); if ( abs (fm) < eps || abs (x1-x0) < eps) finished = 1; if ( 0 == finished) {
if ( f0 * fm > 0 ) { x0 = xm; f0 = fm;} else x1 = xm; } }
printf (); }
main ( ) { //程序框架 建立2到100的数组A[ ],其中A[i]=i;
-----------------------------------1 建立2到10的素数表 B[ ],其中存放2
到10以内的素数;-----------2 若A[i]=i是B[ ]中任一数的倍数,则
剔除A[i];---------------------3 输出A[ ]中所有没有被剔除的数;
-----------------------------------4 }
main ( ) {
/*建立2到100的数组A[ ],其中A[i]=i*/ for ( i = 2;i <= 100;i++ ) A[i] = i;
/* 建立2到10的素数表B[ ],其中存放2到
10以内的素数*/
B[1]= 2;B[2]= 3;B[3]= 5;B[4]= 7; /*若A[i]=i是B[ ]中任一数的倍数,则剔
除A[i]*/ for ( j = 1;j <= 4;j++ )
检查A[ ]所有的数能否被B[j]整除并将 能被整除的数从A[ ]中剔除; -----3.1 /*输出A[ ]中所有没有被剔除的数*/ for ( i = 2;i <= 100;i++ ) 若A[i]没有被剔除,则输出之 ---4.1
}
对框架中的局部再做细化,得到整个程序。 for ( i = 2;i <= 100;i++) if ( A[i]/B[j] * B[j] == A[i] ) A[i] = 0;
/*输出A[ ]中所有没有被剔除的数*/ for ( i = 2; i <= 100;i++)
/*若A[i]没有被剔除,则输出之*/ if ( A[i] != 0 )
printf ( “A[%d]=%d\\n”, I, A[i] ); }
例:打印A、B、C中的最小值 程序1
if ( A < B ) goto 120; if ( B < C ) goto 110;
100 write ( C );goto 140; 110 write ( B );goto 140; 120 if ( A < C ) goto 130; goto 100;
130 write ( A ); 140 end
由于“正式成绩清单”中缺少“考生通知单”中的姓名、通信地址等数据,这些数据也无法由加工2.3自己产生,因此,加工2.3不满足数据守恒的条件
“统计成绩”第二级分解的结构图
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务