问答题[问题2]数据流图4-2(住宅安全系统第0层DFD图)中的数据存储“配置信息”会影响图中的哪些加工?[数据流图4-3]
问答题[说明]已知某类库开发商提供了一套类库,类库中定义了Application类和Document类,它们之间的关系如下图所示,其中,Application类表示应用程序自身,而Document类则表示应用程序打开的文档。Application类负责打开一个已有的以外部形式存储的文档,如一个文件,一旦从该文件中读出信息后,它就由一个Document对缘表示。当开发一个具体的应用程序时,开发者需要分别创建自己的Application和Document子类,如图中的类MyApplication和类MyDocument,并分别实现Application和Document类中的某些方法。已知APPlication类中的openDocument方法采用了模板方法(TemplateMethod)设计模式,该方法定义了打开文档的每一个主要步骤,具体如下。(1)首先检查文档是否能够被打开,若不能打开,则给出出错信息并返回。(2)创建文档对象。(3)通过文档对象打开文档。(4)通过文档对象读取文档信息。(5)将文档对象加入到Application的文档对象集合中。[Java程序]abstractclassDocument{publicvoidsave(){/*存储文档数据,此处代码省略*/}publicvoidopen(StringdocName){/*打开文档,此处代码省略*/}publicvoidclose(){/*关闭文档,此处代码省略*/}publicabstractvoidread(StringdocName);};abstractclassAppplication{privateVector<______>docs;/*文档对象集合*/publicbooleancanOpenDocument(StringdocName){/*判断是否可以打开指定文档,返回真值表示可以打开,返回假值表示不可打开,此处代码省略*/}publicvoidaddDocument(DocumentaDocument){/*将文档对象添加文档对象集合中*/docs.add(______);}publicabstractDocumentdoCreateDocument();/*创建一个文档对象*/publicvoidopenDocument(StringdocName){/*打开文档*/if(______){System.out.println("文档无法打开!");return;}______adoc=______;______;______;______;}};
问答题【说明】一个图书馆信息管理系统的分析与建模。下面是某图书馆的有关介绍。图书馆雇有若干管理员,各自具有编码、姓名等属性。管理员可上岗,也可下岗。图书馆中备有若干图书,每本图书有书号、书名、出版社、价格等属性。图书馆不定期地购买并注册新图书供读者借阅,也可将报废的旧书注销以停止借阅。图书馆可为众多读者提供服务。每个读者在借阅之前需注册姓名、性别、地址、Email等内容。读者可在终端上查询。每个读者最多可同时借阅5本书。每本图书借期为30天;若有一本书超期,则不可再借其他图书。一本书超期一天罚款0.1元。若一本书超期3个月不归还,则发布通告。若读者的图书丢失,在罚款处理之前不能借书,每本报失的图书罚款该书价的2倍。注册新读者不受限制;在注销读者之前,该读者必须归还所有借阅的图书,或者报失并接受罚款。【用例图】【协作图】
问答题阅读以下关于UML软件系统建模的叙述,根据要求回答下列问题。[说明]车载GPS(GlobalPositionSystem)终端是置于机动车内的实时定位装置,它的应用对象是需要定位和调度的车辆。车辆可以通过终端与GPS进行实时、准确的定位,并能够通过无线通信网络上报远程的车辆调度中心。中心可以通过终端远程监视车行轨迹,并可在特殊情况下通过终端控制车辆。同时,终端还装备车载电话,可以在出现特殊情况时及时地通知车辆调度中心。图7-12所示为车载终端系统的用例图,对于车载GPS终端系统来说,主要的角色有两个:车辆调度中心用户和车载终端用户。图7-13所示为车载终端系统中的GSM无线电通信模块的部分状态图,用于与调度中心进行联系。GSM模块共有4个状态:通话中、有问题、待命、短消息通信中。
问答题[说明]
以下代码实现了对象引用作为函数参数,仔细阅读以下代码,分析运行结果,填入{{U}} (n) {{/U}}处。
[代码]
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample() {x=y=0; }
Sample (int i, int j ) {x=i; y=j; }
void copy ( Sample y=j; }
void print ( {cout<<"x="<<x<<end1 ; cout <<"y="<<y<<end1;
};
void Sample: copy ( Sample
y=s.y;
}
void func ( Sample s1, Sample
s2.setxy ( 30,40 );
}
void main ( )
{
Sample p ( 1,2 ) ,q;
q.copy ( p );
time ( p,q );
p.print ( );
q.print ( );
}
运行结果
{{U}}(1) {{/U}}
{{U}}(2) {{/U}}
{{U}}(3) {{/U}}
{{U}}(4) {{/U}}
问答题【说明】流程图描述了某宽带数据专线管理系统的部分处理流程。(1)凡申请宽带数据专线使用者,均需填写专线申请表。系统把申请表存储在专线申请登记文件中,等待分配专线号。(2)系统为申请者指定专线号,并根据通信距离(按地区计算)、通信计算初装费和月租费,然后发初装通知单送给用户,并产生施工单交有关部门施工。同时产生专线处理文件。专线号是专线的唯一标识。(3)施工结束后,系统更新用户文件,并产生专线计费文件,作为以后收费的依据。(4)一个用户可以租用多条专线,用户可用现金或银行托付两种方式支付租金,但一个用户只能使用一种付款方式。系统每月按用户(而不是专线)为单位计费出账。(5)流程图中各数据文件及有关单据所含的数据项如下。专线申请表及专线中请登记文件:申请号、用户名称、付款方式,开户银行代码、账号、主端名称、主端地址、对端地址、对端所在地区、通信速率、设备接口、申请日期。专线处理文件;申请号、专线号、用户名称、付款方式、开户银行代码、账号、初装费、月租费、完工日期。初装费收据:专线号、初装费、交费日期。施工单:施工单号、专线号、主端名称、主端地址、对端所在地区,通信速率、设备接口、完工期限。完工单:施工单号、专线号、完工日期。用户文件:用户编号、用户名称、付款方式、开户银行代码、账号。专线计费文件:专线号、用户编号、月租金、开通日期。1.【问题1】宽带数据专线价目文件由哪些数据项组成?【问题2】为了避免在用户尚未支付初装费时就去施工,有人提议将图中从处理2产生的施工单改成从处理3产生施工单。试问从处理3能否产生施工单?为什么?【问题3】当一个用户使用多条专线时,若允许该用户对其中的一些专线采用现金支付,对另一些专线采用银行托付方式,则在尽量减少数据冗余的前提下,应如何调整有关的数据文件。
问答题【问题4】
以下SQL语句用于查询没有订购产品代码为“1K10”的产品的所有客户名。请填补其中的空缺。
SELECT CustomerName FROM Customer{{U}} (1) {{/U}}
WHERE{{U}} (2) {{/U}}
(SELECT*FROM OrderDetail B, Order C
WHERE B. ProductNo=C.ProductNo
AND B. ProductNo='1K10'
AND C. CustomerNo=A. CustomerNo)
问答题【说明】 应用Prim算法求解连通网络的最小生成树问题。请阅读程序后填空。 const int MaxInt=INT MAX; //INT MAX的值在<limits.h>中 const int n=6; //图的顶点数,应由用户定义 typedef int AdjMatrix[n][n]; //用二维数组作为邻接矩阵表示 typedef struct //生成树的边结点 int fromVex,to Vex; //边的起点与终点 int weight; //边上的权值 TreeEdSenode; typedef TreeEdgeNode MST[n-1]; //最小生成树定义 void PrimMST (AdjMatrix G,MST T,int rt) //从顶点rt出发构造图G的最小生成树T,rt成为树的根结点 TreeEdgeNode e; int i,k=0,min,minpos,v; for(i=0;i<n;i++) //初始化最小生成树T if(i!=rt) T[k].fromVex=rt; (1) ; T[k++].weight=G[rt][i]; for(k=0;k<n-1;k++) //依次求MST的候选边 (2) ; for(i=k;i<n-1;i++) 八遍历当前候选边集合 if(T[i].weight<min) //选具有最小权值的候选边 min=T[i].weight; (3) ; if(min==MaxInt) //图不连通,出错处理 cerr<<“Graph is disconnected!”<<endl; exit(1); e=T[minpos];T[minpos]=T[k]; (4) ; v=T[k].to Vex; for(i=k+1;i<n-1;i++) //修改候选边集合 if(G[v][T[i].to Vex]<T[i].weight) T[i].weight=G[v][T[i].toVex]; (5) ;
问答题阅读下列程序和控制流图,将应填入(n)的字句写在答题纸的对应栏内。【程序】下面是一段求最大值的程序,其中datalist是数据表,n是datalist的长度+intGetMax(intn,intdatalist[])intk=0;for(intj=1;j<n;j++)if(datalist[j]>datalist[k])k=j;retumk;【控制流图】1.【问题1】该程序的控制流图中A~E分别是什么?
问答题[说明]门禁系统是楼宇安防系统的重要组成部分,也是大厦智能化管理的体现。其工作过程是,如果在入口处的读卡器上刷卡,锁控器(LockController)接收读卡器(FingerReader)的读卡信息并进一步识别,如果为有效卡,则触发控制电控锁(Lock)的继电器,让持卡人通过。锁控器还会将这些读卡及进出事件存储起来,并将相关事件记录传送给上位机。每个锁控器管理1~4个门,每5~8个锁控器接入1条RS-485总线,并转换成RS-232方式与管理主机的串行口。对锁控器进行相关设置后,允许它脱机独立对门禁点进行控制,管理主机或通信线路故障都不会影响它的正常运行。在普通场合通常会设置1个出门按钮,允许已进入的人员按动此按钮以打开电控锁;而对于一些重要场合通常会在门的内外安装两个读卡器,进出门时都需按预设方式进行刷卡。门禁系统中的每个电控锁都有一个唯一的编号。锁的状态有两种:“已锁住”和“未锁住”。在管理主机上可以设置每把锁的安全级别及用户的开锁权限。只有当用户的开锁权限大于或等于锁的安全级别并且锁处于“已锁住”状态时,才能将锁打开。用户的感应卡信息、开锁权限及锁的安全级别都保存在管理主机的数据库中。表2-19给出了门禁系统主要组成部件的作用。表2-19感应门禁系统主要组成部件及其作用表部件名称主要作用(功能)读卡感应器(FingerReader)通过射频感应原理,识别感应卡内置加密卡号锁控器(LockController)存储感应卡权限和刷卡记录,向管理软件上传读卡器送来的信号,并负责和上位机通讯和其他数据存储器协调电控锁(Lock)电动执行机构主机管理软件(Win-PakSoftware)通过计算机对所有单元进行中央管理和监控,进行相应的时钟、授权、统计管理工作RS-485/232信号转换器对所有数据存储器进行联网和远距离通信门禁电源提供系统工作时所需的电源能量感应卡存储用户的不可复制和解密的ID号开门按钮出门时可以设置为按此按钮出门(可选部件)软件开发公司A承担了该门禁控制系统的开发任务,其开发小组采用根据问题领域的模型建立系统结构的面向对象方法完成该系统的设计,系统中的类及类之间的关系用UML类图表示。1.[问题1]如图2-25所示是门禁控制系统的一个不完整类图,根据题干说明中给出的术语,请给出类Lock的主要属性。
问答题[说明] 下面代码实现class C对class A和B的protected成员和public成员的调用。仔细阅读[代码5-1]、[代码5-2],在 (n) 处写出正确的运行结果。 [代码5-1] #include <iostream.h> class A private: int a1; protected: int a2; public: A ( int v1,int v2,int v3 ): a1 ( v1 ) ,a2 ( v2 ) ,a3 ( v3 ) int a3 ; class B : pubiic A private: int b1; protected: int b2; public: B ( int v1,int v2,int v3,int v4,int v5,int v6 ) : A(v1,v2,v3),b1 (v4),b2(v5),b3 (v6) int b3; ; class C : public B private: int c1; protected: int c2; public: int c3; C (int v1,int v2,int v3,int v4,int v5,int v6,int v7,int v8,int v9 ) : B ( v1,v2,v3,v4,v5,v6 ) ,c1 ( v7 ),c2 ( v8 ) ,c3 v9 void disp ( ) cout << "a2 in class C =" << a2 << endl; cout << "a3 in class C =" << a3 << eudl; cout << "b2 in class C =" << b2 << endl; tout << "b3 in class C =" << b3 << endl; ; [代码5-2] voidmain() Cdemo(10,20,30,40,50,60,70,80,90); cout<<"对象demo.a3="<<demo.a3 cout<<"对象demo.b3="<<demo.b3 cout<<"对象demo.c3="<<demo.c3 demo.disp( ); [运行结果] 对象demo.a3= (1) 对象demo.b3= (2) 对象demo.c3= (3) a2 in class C= (4) a3 in class C= (5) b2 in class C= (6) b2 in class C= (7)
问答题[说明]在一些应用场合中,需要对用户的输入数据进行检查监控。以下VisualBasic程序实现了对新添加到List列表的内容进行监控,拒绝向List列表添加重复信息。例如,在List列表中存在元素“a01001;a01002”,如果用户输入数据为“aOl001”或“a01002”,系统则弹出提示信息,拒绝将新数据加入List列表;如果用户输入的数据不同与List列表中的任何一个元素,则作为新元素加入List中。VisualBasic界面显示如图11-5所示。根据程序功能说明,完成程序代码。[代码1]BeginVB.FormForm1Caption=“List列表拒绝添加重复信息”//...窗体描述(略)BeginVB.CommandButtonCommand2Caption=“退出”//...窗体描述(略)EndBeginVB.CommandButtonommand1Caption=“添加”//...窗体描述(略)EndBeginVB.TextBoxText1//...窗体描述(略)EndBeginVB.ListBoxList1Height=1860ItemData="Form1.frx":0000Left=1020List="Form1.frx":0002TabIndex=0Top=525Width=2580EndBeginVB.LabelLabellBackStyle=0'TransparentCaption="请输入编号"//...窗体描述(略)EndEnd[代码2]AttributeVB_Name="Form1"AttributeVB_GlobalNameSpace=FalseAttributeVB_Creatable=FalseAttributeVB_PredeclaredId=TrueAttributeVB_Exposed=FalsePrivateSubForm_Load()Listl.AddItem"a01001"Listl.AddItem"a01002"EndSubPrivateSubCommand1Click()DimMyvalAsLongFori=0To{{U}}(1){{/U}}{{U}}(2){{/U}}If{{U}}(3){{/U}}ThenMsgBox"系统不允许重复输入,请重新输入"ExitSubEndIf{{U}}(4){{/U}}{{U}}(5){{/U}}EndSub
问答题【说明】 存在某鲜花批发系统,系统中处理的信息单元有鲜花和客户,对鲜花使用编号进行唯一标识,鲜花的具体信息包括:名称、颜色、等级。客户包括鲜花种植商,鲜花经销商,客户不使用编号,只需要名称和地址。系统功能如下所述。 (1)当系统统计销存清单时发现某种鲜花当前库存数量少于指定最低库存量时,向鲜花种植商发出采购单,订单中要记录所需鲜花的信息、数量、供应商名称和地址。 (2)收到鲜花种植商的鲜花后,向系统录入归档送货单,要记录交易对应的采购单和实际金额。 (3)当某种鲜花库存数量大于或等于订购数量时,接受鲜花经销商的订货单,并更新销存清单,系统要求订单中标明鲜花的信息和经销商的信息。 (4)鲜花经销商订购的鲜花到达批发环节后,系统生成提货单,包括鲜花信息和经销商信息,然后将提货单发给经销商,等待提货。 (5)系统还要随时可以接受管理人员对于销售和库存的查询,并生成销售与库存情况表,提供给管理人员,包括鲜花信息、本周销售数量、库存数量。 现在假定顶层图是正确的,客户信息文件已经存在并可使用。
问答题【说明】本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类Node描述,而链表由类List描述。类List的成员函数有以下几个。
①createList():创建从小到大的有序链表。
②multiplyList(List L1,List L2):将链表L1和链表L2合并。
③print();打印链表。
# include <iostream.h>
class List;
class Node {
friend class List;
public:
Node(int data)
{{{U}} (1) {{/U}}; }
private:
int data;
Node *next;
};
class List {
public:
List( ) {list = NULL;}
void multiplyList(List L1, List L2);
void createList( );
void print( );
private:
Node *list;
};
void List::createList( )
{ Node *p, *u, *pm;
int data;
list = NULL;
while (1)
{ cout<<"输入链表的一项: (小于零,结束链表)"<<end1;
cin >> data;
if(data<0)break; //小于零,结束输入
p = list;
while (p != NULL
p = p->next;
}
u={{U}} (2) {{/U}}:
if(p==list)
list = u;
else
pre->next = u;
{{U}}(3) {{/U}}:
}
void List::multiplyList (List L1, List L2)
{ Node *pL1, *pL2, *pL, *u;
list = NULL;
pL1 = L1.list;
pL2 = L2.1ist;
while (pL1 != NULL
pL1 = pL1 ->next;
}
else
{ u = new Node (pL2->data));
pL2 = pL2->next;
}
if (list==NULL)
list={{U}} (4) {{/U}};
else
{ pL->next = u;
pL =u;
}
}
pL1 = (pL1 != NULL) ? pL1:pL2;
while (pL1 != NULL)
{ u ={{U}} (5) {{/U}};
pL1 = pL1->next;
if (list==NULL)
list=pL=u;
else
{ pL->next = u;
pL = u;
}
}
}
void List::print( )
{ Node *p;
p = list;
while (p != NULL)
{ cout << p->data << "/t";
p = p->next;
}
cout << end1;
}
void main ( )
{ List L1, L2, L;
cout << "创建第一个链表/n"; L1.createList ( );
cout << "创建第二个链表/n"; L2.createList ( );
L1.print ( ); L2.print ( );
L.multiplyList (L1, L2);
L.print ( );
}
问答题阅读以下说明和表,回答问题1~4问题。
[说明] 一个描述学校的部分关系模式的结果描述如下:
1.一个系有若干学生,但一个学生只能在一个系; 2.一个系只有一名主任;
3.一个学生可以选修多门课程,每门课程有若干学生选修; 4.每个学生所学的每门课程都有一个成绩;
5.“学生”和“课程表”及“选课表”的关系示例分别如表9-1、表9-2、表9-3所示。
Student(学生表)的字段按顺序为学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所属院系(Sdept)、系主任(Smaster);
Course(课程表)的字段按顺序为课程编号(Cno)、课程名(Cname)、先行课程(Cpno)、课程学分
(Ccredit); SC(选课表)的字段按顺序为学号(Sno)、课程号(Cno)、成绩(Grade)。
各表的记录如下:
{{B}}表9-1 Student{{/B}}
Sno
Sname
Ssex
Sage
Sdept
Smaster
95001
李勇
男
20
CS
王平
95002
刘晨
女
19
IS
周言
95003
王明
女
18
MA
展评
95004
张立
男
19
IS
周言 {{B}}表9-2
Course{{/B}}
Cno
Cname
Cpno
Ceredit
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
PASCAL
6
4 {{B}}表9-3
SC{{/B}}
Sno
Cno
Grade
95001
1
92
95001
2
85
95001
3
88
95002
2
90
95003
3
80
问答题[说明]某订单管理系统的部分UML类图如下图所示。在图中,Product表示产品,ProductList表示产品目录,Order表示产品订单,OrderItem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。请完善类Order的成员函数getOrderedAmount()类SalesSystem的statistic()方法,各个类的属性及部分方法定义参见下面的C++代码。[C++程序]classProduct{//产品类private:stringpid;//产品识别码stringdescription;//产品描述doubleprice;//产品单价public:voidsetProductPrice(doubleprice);//设置产品单价stringgetProductId();//获取产品以别码stringgetProductDescription();//获取产品描述doublegetProductPrice();//获取产品单价//其他成员省略};classProductList//产品列表类{private:vector<Product>products;public:ProductList();ProductgetProductByIndex(inti);//获得产品列表中的第i件产品voidaddProduct(Productt);//在产品列表中加入一件产品Product*getProductByID(stringpid);//获得识别码为pid的产品指针unsignedintgetProductAmount();//获得产品列表中的产品数量};classOrderItem{//订单条目类private:Product*productPtr;//指向被订购产品的指针intquantity;//订购数量public:OrderItem(Product*,int);Product*getProductptr();//获取指向被订购产品的指针intgetQuantity();//获取被订购产品的数量};classOrder{//订单类private:unsignedintorderid;//订单识别号vector<OrderItem>items;//订单内容(订单项)public:Order(unsignedintorderid);//获得识别码为tid的产品在当前订单中被订购的数量intgetOrderedAmount(stringtid);voidadditem(Product*productPtr,unsignedintn);//在订单中增加一个订单项//其他成员省略};classOrderList{//订单列表类private:vector<Order>orders;public:OrderList();//Begin()返回指向订单列表第一个元素的迭代器(指针)virtualvector<Order>::iteratorOrderList::Begin();//End()返回指向订单列表最后一个元素之后的迭代器(指向一个不存在的元素)virtualvector<Order>::iteratorOrderList::End();voidaddOrder(Ordert);//在订单列表中加入一份订单//其他成员省略};classSalesSystem{private:ProductListcatalog;//产品目录OrderListsales;//订单列表public:SalesSystem();voidstatistic();//统计所有产品的订购情况//其他成员省略};//在订单中查找识别码为tid的产品的订购数量,若该产品没有被订购,则返回0intOrder::getOrderedAmount(stringtid){for(intk=0;k<items.SiZe();k++){if(______==tid)return______;}return0;}//方法statistic()依次统计产品目录中每个产品的订购总量,并打印输出//每个产品的识别码、描述、订购总量和订购金额voidSalesSystem::statistic(){unsignedintk,t,ordered_qty=0;vector<Order>::iteratorit;Productp;cout<<"产品识别码/t描述/t/t订购数量/t金额"<<end1;for(k=0;k<catalog.getProductAmount();k++){//搜索产品列表P=______;//A产品列表取得一件产品信息存入变量Pordered_qty=0;//通过迭代器变量it搜索订单列表中的每一份订单for(it=sales.Begin();it<______;it++){//根据产品识别码获得产品P在当前订单中被订购的数量t=______(p.getProductId());ordered_qty+=t;}cout<<p.getProductId()<<"/t/t"<<p.getProductDescription()<<"/t/t";cout<<ordered_qty<<"/t/t"<<p.getProductPrice()*ordered_qty<<end1;}}
问答题[说明]本流程图描述了某子程序的处理流程,现要求用白盒测试法对其进行测试。
问答题【说明】 在一个航空公司的航班管理系统中,有以下一些事实。 (1)一个航班可能是一个或多个乘客的运输工具,每个乘客可能是一个或多个航班的旅客。 (2)一个且仅一个飞行员必须对每个航班负责,每个飞行员可能负责一个或多个航班。 (3)一个或多个飞行员必须对每个乘客负责,每个飞行员必须对一个或多个乘客负责。 现有飞行员的实体如下: 飞行员(飞行员编号,航班编号,姓名,工资,起飞地,到达地,飞行信用时间) 说明:飞行信用时间是一个特定的航班分配给一名飞行员,授权他可以驾驶管理这个航班。
问答题
