某航空公司会员积分系统(CFrequentFlyer)的主要功能描述如下: 乘

admin2022-08-02  42

问题 某航空公司会员积分系统(CFrequentFlyer)的主要功能描述如下:乘客只要办理该航空公司的会员卡,即可成为普卡会员(CBasic)。随着飞行里程数的积累,可以从普卡会员升级到银卡会员(CSilver)或金卡会员(CGold)。非会员(CNonMember)不能积累里程数。每年年末,系统根据会员在本年度累积的里程数对下一年会员等级进行调整。普卡会员在一年内累积的里程数若满25000英里但不足50000英里,则自动升级为银卡会员;若累积的里程数在50000英里以上,则自动升级为金卡会员。银卡会员在一年内累积的里程数若在50000英里以上,则自动升级为金卡会员。若一年内没有达到对应级别要求的里程数,则自动降低会员等级。金卡会员一年内累积的里程数若不足25000英里,则自动降级为普卡会员;若累积的里程数达到25000英里,但是不足50000英里,则自动降级为银卡会员。银卡会员一年内累积的里程数若不足25000英里,则自动降级为普卡会员。采用面向对象方法对会员积分系统进行分析与设计,得到如图3-1所示的状态图和图3-2所示的类图。图3-1状态图图3-2的类图【问题1】(6分)根据说明中的描述,给出图3-1中S1~S3处所对应的状态以及T1~T3处所对应的迁移的名称。【问题2】(4分)根据说明中的描述,给出图3-2中C1~C4所对应的类名(类名使用说明中给出的英文词汇)。【问题3】(5分)图3-2所示的类图中使用了哪种设计模式?在这种设计模式下,类CFrequentFlyer必须具有的属性是什么?C1~C4中的travel方法应具有什么功能?

选项

答案

解析 【问题1】(6分)S1:普卡会员S2:银卡会员S3:金卡会员T1:25000<=里程<50000T2:里程>=50000T3:里程>=50000【问题2】(4分)C1~C4:CNonMember、CBasic、CSilver、CGold【问题3】(5分)(1)状态模式(2)记录下一状态的属性(3)判断什么情况进入下一状态【问题1】系统中的状态图,是对状态转换的图形化表达。从题目的说明部分可知,在状态转换过程中,涉及到的状态一共有四种:非会员,普卡会员,银卡会员,金卡会员。从状态图涉及的转换可知S1~S3分别为:普卡会员,银卡会员,金卡会员。关于状态转换的分析如下:(1)由于普卡会员在一年内若累积的里程数在50000英里以上,则自动升级为金卡会员,所以T3为:里程>=50000。(2)由于银卡会员在一年内累积的里程数若在50000英里以上,则自动升级为金卡会员,所以T2为:里程>=50000。(3)由于一年内没有达到对应级别要求的里程数,则自动降低会员等级。金卡会员一年累积的里程数达到25000英里,但是不足50000英里,则自动降级为银卡会员,所以T1为:25000<=里程<50000。【问题2】问题2非常容易,说明中给出的英文词汇一共只有5个,有着同属于一个父类的四个子类关系的,也就只有:CNonMember、CBasic、CSilver、CGold这四个了,并且这四个类位置可以互换。【问题3】该问题要求分析类图所采用的设计模式,此处由于涉及到状态的转换问题,所以首选应是设计模式中的状态模式。由于状态模式的标准UML图为:与题目给出的图示完全一致,所以可以断定本题所采用的设计模式就是状态模式。由于是状态模式,所以在类CFrequentFlyer中必须有属性能记录下一个状态,同时travel方法也需要能准确判断什么情况应该进入下一状态。
转载请注明原文地址:https://tihaiku.com/congyezige/2409825.html

最新回复(0)