上半年软件设计师下午试题及答案.docx

上传人:b****7 文档编号:10383941 上传时间:2023-02-10 格式:DOCX 页数:11 大小:585.44KB
下载 相关 举报
上半年软件设计师下午试题及答案.docx_第1页
第1页 / 共11页
上半年软件设计师下午试题及答案.docx_第2页
第2页 / 共11页
上半年软件设计师下午试题及答案.docx_第3页
第3页 / 共11页
上半年软件设计师下午试题及答案.docx_第4页
第4页 / 共11页
上半年软件设计师下午试题及答案.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

上半年软件设计师下午试题及答案.docx

《上半年软件设计师下午试题及答案.docx》由会员分享,可在线阅读,更多相关《上半年软件设计师下午试题及答案.docx(11页珍藏版)》请在冰豆网上搜索。

上半年软件设计师下午试题及答案.docx

上半年软件设计师下午试题及答案

2021年上半年软件设计师考试下午题

试题一〔共15分〕

阅读以下说明和图,答复以下问题1至问题4,将解答填入答题纸的对应栏内。

【说明】

某学校开发图书管理系统,以记录图书馆藏图书及其借出和归还情况,提供给借阅者借阅图书功能,提供给图书馆管理员管理和定期更新图书表功能。

主要功能的具体描述如下:

〔1〕处理借阅。

借阅者要借阅图书时,系统必须对其身份〔借阅者ID〕进行检查。

通过与教务处维护的学生数据库、人事处维护的职工数据库中的数据进行比对,以验证借阅者ID是否合法,假设合法,那么检查借阅者在逾期未还图书表中是否有逾期未还图书,以及罚金表中的罚金是否超过限额。

如果没有逾期未还图书并且罚金未超过限额,那么允许借阅图书,更新图书表,并将借阅的图书存入借出图书表,借阅者归还所借图书时,先由图书馆管理员检查图书是否缺失或损坏,假设是,那么对借阅者处以相应罚金并存入罚金表;然后,检查所还图书是否逾期,假设是,执行“处理逾期〞操作;最后,更新图书表,删除借出图书表中的相应记录。

〔2〕维护图书。

图书馆管理员查询图书信息;在新进图书时录入图书信息,存入图书表;在图书丧失或损坏严重时,从图书表中删除该图书记录。

〔3〕处理逾期。

系统在每周一统计逾期未还图书,逾期未还的图书按规那么计算罚金,并记入罚金表,并给有逾期未还图书的借阅者发送提醒消息。

借阅者在借阅和归还图书时,假设罚金超过限额,管理员收取罚金,并更新罚金表中的罚金额度。

现采用结构化方法对该图书管理系统进行分析与设计,获得如图1-1所示的顶层数据流图和图1.2所示的0层数据流图。

【问题1】〔4分〕

使用说明中的词语,给出图1-1中的实体E1-E4的名称。

【问题2】〔4分〕

使用说明中的词语,给出图1-2中的数据存储D1~D4的名称。

【问题3】〔5分〕

在DFD建模时,需要对有些复杂加工〔处理〕进行进一步精化,绘制下层数据流图。

针对图1-2中的加工“处理借阅〞,在1层数据流图中应分解为哪些加工?

〔使用说明中的术语〕

【问题4】〔2分〕

说明【问题3】中绘制1层数据流图时要注意的问题。

 

试题三〔共15分〕

阅读以下说明和图,答复以下问题1至问题3,将解答填入答题纸的对应栏内。

【说明】

某网上购物平台的主要功能如下:

〔1〕创立订单。

顾客〔Customer〕在线创立订单〔Order〕,主要操作是向订单中添加工程、从订单中删除工程。

订单中应列出所订购的商品〔Product〕及其数量〔quantities〕。

〔2〕提交订单。

订单通过网络来提交。

在提交订单时,顾客需要提供其姓名〔name〕、收货地址〔address〕、以及付款方式〔form.ofpayment〕〔预付卡、信用卡或者现金〕。

为了制定送货方案以及安排送货车辆,系统必须确定订单量〔volume〕。

除此之外,还必须记录每种商品的名称〔Name〕、造价〔costprice〕、售价〔saleprice〕以及单件商品的包装体积〔cubicvolume〕。

〔3〕处理订单。

订单处理人员接收来自系统的订单;根据订单内容,安排配货,制定送货方案。

