软件设教师上半年下午试题及详细答案Word文档格式.docx
《软件设教师上半年下午试题及详细答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《软件设教师上半年下午试题及详细答案Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
![软件设教师上半年下午试题及详细答案Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/14/0aae37ef-b007-4900-ab4b-020fa65e629a/0aae37ef-b007-4900-ab4b-020fa65e629a1.gif)
服装信息主要包括:
服装编码、服装描述、服装类型、销售价格、尺码和面料,其中,服装类型为销售分类,服装按销售分类编码。
仓库信息包括:
仓库编码、仓库位置、仓库容量和库管员。
系统记录库管员的库管员编码、姓名和级别。
一个库管员可以管理多个仓库,每个仓库有一名库管员。
一个仓库中可以存放多类服装,一类服装可能存放在多个仓库中。
(2)当库管员发现有一类或者多类服装缺货时,需要生成采购订单。
一个采购订单可以包含多类服装。
每类服装可由多个不同的供应商供应,但具有相同的服装编码。
采购订单主要记录订单编码、订货日期和应到货日期,并详细记录所采购的每类服装的数量、采购价格和对应的多个供应商。
(3)系统需记录每类服装的各个供应商信息和供应商生产服装的情况。
供应商信息包括:
供应商编码、供应商名称、地址、企业法人和联系电话。
一个供应商可以供应多类服装,一类服装可由多个供应商供应。
库管员根据入库时的服装质量情况,设定每个供应商所供应的每类服装的服装质量等级,作为后续采购服装时,选择供应商的参考标准。
[概念模型设计]
根据需求阶段收集的信息,设计的实体联系图(不完整)如图2-1所示。
[逻辑结构设计]
根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):
库管员(库管员编码,姓名,级别)
仓库信息(
(1)
,仓库位置,仓库容量)
服装(服装编码,服装描述,服装类型,尺码,面料,销售价格)
供应商(供应商编码,供应商名称,地址,联系电话,企业法人)
供应情况(
(2)
,服装质量等级)
采购订单(
(3)
)
采购订单明细(
(4)
1、根据需求分析的描述,补充图2—1中的联系和联系的类型。
2、根据补充完整的图2-1,将逻辑结构设计阶段生成的关系模式中的空
(1)~(4)补充完整,并给出其主键(用下划线指出)。
3、如果库管员定期需要轮流对所有仓库中的服装质量进行抽查,对每个仓库中的每一类被抽查服装需要记录一条检查结果,并且需要记录抽查的时间和负责抽查的库管员。
请根据该要求,对图2-1进行修改,画出修改后的实体间联系和联系的类型。
试题三
阅读下列说明和图,回答问题1至问题3,将解答填入对应栏内。
一个简单的图形编辑器提供给用户的基本操作包括:
创建图形、创建元素、选择元素以及删除图形。
图形编辑器的组成及其基本功能描述如下:
(1)图形由文本元素和图元元素构成,图元元素包括线条、矩形和椭圆。
(2)图形显示在工作空间中,一次只能显示一张图形(即当前图形,current)。
(3)编辑器提供了两种操作图形的工具:
选择工具和创建工具。
对图形进行操作时,一次只能使用一种工具(即当前活动工具,accive)。
①创建工具用于创建文本元素和图元元素。
②对于显示在工作空间中的图形,使用选择工具能够选定其中所包含的元素,可以选择一个元素,也可以同时选择多个元素。
被选择的元素称为当前选中元素(selected)。
③每种元素都具有对应的控制点。
拖拽选定元素的控制点,可以移动元素或者调整元素的大小。
现采用面向对象方法开发该图形编辑器,使用UML进行建模。
构建出的用例图和类图分别如图3-1和图3-2所示。
1、根据说明中的描述,给出图3-1中U1和U2所对应的用例,以及
(1)和
(2)处所对应的关系。
2、根据说明中的描述,给出图3-2中缺少的C1至C8所对应的类名以及(3)至(6)处所对应的多重度。
3、图3-2中的类图设计采用了桥接(Bridge)设计模式,请说明该模式的内涵。
试题四
阅读下列说明和c代码,回答问题1至问题3,将解答写在对应栏内。
某应用中需要对100000个整数元素进行排序,每个元素的取值在0~5之间。
排序算法的基本思想是:
对每一个元素x,确定小于等于x的元素个数(记为m),将x放在输出元素序列的第m个位置。
对于元素值重复的情况,依次放入第m-1、m-2、…个位置。
例如,如果元素值小于等于4的元素个数有10个,其中元素值等于4的元素个数有3个,则4应该在输出元素序列的第10个位置、第9个位置和第8个位置上。
算法具体的步骤为:
步骤1:
统计每个元素值的个数。
步骤2:
统计小于等于每个元素值的个数。
步骤3:
将输入元素序列中的每个元素放入有序的输出元素序列。
[C代码]
下面是该排序算法的C语言实现。
(1)常量和变量说明
R:
常量,定义元素取值范围中的取值个数,如上述应用中R值应取6。
i:
循环变量。
n:
待排序元素个数。
a:
输入数组,长度为n。
b:
输出数组,长度为n。
c:
辅助数组,长度为R,其中每个元素表示小于等于下标所对应的元素值的个数。
(2)函数sort
1voidsort(intn,inta[],intb[])
{
2
intc[R],i;
3
for(i=0;
i<
;
i++)
4
c[i]=0;
5
}
6
i<n;
7
c[a[i]]=
8
9
for(i=1;
i<R;
10
c[i]=
11
12
13
b[c[a[i]]-1]=
14
c[a[i]]=c[a[i]]-1;
15
16
1、根据说明和C代码,填充C代码中的空缺
(1)~(4)。
2、根据C代码,函数的时间复杂度和空间复杂度分别为
(5)
和
(6)
(用O符号表示)。
3、根据以上C代码,分析该排序算法是否稳定。
若稳定,请简要说明(不超过100字);
若不稳定,请修改其中代码使其稳定(给出要修改的行号和修改后的代码)。
试题五
阅读下列说明和C++代码,将应填入
(n)
处的字句写在对应栏内。
某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图5-1所示。
现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中增加新的餐饮形式,得到如图5-2所示的类图。
其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。
类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。
每种菜单中都可以添加子菜单,例如图5-1中的甜点菜单。
类MenuItem表示菜单中的菜式。
[C++代码]
#include<iostream>
#include<list>
#include<string>
usingnamespacestd;
classMenuComponent
protected:
stringname;
public:
MenuComponent(stringname)
{this->name=name;
StringgetName(){returnname;
:
//添加新菜单
virtualvoidprint()=0;
//打印菜单信息
};
clasSMenuItem:
publicMenuComponent
private:
doubleprice;
Menultem(stringname,doubleprice):
MenuComponent(name){this->price=price;
doublegetPrice(){returnprice;
voidadd(MenuComponent*menuComponent)
{return;
}
voidprint()
{cout<<"
"
<<getName()<<"
"
<<getPrice()<<end1;
clasSMenu:
list<
>menuComponents;
pubiic:
Menu(stringname):
MenuC0mponent(name){}
{
voidprint(){
cout<<"
\n"
\n-------------------------"
<<end1;
std:
:
list<MenuC0mponent*>:
iteratoriter;
for(iter=menuComponents.begin();
iter!
=menuComponents.end();
iter++)
->print();
voidmain(){
MenuComponent*allMenus=newMenu("
ALLMENUS"
);
MenuComponent*dinerMenu=newMenu("
DINERMENU"
…//创建更多的Menu对象,此处代码省略
allMenus->add(dinerMenu);
//将dinerMenu添加到餐厅菜单中
…//为餐厅增加更多的菜单,此处代码省略
//打印饭店所有菜单的信息
试题六
阅读下列说明和Java代码,将应填入
某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图6-1所示。
现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中增加新的餐饮形式,得到如图6-2所示的类图。
每种菜单中都可以添加子菜单,例如图6-1中的甜点菜单。
[Java代码]
importJava.util.*;
MenuComponent{
protectedStringname;
publicabstractvoidprint();
publicStringgetName(){returnname;
classMenuItemextendsMenuComponent{
privatedoubleprice;
publicMenultem(Stringname,doubleprice){
this.name=name;
this.price=price;
publicdoublegetPrice()
{returnprice;
publicvoidadd(MenuComponentmenuComponent){return;
}//添加新菜单
publicvoidprint(){
System.out.print("
+getName());
System.out.println("
"
+getPrice());
classMenuextendsMenuComponent
privateList<MenuComponent>menuComponents=newArrayList<MenuComponent>();
publicMenu(Stringname){this.name=name;
publicvoidadd(MenuComponentmenuComponent){
menuComponents.
publiCvoidprint(){
System.out.print(“\n"
+"
-------------------------"
Iteratoriterator=menuComponents.iterator();
while(iterator.hasNext()){
MenuComponentmenuC0mponent=(MenuComponent)iterator.next();
ClassMenuTestDrive{
publicstaticvoidmain(Stringargs[]){
MenuComponentallMenus=newMenu("
MenuComponentdinerMenu=newMenu("
allMenus.add(dinerMenu);
答案:
1、E1:
病人
E2:
护理人员
E3:
医生
本题考查数据流图(DFD)应用于采用结构化方法进行系统分析与设计,是比较传统的题目,要求考生细心分析题目中所描述的内容。
DFD是一种便于用户理解、分析系统数据流程的图形化建模工具,是系统逻辑模型的重要组成部分。
本问题考查顶层DFD。
顶层DFD一般用来确定系统边界,将待开发系统看作一个加工,因此图中只有唯一的一个处理和一些外部实体,以及这两者之间的输入输出数据流。
题目要求根据描述来确定图中的外部实体。
分析题目中的描述,并结合已经在顶层数据流图中给出的数据流进行分析。
从中可以看出,与系统的交互者包括病人、医生和护理人员。
其中,本地监控定期获取病人的生命特征,病人是生命特征数据来源,医生和护理人员提出相关请求,并得到相关报告结果,如请求病人生命特征报告,并获得相关报告。
医生还需要在必要时添加或更新生命特征范围。
对应图1-1中数据流和实体的对应关系,可知E1为病人,E2为护理人员,E3为医生。
2、D1:
生命特征范围文件
D2:
日志文件
D3:
病历文件
D4:
治疗意见文件
本问题考查0层DFD中数据存储的确定。
根据说明中描述:
对病人的各项重要生命特征数据进行格式化,然后存入日志文件并检查生命特征;
医生在必要时(如新的研究结果出现时)添加或更新生命特征值的正常范围;
根据日志文件中的生命特征,医生对病人的病情进行描述,形成病历存入病历文件;
因此,D1为生命特征范围文件,D2为日志文件,D3为病例文件,D4为治疗意见文件。
3、
数据流名称
起点
终点
重要生命特征
本地监控
格式化生命特征
格式化后的生命特征
检查生命特征
病例
生成病历
D3或病历(文件)
生命特征
D2或日志(文件)
生成病例
本问题考查0层DFD中缺失的处理和数据流。
从说明中的描述及图1-2可知,本地监控之后要对重要生命特征存储日志文件并进行格式化,所以在本地监控和格式化生命特征之间缺少了数据流重要生命特征;
检查生命特征是对格式化后的生命特征进行检查,所以在格式化生命特征和检查生命特征之间缺少了数据流格式化后的生命特征;
4、E1和E3之间不可以有数据流,因为数据流的起点和终点中必须有一个是加工(处理)。
本问题考查绘制DFD时的注意事项。
在DFD中,每条数据流的起点和终点之一必须是加工(处理)。
本题中,医生和护理人员根据查询到的治疗意见对病人进行治疗属于系统之外的行为,所以两个实体之间不可以有数据流。
1、
本题考查数据库设计,属于比较传统的题目,考查点也与往年类似。
本问题考查数据库的概念结构设计,题目要求补充完整实体联系图中的联系和联系的类型。
根据题目的需求描述可知,一个库管员可以管理多个仓库,每个仓库有一名库管员。
所以,仓库实体和库管员实体之间存在“管理”联系,联系的类型为多对一(*:
1)。
根据题目的需求描述可知,一个仓库中可以存放多类服装,一类服装可能存放在多个仓库中。
所以,仓库实体和服装实体之间存在“存放”联系,联系的类型为多对多(*:
*)。
根据题目的需求描述可知,一个采购订单可以包含多类服装,每类服装可由多个不同的供应商供应。
所以,采购订单实体与服装实体和供应商实体三者之间存在“采购”联系,三者之间联系的类型为多对多对多(*:
*:
根据题目的需求描述可知,一个供应商可以供应多类服装,一类服装可由多个供应商供应。
所以,供应商实体和服装实体之间存在“供应”联系,联系的类型为多对多(*:
2、仓库编码,库管员编码
(2)供应商编码,服装编码
(3)订单编码,订货日期,应到货日期
(4)订单编码,服装编码,供应商编码,数量,采购价格
本问题考查数据库的逻辑结构设计,题目要求补充完整各关系模式,并给出各关系模式的主键。
根据实体联系图和需求描述,系统记录库管员的库编码、姓名和级别。
所以,对于“库管员”关系模式,需补充属性“库管员编码”。
根据实体联系图和需求描述,仓库信息主要包括:
对于“仓库信息”关系模式,由于仓库实体与库管员实体有多对一联系,需记录对应的库管员,并且需补充属性——仓库编码。
因此,“仓库信息”关系模式,需补充属性“仓库编码”和“库管员编码”。
根据实体联系图和需求描述,供应商信息包括:
所以,对于“供应商”关系模式,需补充属性“供应商编码”。
根据实体联系图和需求描述,“供应情况”关系模式,需记录供应商和服装的多对多联系,即一个供应商可以供应多类服装,一类服装可由多个供应商供应。
所以,对于“供应商”关系模式,需补充属性“供应商编码”和“服装编码”。
根据实体联系图和需求描述,采购订单主要记录订单编码、订货日期和应到货日期。
所以,对于“采购订单”关系模式需补充属性:
订单编码、订货日期和应到货日期。
由于采购订单还需详细记录所采购的每类服装的数量、采购价格和对应的多个供应商。
因此,“采购订单明细”关系模式,需记录采购订单实体与服装实体和供应商实体三者之间存在的多对多对多联系。
对于“采购订单明细”关系模式,需补充属性:
订单编码、服装编码、供应商编码、数量和采购价格。
本问题考查的是数据库的概念结构设计,根据新增的需求增加实体联系图中的实体的联系和联系的类型。
根据问题描述,多个库管员需对每个仓库中的每一类被抽查服装记录一条抽查结果。
则在库管员实体与仓库实体和服装实体三者之间存在“抽查”联系,联系的类型是多对多对多(*:
1、U1:
移动元素
U2:
调整元素大小(U1和U2的答案可以互换)
(1)<<extend>>
(2)<<extend>>
本题主要考查在面向对象分析与设计过程中,如何利用用例图和类图描述系统需求模型及设计模型。
考生需要理解面向对象方法的相关概念和思想,并熟悉UML的语法及应用。
用例图和类图是考试题中出现次数最多的两种UML模型。
本问题主要考查用例之间的关系。
在UML中,用例之间有3种关系:
包含(include)、概括(generalize)和扩展(extend)。
如果多个用例中都含有相同的事件流,那么可以将其抽取出来放在一个单独的用例中,其他用例都可以通过包含(include)这个用例来使用其中的事件流。
包含关系可以避免在多个用例的描述中重复拷贝相同的事件流。
概括关系是指子用例(childuse