软件工程导论第六版 张海藩 牟永敏课后习题答案 下载本文

功能内聚的例子:一个程序中所有的操作都是为了算出一个人的年龄 5.3用面向数据流的方法设计下列系统的软件结构 ①储蓄系统 ②机票预订系统 ③患者监护系统

5.4 美国某大学有 200 名教师,校方与教师工会刚刚签订一项协议。按照协议,

所有年工资超过$26000(含$26000 )的教师工资将保持不变,年工资少于$26000

的教师将增加工资,所增加工资数额按下述方法计算:给每位教师所赡养的人(包

括教师本人)每年补助$100,此外,教师有一年工龄每年再多补助¥50,但是,增

加后的年工资总额不能多于$26000。

教师工资档案存储在行政办公室的磁带上,档案中有目前的年工资、赡养的人

数、雇佣日期等信息。需要写一个程序计算并印出每名教师的原工资和调整后的新

工资。

要求:(1)画出此系统的数据流图;(2)写出需求说明;

(3)设计上述的工资调整程序(要求用 HIPO 图描绘设计结果),设计时分别采

用两种算法,并比较两种算法的优缺点:

(a)搜索工资档案数据,找出年工资少于$26000 的人,计算新工资,校核是

否超过$26000,存储新工资,印出新旧工资对照表;

(b)把工资档案数据按工资从最低到最高的次序排序,当工资数额超过$26000

时即停止排序,计算新工资,校核是否超过限额,存储新工资,印出结果。 (4)你所画出的数据流图适应用那种算法? 解:(1)数据流图:

分解后:

(2)需求说明:

1. 功能需求:可以输入调资的标准,输入教师档案,经调资给出新的教师档案,

需要存储档案

2. 性能需求:软件的响应时间应小于0.5s,更新处理要快

3. 灵活需求:当需求发生某些变化时,该软件应该能够适应这些变化 4. 故障处理要求:出现错误时,应给予警告或提示 (3)

(a)比较耗时,因为它要检索所有的档案,(b)从速度上看比较快,但是(b)

需要排序算法,比较复杂,(a)对于设计来讲比较简单 . (4)画出的数据流图比较适合(A)的算法

5.5下面将给出两个人玩的扑克牌游戏的一种玩法,试设计一个模拟程序,它的基本功能是:

(1)发两手牌(利用随机数产生器)。 (2)确定赢者和赢牌的类型。

(3)模拟N次游戏,计算每种类型牌赢或平局的概率。要求用HIPO图描绘设计结果并且画出高层控制流程图。

扑克牌游戏规则如下:

(1)有两个人玩分别为A和B。

(2)一副扑克牌有52张牌,4种花色(黑桃、红桃、梅花、方块),每种花色的牌的点数按升序排列有2,3,4,.........,10,J,Q,K,A等13种。

(3)给每个人发三张牌,牌面向上,赢者立即可以确定。

(4)最高等级的一手牌成为同花,即3张牌均为同一种花色,最大的同花是同一种花色的Q,K,A。

(6)第三等级的牌是同点,即点数相同的三张牌,最大的同点是AAA。 (7)第四等级的牌是对子,即3张牌中有两张点数相同,最大的对子是A,A,K。

(8)第五等级的牌是杂牌,即除去上列4等之外的任何一手牌,最大的杂牌是不同花色的A.K,J。

(9)若两个人的牌类型不同,则等级高者胜;若等级相同,则点数高者胜;若点数也相同,则为平局。

程序:#include \int rabl(int a,int b,int *r) {

}

int l,k,m,i,p; k=b-a+1; l=2; while(i<=1) { } *r=k; return(p);

k=k+k+k+k+k; k=k%m; l=k/4+a;

if(l<=b) {p=l;i=i+1;}

int max(int T[10][10]) { }

int E1(int T[10][10]) { }

int E2(int T[10][10])

if(T[0][1]==T[1][1]&&T[1][1]==T[2][1])

return 1;

int t=0;

if(T[0][0]>T[1][0])

t=T[0][0];

else t=T[1][0]; if(t

t=T[2][0];

return t;

else return 0;