在送货方案中不仅要指明发货日期〔deliverydate〕,还要记录每个订单的限时发送要求〔DeliveryTimeWindow〕。

〔4〕派单。

订单处理人员将己配好货的订单转交给派送人员。

〔5〕送货/收货。

派送人员将货物送到顾客指定的收货地址。

当顾客收货时,需要在运货单〔deliveryslip〕上签收。

签收后的运货单最终需交还给订单处理人员。

〔6〕收货确认。

当订单处理人员收到签收过的运货单后,会和顾客进行一次再确认。

现采用面向对象方法开发上述系统,得到如图3-1所示的用例图和图3-2所示的类图。

【问题1】〔5分〕

根据说明中的描述,给出图3-1中A1~A3所对应的参与者名称和U1~U2处所对应的用例名称。

【问题2】〔7分〕

根据说明中的描述,给出图3-2中C1~C3所对应的类名以及〔1〕~〔4〕处所对应的多重度〔类名使用说明中给出的英文词汇〕。

【问题3】〔3分〕

根据说明中的描述,将类C2和C3的属性补充完整〔属性名使用说明中给出的英文词汇〕。

试题四〔共15分〕

阅读以下说明和C代码,答复以下问题1至问题3,将解答写在答题纸的对应栏内。

【说明】

用两台处理机A和B处理n个作业。

设A和B处理第i个作业的时间分别为ai和bi。

由于各个作业的特点和机器性能的关系,对某些作业,在A上处理时间长,而对某些作业在B上处理时间长。

一台处理机在某个时刻只能处理一个作业,而且作业处理是不可中断的,每个作业只能被处理一次。

现要找出一个最优调度方案,使得n个作业被这两台处理机处理完毕的时间〔所有作业被处理的时间之和〕最少。

算法步骤:

〔1〕确定候选解上界为R短的单台处理机处理所有作业的完成时间m,

〔2〕用p〔x,y,k〕=1表示前k个作业可以在A用时不超过x且在B用时不超过y时间内处理完成,那么p〔x,y,k〕=p〔x-ak,y,k-1〕||p〔x,y-bk,k-1〕〔||表示逻辑或操作〕。

〔3〕得到最短处理时问为min〔max〔x,y〕〕。

【C代码】

下面是该算法的C语言实现。

〔1〕常量和变量说明

n:

作业数

m:

候选解上界

a:

数组,长度为n,记录n个作业在A上的处理时间,下标从0开始

b:

数组,长度为n,记录n个作业在B上的处理时间,下标从0开始

k:

循环变量

p:

三维数组,长度为〔m+1〕*〔m+1〕*〔n+1〕

temp:

临时变量

max:

最短处理时间

〔2〕C代码

#include

intn,m;

inta[60],b[60],p[100][100][60];

voidread(){/*输入n、a、b,求出m,代码略*/}

voidschedule(){/*求解过程*/

intx,y,k;

for〔x=0;x<=m;x++〕{

for(y=0;y

〔1〕

for〔k=1;k

p[x][y][k]=0;

}

}

for〔k=1;k

for〔x=0;x<=m;x++〕{

for〔y=0;y<=m;y++〕{

if〔x-a[k-1]>=0〕〔2〕;

if〔〔3〕〕p[x][y][k]=(p[x][y][k]||p[x][y-b[k-1]][k-1]);

}

}

}

}

