[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷68及答案与解析.doc
《[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷68及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷68及答案与解析.doc(25页珍藏版)》请在麦多课文档分享上搜索。
1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 68及答案与解析 一、必答题(共 4道大题,每道大题 15分) 0 某公司的主要业务是出租图书和唱碟。由于业务需求,该公司委托希赛公司开发一套信息管理系统。该系统将记录所有的图书信息、唱碟信息、用户信息、用户租借信息等。希赛公司决定采用面向对象的分析和设计方法开发此系统。图 14-3所示为某类图书或唱碟被借阅时应记录的信息,图 14-4描述了系统定义的两个类Book和 CD,分别表示图书和唱碟的信息。1 经过进一步分析,设计人员决定定义一个类 Items_on_loan,以表示类 Book和CD的共有属性和方法。请采用图 14-4中属
2、性和方法的名称给出类 Items_on_loan应该具有的属性和方法 (注意,不同名称的属性和方法表示不同的含义,如 CD中的 composer与 Book中的 author无任何关系 )。 2 为了记录每种图书或唱碟租借的历史记录,引入类 CirculationHistory,类中存储的信息是图 14-3中所表示的内容。请采用 UML表示法将下列 4个类之间的关系表示出来。 3 现需了解十大最畅销 (借出次数最多 )图书或唱碟。为此,引入 TenPopulate类以存储所有十大畅销图书或 CD的名称及其被借出的次数。如图 14-5所示的顺序图描述了某类图书或唱碟被借出后成为十大畅销图书或唱碟
3、时对象间的消息交互。系统在一次运行过程中,应有 (1)个 TenPopulate实例对象最合适,一个 TenPopulate类实例对象最多需要和 (2)个 Items on loan实例对象交互。3 阅读下列说明和图,回答问题 1问题 3,将解答填入答题纸的对应栏内。 【说明】 某城市的各国家公园周边建造了许多供游客租用的小木屋和营地,为此该城市设置了一个中心售票处和若干 个区域售票处。游客若想租用小木屋或营地,必须前往中心售票处进行预定并用现金支付全额费用。所有的预定操作全部由售票处的工作人员手工完成。现欲开发一信息系统,实现小木屋和营地的预定及管理功能,以取代手工操作。该系统的主要功能描述
4、如下: (1)管理预定申请。游客可以前往任何一个售票处提出预定申请。系统对来自各个售票处的预定申请进行统一管理。 (2)预定。预定操作包含登记游客预定信息、计算租赁费用、付费等步骤。 (3)支付管理。游客付费时可以选择现金和信用卡付款两种方式。使用信用卡支付可以享受3的折扣,现金支付没 有折扣。 (4)游客取消预定。预定成功之后,游客可以在任何时间取消预定,但需支付赔偿金,剩余部分则退还给游客。赔偿金的计算规则是,在预定入住时间之前的 48小时内取消,支付租赁费用 10的赔偿金;在预定入住时间之后取消,则支付租赁费用 50的赔偿金。 (5)自动取消预定。如果遇到恶劣天气 (如暴雨、山洪等 ),
5、系统会自动取消所有的预定,发布取消预定消息,全额退款。 (6)信息查询。售票处工作人员查询小木屋和营地的预定情况和使用情况,以判断是否能够批准游客的预定申请。 现采用面向对象方法开发上述系统,得到如表 14-1所示的用例列表和表 14-2所示的类列表。对应的用例图和类图分别如图 14-8和图 14-9所示。4 根据说明中的描述与表 14-1,给出图 14-8中 UC1 UC6处所对应的用例名称。 5 根据说明中的描述与表 14-2,给出图 14-9中 C1 C7处所对应的类名。 6 对于某些需求量非常大的小木屋或营地,说明中功能 4的赔偿金计算规则,不足以弥补取消预定所带来的损失。如果要根据预
6、定的时段以及所预定场地的需求量,设计不同层次的赔偿金计算规则,请用文字说明需要对图 14-9进行怎样的修改 ? 7 一般的树结 构常采用孩子 -兄弟表示法表示,即用二叉链表作为树的存储结构,链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点。例如,如图 15-1(a)所示的树的孩子 -兄弟表示如图 15-1(b)所示。 函数 LevelTraverse()的功能是对给定树进行层序遍历。例如,当对图 15-1(a)中的树进行层序遍历时,结点的访问次序为 DBAEFPC。对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如表 15-1所示。 Bool、 Status类型定
7、义如下: typedef enumFALSE=0, TRUE=1Bool; typedef enumOVERFLOW=-2, UNDERFLOW=-1, ERROR=0, OK=1Status;树的二叉链表结点定义如下: typedef struct Nodechar data; struct Node *firstchiid,*nextbrother; Node, *TreeNode;【函数代码】 Status LevelTraverse(TreeNode root) *层序遍历树,树采用孩子一兄弟表示法, root是树根结点的指针 * Queue temQ; TreeNode ptr, b
8、rotherptr; if(!root)return ERROR;InitQueue(&tempQ); (1); brotherptr= root-nextbrother ;while( brotherptr ) EnQueue( &tempQ, brotherptr ); (2); *end-while*while(3) (4); printf(” c t”, ptr-data); if(5)continue; (6); brotherptr=ptr-firstchild-nextbrother; while( brotherptr ) EnQueue( &tempQ, brotherptr
9、 ); (7); *end-while* *end-while* return OK; *LevelTraverse* 8 函数 int Toplogical(LinkedWDigraph G)的功能是对图 G中的顶点进行拓扑排序,并返回关键路径的长度。其中图 G表示一个具有 n个顶点的 AOE网,图中顶点从1 n依次编号,图 G的存储结构采用邻接表表示,其数据类型定义如下: typedef struct Gnode *邻接表的表结点类型 * int adjvex; *邻接顶点编号 * int weight; *弧上的权值 * struct Gnode*nextarc; *指示下一个弧的结点
10、* Gnode; typedef struct Adj list *邻接表的头结点类型 * char vdata; *顶点的数据信息 * struct Gnode*Firstadj; *指向邻接表的第一个表结点 * Adjulist; typedef struct LinkedwDigraph *图的类型 * int n, e; *图中顶点个数和边数 * struct Adjlist*head; *指向图中第一个顶点的邻接表的头结点 * LinkedWDigraph;例如,某 AOE网如图 15-2所示,其邻接表存储结构如图15-3所示。 【函数代码】 int Toplogical(Linke
11、dWDigraph G)Gnode *p; int j, w, top=0; int *Stack, *ve,*indegree; ve=(int*)malloc(G n+1)*sizeof(int);indegree=(int*)malloc(G n+1)*si zeof(int); *存储网中各项点的入度 *Stack=(int*)malloc(G n+1)*sizeof(int); *存储入度为 0的顶点的编号 *if(!ve !indegree !Stack) exit(0); for(j=1; jnextarc; *while* *for*for(j=1; j0) w=(2); pr
12、intf(” c”, G headw vdata); P=G headw Firstadj; while(P) (3); if(!indegreep-adjvex) Stack+top=P-adjvex; if(4) vep-adjvex=vew+p-weight; P=P-nextarc; *while* *while* return(5); *Toplogical* 8 快速排序是一种典型的分治算法。采用快速排序对数组 Ap r排序的三个步骤如下: 分解:选择一个枢轴 n-1) *得到问题解 * bestW=cw; bestC=cp; for(j=0; j 13 现欲实现一个图像浏览系统,
13、要求该系统能够显示 BMP、 JPEG和 GIF三种格式的文件,并且能够在 Windows和 Linux两种操作系统上运行。系统首先将BMP、 JPEG和 GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接 (Bridge)设计模式进行设计所得类图如图 16-1所示。 采用该设计模式的原因在于:系统解析 BMP、 GIF与 PEG文件的代码仅与文件格式相关,而 在屏幕上显示像素矩阵的代码则仅与操作系统相关。 【 C+代码】 class Matrix 各种格式的文件最终都被转化为像素
14、矩阵 此处代码省略 ; class ImageImp public: virtual void doPaint(MatriX m)=0; 显示像素矩阵 m ; class WinImp: public ImageImp public: void doPaint(Matrix m) *调用 Windows系统的绘制函数绘制像素矩阵 * , class LinuxImp: public ImageImp public: void doPaint(Matrix m)f *调用 Linux系统的绘制函数绘制像素矩阵 * ; class Image public: void setImp(ImageIm
15、p *imp)(1) =imp; virtual void parseFile(string fileName)=0; protected: (2)*imp; ; class BMP: public Image public: void parseFile(string fileName) 此处解析 BMP文件并获得一个像素矩阵对象 m (3);显示像素矩阵 m ; class GIF: public Image 此处代码省略 ;class JPEG: public Image 此处代码省略 ; void main() 在 windows操作系统上查看 demo bmp图像文件 Image*i
16、magel= (4); ImageImp*imageImpl= (5); (6); imagel-parseFile(”demo bmp”); 现假设该系 统需要支持 10种格式的图像文件和 5种操作系统,不考虑类 Matrix,若采用桥接设计模式则至少需要设计 (7)个类。 14 某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表 16-1所示。现采用装饰器 (Decorator)模式来实现计算费用的功能,得到如图 16-4所示的类图。【 C+代码】include includeUSing namespace
17、 std; const int ESPRESSO_PRICE=25; const int DRAKROAST_PRICE=20; const int MOCHA_PRICE=10; const int WHIP_PRICE=8; class Beverage 饮料 (1): String deScription; public: (2)()return description; (3); ; class condimentDecorator : public Beverage 配料 protected: (4); ; class Espresso: public Beverage 蒸馏咖啡 p
18、ublic: Espresso ( ) description=”Espresso”; int cost( )return ESPRESSO PRICE; ;class DarkRoast: public Beverage 深度烘焙咖啡 public:DarkRoast( ) description= “DardRoast”; int cost()return DRAKROAST PRICE; ; class Mocha : public condimentDecorator 摩卡 public:Mocha(Beverage*beverage) this-beverage=beverage;
19、string getDescription( )return beverage-getDescription( )+“, Mocha”; int COSt( ) return MOCHA PRICE+beVerage-cost( ); ; class Whip : public condimentDecorator 奶泡public: Whip(Beverage*beuerage) this-beverage=beverage; string getDescription( ) return beverage-getDescription( )+“, Whip”; int cost( ) re
20、turn WHIP PRICE+beverage-cost( ); ; int meln() Beverage*beverage=new DarkRoast( );beverage=new Mocha(5); beverage=new Whip(6); coutgetDescription ( )cost( ) endl; return 0; 编译运行上述程序,其输出结果为: DarkRoast, Mocha, Whip ¥ 38 15 某大型商场内安装了多个简易的纸巾售卖机,自动出售 2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图 16-6所示。采用状态 (State)模式来
21、实现该纸巾售卖机,得到如图 16-7所示的类图。其中,类 State为抽象类,定义了投币、退币、出纸巾等方法接口。类 SoldState、 SoldOutState、 NoQuarterState和HasQuarterState分别对应图 16-6中纸巾售卖机的 4种状态:售出纸巾、纸巾售完、没有投币、有 2元钱。【 Java代码】 import j ava util *; interface State public void insertQuarter(); 投币 public void ejectQuarter(); 退币 public void turnCrank(); 按下 “出纸巾
22、 ”按钮 public void dispense(); 出纸巾 class TissueMachine (1)soldOutState,noQuarterState, hasQuarterstate, soldState, state; state=soldOutState; int count=0; 纸巾数 public TissueMachine(int numbers) *实现代码省略 * publ ic State getHasQuarterState() return hasQuarterState; public State getNoQuarterState() return
23、noQuarterState; public State getSoldState() return soldState; public State getSoldOutState() return soldOutState; public int getCount() return count; 其余代码省略 class NoQuarterState implements State TissueMachine tissueMachine; public void insertQuarter() tissueMachine setState(2); 构造方法以及其余代码省略 class Ha
24、sQuarterState implements State TiSsueMachine tissueMachine; public void ejectQuarter() tissueMachine setState(3); 构造方法以及其余代码省略 class SoldState implements State TissueMachine tissueMachine; public void dispense()if(tiSsueMachine getCount()0) tissueMachine setState(4); else tissueMachine setState(5);
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 软件 水平 考试 中级 设计师 下午 应用技术 试题 模拟 68 答案 解析 DOC