voidwrite(){/*确定最优解并输出*/

intx,y,temp,max=m;

for〔x=0;x<=m;x++〕{

for〔y=0;y<=m;y++〕{

if(〔4〕〕{

temp=〔5〕;

if〔temp

}

}

}

printf("\n%d\n",max〕,

}

voidmain(){read();schedule();write();}

【问题1】〔9分〕

根据以上说明和C代码,填充C代码中的空〔1〕~〔5〕。

【问题2】〔2分〕

根据以上C代码,算法的时间复杂度为〔6〕〔用O符号表示〕。

【问题3】〔4分〕

考虑6个作业的实例,各个作业在两台处理机上的处理时间如表4-1所示。

该实例的最优解为〔7〕,最优解的值〔即最短处理时间〕为〔8〕。

最优解用〔x1,x2,x3,x4,x5,x6〕表示,其中假设第i个作业在A上赴理,那么xi=l,否那么xi=2。

如〔1,1,1,1,2,2〕表示作业1,2,3和4在A上处理,作业5和6在B上处理。

试题五

〔共15分,在试题五和试题六中任选1题解答,如果两题都解答,那么视试题五的解答有效。

阅读以下说明和C++代码,将应填入〔n〕处的字句写在答题纸的对应栏内。

【说明】

某咖啡店当卖咖啡时,可以根据顾客的要求在其中参加各种配料,咖啡店会根据所参加的配料来计算费用。

咖啡店所供给的咖啡及配料的种类和价格如下表所示。

【C++代码】

#include

#include

usingnamespacestd;

constintESPRESSO_PRICE=25;

constintDRAKROAST_PRICE=20;

constintMOCHA_PRICE=10;

constintWHIP_PRICE=8;

classBeverage{//饮料

〔1〕:

stringdescription;

public:

〔2〕(){returndescription;}

〔3〕;

};

classCondimentDecorator:

publicBeverage{//配料

protected:

〔4〕;

};

classEspresso:

publicBeverage{//蒸馏咖啡

public:

Espresso(){description="Espresso";}

intcost〔〕{returnESPRESSO_PRICE;}

};

classDarkRoast:

publicBeverage{//深度烘焙咖啡

public:

DarkRoast(){description="DardRoast";}

intcost(){returnDRAKROAST_PRICE;}

};

classMocha:

publicCondimentDecorator{//摩卡

public:

Mocha〔Beverage*beverage〕{this->beverage=beverage;}

stringgetDescription(){returnbeverage->getDescription()+",Mocha";}

intcost(){returnMOCHA_PRICE+beverage->cost();}

};

classWhip:

publicCondimentDecorator{//奶泡

public:

Whip〔Beverage*beverage〕{this->beverage=beverage;}

stringgetDescription(){returnbeverage->getDescription()+",Whip";}

intcost(){returnWHIP_PRICE+beverage->cost();}

};

intmain(){

Beverage*beverage=newDarkRoast();

beverage=newMocha(〔5〕〕;

beverage=newWhip〔〔6〕〕;

cout<getDescription()<<"¥"<cost()endl;

return0;

}

编译运行上述程序,其输出结果为:

DarkRoast,Mocha,Whip¥38

试题六〔共15分〕

阅读以下说明和Java代码,将应填入〔n〕处的字句写在答题纸的对应栏内。

【说明】

某咖啡店当卖咖啡时,可以根据顾客的要求在其中参加各种配料,咖啡店会根据所参加的配料来计算费用。

咖啡店所供给的咖啡及配料的种类和价格如下表所示。

【Java代码】

importjava.util.*;

〔1〕classBeverage{//饮料

Stringdescription="UnknownBeverage";

public〔2〕〔〕{returndescription;}

public〔3〕;

}

abstractclassCondimentDecoratorextendsBeverage{//配料

〔4〕;

}

classEspressoextendsBeverage{//蒸馏咖啡

privatefinalintESPRESSO_PRICE=25;

publicEspresso(){description="Espresso";}

publicintcost(){returnESPRESSO_PRICE;}

}

classDarkRoastextendsBeverage{//深度烘焙咖啡

privatefinalintDARKROAST_PRICE=20;

publicDarkRoast(){description="DarkRoast";}

publicintcost〔〕{rcturnDARKROASTPRICE;}

}

classMochaextendsCondimentDecorator{//摩卡

privatefinalintMOCHA_PRICE=10;

publicMocha〔Beveragebeverage〕{

this.beverage=beverage;

}

publicStringgetDescription〔〕{

returnbeverage.getDescription0+",Mocha";

}

publicintcost(){

returnMOCHA_PRICE+beverage.cost();

}

}

classWhipextendsCondimentDecorator{//奶泡

privatefinalintWHIP_PRICE=8;

publicWhip〔Beveragebeverage〕{this.beverage=beverage;}

publicStringgetDescription〔〕{

returnbeverage.getDescription〔〕+",Whip";

}

publicintcost(){returnWHIP_PRICE+beverage.cost();}

}

publicclassCoffee{

publicstaticvoidmain〔Stringargs[]〕{

Beveragebeverage=newDarkRoast();

beverage=newMocha〔5〕;

beverage=newWhip〔6〕;

System.out.println〔beverage.getDescription()+"¥"+beverage.cost()〕;

}

}

编译运行上述程序,其输出结果为:

DarkRoast,Mocha,Whip¥38

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1